最近,我反复提到“ 突变测试 ”一词。 因为可以说这种方法能够以超出代码覆盖范围的方式检测测试安全网的空白,所以我花了一些时间来追赶这个话题,然后尝试一下。 这篇文章总结了我的发现,作为对该主题的快速介绍。
什么是变异测试?
变异测试评估现有软件测试的质量。 想法是以较小的方式修改(变异)测试所覆盖的代码,并检查现有测试集是否将检测并拒绝更改[MUTTES]。 如果不符合,则意味着测试不符合代码的复杂性,并且未测试其一个或多个方面。
在Java中,将变量视为与原始代码相比具有单个修改的附加类。 可能是如下所示的if
子句中逻辑运算符的更改。
if( a && b ) {...} => if( a || b ) {...}
通过现有测试检测并拒绝这种修饰称为杀死突变体。 当然,有了完善的测试套件,没有任何类别的突变体能够生存。 但是创建所有可能的变体的成本很高,这就是为什么在现实世界中手动执行此方法不可行的原因。
幸运的是,有一些工具可以即时创建突变体,并针对每个突变体自动运行所有测试。 变异创建基于一组所谓的变异算子 ,这些变异算子可以揭示典型的编程错误。 在上面的示例中将采用的一个称为条件突变算子 。
使用JUnit进行测试
使用JUnit进行测试是Java开发人员可以学习的最有价值的技能之一。 无论您的背景是什么,无论您是只是想建立一个安全网以减少桌面应用程序的性能下降,还是要基于健壮且可重用的组件来提高服务器端的可靠性,都需要进行单元测试。
弗兰克(Frank)写了一本书,为使用JUnit进行测试的基本知识提供了深刻的切入点,并为您准备了与测试有关的日常工作挑战做好了准备。
它与代码覆盖率有何关系?
正如Martin Fowler所说的那