使用μJava进行变异体测试
- 一、环境配置
mujava运行的是Java程序,Java的环境配置见Eclipse+JDK配置那点事。
将下载的mujava相关文件放到一个文件夹,文件夹放到C:\muJava
- 添加mujava环境变量CLASSPATH:
C:\mujava\mujava.jar;C:\mujava\openjava.jar;C:\mujava\junit.jar
- 创建一个文件夹,如C:\mujavaTest;将mujava.config 移至 该文件夹,并用记事本打开将MuJava_HOME设置为该文件夹,即
MuJava_HOME=C:\mujavaTest
;最后在该文件夹下创建如下结构目录: - 在C:\mujavaTest下创建两个Txt,另存为cmd后缀,方便运行mujava程序。txt分别内容为:
GenMutants.cmd:
RunTest.cmd:*运行mujava的目录要包含mujava.config
- 二、生成变体
- 先对muJavaHome的文件夹进行解释:
我们把在eclipse下编译好的.java和.class文件分别放到src和classes里面,然后点击运行GenMutants.cmd
- 然后我们生成变异体
生成完毕后可在其余两个选项卡中查看生成的变体,变体.java与.class位于result文件夹
- 三、编写测试用例
- 关于Juint参考:http://www.cnblogs.com/mjm212/p/6534674.html
- 测试代码如下:
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);}}
- Calculator.java的JUnit测试类CalculatorTest.java和.class文件复制在testset文件夹。
- 四、运行变异测试
- 运行RunTest.cmd,见如下界面。设定相关参数后点击Run进行变异测试。测试完成后可以看到统计结果,测试结果的详细内容被输出到muJavaTest\TestResult.txt中。
- 查看测试结果统计信息
- 查看更详细的测试输出:
- 五、分析测试结果
分析:在使用Junit进行测试的时候:
我们发现在使用测试变异体时仍有许多的变异体没有被kill,我们查看一下为什么没有被kill,发现有一种类似于a++,a—的错误没有被查看到,因为a++是在该语句被执行后才对a进行++,所以我们应该在Junit Test 里加入一些测试用例。
后来修改了Test发现结果分析不变,我们看了一下结果报告最终猜测他每一次可能只执行一次assertEqual,所以我们修改了一下测试代码:
我们发现kill率明显上升了,成为100%。
- 六、结论
- 所以说在测试时我们发现生成的变异体,我们需要通过使用更多的测试用例去检测这些变异体,从而使我们的程序稳定。
转载于:https://www.cnblogs.com/mjm212/p/6708200.html
使用μJava进行变异体测试相关推荐
- 软件变异体测试(mutation test)
首先给出一个Web工具帮助搞软件测试研究的人员类实现:graph coverage,edge-pair coverage,prime path coverage,logic coverage http ...
- java流行的测试框架调研+市面上书籍调研
主要是根据51job的右侧来判断 java测试框架名称 51job职位数量 百度词条数量 JUnit 732 48,500,000 REST Assured 3 19,500,000 Selenium ...
- tdd java_适用于Idea的面向现代TDD的Java 8 JUnit测试模板(带有Mockito和AssertJ)
tdd java 使用类似于BDD的语法,Java 8和Mockito-AssertJ二重奏为Idea调整JUnit测试类模板. 本文涵盖的主题似乎很简单. 但是,根据我的培训师经验,我知道(不幸的) ...
- Java XMPP负载测试工具
在本文中,我们将开发用Java编写的XMPP负载测试工具. 目录 1.简介 2. XMPP负载测试工具 3.先决条件 4. LoadXmppTest Java程序 4.1. 创建一个新的Maven项目 ...
- 适用于Idea的面向现代TDD的Java 8 JUnit测试模板(带有Mockito和AssertJ)
使用类似BDD的语法,Java 8和Mockito-AssertJ二重奏为Idea调整JUnit测试类模板. 本文涵盖的主题似乎很简单. 但是,根据我的培训师经验,我知道(不幸的是)这不是常见的做法. ...
- Java EE 6测试第I部分– EJB 3.1可嵌入API
我们从Enterprise JavaBeans开发人员那里听到的最常见的请求之一就是需要改进的单元/集成测试支持. EJB 3.1 Specification引入了EJB 3.1 Embeddable ...
- Java EE 6测试第二部分– Arquillian和ShrinkWrap简介
在Java EE 6测试的第一部分中,我简要介绍了使用Glassfish嵌入式容器的EJB 3.1 Embeddable API,以演示如何启动该容器,如何在项目类路径中查找bean以及运行非常简单的 ...
- 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 ...
- 微信公众账号第三方平台全网发布源码(java)- 实战测试通过
微信公众账号第三方平台全网发布源码(java)- 实战测试通过 (更多资料,关注论坛:www.jeecg.org) 技术交流请加:289709451.287090836 package org.jee ...
最新文章
- 辉光数码管中挥之不去的记忆
- 对象④for in 循环
- python语言能够整合各类程序代码-python语言概述
- JavaScript中判断是否存在某属性
- 二、linux命令(ubuntu)
- iOS---------关于野指针定位总结
- [html] iframe如何自动调整高度?
- spring boot 如何修改默认端口号和context path
- centos7搭建nexus maven私服
- HTML:表格、表单和rem
- SAS 146GB*8 RAID5数据恢复过程(HP 双循环)
- ECSHOP二次开发之给商品增加新字段
- ABP框架系列之四十:(Notification-System-通知系统)
- webservice报错Message part refundRequest was not recognized. (Does it exist in service WSDL?)
- C++的STL中accumulate的用法
- 连锁门店进销存软件的用途
- 免费在线生成彩色带logo的个性二维码
- 数九寒冬,中老年人要谨防腰椎“出轨
- html页面加载json数据,在html中显示JSON数据的方法
- Adobe Bridge是干什么的?Adobe Bridge使用教程
热门文章
- Python 十六进制转Base64_马克的Python学习笔记#数据编码与处理 4
- 能带曲线图绘制python_如何使用python的matplotlib模块画折线图
- 何不用python_EXCEL数据太“脏”无从下手?何须用python,ETL一分钟搞定
- es 时间字段聚合_Elasticsearch 聚合(aggregation)查询返回所有
- python期末考试及答案广东卷_python数据分析答案试题题目及答案,期末考试题库,章节测验答案...
- ecm工作原理 usb_(转)USB中CDC-ECM的了解和配置
- Awcing算法---区间合并
- Anaconda使用
- 图像与数据类型的对应,以及如何显示
- TensorFlow(2)图(默认图与自定义图) TensorBoard可视化