目标
把总覆盖率从 71% 提到 74% 很容易——给稳定的工具类文件补测试就行。而风险真正住在那些每周都在改、上过两次事故、覆盖率只有 34% 的文件里。象限分析(覆盖率 × 变更频率 × 事故史)把测试力气精准砸向那里,全局百分比几乎不动,风险却实实在在下降。
步骤要点
- 覆盖率联结变更频率:对每个模块做覆盖率对每月提交数的散点,圈出“高频变更低覆盖”象限并排名。
- 叠加事故历史:标记近两个季度引发过生产事故的文件,把它们置顶到缺口队列最前面。
- 按类型分类缺口:区分缺失的是正常路径、错误处理、边界值还是集成缝隙,各自对应不同测试写法。
- 按缺口而非百分比写测试:对顶部缺口按类型补测试,接受全局百分比微动而风险大降,注入 bug 时新测试应能失败拦截。
- 设变更触发的文件级门禁:象限内文件的 PR 要么维持要么提升该文件覆盖率,防止缺口重新打开。
排错提示
总覆盖涨了但事故文件还是裸奔是百分比幻觉,看文件级而不是仓库级;补的都是正常路径说明分类没做,错误处理与边界才是事故的重灾区;缺口修了又开是没上门禁,对高风险文件做覆盖率不降检查。
适用边界
象限分析的价值依赖变更与事故数据的准确性,映射不完整的仓需要先修文件归因;覆盖率高不等于测得好,断言质量仍需评审把关。
代码示例
quadrant (coverage x churn/month):
low churn high churn
high cover 61% of code 22% (fine)
low cover 14% (later) 3% (FIRST)
top of queue (incident-marked):
checkout/promo.ts 34% 9 commits/mo 2 incidents
api/webhooks.ts 21% 7 commits/mo 1 incident
(utils/string.ts 88% 0 commits/mo -- skip)
gap types: promo.ts -> boundary + error paths
12 tests added; global % moved 71.2 -> 71.9 (risk: down)