国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

面向?qū)ο髥卧獪y試用例自動(dòng)生成工具對比分析

2020-04-24 14:50付玉珍
電腦知識與技術(shù) 2020年5期

摘要:主要闡述了隨機(jī)測試和搜索測試的兩種單元測試用例生成技術(shù)的研究現(xiàn)狀,通過經(jīng)典測試程序,對JET、Randoop、Evosuite工具分別在分支覆蓋率、產(chǎn)生測試用例數(shù)、所需時(shí)間三項(xiàng)指標(biāo)進(jìn)行了對比分析,總結(jié)了各自的特點(diǎn)及進(jìn)一步的研究方向。

關(guān)鍵詞:自動(dòng)單元測試工具;Java;隨機(jī)測試;搜索測試;分支覆蓋

中圖分類號:TP311

文獻(xiàn)標(biāo)識碼:A

文章編號:1009-3044(2020)05-0053-02

開放科學(xué)(資源服務(wù))標(biāo)識碼(OSID):

單元測試是為了保證軟件質(zhì)量而在軟件開發(fā)期間執(zhí)行的非常重要活動(dòng)之一,它是通過輸入編寫好的測試用例執(zhí)行被測程序,將輸出結(jié)果與預(yù)期輸出進(jìn)行比較的測試活動(dòng)。通常由于待測試程序的輸入空間非常大,且軟件測試活動(dòng)受人力、時(shí)間等因素的影響,軟件測試人員會(huì)選擇測試用例生成工具自動(dòng)生成具有代表性的測試用例子集進(jìn)行測試。雖然很多測試用例自動(dòng)生成工具只是某些步驟做到了自動(dòng),尚處于在理論研究階段,并未使用于商業(yè)軟件開發(fā)中,但眾多研究人員致力于測試用例自動(dòng)生成技術(shù)的研究,極大地推動(dòng)了測試用例生成工具的自動(dòng)化程度。本文主要對基于Java語言的開源測試用例生成工具進(jìn)行闡述、介紹、對比與分析。

1 自動(dòng)化單元測試用例研究現(xiàn)狀

目前主要有基于符合執(zhí)行、模型測試、組合測試、隨機(jī)測試、以及搜索測試等多種方法可以根據(jù)被測程序的源代碼自動(dòng)生成測試用例,文章[1]對以上技術(shù)的研究現(xiàn)狀、熱點(diǎn)和面臨的挑戰(zhàn)進(jìn)行了全面的概述。基于符號執(zhí)行的主要有jCUTEc2],Symbolic PathFinder[3]等,隨機(jī)測試的工具有JCrasherc4]、JTest[5]以及JET嘲等,隨機(jī)測試基本無須人工參與、簡單、易于實(shí)現(xiàn),便于與其他技術(shù)結(jié)合和自動(dòng)化程度比較高的優(yōu)點(diǎn)。為了增強(qiáng)隨機(jī)測試的有效性和效率,一系列自適應(yīng)隨機(jī)測試方法被提出:Randoopm,以及以Randoop為基礎(chǔ)的隨機(jī)測試工具GRT[8],利用靜態(tài)和動(dòng)態(tài)程序分析來指導(dǎo)運(yùn)行中測試的生成的,這些自適應(yīng)隨機(jī)測試方法目的都是希望產(chǎn)生的測試用例能均勻地分布在輸入?yún)^(qū)域。

基于搜索的測試用例生成則是通過定義一個(gè)捕獲測試目標(biāo)的適應(yīng)度函數(shù),找到滿足測試目標(biāo)的輸入空間,將測試問題轉(zhuǎn)換為一個(gè)優(yōu)化問題,文獻(xiàn)[11]對基于搜索的軟件測試方面進(jìn)行了系統(tǒng)全面的概述,目前已有PSO[12]、ACO[13]、GA[l4]、DEc15].MAc16]等算法成功運(yùn)用到測試用例的生成,也有將符號執(zhí)行技術(shù)集成到優(yōu)化算法中,基于搜索技術(shù)的工具有Evosuite[9],JTEx-pert[10]。

2 Java單元測試用生成工具對比

