6.3 覆盖率、测试判定与测试质量
覆盖率是一个有用信号,但它不是质量本身。覆盖率告诉你“代码被执行过”,却不保证测试检查了正确行为,也不保证重要风险被覆盖。
一个测试可以执行 100 行代码,却没有任何有意义的断言。另一个测试只执行 10 行代码,却能抓住最危险的业务边界。
正在加载交互实验...
正在加载概念检查...
覆盖率能说明什么
覆盖率帮助团队发现明显空白:
- 某些分支从未执行。
- 错误路径没有测试。
- 新代码没有被测试套件触达。
- 删除测试后风险增加。
但覆盖率不能告诉你:
- 断言是否正确。
- 场景是否代表真实风险。
- 测试数据是否包含边界。
- 测试是否能发现错误实现。
因此覆盖率适合作为检查清单的一项,而不是最终目标。
Oracle 决定测试会不会发现错
测试判定,也叫 oracle,是测试判断“结果对不对”的规则。例如“返回 200”不是完整 oracle;对于支付接口,你还需要判断金额、订单状态、幂等性、审计日志和错误码是否正确。
高质量测试通常会检查:
- 明确输出。
- 状态变化。
- 不应该发生的副作用。
- 异常和失败路径。
- 业务不变量。
正在加载概念检查...
用风险改进测试
提高测试质量时,不要只追求数字。更好的问题是:
- 哪些高风险区域只有快乐路径?
- 哪些测试没有断言?
- 哪些线上事故没有留下回归测试?
- 哪些复杂分支没有边界案例?
- 哪些测试经常失败但没人信?
如果团队已经有很高覆盖率但缺陷仍然逃逸,下一步不是盲目加更多测试,而是审计测试是否真的在检查重要行为。
正在加载本节练习...