知识卡片

故意破坏代码检验测试是否真的有效

普通读书笔记卡 · 1458.a

内容

测试覆盖率高不等于测试真的有效——代码即使被执行到了,测试也可能没断言任何和这段逻辑相关的结果。检验测试是否真正把关的办法,是故意把条件判断替换成恒为FalseTrue,看现有测试会不会失败:如果依然全部通过,说明这段逻辑从没被真正验证过。这种方法(自动化即突变测试)把”测试覆盖率”这个容易造假的指标,换成了”测试能不能抓住行为变化”这个更本质的问题。

参考来源

- 位置:《Google系统架构解密:构建安全可靠的系统》第13章《代码测试》13.1.2节(源文件:`../OREILY动物书合辑 图灵新版/_epub-src/text/part0014_split_105.html`) - 结论依据:原文说明代码审查者可能注意到"尽管随变更提交的是新测试用例,但移除或禁用新代码也能通过测试。如果在新代码中将if (Condition_1 || Condition_2)这样的语句替换为if (False)或if (True),而且没有一项新测试项失败,那就可能意味着遗漏了重要的用例",并引用Google自动化突变测试实践的论文。 - 原始内容:例如,审查者可能会注意到,尽管随变更提交的是新测试用例,但移除或禁用新代码也能通过测试。如果在新代码中将if (Condition_1 || Condition_2)这样的语句替换为if (False)或if (True),而且没有一项新测试项失败,那就可能意味着遗漏了重要的用例。