JET[17]是用JML規(guī)范注釋的Java類的自動(dòng)化單元測試工具,采用的是一種隨機(jī)測試技術(shù);通過分別為被測試類的每個(gè)方法自動(dòng)生成測試數(shù)據(jù)的集合,執(zhí)行它們,并通過使用JML規(guī)范作為測試預(yù)言器來確定測試結(jié)果(即通過佚?。_(dá)到完全自動(dòng)化Java類的單元測試工具,且生成的測試用例符合Junit標(biāo)準(zhǔn),可以在Junit上直接執(zhí)行。為了達(dá)到更好的測試效果,JET也允許手動(dòng)添加人工設(shè)計(jì)的測試用例。

Randoop[7]則是一種面向?qū)ο蟮姆答伿诫S機(jī)測試方法,它利用已經(jīng)產(chǎn)生方法序列以及方法參數(shù)的運(yùn)行結(jié)果作為反饋信息來調(diào)整后續(xù)參數(shù)的產(chǎn)生范圍,避免了冗余和無意義的輸入達(dá)到縮小了搜索空間的效果。因Randoop基于隨機(jī)測試,所以無須代碼插樁,無須理論證明、不受約束。實(shí)驗(yàn)結(jié)果表明在覆蓋率和錯(cuò)誤檢測方面都優(yōu)于無反饋的隨機(jī)測試。

相比于無引導(dǎo)的隨機(jī)測試,基于搜索算法的測試用例生成技術(shù),利用復(fù)雜啟發(fā)式信息來引導(dǎo)測試用例的產(chǎn)生[17]。Evosuite[9]就是基于搜索算法的測試用例生成工具,它可以使用相對較少的測試用例,獲得比較高的覆蓋率,同時(shí)生成的測試用例也完全符號Junit的標(biāo)準(zhǔn)。相對于其他自動(dòng)化單元測試工具,因Evosuite需要重新執(zhí)行測試用例,并最小化測試用例,所以需要較長的運(yùn)行時(shí)間。目前Evosuite在解決復(fù)雜約束和數(shù)學(xué)問題,以及具有循環(huán)語句的覆蓋問題方面能力還是有限,以及Evosuite配置相對復(fù)雜,需要較多的選項(xiàng)及參數(shù)設(shè)置。

3 對比實(shí)驗(yàn)及結(jié)果分析

3.1 比較測試實(shí)驗(yàn)

實(shí)驗(yàn)測試程序選用二叉樹(BinTree)、二項(xiàng)堆(BinaryHeap)、、二分查找(BinarySearch)、三角形判定(Trangle)、階乘(Factorial)、冒泡排序(BubbleSort)、四則運(yùn)算(SimpleCalculate)等經(jīng)典測試程序分別對JET、Randoop、Evosuite進(jìn)行測試。實(shí)驗(yàn)運(yùn)行環(huán)境為InteI(R)Core(TM)i7-4790 CPU@3.30GHz,8G內(nèi)存,windows操作系統(tǒng),每個(gè)函數(shù)獨(dú)立運(yùn)行25次,表中對每個(gè)工具取得的平均分支覆蓋率、所需測試用例數(shù)、產(chǎn)生測試用例時(shí)間Tgen三個(gè)指標(biāo)進(jìn)行了對比。

3.2 實(shí)驗(yàn)結(jié)果分析

通過對基于lava語言的三個(gè)具有代表性的測試用例生成工具在覆蓋率、產(chǎn)生測試用例數(shù)目、產(chǎn)生測試用例所需時(shí)間等指標(biāo)做了對比分析。通過實(shí)驗(yàn)得出,JET生成效率高,時(shí)間開銷小,所需運(yùn)行時(shí)間最短,產(chǎn)生的測試用例數(shù)相對也較少,Evosu-ite擁有較少測試用例是由于它經(jīng)過一個(gè)約減刪除冗余測試用例的過程。同時(shí)實(shí)驗(yàn)將Randoop運(yùn)行時(shí)間設(shè)置到60secends,但相比30seconds,并沒有提高其覆蓋率,從數(shù)據(jù)顯示中得出Evo-suite取得了最好的覆蓋率,但是所需的運(yùn)行時(shí)間也相對較長,如果用于真實(shí)的復(fù)雜大型項(xiàng)目,Evosuite還需要提高其生成有效測試用例的速度。

4 結(jié)束語

