mujava是一款用于变异测试的工具,官网上附有完整的安装和使用教程:muJava Home Page (gmu.edu)。但在实际操作中,还是会遇到许多种问题。现将我实践过的安装教程详述如下。

文件下载

官网上下载这些东西:

实际上,mujava.config里面就一句话。自己复制过来在新建一个就行。

mujava.config里的默认内容:

1
MuJava_HOME=C:\offutt\mujava

目录准备

这部分主要是动手环节(官网上就是动手…)。在你想让mujava安装的地方,新建一个目录。比如:D:\mujava。

在D:\mujava里新建4个文件夹:

classes:存放编译好的Java源程序.class文件

result:mujava生成的结果文件(变异体)

src:待测的Java程序代码

testset:JUnit测试用例的.class文件

把mujava.config放到D:\mujava中。里边的内容改为:

1
MuJava_HOME=D:\mujava

在D:\mujava中新建两个.txt文件,编写后续用到的命令。写好后改为.cmd文件。(注意,这里保证运行的mujava目录要包含mujava.config)

1
2
GenMutants.cmd: java mujava.gui.GenMutantsMain
RunTest.cmd: java mujava.gui.RunTestMain > TestResult.txt

把涉及到的包全部放进来(D:\mujava下):JUnit、Hamcrest、mujava.java、openjava.java、tools.java。

JUnit、Hamcrest包另外在相应官网上下载;mujava.java、openjava.java是刚刚在mujava官网上下的;tools.jar在你配置的Java环境中自带的包(是Java的标准文件)。

比如我的tools.jar在这里(我的Java版本为1.8,据说Java版本过高可能导致失败):

关于这部分,官网是这样描述的:

muJava Home Page (gmu.edu):

The Java CLASSPATH must include two µJava jar files and one standard Java jar file. tools.jar is standard with Java (JDK) compilers and is probably located in the “JavaHome/lib/” directory. The two µJava files are mujava.jar and openjava.jar, which are downloaded from this site.

上述引用中,所谓的_JavaHome_可以在环境变量里查询,一般你安装Java环境时都会配的。

这样,最终你的D:\mujava会是这样的:

环境

打开控制面板,搜索环境变量:

编辑系统环境变量。如果没有CLASSPATH就新建一个:

比如这样:

使用

在src放入需要测试的Java源文件,注意包结构

在classes放入待测试文件编译好的.class文件,注意包结构

在testset放入JUnit测试文件编译好的.class文件,注意包结构

双击运行GenMutants.cmd,出现以下GUI界面:

运行结果:

双击运行RunTest.cmd,弹出另外一个GUI界面。开始进行测试:

点击RUN即可运行。等待电脑风扇猛转后,结果就生成了。

(不知为什么,JUnit测试用例采用参数化的方式的话会报错。。。)

注意,小黑框里面会显示程序的运行状态,如果报错(比如找不到JUnit、Hamcrest包时)记得检查环境变量有没有配置好。

运行结果:

详细的测试结果可在TestResult.txt中查看。

其他问题

目录结构问题

关于目录结构问题,就是你在测试文件、被测试文件的包的关系,复制到mujava相应文件夹时要一致。否则会报错。下图是正确的例子:

图片缺失

此位置图片缺失,原图片地址为 http://60.205.223.216/wp-content/uploads/2022/03/image-55.png

如果在运行测试用例杀死变异体过程中,出现诸如找不到类、空指针异常,可以试试重新运行命令多试几次。。

检查Java版本

官网:Potential problems**: We have identified several potential problems with installing µJava.**

It is important that the MuJava_HOME variable NOT have a trailing slash. This will confuse µJava.
If you have a different version of the java compiler and the JVM, µJava may get confused. This happens sometimes when a new application on your computer updates the JVM. If you have problems compiling or killing mutants, we suggest deleting all Java components and reinstalling the latest version.
If your tools.jar file is out of date (pre Java 1.4, we think), parts of µJava may not work.

杀不死变异体

有少数童鞋反映测试用例杀不死变异体,MS得分为0%。

在确认你的测试类编写对的情况下,请再次做这个检查:检查你的环境变量里,是不是把classes文件夹写了进去。请确保CLASSPATH里边没有D:/mujava/classes文件夹。

参考链接

mujava官网:muJava Home Page (gmu.edu)

安装和使用方法(中文):使用muJava进行变异测试_wkw1125的博客-CSDN博客_mujava