Ubuntu 16.04 使用 Major mutation framework
- 安装 OpenJDK-7
- 下载并安装 Major mutation framework,安装目录记为 MAJOR_PATH,即/....../major/
在可修改 Java 环境的情况下,配置环境变量
# 编辑环境变量文件: sudo gedit /etc/profile # 在文件末尾输入以下内容 export MAJOR_HOME=MAJOR_PATH export PATH=${MAJOR_HOME}/bin:$PATH # 输入以下命令使设置生效: source /etc/profile # 验证 Javac 版本: javac -version # 输入内容如下: javac 1.7.0-Major-v1.3.2 # 验证 Ant 版本: ant -version # 输出内容应类似于此: Apache Ant(TM) version 1.8.4-Major-v1.3.2 compiled on May 31 2017
在不能修改 Java 环境的情况下 (如使用 Microsoft Z3), 使用 MAJOR 进行编译的方法
# 用命令行编译 $MAJOR_HOME/bin/javac # 用 Apache Ant 编译 $MAJOR_HOME/bin/ant
编译 Mml 脚本
变异对象 XXX.java 都有定制的 Mml 脚本文件 XXX.mml, 语法参考 MAJOR_PATH/doc/major.pdf.
输入以下命令, 其中 tutorial.mml 是为 example/ant/src/triangle/triangle.java 定制的脚本:mmlc $MAJOR_HOME/mml/tutorial.mml $MAJOR_HOME/mml/tutorial.mml.bin
MAJOR 提供的编译器 mmlc 会编译该脚本并生成一个二进制文件, 第二个命令参数是可选的, 缺省情况下编译器会在脚本文件后加 .bin 作为目标二进制文件名.
用命令行编译变异对象 MAJOR_PATH/example/standalone/src/triangle/Triangle.java
使用 -XMutator 变异选项进行编译, 产生日志文件 mutants.log, 位于当前用户的目录下:javac -XMutator="$MAJOR_HOME/mml/tutorial.mml.bin" $MAJOR_HOME/example/standalone/src/triangle/Triangle.java
进入目录 MAJOR_PATH/example/standalone, 执行以下命令可运行成功:
sh run.sh
如果 Java 程序不位于根目录 MAJOR_PATH 下, 需要修改 run.sh 中的 MAJOR_HOME :
MAJOR_HOME="../../" 改为 MAJOR_HOME="MAJOR_PATH"
用 Apache Ant 编译变异对象 MAJOR_PATH/example/ant/src/triangle/Triangle.java
# 进入 build.xml 所在文件夹: cd $MAJOR_HOME/example/ant # 执行命令编译源文件, 产生日志文件 mutants.log, 位于目录 MAJOR_PATH/example/ant 下: ant -DmutOp="=$MAJOR_HOME/mml/tutorial.mml.bin" clean compile # 执行命令编译测试文件: ant comple.tests # 执行命令进行变异测试 ant mutation.test
进入目录 MAJOR_PATH/example/ant, 执行以下命令可运行成功
sh run.sh
如果 Java 程序不位于根目录 MAJOR_PATH 下, 需修改 run.sh 中的 MAJOR_HOME :
MAJOR_HOME="../../" 改为 MAJOR_HOME="MAJOR_PATH"
还要修改 build.xml 文件中的 major 属性:
<property name="major" value="../../bin/javac"/> 改为 <property name="major" value="MAJOR_PATH/bin/javac"/>