




























最近写《软件测试技术》实验 3 和实验 4 时,遇到了一些工具上的问题,并尝试了一些解决方案,记录一下。
MuJava 是一个变异测试的工具,可以生成变异体并运行,最终可以得到变异测试的结果。
变异测试是衡量测试充分性的有效方法,其思想就是模拟程序编写中可能会出现的错误,得到一系列和源程序不同的“变异体”,用来“测试”你的测试程序是否能测出来这些“变异”。你的测试程序杀死(使变异体的运行结果不同于源程序)的变异体越多,测试越充分。
直接到 官网 下载 mujava.jar。
为了后续实验进行,还需要下载 junit.jar(编写测试程序)、openjava.jar。
保存三个 jar 包到固定路径,编辑 ~/.bash_profile 引入环境:
1 | export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_281.jdk/Contents/Home |
(适用于 macOS,Windows 略有不同)
保存并运行 source ~/.bash_profile。
为了使用 MuJava,需要创建需要的目录结构:
1 | |--\classes\ |
\src\ 目录。javac 编译源文件,得到 classes 文件,移至 \classes\ 目录。java mujava.gui.GenMutantsMain,进入图形化设置界面,勾选需要生成变异体的文件和需要的变异算子,点击 Generate 即可生成(保存在 result 目录)。若此处出现问题,请检查 0x00 第 3 步中路径是否包含空格。即使使用 \ 转译也可能存在问题,建议用 - 或 _ 代替空格。
使用 JUnit 编写即可,比较简单,得到 xxxTest.java。
javac 编译测试文件,得到 classes 文件,移至 \testset\ 目录。java mujava.gui.RunTestMain > TestResult.log,将变异测试日志输出至文件保存。若此处出现问题,请检查 0x00 第 3 步中是否引入了 $JAVA_HOME/lib/tools.jar 和 $JAVA_HOME/lib/dt.jar。
变异测试完成,后续可以进一步分析测试代码和变异体,做进一步改进。
Major 和 Mujava 功能相近,也是变异测试的工具。
直接到 官网 下载 Major v1.3.5,解压为 major 目录,存放到固定路径。
配置环境变量:
1 | export PATH=/path/to/major/bin:$PATH:$JAVA_HOME/bin |
保存并运行 source ~/.bash_profile。
验证是否配置成功:
1 | ❯ javac -version |
如果验证时得到的输出和上述不同,特别是 javac -version 输出结果不包含 Major-v1.3.5,建议检查第 2 步引入环境变量的顺序,应将 major/bin 目录放在最前面。
Major 使用 ant 运行变异测试,并在 major/example/ 目录下给出运行模板。所以我们需要依此建立目录结构:
1 | |--\src\ |
将源文件移至 src 目录,将 JUnit 测试文件移至 test 目录。
请确保代码文件的 package 和目录结构对应,参照给出的运行模板。
build.xml 和 run.sh 是 Major 运行的重要文件,前者是配置文件、后者是运行脚本。由于运行目录不同,所以在运行前我们需要在 example 的基础上,根据自己的实际情况对两个文件做一些修改。
build.xml可以在第一行修改自己的项目名称:
1 | <project name="YourProjectName" default="compile" basedir="."> |
修改 /javac/ 文件的路径:
1 | <property name="major" value="/your/path/to/major/bin/javac"/> |
它上面两行一般不需要改动。
run.sh修改 /major/ 目录的路径:
1 | MAJOR_HOME="/your/path/to/major" |
如果没有编写 MML 脚本(一般情况下不需要自己编写),修改 ant 运行的参数:
1 | $MAJOR_HOME/bin/ant -DmutOp=":ALL" clean compile |
直接指定为 ALL 对应全部变异算子,若此处不修改可能会导致后续生成变异体数量为 0。
运行 ./run.sh,得到类似下方的输出则成功:
1 | ... |
和 MuJava 类似,后续可以进一步分析测试代码和变异体,做进一步改进。
如果 Mutants covered 未达到 100%,请移除源程序的 main 方法。
如有其他问题,强烈建议阅读 官方文档,十分详细。
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。