软件测试技术第四次实验报告
一、需求分析(描述具体需求)
1. 安装MuJava。
2. 根据给定的两个小程序使用MuJava生成对应的变异体。
3. 使用Junit给两个程序编写测试集。
4. 使用MuJava和测试集测试这些变异体。
二、概要设计(简单描述设计思路,配合UML图)
1. 设计思路
首先安装mujava.jar,openjava.jar和junit.jar等需要用到的包,在进行环境变量的配置,生成需要的变异体。接着编写对应的测试集,再对这些变异体进行测试。
三、详细设计(详细描述具体如何实现,附代码及说明)
1. 安装MuJava。
将下载好的jar包添加到环境变量中,在CLASSPATH中添加这些jar包的路径,结果如下图所示:
新建一个mujava.config文件,并在其中写入MuJava_HOME的地址,该地址为新建的MujavaHome的地址。
再新建两个命令脚本文件,GenMutants.cmd和RunTest.cmd,在其中分别写入如下图所示的内容。
2. 生成变异体。
先在MujavaHome文件夹中新建四个文件夹,分别是src,classes,result,testset。
在src文件夹中放入两个给定的源程序,在classes文件夹中放入两个源程序在eclipse中编译生成的class文件。
点击运行GenMutants.cmd文件,弹出如下图形界面,并勾选上所有的变异算子。
点击‘Generate’按钮,生成变异体,下图分别是BackPack和BubbleSort的变异体:
其中,只生成了method级别的变异体,没有class级别的变异体。
生成变异体后,可以在result文件夹内找到生成的变异体文件。
3. 编写测试用例。
(1) backpack的测试用例:
import org.junit.Assert;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
public class testBackPack {
private BackPack c;
@Before
public void setUp() throws Exception {
// setUp()用于测试前的初始化
c = new BackPack();
}
@Test
public void test2() {
int m = 10;
int n = 3;
int w[] = {3, 4, 5};
int p[] = {4, 5, 6};
int a[][] = {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4},
{0, 0, 0, 4, 5, 5, 5, 9, 9, 9, 9},
{0, 0, 0, 4, 5, 6, 6, 9, 10, 11, 11}};
Assert.assertArrayEquals(a,c.BackPack_Solution(m, n, w, p));
}
@After
public void tearDown() throws Exception {
// tearDown()用于测试后的善后
c = null;
}
}
(2) bubblesort的测试用例:
import static org.junit.Assert.*;
import java.util.Arrays;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
public class testBubbleSort {
private BubbleSort c;
@Before
public void setUp() throws Exception {
// setUp()用于测试前的初始化
c = new BubbleSort();
}
@Test
public void test1() {
int a[] = new int[]{1,6,2,2,5};
int b[]=new int[]{2,2,2,1,2,13};
int a1[] = new int[]{1,2,2,5,6};
int b1[]=new int[]{1,2,2,2,2,13};
assertEquals(Arrays.toString(a1), Arrays.toString(c.BubbleSort(a)));
assertEquals(Arrays.toString(b1), Arrays.toString(c.BubbleSort(b)));
}
@After
public void tearDown() throws Exception {
// tearDown()用于测试后的善后
c = null;
}
}
4. 对变异体进行测试。
首先将testBackPack.java,testBubbleSort.java, testBackPack.class, testBubbleSort.class放入testset文件夹内。
然后点击运行RunTest.cmd文件,打开图形界面,设定参数,分别对两个程序的变异体进行测试。
四、调试分析(在实验过程中遇到的问题以及如何解决)
在实验过程中遇到了这些问题:
首先是点击运行GenMutants.cmd文件时发生闪退,出现“找不到或无法加载主类”的错误,经查询这是环境变量没有配置正确所导致的问题,修改环境变量的配置后,能成功打开图形界面。
但是在点击‘Generate’按钮后,没有成功生成变异体,在命令台处报了如下错误:
再次查询资料发现还是环境变量的原因,再次修改,最终解决问题,得到变异体。
五、测试结果(描述输入和输出)
1. 下图为BubbleSort程序的测试结果以及result的输出结果。
可以看到,总共有124个变异体,有110个被kill掉的变异体。
2. 下图为BackPack程序的测试结果以及result的输出结果。
一共有365个变异体,有321个变异体被kill掉。
六、总结
通过这次实验,我练习了环镜变量的配置方法,还学会了使用mujava来给程序进行变异测试的技术。包括怎么分类放置文件、生成变异体以及运行变异测试。在给程序编写测试用例时,用到了assertArrayEquals 这个函数,实现对数组的测试。我还学到了将命令写入cmd文件来实现运行该命令的方法。