Mutation Testing:使用正确的测试用例覆盖您的代码(第2部分)


在第一部分中,我们实现了100%的覆盖率。在这一部分中,我们更改了代码并检查我们的测试有多好。

有几种突变测试框架。在这种情况下,我们将使用PITEST。

什么突变可以应用于代码?这是最微小的突变列表:

0-ebibuchu0vd3sasw.png

0-fd3bnjzinvotladl.png

让我介绍一下我们的突变体(只有少数)。首先是起源,其次是突变体(修改后的代码用红色高亮显示):图片标题

0-k4mhdwdrqxsheu8a-1.png

0-ytlin5pwjja7vrpq.png

现在,让我们执行最简单的Maven插件并检查变异测试结果:

mvn clean test

mvn org.pitest:pitest-maven:mutationCoverage

打开报告位于target / pit-reports / 201902032155 / index.html

0-2crwo1ibsrrcb9-2-1.png 因此,该报告说:

线路覆盖率100%,但我们早些时候就通过JoCoCo报告知道了这一点 有两个突变幸存下来,有23人被杀死。 突变体1是通过更改第14行的条件边界创建的,而第二个是通过将return替换为true来创建的。 让我们澄清一下突变体是什么样的:

0-vq9regedjaj7c7hj.png

那么,哪些遗漏的测试案例可能会消除我们的突变体呢?

  1. 对于我们的第一个变体,我们创建一个boundary 案例并断言只要有效的护照号码为零,就创建了客户端
  2. 对于第二个变体,我们检查服务是否没有不存在的客户端。

0-8ciysrogrtobe8zf.png

结果为我们提供了100%被杀死的突变体,但是我们可以依靠它吗?

不幸的是没有。变异测试仅给我们一些提示-我们可能会忘记哪些情况(尤其是对于边界条件)。如果我们计算所有可能的应用状态集,则会发现还有更多的“遗漏”情况。

对变异测试的批评

  • 耗时的。由于执行数量众多:突变数量*测试数量
  • 如果没有发现突变,则创建经过完全测试的应用程序的印象
  • 不要提供明确的测试质量指标


原文链接:http://codingdict.com