• 一、环境配置

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

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

  1. 添加mujava环境变量CLASSPATH: 
    C:\mujava\mujava.jar;C:\mujava\openjava.jar;C:\mujava\junit.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;@Beforepublic void setUp() throws Exception {// setUp()用于测试前的初始化c = new Calculator();}@Afterpublic void tearDown() throws Exception {// tearDown()用于测试后的善后c = null;}@Testpublic void testAdd() {double []a = {1};double []b={2};assertEquals(3, c.add(a, b), 0.0000f);assertEquals(3, c.add(a, b), 0.0000f);}@Testpublic void testSub() {double []a = {3};double []b={1};assertEquals(2, c.sub(a, b), 0.0000f);assertEquals(2, c.sub(a, b), 0.0000f);}@Testpublic void testMulti() {double []a = {3};double []b={2};assertEquals(6, c.multi(a, b), 0.0000f);assertEquals(6, c.multi(a, b), 0.0000f);}@Testpublic void testDiv() {double []a = {2};double []b={2};assertEquals(1, c.div(a, b), 0.0000f);assertEquals(1, c.div(a, b), 0.0000f);}@Testpublic void test5() {assertTrue(!false);}}

  3. Calculator.java的JUnit测试类CalculatorTest.java和.class文件复制在testset文件夹。
  • 四、运行变异测试
  1. 运行RunTest.cmd,见如下界面。设定相关参数后点击Run进行变异测试。测试完成后可以看到统计结果,测试结果的详细内容被输出到muJavaTest\TestResult.txt中。
  2. 查看测试结果统计信息
  3. 查看更详细的测试输出:
  • 五、分析测试结果
  1. 分析:在使用Junit进行测试的时候:

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

    后来修改了Test发现结果分析不变,我们看了一下结果报告最终猜测他每一次可能只执行一次assertEqual,所以我们修改了一下测试代码:

  2. 我们发现kill率明显上升了,成为100%。

  • 六、结论
  1. 所以说在测试时我们发现生成的变异体,我们需要通过使用更多的测试用例去检测这些变异体,从而使我们的程序稳定。

转载于:https://www.cnblogs.com/mjm212/p/6708200.html

使用μJava进行变异体测试相关推荐

  1. 软件变异体测试(mutation test)

    首先给出一个Web工具帮助搞软件测试研究的人员类实现:graph coverage,edge-pair coverage,prime path coverage,logic coverage http ...

  2. java流行的测试框架调研+市面上书籍调研

    主要是根据51job的右侧来判断 java测试框架名称 51job职位数量 百度词条数量 JUnit 732 48,500,000 REST Assured 3 19,500,000 Selenium ...

  3. tdd java_适用于Idea的面向现代TDD的Java 8 JUnit测试模板(带有Mockito和AssertJ)

    tdd java 使用类似于BDD的语法,Java 8和Mockito-AssertJ二重奏为Idea调整JUnit测试类模板. 本文涵盖的主题似乎很简单. 但是,根据我的培训师经验,我知道(不幸的) ...

  4. Java XMPP负载测试工具

    在本文中,我们将开发用Java编写的XMPP负载测试工具. 目录 1.简介 2. XMPP负载测试工具 3.先决条件 4. LoadXmppTest Java程序 4.1. 创建一个新的Maven项目 ...

  5. 适用于Idea的面向现代TDD的Java 8 JUnit测试模板(带有Mockito和AssertJ)

    使用类似BDD的语法,Java 8和Mockito-AssertJ二重奏为Idea调整JUnit测试类模板. 本文涵盖的主题似乎很简单. 但是,根据我的培训师经验,我知道(不幸的是)这不是常见的做法. ...

  6. Java EE 6测试第I部分– EJB 3.1可嵌入API

    我们从Enterprise JavaBeans开发人员那里听到的最常见的请求之一就是需要改进的单元/集成测试支持. EJB 3.1 Specification引入了EJB 3.1 Embeddable ...

  7. Java EE 6测试第二部分– Arquillian和ShrinkWrap简介

    在Java EE 6测试的第一部分中,我简要介绍了使用Glassfish嵌入式容器的EJB 3.1 Embeddable API,以演示如何启动该容器,如何在项目类路径中查找bean以及运行非常简单的 ...

  8. at java.net.url init,java.net 基本测试

    java.net 基本测试 包 java.net java.net.ssl 类java.net.URL 测试类package com.mozq.boot.kuayu01.demo; import ja ...

  9. 微信公众账号第三方平台全网发布源码(java)- 实战测试通过

    微信公众账号第三方平台全网发布源码(java)- 实战测试通过 (更多资料,关注论坛:www.jeecg.org) 技术交流请加:289709451.287090836 package org.jee ...

最新文章

  1. 辉光数码管中挥之不去的记忆
  2. 对象④for in 循环
  3. python语言能够整合各类程序代码-python语言概述
  4. JavaScript中判断是否存在某属性
  5. 二、linux命令(ubuntu)
  6. iOS---------关于野指针定位总结
  7. [html] iframe如何自动调整高度?
  8. spring boot 如何修改默认端口号和context path
  9. centos7搭建nexus maven私服
  10. HTML:表格、表单和rem
  11. SAS 146GB*8 RAID5数据恢复过程(HP 双循环)
  12. ECSHOP二次开发之给商品增加新字段
  13. ABP框架系列之四十:(Notification-System-通知系统)
  14. webservice报错Message part refundRequest was not recognized. (Does it exist in service WSDL?)
  15. C++的STL中accumulate的用法
  16. 连锁门店进销存软件的用途
  17. 免费在线生成彩色带logo的个性二维码
  18. 数九寒冬,中老年人要谨防腰椎“出轨
  19. html页面加载json数据,在html中显示JSON数据的方法
  20. Adobe Bridge是干什么的?Adobe Bridge使用教程

热门文章

  1. Python 十六进制转Base64_马克的Python学习笔记#数据编码与处理 4
  2. 能带曲线图绘制python_如何使用python的matplotlib模块画折线图
  3. 何不用python_EXCEL数据太“脏”无从下手?何须用python,ETL一分钟搞定
  4. es 时间字段聚合_Elasticsearch 聚合(aggregation)查询返回所有
  5. python期末考试及答案广东卷_python数据分析答案试题题目及答案,期末考试题库,章节测验答案...
  6. ecm工作原理 usb_(转)USB中CDC-ECM的了解和配置
  7. Awcing算法---区间合并
  8. Anaconda使用
  9. 图像与数据类型的对应,以及如何显示
  10. TensorFlow(2)图(默认图与自定义图) TensorBoard可视化