美丽的变异测试:播种缺陷以发现缺陷
在软件开发周期的末尾,当所有新功能都已完成且所有测试都通过时,作为测试经理,你是否能确定软件已准备好发布呢?其实,测试套件全部通过并不一定意味着它足够好,若测试套件不能正确检查程序结果,即使结果错误,测试也可能通过。那么,如何检查测试套件在发现缺陷方面是否有效呢?有一种简单、优雅且有效的方法——变异测试,即通过系统地向程序中植入人为缺陷,检查测试套件是否能发现它们。
评估测试套件质量
工程师和管理者喜欢量化事物,测试套件的质量也不例外。为衡量测试套件质量,人们开发并应用了各种覆盖率指标,常见的有代码覆盖率,即检查测试套件中各个语句是否被执行。若测试套件未执行某语句,而该语句存在执行时会触发失败的缺陷,那么这个缺陷在测试阶段就无法被发现。
除代码覆盖率外,还有更高级的标准,如分支覆盖率确保每个分支至少被执行一次,条件覆盖率确保每个(子)条件分别被评估为真和假一次。这些标准易于衡量,常被用作质量目标,例如“所有模块的代码覆盖率必须至少达到 90%”。
然而,这些测试质量指标存在一些问题:
1. 缺陷分布不均 :程序中缺陷并非均匀分布,存在“20%的模块包含 80%的缺陷”的帕累托效应。例如,在 AspectJ 编译器中,某些类文件修复的缺陷多达 32 个,而有些类文件则没有缺陷。因此,测试套件应关注易出现缺陷的模块,而非在无缺陷的类上追求高覆盖率。
2. 风险分布不均 :项目中有些模块的缺陷会产生严重后果,因为它们被频繁使用或整个功能依赖于它们。测试时应根据风险分配测试精力,而非单纯追求特定覆盖率,就像测试商用飞机时,会在发动机上花费
超级会员免费看
订阅专栏 解锁全文
1803

被折叠的 条评论
为什么被折叠?