基于隨機(jī)搜索的測試用例生成技術(shù)需要結(jié)合其他技術(shù)或者利用反饋信息來提高測試效率,基于搜索的測試用例生成技術(shù)因不是所有的語句都有啟發(fā)式信息可以用,所以如何更好的引導(dǎo)搜索方向和提高產(chǎn)生測試用例的效率是需要思考的問題。同時(shí)目前測試程序都是使用沒有錯(cuò)誤的小程序,且覆蓋率高的測試技術(shù)并不一定在實(shí)際測試中就是高效,根據(jù)實(shí)驗(yàn)發(fā)現(xiàn),超過50%的bug是在分支覆蓋率幾乎沒有增加的時(shí)期內(nèi)發(fā)現(xiàn),所以測試用例停止標(biāo)準(zhǔn)使用分支覆蓋達(dá)到一定標(biāo)準(zhǔn)或者一定時(shí)間內(nèi)可能會(huì)造成bug不被發(fā)現(xiàn),而實(shí)際測試技術(shù)更注重工具的錯(cuò)誤檢測能力,所以算法對程序錯(cuò)誤檢測能力也應(yīng)該作為重要的考核指標(biāo)。

參考文獻(xiàn):

[1] Anand S,Burke E K,Chen T Y,et aI.An orchestrated survey ofmethodologies for automated software test case generation[J].Journal of Systems and Software, 2013,86(8):1978-2001.

[2] Sen K,Agha G.CUTE and jCUTE: concolic unit testing and ex-plicit path model-checking tools[Ml//Computer Aided Verifica-tion. Berlin, Heidelberg: Springer Berlin Heidelberg, 2006:419-423.

[3] P5ssreanu C S,Visser W,Bushnell D,et aI.Symbolic PathFinder:integrating symbolic execution with model checking for Javabytecode analysis[Jl.Automated Software Engineering, 2013,20(3):391-425.

[4] Csallner C,Smaragdakis Y.JCrasher: an automatic robustnesstester for Java[J]. Software: Practice and Experience, 2004, 34(11):1025-1050.

[5] Parasoft Corporation, Automatic Java software and componenttesting: Using Jtest to automate unit testing and coding stan-dard enforcement[EB/OL].2007.1 http://www.parasoft.com

[6] Ali S,Briand L C,Hemmati H,et aI.A systematic review of theapplication and empirical investigation of search-based testcase generation[J].lEEE Transactions on Software Engineering,2010,36(6):742-762.

[7] Pacheco C, Lahiri S K, Ernst M D,et al. Feedback-directedrandom test generation[C].Proc. - Int. Conf. Softw. Eng., 2007 :75-84.

[8] Ma L, Artho C, Zhang C, et al. GRT: Program-analysis-guid-ed random testing[Cl. Proc. - 2015 30th lEEE/ACM Int. Conf. Autom. Softw. Eng. ASE 2015:212-223.

[9] Fraser G,Arcuri A.Whole test suite generation[J].lEEE Trans-actions on Software Engineering, 2013,39(2):276-291.

[10] Sakti A, Pesant G, Gueheneuc Y G.lnstance generator andproblem representation to improve object oriented code cover-age[J].lEEE Transactions on Software Engineering, 2015,41(3):294-313.

[11] Ali S,Briand L C,Hemmati H,et aI.A systematic review of theapplication and empirical investigation of search-based testcase generation[J].IEEE Transactions on Software Engineering,2010,36(6):742-762.

收稿日期:2019 -11-15

作者簡介:付玉珍(1984-),女,山西呂梁人,講師,碩士研究生,主要研究方向智能算法。

张家港市| 浮梁县| 昭通市| 芦山县| 无棣县| 嘉兴市| 离岛区| 环江| 麻城市| 鸡西市| 象山县| 平潭县| 陇川县| 西藏| 班戈县| 图木舒克市| 江安县| 新津县| 襄城县| 巴彦淖尔市| 海门市| 锡林浩特市| 饶河县| 玉屏| 遵义县| 望城县| 商丘市| 阜新市| 通江县| 灵寿县| 新乡县| 张北县| 定西市| 石景山区| 咸宁市| 永宁县| 宜春市| 鱼台县| 德清县| 太仆寺旗| 嘉善县|