[变异测试] PITest使用教程

PITest使用教程

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

PITest官网与仓库
PITest官网
PITest Github

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

  • command line
  • ant
  • maven

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

Command Line

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

在项目根目录输入:

mvn install

运行:
[变异测试] PITest使用教程_第1张图片

即可在各子项目的/target目录下的到command line所需的jar包:
[变异测试] PITest使用教程_第2张图片

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

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

[变异测试] PITest使用教程_第3张图片

然后便可使用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

执行结果
[变异测试] PITest使用教程_第4张图片

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

[变异测试] PITest使用教程_第5张图片

一个常见的报错

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中添加配置
[变异测试] PITest使用教程_第6张图片
第二个plugin中的targetClasses和targetTests指定了需要变异的类与需要执行的测试用例。

在命令行输入:

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

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

[变异测试] PITest使用教程_第7张图片

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

[变异测试] PITest使用教程_第8张图片

关于生成的的变异体:

[变异测试] PITest使用教程_第9张图片

使用到的变异算子

[变异测试] PITest使用教程_第10张图片

执行的测试用例

[变异测试] PITest使用教程_第11张图片

你可能感兴趣的:(工具,测试工具,java,maven,linux)