[变异测试] PITest使用教程

avatar
作者
筋斗云
阅读量:0

PITest使用教程

PITest是变异测试研究中经常使用到的变异工具,在字节码级别对程序进行变异(作为对比,Major是对源文件进行变异)

PITest官网与仓库
PITest官网
PITest Github

PITest支持多种使用方式,官网给了使用相关的文档(吐槽写得并不新手友好

  • command line
  • ant
  • maven

下面介绍各种使用PITest的方式。

Command Line

首先在PITest Github下载PITest源码,可以在PIT Tag选择对应PITest的版本。

在项目根目录输入:

mvn install 

运行:
在这里插入图片描述

即可在各子项目的/target目录下的到command line所需的jar包:
所需jar包

官网提供了一个ant的demo,但是我们也可以拿它来演示command line的使用
demo的下载链接 ant-example

创建一个目录,例如mylib,把所需的jar包拷贝进来,其中hamcrest和junit可以从demo的lib得到,三个pitest-*.jar是从各个子项目中得到的。

在这里插入图片描述

然后便可使用command line对项目进行变异测试。

这里给出一个shell模版

java  	-cp # 1.PIT的jar包 		XXX/pitest-X.jar: 		XXX/pitest-command-line-X.jar: 		XXX/pitest-entry-X.jar: 		# 2.Juint的jar包 		XXX/junit-X.jar: 		XXX/hamcrest-core-X.jar: 		# 3.编译项目后的classes文件目录 		XXX/target/classes: 		XXX/target/test-classes \     org.pitest.mutationtest.commandline.MutationCoverageReport \     # 生成报告     --reportDir XXX/mutationReports \     # 要变异的类,多个类可以通过 XXX.A, XXX.B的形式枚举     --targetClasses com.pit.* \     # 要执行的测试类,多个类可以通过 XXX.A, XXX.B的形式枚举     --targetTests com.pit.* \     # 源代码存放的目录     --sourceDirs XXX/src \     # 使用的变异算子, 如果想使用部分的话,也可以用, 隔开     # 详见 http://pitest.org/quickstart/mutators/     --mutators ALL     --verbose true 

执行结果
执行结果

执行后在reprot目录下打开index.html即可查看变异详情

在这里插入图片描述

一个常见的报错

XXX/build.xml:14:  java.lang.UnsupportedClassVersionError: org/pitest/ant/PitestTask:  Unsupported major.minor version 52.0 

原因是PITest版本与本地的jdk版本不一致。PITest版本过低的时候应选择jdk7,PITest版本较高的时候应选择jdk8。

Maven

Mark,有空来填坑。

Ant

Mark,有空来填坑。

Defects4J中使用PITest

以defects4j1.0的lang-1-f为例,在pom.xml中添加配置
pom.xml配置
第二个plugin中的targetClasses和targetTests指定了需要变异的类与需要执行的测试用例。

在命令行输入:

mvn test-compile org.pitest:pitest-maven:mutationCoverage 

在target/目录下会生成pit-reprots文件夹,打开index.html页面,既可以看到生成页面

生成报告

点击NumberUtils.java就可以看到这个类的详细变异与执行情况。
浅绿色代表覆盖但无变异体,深绿色代表生成变异体并全部杀死,红色代表此处有存活变异体。

覆盖率与执行情况

关于生成的的变异体:

变异体情况

使用到的变异算子

使用的变异算子

执行的测试用例

在这里插入图片描述

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!