度量与验收: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 产出才不会再同一个坑里退化两次。