度量与验收:AI 产出质量怎么量化与防止退化

「AI 说改好了」不是验收标准。可执行的检查全部通过、关键指标不回落、审查者能独立复现,才算验收。本章给出一套能直接落地的口径:硬门槛、量化指标、一票否决项与防退化机制。

硬门槛:不过就没得谈

检查命令示例通过标准
编译go build ./... / npx tsc --noEmit零错误、零告警新增
单元测试go test ./... -count=1全部通过且无跳过
静态检查golangci-lint run / eslint . --max-warnings=0无新增告警
格式gofmt -l . / prettier --check输出为空
集成/契约测试go test ./test/... -tags=integration全通过
覆盖率go test -coverprofile不低于基线
迁移可回滚执行 up 与 down双向成功且数据无损
依赖与安全扫描依赖审计工具无高危新增
# 一条命令串起来,作为交付前的固定关卡
gofmt -l . && go vet ./... && go build ./... && go test ./... -count=1

-count=1 关掉测试缓存,否则「测试通过」可能只是上一轮的结果。

一票否决项:发现即驳回

  • 删除测试、跳过测试(t.Skip、@Ignore、--passWithNoTests)。
  • 弱化断言:只判非空、删掉错误码与字段校验。
  • 把被测逻辑本身换成伪实现,测试成了自我循环。
  • 吞异常:捕获后什么都不做,或用下划线丢弃错误。
  • 硬编码凭据、真实账号、内网地址、生产数据。
  • 大范围格式化噪音掩盖真实改动,让评审无从下手。
  • 注释掉旧实现而不删除,留下两条互相矛盾的路径。
  • 声称「已本地验证通过」但给不出命令与输出。

量化指标

指标定义采集方式健康信号
首次通过率变更第一次提交就通过评审与流水线的比例流水线记录逐步上升
返工次数同一任务被要求重做的轮次任务系统标签平均 ≤ 1
变更规模diff 行数(新增+删除,排除生成文件)git diff --shortstat单次尽量小
审查发现问题数每 100 行变更发现的真实缺陷评审意见统计不为零才正常
缺陷逃逸合并后由下游或生产发现的问题数缺陷系统归因趋近于零
幻觉引用引用了不存在的函数、参数、配置项编译与静态检查零容忍
测试增量新增或修正的测试用例数diff 统计与实现同步增长
端到端时长从提出需求到合并的墙钟时间任务系统时间戳稳定或下降

指标要成对看:速度指标(时长、返工)必须配质量指标(逃逸、审查发现),只看一个必然被刷——拆成无数个微小 diff 就能让「时长」好看。

防止退化

  • 规则文件固定:项目约定文件(AGENTS.md)纳入版本管理,禁止项只增不减,每次踩坑补一条。
  • 失败用例固化:任何一次线上或联调发现的缺陷,都补一条表驱动(table-driven)用例,禁止只改代码。
  • 基线冻结与对比:覆盖率、告警数、关键接口耗时都存基线,用 diff 判断是否退化。
  • 生成产物重跑:代码生成、锁文件、迁移汇总必须在合并后由命令重新生成,不接受手改。
  • 模板沉淀:把有效的提示词与验收清单落到仓库里,而不是留在个人聊天记录。
  • 定期回看否决项:定期抽样检查是否有跳过测试、弱化断言悄悄进了主干。

把有效提示词沉淀为团队资产

prompts/
  README.md                 # 索引:场景 → 文件 → 负责人 → 最近修订日期
  feat-api-endpoint.md
  fix-regression.md
  test-table-driven.md
  doc-from-diff.md
  eval-checklist.md

每个模板至少写清五段,缺一段就不算资产:

场景:为已有模块补单元测试
输入:<文件路径> + 现有测试文件 + 最近一次失败的流水线日志
约束:不得修改被测代码;不得删改现有用例;只新增表驱动用例
输出:完整测试文件 + 一句话说明覆盖了哪些边界
验收:go test ./... -count=1 全部通过,且覆盖率不低于基线

模板要随代码评审一起评审:谁改都行,但必须留下修订说明;失效的模板直接删除,不要堆成一堆没人敢用的文档。

周期复查

  • 每个迭代统计一次指标,重点看趋势而不是单次数值。
  • 指标异常先怀疑流程(规则文件缺失、共享文件划分不合理、验收清单没执行),再怀疑模型。
  • 度量结果不用于个人排名,否则一定有人刷指标:拆小 diff、灌无用测试、跳过耗时用例。

小结:验收靠命令不靠说辞——硬门槛全绿、一票否决项零命中,再用首次通过率、返工次数、缺陷逃逸等成对指标判断质量走向;把规则文件、回归用例与提示词模板沉淀进仓库,团队的 AI 产出才不会再同一个坑里退化两次。

笔记加载中…