zoukankan      html  css  js  c++  java
  • 使用μJava进行变异体测试

    • 一、环境配置

    mujava运行的是Java程序,Java的环境配置见Eclipse+JDK配置那点事

    将下载的mujava相关文件放到一个文件夹,文件夹放到C:muJava

    1. 添加mujava环境变量CLASSPATH: 
      C:mujavamujava.jar;C:mujavaopenjava.jar;C:mujavajunit.jar
    2. 创建一个文件夹,如C:mujavaTest;将mujava.config 移至 该文件夹,并用记事本打开将MuJava_HOME设置为该文件夹,即MuJava_HOME=C:mujavaTest;最后在该文件夹下创建如下结构目录: 
    3. 在C:mujavaTest下创建两个Txt,另存为cmd后缀,方便运行mujava程序。txt分别内容为: 
      GenMutants.cmd: 
      RunTest.cmd: 
      *运行mujava的目录要包含mujava.config
    • 二、生成变体
    1. 先对muJavaHome的文件夹进行解释:
    2. 我们把在eclipse下编译好的.java和.class文件分别放到src和classes里面,然后点击运行GenMutants.cmd

    3. 然后我们生成变异体
    4. 生成完毕后可在其余两个选项卡中查看生成的变体,变体.java与.class位于result文件夹

    • 三、编写测试用例
    1. 关于Juint参考:http://www.cnblogs.com/mjm212/p/6534674.html
    2. 测试代码如下:
      import static org.junit.Assert.*;
      
      import org.junit.After;
      import org.junit.Before;
      import org.junit.Test;
      
      public class CalculatorTest {
          private Calculator c;
      
          @Before
          public void setUp() throws Exception {
              // setUp()用于测试前的初始化
              c = new Calculator();
          }
      
          @After
          public void tearDown() throws Exception {
              // tearDown()用于测试后的善后
              c = null;
          }
      
          @Test
          public void testAdd() {
              double []a = {1};
              double []b={2};
              assertEquals(3, c.add(a, b), 0.0000f);
              assertEquals(3, c.add(a, b), 0.0000f);
              
          }
          
          @Test
          public void testSub() {
              double []a = {3};
              double []b={1};
              assertEquals(2, c.sub(a, b), 0.0000f);
              assertEquals(2, c.sub(a, b), 0.0000f);
          
          }
      
          @Test
          public void testMulti() {
              double []a = {3};
              double []b={2};
              assertEquals(6, c.multi(a, b), 0.0000f);
              assertEquals(6, c.multi(a, b), 0.0000f);
              
          }
      
          @Test
          public void testDiv() {
              double []a = {2};
              double []b={2};
              assertEquals(1, c.div(a, b), 0.0000f);
              assertEquals(1, c.div(a, b), 0.0000f);
              
          }
      
          @Test
          public void test5() {
              assertTrue(!false);
          }
      
      }
    3. Calculator.java的JUnit测试类CalculatorTest.java和.class文件复制在testset文件夹。 

    • 四、运行变异测试
    1. 运行RunTest.cmd,见如下界面。设定相关参数后点击Run进行变异测试。测试完成后可以看到统计结果,测试结果的详细内容被输出到muJavaTestTestResult.txt中。
    2. 查看测试结果统计信息
    3. 查看更详细的测试输出:
    • 五、分析测试结果
    1. 分析:在使用Junit进行测试的时候:

      我们发现在使用测试变异体时仍有许多的变异体没有被kill,我们查看一下为什么没有被kill,发现有一种类似于a++,a—的错误没有被查看到,因为a++是在该语句被执行后才对a进行++,所以我们应该在Junit Test 里加入一些测试用例。

      后来修改了Test发现结果分析不变,我们看了一下结果报告最终猜测他每一次可能只执行一次assertEqual,所以我们修改了一下测试代码:
    2. 我们发现kill率明显上升了,成为100%。

    • 六、结论
    1. 所以说在测试时我们发现生成的变异体,我们需要通过使用更多的测试用例去检测这些变异体,从而使我们的程序稳定。
  • 相关阅读:
    liunx centos下tomcat启动 Cannot find ./catalina.sh
    ls -bash: ls: command not found
    Linux CentOS下安装JDK1.7
    查看Linux Centos 系统信息 内核 CPU 系统版本 磁盘 分区 网络配置 进程 命令
    PHP自动捕捉监控致命错误(500错误) error_get_last() 获取最后一次发生错误信息 register_shutdown_function()在脚本停止执行时注册一个回调函数
    CI CodeIgniter 添加公共函数 全局函数 自定义函数
    express框架封装前戏
    怎奈风云多变换,骚完一波还一波,记PHP mongodb驱动的2019年11月用法
    linux ps sample
    利用python pika库实现rabbitmq客户端
  • 原文地址:https://www.cnblogs.com/mjm212/p/6708200.html
Copyright © 2011-2022 走看看