突变测试(Mutation Testing)是一种软件测试评估技术,用于检验测试用例的有效性和质量。

它通过对程序源代码进行微小的修改(突变),生成一些称为“突变体(Mutants)”的新程序,然后运行原有的测试用例集,看是否能检测到这些突变。

核心思想

突变测试的基本假设是:
1.程序中存在的小的错误可能导致行为改变;
2.有效的测试应该能检测到这些错误。
如果测试用例不能区分原程序和突变程序(即测试都通过),说明测试集可能不够好。

基本过程

生成突变体

在原始代码中,引入一个微小的语法变化(例如修改运算符、常量、条件表达式等),生成新的版本称为突变体。

执行测试集

使用原有的测试用例对每个突变体进行测试。

判断结果

对每个测试体有三种情况:

  • 杀死:测试用例检测到行为不同,说明测试有效
  • 幸存:测试未检测出差异,说明测试集不足
  • 等价突变:逻辑改变但结果始终相同,不可检测(需人工分析)

计算突变得分

衡量测试集质量的指标:

MutationScore=被杀死的突变体数量总突变体数量等价突变体数量100 Mutation Score=\frac{被杀死的突变体数量}{总突变体数量-等价突变体数量}*100%

突变测试优点

可量化测试质量

提高测试集的有效性

较覆盖率更精细

突变测试缺点

计算成本高

需要自动化工具

存在等价突变体问题