亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        Randoop 和Evosuite 生成測試用例的變異檢測能力分析

        2020-04-25 07:53:06郭丹
        現(xiàn)代計算機(jī) 2020年9期
        關(guān)鍵詞:實驗檢測方法

        郭丹

        (四川大學(xué)計算機(jī)學(xué)院,成都610065)

        0 引言

        單元測試是軟件測試過程的重要一環(huán),編寫高質(zhì)量的單元測試用例可以提高測試的效率,但費(fèi)時費(fèi)力。單元測試用例自動生成工具可以自動生成大量測試用例,但這些測試用例質(zhì)量有待評估。評估測試用例質(zhì)量的一種常用方法是變異測試。變異測試將人工缺陷(變異體)種植到被測代碼中,并評估測試用例是否找到它們。當(dāng)一個測試用例檢測到一個變異體時,說明該變異體被殺死[1],否則變異體仍然存活。

        本文選擇Randoop 和Evosuite 這兩個積極維護(hù)的自動化生成單元測試的工具,muJava 變異工具,以數(shù)據(jù)結(jié)構(gòu)教材中的基本數(shù)據(jù)結(jié)構(gòu)項目作為被測項目進(jìn)行變異測試,通過比較Evosuite、Randoop 生成的測試用例的變異檢測能力,以回答下面2 個研究問題:

        問題1:兩個工具生成的測試用例在變異測試中的整體表現(xiàn)如何?

        問題2:每個工具在檢測不同變異體方面各自有什么優(yōu)勢?

        1 相關(guān)工作

        為了研究自動生成的單元測試用例是否能找到真正的缺陷,Sina Shamshiri 等人針對defects4j 上的五個項目,利用單元測試生成工具Randoop、Evosuite 以及AgitarOne[2]生成的測試用例,將檢測到的缺陷與實際的缺陷報告進(jìn)行比較。實驗結(jié)果表明:幾種測試生成工具共發(fā)現(xiàn)55.7%的缺陷,但沒有單獨(dú)的工具發(fā)現(xiàn)超過40.6%的缺陷[3]。

        為了研究變異體與真實缺陷的關(guān)系,Sina Shamshiri 等人[4]針對數(shù)據(jù)集Defects4J,利用自動化測試生成工具Randoop、Evosuite、JCrashe[5]生成測試用例,用變異工具M(jìn)ajor[6]進(jìn)行變異測試,發(fā)現(xiàn)變異體可以有效替代真實缺陷,即變異分?jǐn)?shù)可以體現(xiàn)測試用例發(fā)現(xiàn)真實缺陷的能力。

        M.Moein Almasi 等人[7]對自動化測試生成工具的有效性進(jìn)行了評估。但是使用的數(shù)據(jù)集是工業(yè)界的項目——LifeCalc(由SEB Life&Pension Holding AB Riga Branch 內(nèi)部擁有和開發(fā)的相對復(fù)雜的金融應(yīng)用程序),他們從該軟件項目的版本歷史中提取了25個真實缺陷,并應(yīng)用了Evosuite 和Randoop 這兩個單元測試生成工具,分別實現(xiàn)了基于搜索和反饋的隨機(jī)測試生成。自動生成的測試用例檢測到這些缺陷的高達(dá)56.40%(Evosuite)和38.00%(Randoop)。

        2 實驗方法

        圖1 是實驗流程圖。對于每一個被測項目,Randoop 和Evosuite 分別對其生成測試用例;變異工具muJava 對每個被測項目生成變異體,之后進(jìn)行變異測試得到變異分?jǐn)?shù)。

        圖1 實驗流程圖

        2.1 被測系統(tǒng)

        基本數(shù)據(jù)結(jié)構(gòu)及其算法是程序設(shè)計和軟件項目開發(fā)的基礎(chǔ),是實際項目開發(fā)中的基本組成部分。本文選擇數(shù)據(jù)結(jié)構(gòu)教材Data Structures and Algorithm Analy?sis[8]中的基本數(shù)據(jù)結(jié)構(gòu)項目作為被測項目,可以分析自動化單元測試工具在基本數(shù)據(jù)結(jié)構(gòu)項目上的表現(xiàn)。該數(shù)據(jù)集包含了常用的數(shù)據(jù)結(jié)構(gòu),其中包含了鏈表、隊列、棧、二叉樹、圖,以及各類查找、排序算法等。原始數(shù)據(jù)集的類文件分布比較雜亂,個別項目中包含了與實現(xiàn)該種數(shù)據(jù)結(jié)構(gòu)無關(guān)的類文件,經(jīng)過整理后共有46個項目,共有76 個類、327 個方法。

        2.2 自動化單元測試工具選擇

        實驗采用目前最流行的兩個單元測試工具Randoop 和Evosuite。Randoop[9]是隨機(jī)單元測試生成工具,它實現(xiàn)了面向?qū)ο蟪绦虻姆答侂S機(jī)測試生成。這意味著它迭代地擴(kuò)展隨機(jī)選擇的方法調(diào)用序列,直到生成的序列引發(fā)未聲明的異常或違反一般代碼契約。Randoop 還執(zhí)行其生成的序列,并創(chuàng)建捕獲被測試類行為的斷言。但是,Randoop 不能將測試中的特定類作為目標(biāo),因為它使用自底向上的方法,該方法要求方法調(diào)用的所有依賴項。因此,Randoop 需要在測試生成過程中查看所有類的列表作為輸入。本文實驗在每次運(yùn)行中使用默認(rèn)設(shè)置。

        Evosuite[10]是基于搜索的單元測試生成工具,它是應(yīng)用一個遺傳算法來發(fā)展一組測試用例,使代碼覆蓋率最大化。Evosuite 是從隨機(jī)測試用例的測試用例開始,然后迭代地應(yīng)用搜索操作符(如選擇、突變和交叉)來進(jìn)化它們。由于Evosuite 可以針對特定的測試類,因此可以對每個被測類生成一個測試用例。Randoop在生成測試用例時默認(rèn)時間時100 秒,為了公平起見,在使用Evosuite 時,也將搜索時間也設(shè)置為100 秒,其他參數(shù)默認(rèn)。

        2.3 變異測試工具選擇

        muJava[11]是一種用來對Java 程序產(chǎn)生變體,進(jìn)行變異測試的一個工具。它自動為方法級別變異測試和類級變異測試生成突變體,同時在源程序和變異程序上執(zhí)行測試用例(利用Junit 生成的測試用例),區(qū)分出可存活和不可存活的變異體。在本次實驗中,選擇muJava 對自動化單元測試生成工具Evosuite、Randoop生成的測試用例進(jìn)行變異測試。

        2.4 實驗過程

        為了使用Evosuite 和Randoop,需要對原始代碼進(jìn)行處理。Randoop 對于不確定性的Random()方法會生成不穩(wěn)定的測試,因此按照Randoop 手冊上的處理方法對該方法進(jìn)行了填0 操作。main 函數(shù)是應(yīng)用程序的入口,類似于一個測試驅(qū)動,可以對其他的方法進(jìn)行調(diào)用,而本身不能被調(diào)用,所以生成的測試用例無法完全覆蓋main 函數(shù)中的代碼,就會造成覆蓋率降低。因此本實驗注釋了main 函數(shù)。

        (1)測試生成

        Randoop 使用的技術(shù)是隨機(jī)地為被測類生成方法或構(gòu)造函數(shù)的調(diào)用序列,而Evosuite 應(yīng)用遺傳算法來進(jìn)化一組隨機(jī)測試用例的測試用例。為了減小這種隨機(jī)性,對Evosuite、Randoop 都生成3 組測試用例,將不可編譯的測試用例丟棄,再生成新的測試用例。

        (2)去除不穩(wěn)定的測試

        為了使測試檢測到真正的缺陷,要求測試用例在運(yùn)行時全部通過。但是,工具可能會生成不穩(wěn)定測試,即在第一次執(zhí)行時通過但第二次執(zhí)行時卻不通過。因此,將可編譯的測試用例在被測項目上運(yùn)行2-3 次。如果有不穩(wěn)定的測試用例,那么就會去除這一組測試用例,重新生成,重新編譯和執(zhí)行直到每次都通過測試。

        (3)生成變異算子

        在生成變異算子時,需要將源程序的Java 文件放在muJava 的src 文件夾下,源程序的class 文件放在muJava 的class 文件夾下,測試用例的class 文件放在muJava 的tests 文件夾下。運(yùn)行GenMutants.cmd,勾選需要進(jìn)行變異的Java 文件,muJava 的變異算子有方法級別和類級別的變異算子。在本實驗中,為了使自動測試生成工具Evosuite、Randoop 生成的測試用例在每次生成變異算子的過程中盡可能生成多種變異算子,將方法級別和類級別的變異算子全部選擇。

        (4)變異測試

        運(yùn)行RunTest.cmd。因為在生成變異算子時將方法級別和類級別的變異算子全部選擇,所以在進(jìn)行變異測試時應(yīng)該選擇執(zhí)行所有的變異算子,即:“Execute all mutants”,從而得到方法級別的變異分?jǐn)?shù)即Traditional Mutants Result 和類級別的變異分?jǐn)?shù)即Class Mutants Result。

        3 實驗結(jié)果

        在本節(jié)中,將討論實驗結(jié)果并回答第一節(jié)提出的研究問題。

        Evosuite、Randoop 分別為每個測試類生成3 組測試用例并進(jìn)行變異測試,對這3 組測試用例的方法級別變異分?jǐn)?shù)、類級別變異分?jǐn)?shù)求平均值進(jìn)行分析。

        3.1 兩個工具生成的測試用例在變異測試中的整體表現(xiàn)如何?

        變異分?jǐn)?shù)是被殺死變異體體與生成的變異體總數(shù)的比例[12],變異分?jǐn)?shù)越高說明測試用例殺死的變異體數(shù)量越多。對實驗過程中Evosuite、Randoop 測試用例的變異分?jǐn)?shù)進(jìn)行了統(tǒng)計,并分別繪出Evosuite、Randoop測試用例在殺死方法級別、類級別變異體時變異分?jǐn)?shù)的小提琴圖,分別如圖2、圖3。

        在生成方法級別變異體的68 個類:其中9 個類(占總類的8%)的Randoop 測試用例的變異分?jǐn)?shù)達(dá)到100%,可以殺死所有的變異體。在圖2 方法級別小提琴圖中:Evosuite 測試用例的變異分?jǐn)?shù)存在較明顯的離散值(下側(cè)須細(xì)長),中位數(shù)在50%左右,在40%—60%之間變異分?jǐn)?shù)分布最密集;Randoop 測試用例的變異分?jǐn)?shù)雖存在離散值,但明顯密度小于Evosuite,中位數(shù)在60%,且在40-60%、80-90%之間變異分?jǐn)?shù)分布最密集。

        在生成類級別變異體的53 個類中:24 個類(占總類的45%)的Evosuite 生成的測試用例的變異分?jǐn)?shù)達(dá)到100%;而在Randoop 生成的測試用例中,28 個類(占總類的53%)的變異分?jǐn)?shù)達(dá)到100%。觀察其小提琴圖發(fā)現(xiàn):Evosuite 測試用例的變異分?jǐn)?shù)中位數(shù)在60%,且變異分?jǐn)?shù)密集分布在80-100%以及0-20%這兩個區(qū)間內(nèi);Randoop 測試用例的變異分?jǐn)?shù)中位數(shù)在100%,在大部分變異分?jǐn)?shù)密集集中在80-100%。

        圖2 方法級別變異分?jǐn)?shù)小提琴圖

        圖3 類級別變異分?jǐn)?shù)小提琴圖

        對于Evosuite、Randoop 生成的測試用例,無論是在殺死方法級別的變異體還是類級別變異體,Randoop生成的測試用例的變異分?jǐn)?shù)高于Evosuite,即Randoop生成的測試用例可以殺死更多的變異體。

        3.2 每個工具在檢測不同變異體方面各自有什么優(yōu)勢?

        在本項目的68 個類中,針對muJava 生成的15 種方法級別的變異體,在進(jìn)行變異測試后每種變異體分成三種情況:部分變異體存活的(live)類的個數(shù)、變異體存活率為100%(live-100%)的類的個數(shù)和變異體全部被殺死(killed-100%)的類的個數(shù),這三種情況某種變異體類的總和是生成某種變異體類的總數(shù)。并分別統(tǒng)計了所有被測類生成的每種變異體在這三種情況下的數(shù)量分布。結(jié)果如圖4。

        圖4 變異體檢測結(jié)果統(tǒng)計圖

        (1)Randoop 測試用例在檢測COR(改變邏輯運(yùn)算符)、ROR(改變關(guān)系運(yùn)算符)類型變異體的能力與Evosuite 相同,都可以將COR 類型的變異體全部殺死,8個類的ROR 變異體被全部殺死。

        (2)在檢測VDL(刪除某個變量)、CDL(刪除某個運(yùn)算常數(shù))、ODL(刪除某個變量或者運(yùn)算常數(shù))類型的變異體時,圖3 中變異體的檢測統(tǒng)計結(jié)果可以明顯看出Randoop 測試用例在檢測這些類型變異體的能力優(yōu)于Evosuite 生成的測試用例。

        (3)Randoop 測試用例在檢測SDL、COI、AOIU、LOI類型變異體的能力略優(yōu)于Evosuite 生成的測試用例。

        在檢測COI(改變真值運(yùn)算符)、SDL(語句刪除)、AOIU(改變變量正負(fù)號)、LOI(改變位運(yùn)算符)類型的變異體時,Randoop 測試用例將這些變異體全部殺死的類的數(shù)量多于Evosuite,其中SDL、AOIU、LOI 類型的變異體全部存活的類的個數(shù)Evosuite 總是比Randoop 少1 個。

        (4)Evosuite、Randoop 測 試 用 例 不 善 于 檢 測AORB、AOIS 類型的變異體。

        在生成AORB(改變二元運(yùn)算符)類型變異體的23個類中,Evosuite 測試用例在進(jìn)行變異測試時,只有一個類中的變異體被全部殺死;Randoop 測試用例僅將3個類中的AORB 變異體全部殺死。

        在41 個生成AOIS(插入一元運(yùn)算符)變異體的類中:Randoop 測試用例僅將一個類的AOIS 變異體全部殺死,而Evosuite 測試用例進(jìn)行變異測試時,沒有一個類的AOIS 變異體被全部殺死。

        (5)Evosuite 測試用例在檢測ASRS、AODU、AORS類型變異體的能力優(yōu)于Randoop。

        在生成了ASRS(賦值運(yùn)算符替換)類型的變異體的3 個類中,Evosuite 測試用例可將其中一個類的ASRS 變異體全部殺死,但是在利用Randoop 測試用例進(jìn)行變異測試時,3 個類中ASRS 變異體的存活率都為100%。

        在生成AODU(改變返回值)類型變異體的6 個類中,Evosuite 測試用例可將所有的AODU 變異體全部殺死;Randoop 測試用例只將其中3 個類生成的AODU類型變異體全部殺死。

        在生成AORS(算術(shù)運(yùn)算符插入)類型變異體的27個類中,從有AORS 存活的類的個數(shù),還是AORS 被全部殺死的類的個數(shù)上看,Evosuite 生成的測試用例優(yōu)于Randoop 生成的測試用例。

        整體來說:在檢測ASRS、AODU、AORS 這三種類型的變異體時,Evosuite 測試用例比Randoop 測試用例殺死更多數(shù)量的變異體;但在剩余的12 種類型的變異體中,Randoop 測試用例比Evosuite 測試用例殺死更多數(shù)量的變異體。

        3.3 實驗有效性的局限

        對于每個選定的工具,Evosuite 和Randoop 使用的都不是最新版本,并且沒有對參數(shù)進(jìn)行設(shè)置,如果使用最新版本或?qū)δ承﹨?shù)進(jìn)行設(shè)置,這些工具可能會表現(xiàn)得更好。

        另外,Randoop 是為整個項目生成了測試用例,它沒有針對特定的測試類,相比之下,測試用例數(shù)量較多;而Evosuite 專門針對所選擇的單個的類生成測試用例,從而導(dǎo)致測試用例數(shù)量較少。在本次實驗中,Evosuite 生成的測試用例數(shù)量遠(yuǎn)遠(yuǎn)少于Randoop,這也有可能是導(dǎo)致Randoop 的變異分?jǐn)?shù)明顯高于Evosuite的原因。

        為了保證實驗數(shù)據(jù)的可靠性,將三組測試用例的變異分?jǐn)?shù)求平均值用以分析。實驗中三組測試用例的變異分?jǐn)?shù)不盡相同,如果采用變異分?jǐn)?shù)中最大值或最小值,都會導(dǎo)致實驗結(jié)果有偏差。

        4 結(jié)語

        本實驗通過對自動生成的單元測試用例殺死變異體的效果、Randoop 和Evosuite 對muJava 生成的15 種方法級別變異體的檢測效果以及變異分?jǐn)?shù)分析發(fā)現(xiàn),對于小型項目:①Randoop 生成的測試用例的變異分?jǐn)?shù)整體明顯高于Evosuite;②在檢測ASRS、AODU、AORS這三種類型的變異體時,Evosuite 測試用例比Randoop測試用例殺死更多數(shù)量的變異體;在剩余的12 種類型的變異體中,Randoop 測試用例比Evosuite 測試用例殺死更多數(shù)量的變異體。

        在未來的工作中可以通過添加手工編寫的測試用例或者對Evosuite、Randoop 進(jìn)行參數(shù)設(shè)置改進(jìn)自動生成的測試用例,殺死更多的非等價變異體。

        阻礙變異測試廣泛應(yīng)用的主要障礙之一就是等價變異體的檢測問題。等價變異體不僅對提高變異分?jǐn)?shù)沒有幫助,而且長期滯留在測試過程中將耗費(fèi)極大的計算開銷,可以將基于約束測試技術(shù)應(yīng)用于自動化測試用例生成工具,盡早地將等價變異體檢測出來,以提高變異測試的效率。

        猜你喜歡
        實驗檢測方法
        記一次有趣的實驗
        “不等式”檢測題
        “一元一次不等式”檢測題
        “一元一次不等式組”檢測題
        做個怪怪長實驗
        可能是方法不對
        NO與NO2相互轉(zhuǎn)化實驗的改進(jìn)
        實踐十號上的19項實驗
        太空探索(2016年5期)2016-07-12 15:17:55
        小波變換在PCB缺陷檢測中的應(yīng)用
        用對方法才能瘦
        Coco薇(2016年2期)2016-03-22 02:42:52
        老色鬼永久精品网站| 中文字幕你懂的一区二区| 中文字幕日本韩国精品免费观看 | 无码熟妇人妻av在线网站| 国语自产偷拍在线观看| 国产精品亚洲一区二区在线观看| 欧美mv日韩mv国产网站| 国产久视频国内精品999| 成人精品国产亚洲欧洲| 国产精品亚洲精品日韩动图| 中文字幕有码在线人妻| 丝袜美腿一区二区国产| 欧美xxxx做受欧美| 亚洲中文字幕无码爆乳av| 91久久国产精品视频| 99国产精品久久久蜜芽| 男女激情床上视频网站| 91久久大香伊蕉在人线国产| 免费在线观看播放黄片视频| 美女不带套日出白浆免费视频| 天堂国精产品2023年| 国产日韩成人内射视频| 国产成人一区二区三区视频免费蜜| 熟女少妇丰满一区二区| 干出白浆视频在线观看| 性高朝久久久久久久3小时| 精品三级av无码一区| 精品性高朝久久久久久久| 国产日韩欧美911在线观看| 色婷婷久久99综合精品jk白丝| 国产日产亚洲系列首页| 无码专区人妻系列日韩精品| 青楼妓女禁脔道具调教sm| 四虎国产精品永久在线无码| 日本女优中文字幕看片| 久久亚洲精品成人av观看| 国产91久久麻豆黄片| 欧美成人看片一区二区三区尤物| 欧美巨大巨粗黑人性aaaaaa| 日本欧美在线播放| 国产精品一区又黄又粗又猛又爽 |