[变异测试] PITest使用教程

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就可以看到这个类的详细变异与执行情况。
浅绿色代表覆盖但无变异体,深绿色代表生成变异体并全部杀死,红色代表此处有存活变异体。

覆盖率与执行情况

关于生成的的变异体:

变异体情况

使用到的变异算子

使用的变异算子

执行的测试用例

在这里插入图片描述

  • 6
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值