mujava

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mujava相关的知识,希望对你有一定的参考价值。

 

一、介绍

1、变异测试

在源代码的基础上进行细节性的改变,进行变异,从而改进程序源代码的一种fault-based的软件测试方法。

所谓变异,是基于良好定义的变异操作(模拟典型应用错误,例如,错误的操作符或者变量名字;或是强制产生有效的测试,例如,使每个表达式都等于0)。

变异测试的目的在于帮助测试者发现有效的测试,评价测试数据集的完备性,定位测试数据的弱点,并对其改善。在产生的变异体代码中选择等价和非等价变异体,根据非等价变异体和源代码的区别,补充测试用例,从而找出源代码中的错误。然而现在在区分等价变异体的过程中大多还是采用人工区分的方法。

变异测试在高性能、高安全要求的软件开发中有很重要的作用。

2、

根据官方网站https://cs.gmu.edu/~offutt/mujava/ 介绍,是一种用来对Java程序产生变体,进行变异测试的一个工具。根据变异算子产生程序的变异体,同时在源程序和变异程序上执行测试用例(利用Junit生成的测试用例),区分出可存活和不可存活的变异体。

二、配置过程

1、    配置Java,并添加环境变量

 技术分享

 

 

2、     官网下载的相关jar包和Junit的jar包,

 技术分享

 

存放至新建文件夹mujava中,并将jar路径添加到添加到环境变量classpath中。

 

 技术分享

 

技术分享

技术分享

 

 

3、    新建mujavaHome目录,将mujava.config放至该目录下,并手动创建如下目录结构:

 技术分享

 

四个文件夹的用处为:

Classes

待测试源代码编译后的.class文件

Result

待测试源代码变异后产生的代码

Src

待测试的.java源文件

Testset

Junit测试类.java源文件和编译后的.class文件

 

新建GenMutants.cmd和RunTest.cmd用于运行变体产生和运行测试的命令。

 技术分享

 

 

 技术分享

 

 

最终mujavaHome的目录结构如下:

 技术分享

 

三、实验结果

进行两个Java程序的变异测试

1、    产生程序的变体,以Calculator.java为例,有加减乘除4个方法,其中人为设置其中add方法出错:

技术分享 

CalculatorTest.java代码如下:

技术分享

 

 

 技术分享

 

 

 

将Calculator.java放在src目录下,javac编译后的

Calculator.class放在classes目录下,CalculatorTest.java和CalculatorTest.class放在testset目录下。

 

双击运行GenMutants.cmd

 

 技术分享

 

 技术分享

 

 

产生结果:

 技术分享

 

 

产生后的变体代码存放目录:

 技术分享

 

双击运行RunTest.cmd,在源代码和变体代码上执行测试用例

 技术分享

 

 

运行结果:

 技术分享

 

 

在mujavaHome目录下的TestResult.txt有更详细的输出结果

 

 技术分享

 

同理,第二个java代码Triangle.java也按照相同的步骤进行。

技术分享

技术分享 

TriangleTest.java代码如下:

技术分享

 

 技术分享

 

运行结果如下:

 

 技术分享

 

 

 

 技术分享

 

 

 技术分享

 

 

 

 技术分享

 

 

 技术分享

 

 技术分享

技术分享

 

四、实验结论

实验中进行了对Calculator.java和Triangle.java两个java程序进行变异测试。执行结果汇报如下:

源程序

产生变异程序

可存活变异体

不可存活变异体

Kill 百分比

Calculator

.java

共79,AORB—20,AOIU—4,AOIS—32,SDL—4,VDL—8,CDL—1,ODL—10

26

53

67.0%

Triangle

.java

共337,AORB—24,AOIU—18,AOIS—132,AODU—1,ROR—63,COR—6,COI—12,LOI—33,SDL—23,VDL—6,ODL—19

105

232

68.0%

每次执行测试后,在mujavaHome目录下会自动生成TestResrult.txt结果,详细记录了源代码和每个变体的测试用例执行结果。

 

对变异算子的类型总结如下:

变异算子

描述

AORB

改变二元运算符

AOIU

改变变量正负号(加负号)

AOIS

插入一元运算符

SDL

语句删除

VDL

删除某个变量

CDL

删除某个运算常数

ODL

删除某个变量或者运算常数

AODU

改变返回值

ROR

改变关系运算符

COR

改变逻辑运算符

COI

改变真值运算符(加非号)

LOI

改变位运算符

 

结论: 是进行变异测试的工具,根据不同变异算子模拟不同的程序典型错误,对源代码进行相应改变,执行测试用例后,找出可存活变异体和不可存活变异体。

以上是关于mujava的主要内容,如果未能解决你的问题,请参考以下文章