MAJOR今天捣鼓了很久,呕心沥血才弄出来。。。没力气详述了。如果对major里的命令和文件有疑惑,请详详细细看MAJOR的PDF进行学习!

在开始之前,首先获取MAJOR的指导文件:http://mutation-testing.org/doc/major.pdf,详细阅读后如有问题可看接下来的简单操作使用。

环境与配置

下载好压缩包后,解压到你想安装的地方即可,比如D:/major下。文件结构如图:

配置好系统的环境变量:

注意哦,确保在新配的这个路径里,有javac、ant等这些程序哦

输入命令:

1
javac -version

这里不是说你在Windows命令行输入命令返回出内容就可以了。

比如返回:

这里返回的不是MAJOR里的javac程序。由于未知原因,即使配置好了环境变量,但是Windows下无法执行D:\major\bin下的javac(它总是弹出打开方式的选择框)。这里我换成了LINUX环境。

【以下操作均在WSL配合下进行。Ubuntu-20.04】(当然使用虚拟机是可以的。附:windows10 ubuntu子系统 WSL文件位置

[wpdiscuz-feedback id=“ssas9ftfam” question=“有疑惑?请对此提供反馈” opened=“0”][/wpdiscuz-feedback]

首先在Linux下准备好Java环境。下图展示无Java环境情形:

附安装过程中出现E: Unable to locate package openjdk-8-jre 失败的解决(下图):
E: Unable to locate package openjdk-8-jre ubuntu 20.04安装jdk 失败_学无止境qwer的博客-CSDN博客
Errors were encountered while processing 解决方法_微电子学与固体电子学-俞驰的博客-CSDN博客

Java安装失败示例

安装成功检查:

这时候再检查javac:

这才和官方的pdf中显示得差不多,才算成功。

**新增:**再做以下检查

注意:如果在过程中,中途有修正过环境变量,请新建一个终端退出终端后重新进来再试一试!如果还不行,请卸载Linux里的Java再重新安装!亲测有效。

复制

MAJOR文件夹里边example是两个例子,我们需要把例子里边的一些东西复制到我们待测试的Java项目中来。你的Java项目应该是这个样子:

把all.mml(在mml文件夹下)、build.xml(在example/ant下)搬过来。

执行:(感谢日日快乐童鞋指正)

1
$ mmlc all.mml all.mml.bin

生成了一个all.mml.bin文件。build.xml需要进行修改。

(例子中的这个all.mml指的是生成所有种类的变异算子。如果MML自己写的话,通过mmlc可以自己生成这个.bin文件。)

注意,测试类不要使用参数化编程。会有未知错误。

[wpdiscuz-feedback id=“ssas9ftfam” question=“有疑惑?请对此提供反馈” opened=“0”][/wpdiscuz-feedback]

下面是跟据我的项目目录结构,按需修改build.xml。(考验你洞察力的时候到了!!😲)

更正图片文字:“根据你的测试文件位置按需修改”

使用

还记得MAJOR那两个例子吗。在D:/major/example/ant文件夹下,有一个run.sh的例子。以它作为参考,我们做这些执行:

1
2
3
$ ant -DmutOp="=all.mml.bin" clean compile
$ ant compile.tests
$ ant mutation.test

注意:执行命令的位置和build.xml是同一个目录。

最后的结果大图:

其他问题

有童鞋出现了以下问题,对部分问题提供了解决思路。供参考:

  • ant -version 查到的不是major自带的那个。解决方法,删掉Linux里的那个ant。
  • 在复制Windows的major到WSL里,没在Linux里配环境变量的话,javac、ant总有一个在命令行找不到。只有在Windows里边原有的项目,打开Linux环境,按照与我一样的做法才行。
  • 如果一个变异体都杀不死/没覆盖,请尝试检查mutants.log是否有变异体生成,然后再检查build.xml有没有改好。

更多参考

关于Ant里的Junit各种属性手册:JUnit Task (apache.org)