使用μJava进行变异体测试
生活随笔
收集整理的這篇文章主要介紹了
使用μ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进行变异体测试的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 实验二 164 张增进
- 下一篇: 求一个特殊qq网名