劉佳洛,姚 奕 ,黃 松,惠戰(zhàn)偉,陳 強,寇大磊 ,2,張仲偉,3
1.陸軍工程大學(xué) 指揮控制工程學(xué)院,南京 210007
2.中國人民解放軍68023部隊
3.中國人民解放軍73671部隊
軟件測試是保證軟件可靠性和軟件質(zhì)量的重要手段,是評估軟件能否滿足設(shè)計需求的過程。軟件測試旨在檢測現(xiàn)有行為與預(yù)想行為之間的差異。軟件測試是一種可以揭露軟件問題并有助于軟件的可信度的有效的方式。機器學(xué)習(xí)(Machine Learning)在計算機視覺、語音識別和自然語言處理等實際應(yīng)用中已經(jīng)取得了顯著的成功。圖像分類已經(jīng)成為計算機視覺的一個最為重要的分支。因此對于研究機器學(xué)習(xí)圖像分類器的測試就十分有意義。傳統(tǒng)的測試技術(shù)構(gòu)建了一組測試用例(<輸入,輸出>)。測試人員將該輸入放入到待測程序中執(zhí)行并且檢查從待測程序中得到的輸出是否和預(yù)期的輸出一致。這種利用預(yù)期輸出與實際輸出做比較的技術(shù)對于軟件測試而言是十分普遍的。然而,當(dāng)測試人員測試基于機器學(xué)習(xí)的應(yīng)用程序時,通過(<輸入,輸出>)對驗證機器學(xué)習(xí)應(yīng)用程序很大程度上是不可行的。這是因為[1]:
(1)這個待測程序需要大量的輸入;
(2)在許多情況下,輸入的預(yù)期輸出是未知的或者太昂貴而無法構(gòu)建;
(3)與傳統(tǒng)應(yīng)用程序的測試不同,找到一個或一些機器學(xué)習(xí)系統(tǒng)錯誤分類的實例并不表示存在錯誤。
當(dāng)機器學(xué)習(xí)算法輸出不正確時(例如對特定輸入進(jìn)行錯誤分類),可能存在多種潛在原因。這些包括:缺乏訓(xùn)練數(shù)據(jù)、使用不恰當(dāng)?shù)臋C器學(xué)習(xí)框架、學(xué)習(xí)算法存在實現(xiàn)錯誤;在當(dāng)前實驗階段,幾乎所有的不正確的輸出都?xì)w因于缺乏訓(xùn)練數(shù)據(jù),并敦促開發(fā)人員收集更多不同的訓(xùn)練數(shù)據(jù)。但是如果學(xué)習(xí)算法本身實現(xiàn)就存在錯誤,那么收集更多的訓(xùn)練數(shù)據(jù)將無濟(jì)于事。正如Weyuker 所說[2],機器學(xué)習(xí)圖像分類器本身就是用來解決疑難問題的程序,這類程序的輸出就是疑難問題的答案。如果答案已知,那么這種程序也就沒有存在的價值。這導(dǎo)致了機器學(xué)習(xí)圖像分類器的測試面臨著測試判定問題。
為了緩解測試判定問題,香港中文大學(xué)的Chen T Y提出了蛻變測試技術(shù)(Metamorphic Testing,MT)[3]。該技術(shù)針對程序在預(yù)期輸出難以獲取的情況下,將檢查程序的實際輸出是否符合預(yù)期輸出轉(zhuǎn)變?yōu)闄z查程序的多個輸入所對應(yīng)的執(zhí)行結(jié)果之間是否滿足某特性關(guān)系,這種關(guān)系被稱為“蛻變關(guān)系”。蛻變測試以原始輸入為基礎(chǔ),以蛻變關(guān)系為判斷準(zhǔn)則,當(dāng)測試用例之間滿足一定的輸入關(guān)系時,檢查所對應(yīng)的輸出之間是否符合相應(yīng)的蛻變關(guān)系,若不滿足,則可以認(rèn)為軟件存在缺陷,這就為緩解測試判定問題提供了一種有效途徑。顯然,蛻變測試開展的基礎(chǔ)就是蛻變關(guān)系的正確性,即需要事先確定蛻變關(guān)系一定是程序的必要關(guān)系。這樣在難以判定測試結(jié)果是否正確的情況下,就可以應(yīng)用蛻變關(guān)系提供測試判定。
當(dāng)前蛻變測試的研究熱點是蛻變關(guān)系的構(gòu)造和其在不同領(lǐng)域的應(yīng)用,對測試過程的標(biāo)準(zhǔn)規(guī)范研究不是很多,這就造成了測試過程的隨意性和盲目性。為了減少人為因素對測試過程的干擾,規(guī)范蛻變測試流程,本文提出了適用于機器學(xué)習(xí)圖像分類程序的蛻變測試框架,并對其中的相關(guān)模塊的實現(xiàn)方法做出了介紹。
針對機器學(xué)習(xí)圖像分類程序的特點,提出了由蛻變關(guān)系構(gòu)造、蛻變關(guān)系正確性判定、變異算子的構(gòu)造、測試有效性度量等模塊組成的蛻變測試框架。如圖1所示。
在整個機器學(xué)習(xí)圖像分類程序的蛻變測試框架中,由于本文針對于機器學(xué)習(xí)圖像分類程序的實現(xiàn)錯誤,因此需要先排除數(shù)據(jù)以及機器學(xué)習(xí)框架的錯誤,首先將已收集好的原始訓(xùn)練集S和原始測試集T結(jié)合蛻變關(guān)系即可得到衍生訓(xùn)練集S′和衍生測試集T′;其次把原始訓(xùn)練集S和衍生訓(xùn)練集S′分別對已經(jīng)編寫好的機器學(xué)習(xí)圖像分類算法A進(jìn)行訓(xùn)練,分別得到圖像分類器AT和圖像分類器AT′;再次將原始測試集T和衍生測試集T′分別對圖像分類器AT和圖像分類器AT′進(jìn)行測試;然后判斷兩個分類器的測試結(jié)果OAT與OAT′是否滿足蛻變關(guān)系從而對蛻變關(guān)系進(jìn)行正確性判定。接下來再通過執(zhí)行變異算子得到機器學(xué)習(xí)圖像分類算法A′,再將原始訓(xùn)練集S和衍生訓(xùn)練集S′分別對變異機器學(xué)習(xí)圖像分類算法A′進(jìn)行訓(xùn)練,分別得到圖像分類器AT′和圖像分類器A′T′;再次將原始測試集T和衍生測試集T′ 分別對圖像分類器A′T和圖像分類器A′T′進(jìn)行測試;最后通過判斷兩個分類器的測試結(jié)果OA′T與OA′T′是否一致來度量蛻變關(guān)系的有效性。該框架主要分為以下幾個模塊:蛻變關(guān)系的構(gòu)造、蛻變關(guān)系正確性判定、變異體的構(gòu)造、測試有效性度量等。
蛻變關(guān)系作為蛻變測試的核心,其正確性直接影響著蛻變測試的有效性[4]。通常蛻變關(guān)系來源于被測程序函數(shù)或者需求規(guī)格的必要屬性,而這些必要屬性自身的正確性就需要測試人員事先驗證。因此,可以認(rèn)為蛻變關(guān)系自身正確性是蛻變測試的前提條件。
蛻變測試可以有效地緩解測試判定問題。蛻變關(guān)系是目標(biāo)算法的多次輸出與預(yù)期輸出之間關(guān)系的必要屬性。往往這些屬性的數(shù)量是很多的,幾乎不能得到目標(biāo)算法所有的蛻變關(guān)系,即便有可能獲得所有的蛻變關(guān)系,但是由于必要性,它們?nèi)匀粺o法被證明是完備的。然而,最近的一項實例研究[5]取得了非常令人鼓舞的結(jié)果,該研究表明少數(shù)不同的蛻變關(guān)系的檢錯能力就十分接近測試判定的檢錯能力了。對于研究的全部待測程序,蛻變測試平均使用3到6個蛻變關(guān)系就可以檢測到超過90%可能出現(xiàn)的故障。為了提高測試效益并減少測試成本,本文將針對機器學(xué)習(xí)圖像分類算法構(gòu)造3到6個蛻變關(guān)系來檢測機器學(xué)習(xí)圖像分類器是否存在實現(xiàn)錯誤。
一般來說,有兩種驗證蛻變關(guān)系正確性的方法:一方面可以根據(jù)人們的公理或者人們?nèi)〉霉沧R的定理構(gòu)造蛻變關(guān)系,這類蛻變關(guān)系一般就不需要進(jìn)一步驗證[6-8]。對于程序函數(shù)為數(shù)學(xué)函數(shù)的程序,這種蛻變關(guān)系較為常見。另一方面,也可以根據(jù)被測程序的領(lǐng)域?qū)傩詷?gòu)造蛻變關(guān)系。通常,除非這類屬性剛好是用戶設(shè)定的特定需求[9-11],不然這類屬性通常需要測試人員預(yù)先證明。針對機器學(xué)習(xí)圖像分類程序的特點,可以從以下兩個方面著手構(gòu)建蛻變關(guān)系:
圖1 機器學(xué)習(xí)圖像分類程序的蛻變測試框架
(1)幾何屬性。對原始測試圖像做幾何變換可以得到新的測試圖像,這樣并未影響圖像的內(nèi)部布局,因此兩幅圖像的分類結(jié)果應(yīng)當(dāng)保持一致。
(2)算法特性。待測程序確定時,訓(xùn)練數(shù)據(jù)的改變會影響待測程序的參數(shù)進(jìn)而影響測試結(jié)果,因此可以改變訓(xùn)練數(shù)據(jù)集的性質(zhì),查看輸出是否符合預(yù)期。
驗證蛻變測試的效率和有效性都需要一定數(shù)量的被測件,并且這些被測件中必須包含一定數(shù)量的故障或者錯誤。而實際中,要得到被測軟件真實故障的信息并不容易,這也就限制了蛻變測試效率的驗證。
針對此問題,通常存在兩種構(gòu)造目標(biāo)故障的方法:真實故障和變異測試[12]。變異測試中用于構(gòu)造目標(biāo)故障的人工構(gòu)造的小錯誤也稱為變異算子(Mutation Operator)[13],而變異算子產(chǎn)生的新程序稱為變異體(Mutant),又稱變異程序。這樣對于相同的測試用例,如果變異體和原程序的輸出不一致性,則認(rèn)為變異被殺死。現(xiàn)有研究表明[14],能夠發(fā)現(xiàn)簡單變異構(gòu)造的故障,也能夠發(fā)現(xiàn)其他的復(fù)雜故障。同時,Andrews 等人[15]還發(fā)現(xiàn),變異測試也可以用于評價蛻變測試的有效性。為了進(jìn)一步了解現(xiàn)有研究中分別采用這兩種方法的比例,對已公開發(fā)表文獻(xiàn)中分別采用這兩種故障構(gòu)造方法的數(shù)量進(jìn)行了統(tǒng)計,如圖2所示。由圖可見,顯然絕大多數(shù)研究中都采用了變異測試方法來驗證蛻變測試的效率或有效性,而只有約6%的文獻(xiàn)中采用的存在真實故障的被測件。
圖2 分別采用兩個目標(biāo)構(gòu)造方法的文獻(xiàn)數(shù)量統(tǒng)計圖
通常,傳統(tǒng)軟件主要由開發(fā)人員以源代碼的形式編程(圖3),這可能是缺陷引入的主要來源。變異測試稍微修改程序代碼以引入故障。
圖3 傳統(tǒng)軟件開發(fā)和面向機器學(xué)習(xí)軟件開發(fā)
對于機器學(xué)習(xí)應(yīng)用程序而言(圖3),借鑒上面的方法,在編寫機器學(xué)習(xí)應(yīng)用程序時,直接將潛在缺陷注入也是可行的。不過不同的是,由于機器學(xué)習(xí)應(yīng)用程序參數(shù)同時也受到數(shù)據(jù)集的影響。因此,提出了兩組變異算子,即數(shù)據(jù)變異算子和程序變異算子,它們對源程序進(jìn)行相應(yīng)的修改以引入潛在的故障。
監(jiān)督學(xué)習(xí)是從已標(biāo)記的訓(xùn)練數(shù)據(jù)中推導(dǎo)出一個預(yù)測函數(shù),用以預(yù)測測試數(shù)據(jù)上的未知標(biāo)簽的一項任務(wù)。訓(xùn)練數(shù)據(jù)可以有兩個大小為k的向量表示。一個向量是訓(xùn)練樣本S=s0,s1,…,sk-1,另一個是類標(biāo)簽C=c0,c1,…,ck-1。其中,ci是si的類標(biāo)簽。每個樣本si具有m個特征提供給預(yù)測函數(shù)學(xué)習(xí)。類標(biāo)簽是有限集,每個類標(biāo)簽ci是它的一個元素,即c∈L=l0,l1,…,ln-1,其中n是類標(biāo)簽的數(shù)量[16]。監(jiān)督機器學(xué)習(xí)應(yīng)用程序執(zhí)行分為兩個階段:訓(xùn)練階段和測試階段。在訓(xùn)練階段中,監(jiān)督分類算法使用訓(xùn)練樣來學(xué)習(xí)預(yù)測函數(shù)。監(jiān)督學(xué)習(xí)算法會分析屬性與類標(biāo)簽之間的相互關(guān)聯(lián),從而盡可能地學(xué)習(xí)更好的預(yù)測函數(shù)。在測試階段,將預(yù)測函數(shù)應(yīng)用于無標(biāo)簽的數(shù)據(jù)集(測試集),其中類標(biāo)簽未知。該應(yīng)用程序使用通過學(xué)習(xí)得到的預(yù)測函數(shù)來預(yù)測每個實例的類標(biāo)簽[16]。
本章主要研究SVM 和VGG16 圖像分類器的蛻變測試方法。根據(jù)機器學(xué)習(xí)圖像分類器的蛻變測試框架,首先為這兩種圖像分類器構(gòu)造蛻變關(guān)系并對構(gòu)造出的蛻變關(guān)系進(jìn)行正確性判定,其次結(jié)合變異測試技術(shù)驗證了該蛻變關(guān)系能有效地檢測出機器學(xué)習(xí)圖像分類器的實現(xiàn)錯誤。
3.1.1 蛻變關(guān)系的構(gòu)造
首先選擇了SVM算法,數(shù)據(jù)集選用digits手寫體數(shù)據(jù)集,它將手寫數(shù)字圖像分為0 到9 的類。該算法可以分為基于線性核函數(shù)或非線性核函數(shù)實現(xiàn)。然后對線性核函數(shù)SVM 算法和非線性核函數(shù)SVM 算法均構(gòu)造了蛻變關(guān)系。SVM 算法采用手寫數(shù)字的標(biāo)記數(shù)據(jù),并學(xué)習(xí)這些訓(xùn)練數(shù)據(jù)中的內(nèi)在屬性是怎樣分隔這些類別從而得到?jīng)Q策邊界。每個標(biāo)記數(shù)據(jù)都是8×8 像素的圖像。像素是在灰度級別中,一個手寫體數(shù)字圖像例子由64 個數(shù)字的數(shù)組表示。有關(guān)一些digits 數(shù)據(jù)集的可視化,如圖4 所示,接下來用已經(jīng)訓(xùn)練好的模型預(yù)測測試圖像的類別。該模型的輸出為混淆矩陣和測試準(zhǔn)確率。測試準(zhǔn)確率越高就意味著模型對該測試圖像正確分類越高。
圖4 手寫體數(shù)字圖像和經(jīng)蛻變關(guān)系之后的圖像
根據(jù)原始數(shù)據(jù)集的幾何屬性以及SVM算法特性構(gòu)造出了下面4種蛻變關(guān)系:
(1)MR-1:訓(xùn)練數(shù)據(jù)集和測試數(shù)據(jù)集特征排列改變,分類精度不變。
(2)MR-2:訓(xùn)練數(shù)據(jù)集中訓(xùn)練用例的順序改變,分類精度不變。
(3)MR-3:訓(xùn)練數(shù)據(jù)集和測試數(shù)據(jù)集特征擴大常量倍,分類精度不變(只針對非線性內(nèi)核)。
(4)MR-4:測試數(shù)據(jù)集特征線性縮放之后,分類精度不變(只針對線性內(nèi)核)。
構(gòu)造的四種MR 中的每一種都可以具有多種變化的方式。例如,在MR-1中,可以以多種方式對特征進(jìn)行置換。針對每個MR只創(chuàng)建了一個變體。然而,該變體確保了該方面的每個方面數(shù)據(jù)實例已更改。例如,在MR-1中,每個特征都發(fā)生置換。在MR-2中,每個訓(xùn)練數(shù)據(jù)實例的順序被改變了。同理,對于MR-3和MR-4,相應(yīng)地也構(gòu)建了一個變體。
3.1.2 蛻變關(guān)系的正確性判定
接下來從以上4 種蛻變關(guān)系分別選出一個蛻變關(guān)系,并用實驗證明其正確性。針對MR-1,改變訓(xùn)練數(shù)據(jù)集和測試數(shù)據(jù)集的特征排列,得到衍生訓(xùn)練集和衍生測試集。并依照機器學(xué)習(xí)蛻變測試框架,分別將原始的訓(xùn)練集和衍生訓(xùn)練集放入SVM 算法進(jìn)行訓(xùn)練,可得到原始的訓(xùn)練模型和衍生訓(xùn)練模型,再將這兩個訓(xùn)練模型分別對原始的測試集和衍生測試集進(jìn)行測試,圖5為兩個訓(xùn)練模型的測試結(jié)果。
圖5 數(shù)據(jù)滿足同分布時的測試結(jié)果
上述實驗測試集和訓(xùn)練集滿足同分布特性,下面針對原有數(shù)據(jù)集構(gòu)造不同分布的測試集和訓(xùn)練集進(jìn)行上述同樣的實驗,圖6為測試集和訓(xùn)練集不滿足同分布特性時的測試結(jié)果。
對比上述兩個實驗可得訓(xùn)練數(shù)據(jù)集與測試數(shù)據(jù)集在不滿足同分布特性情況下,蛻變關(guān)系依舊正確。由圖6測試結(jié)果可以得到,改變訓(xùn)練數(shù)據(jù)集和測試數(shù)據(jù)集特征排列,其分類精度不改變。因此證明了MR-1的正確性。同理,針對MR-2、MR-3、MR-4 依次按照機器學(xué)習(xí)蛻變測試框架進(jìn)行實驗,實驗結(jié)果表明該4條蛻變關(guān)系的正確性。
圖6 數(shù)據(jù)不滿足同分布特性時的測試結(jié)果
3.1.3 變異體的構(gòu)造
采用變異測試技術(shù)來證明基于機器學(xué)習(xí)圖像分類器的蛻變關(guān)系的有效性及檢錯能力。變異測試是測試質(zhì)量評估和測試充分性度量的有效技術(shù)手段。在該實驗中,使用一款針對python程序變異算子的生成工具(Mutpy)[17]來生成變異算子,通過變異測試技術(shù)[18]有目的地引入實現(xiàn)錯誤,用來證明基于這兩種機器學(xué)習(xí)程序構(gòu)造出的蛻變關(guān)系的正確性。變異測試系統(tǒng)地更改原始源文件中的代碼行并生成多個新的源代碼文件。每個文件都只攜帶一個bug。這個帶有bug的文件成為變異體。一般來說,由變異測試生成的變異代表程序員通常犯的錯誤。
采用上述的Mutpy 工具為線性內(nèi)核和非線性內(nèi)核的SVM 應(yīng)用程序分別構(gòu)造了6 個變異算子,其具體變異算子如表1所示。
3.1.4 實驗結(jié)果
將提供的原始訓(xùn)練數(shù)據(jù)集和測試集根據(jù)蛻變關(guān)系生成新的訓(xùn)練集和測試集,然后用新得到的數(shù)據(jù)集和原始數(shù)據(jù)集分別執(zhí)行6 個變異體。如果變異體和原程序的輸出不一致,則認(rèn)為變異被殺死。表2 為線性SVM分類器殺死變異體的結(jié)果,表3 為非線性SVM 分類器殺死變異體的結(jié)果,表中的√表示變異體被殺死。
實驗結(jié)果表明,線性內(nèi)核和非線性內(nèi)核的SVM 應(yīng)用程序構(gòu)造的6 個變異體均能被以上4 種蛻變關(guān)系殺死。同時,MR-1(改變數(shù)據(jù)集的特征排列)殺死了所有變異體。這是因為構(gòu)造的6 個變異體均對應(yīng)于輸入數(shù)據(jù)不正確,MR-1改變了數(shù)據(jù)集的特征排列,因此該蛻變關(guān)系可以殺死所有變異體。同理,MR-3(同時增加或減少數(shù)據(jù)集特征)也能殺死所有的變異體。
表1 支持向量機變異構(gòu)造列表
表2 線性SVM分類器殺死變異體的結(jié)果
表3 非線性SVM分類器殺死變異體的結(jié)果
3.2.1 蛻變關(guān)系的構(gòu)造
選擇的第二個圖像分類器是深度學(xué)習(xí)的圖像分類器被稱為VGG16。VGG16 模型的出現(xiàn),使得卷積神經(jīng)網(wǎng)絡(luò)取得了突破性的成就。該模型能將圖像分類這一任務(wù)很好地完成,并在2014年ILSVRC競賽中取得了優(yōu)異的成績。本文基于tensorflow 框架實現(xiàn)VGG16。VGG16圖像分類器對已標(biāo)記數(shù)據(jù)進(jìn)行訓(xùn)練和測試,選用CIFAR-10 數(shù)據(jù)集[19]。該數(shù)據(jù)集的每個數(shù)據(jù)實例都是32×32 像素彩色圖像,即每個實例具有32×32×3特征數(shù)字并已被分為10 個互斥類。圖7 中顯示了一些數(shù)據(jù)實例的可視化。對于給定的一組測試實例,VGG16圖像分類器輸出分為測試分類準(zhǔn)確度和測試損失,測試損失表示預(yù)測類和實際類之間的交叉熵用來衡量分類效果的值。
圖7 CIFAR-10數(shù)據(jù)實例可視化
根據(jù)原始數(shù)據(jù)集的幾何屬性以及VGG算法特性構(gòu)造出了下面3種蛻變關(guān)系:
(1)MR-1:訓(xùn)練數(shù)據(jù)集和測試數(shù)據(jù)集輸入RGB 通道排列改變,分類精度不變。
(2)MR-2:訓(xùn)練數(shù)據(jù)集和測試數(shù)據(jù)集卷積操作排列改變,分類精度不變。
(3)MR-3:測試數(shù)據(jù)集特征均乘以一個常數(shù)k,分類精度不變。
圖8 為原始訓(xùn)練圖像和將該圖像經(jīng)過RGB 通道置換后的訓(xùn)練圖像的可視化,圖9為原始訓(xùn)練圖像和將該圖像經(jīng)過CONV 順序置換后的訓(xùn)練圖像的可視化,圖10為原始測試圖像和將該圖像每個特征乘以一個常數(shù)k以后的測試圖像的可視化。
圖8 圖像經(jīng)RGB通道置換后的訓(xùn)練圖
圖10 特征乘以一個常數(shù)k 以后的測試圖像
3.2.2 蛻變關(guān)系的正確性判定
接下來從以上3 種蛻變關(guān)系分別選出一個蛻變關(guān)系,并通過實驗證明該蛻變關(guān)系正確性。對于MR-1,改變訓(xùn)練數(shù)據(jù)集和測試數(shù)據(jù)集RGB 通道排列順序,得到衍生訓(xùn)練集和衍生測試集。并按照機器學(xué)習(xí)蛻變測試框架,分別將原始的訓(xùn)練集和衍生訓(xùn)練集放入VGG16進(jìn)行訓(xùn)練,可得到原始的VGG16 圖像分類器和衍生的VGG16 圖像分類器,再將這兩個圖像分類器分別對原始的測試集和衍生測試集進(jìn)行測試,圖11 為訓(xùn)練模型的測試結(jié)果。由于測試損失和測試精度都是能很好反應(yīng)測試性能的,又因為測試精度本身差值最多為100%,這里選用測試損失更好地反應(yīng)不同的 RGB 通道變化曲線。
圖11 MR-1測試結(jié)果
表4 VGG變異構(gòu)造列表
由圖11 測試結(jié)果可以得到,改變訓(xùn)練數(shù)據(jù)集和測試數(shù)據(jù)集RGB 通道排列順序,其測試損失大致不變。因此證明了MR-1的正確性。
同理,針對MR-2、MR-3 依次按照機器學(xué)習(xí)蛻變測試框架進(jìn)行實驗,實驗結(jié)果表明該3 條蛻變關(guān)系的正確性。
3.2.3 變異體的構(gòu)造
采用上述的Mutpy工具為VGG圖像分類模型一共構(gòu)造了10個變異體,10個變異體類型如表4所示。該表顯示了編寫深度學(xué)習(xí)Python程序可能產(chǎn)生的常見錯誤。
3.2.4 實驗結(jié)果
圖12 顯示了 MR-1、MR-2、MR-3 在殺死以上變異體的測試損失圖,計算了每個變異體的最大偏差σ,如果σ超過最大閾值,則認(rèn)為該蛻變關(guān)系殺死了變異體。比較無變異體的圖11 可以得到,圖12 中可以很好地看到一些比較異常的測試損失,表5 為這3 種蛻變關(guān)系執(zhí)行所有的變異體之后的結(jié)果。表中的√表示變異體被殺死。從表中可以看出MR-1 殺死了M6、M7、M8 這3個變異體,MR-2殺死了M2、M4、M5、M8這4個變異體,同樣可以得出MR-3也能殺死變異體,這將是非常有用的,因為MR-3可以在已經(jīng)運用訓(xùn)練好的模型上。這將更好地推進(jìn)整個過程的自動化。
與測試機器學(xué)習(xí)應(yīng)用程序相比,已經(jīng)有大量的工作投入在通過機器學(xué)習(xí)方法來解決軟件測試問題。例如,機器學(xué)習(xí)已被用來預(yù)測給定程序的蛻變關(guān)系[20]。蛻變測試已應(yīng)用于測試不同類型的機器學(xué)習(xí)應(yīng)用[21]。一個現(xiàn)實世界的案例研究機器學(xué)習(xí)應(yīng)用程序框架表明蛻變關(guān)系可以有效地檢測故障。
表5 3種蛻變關(guān)系執(zhí)行所有的變異體之后的結(jié)果
蛻變關(guān)系已被證明是蛻變測試的核心要素。Jameel等將蛻變測試用于圖像處理應(yīng)用[22]。他們證明與特定圖片相關(guān)的蛻變關(guān)系在檢測故障能力更有效。在進(jìn)行蛻變測試時,使用蛻變關(guān)系來增強機器學(xué)習(xí)。這里通過輸入數(shù)據(jù)的屬性和二進(jìn)制分類模型的用法來識別蛻變關(guān)系?;輵?zhàn)偉等人[23]提出了一種用于GIS 測試的半自動蛻變方法,通過表面積計算程序來說明測試方法的過程。同時開發(fā)了一個蛻變關(guān)系模型生成復(fù)合蛻變關(guān)系。
怎樣識別有效的蛻變關(guān)系也尤為重要,Asrafi 等[24]已經(jīng)觀察到MR 實現(xiàn)的測試代碼覆蓋率與其故障檢測有效性之間的相關(guān)性。在面向?qū)ο蟮能浖y試中,已經(jīng)提出了一種基于代數(shù)規(guī)范構(gòu)造蛻變關(guān)系的方法[25]。該方法提供低蛻變?nèi)哂嗖⑻岣哕浖y試的效率。μMT[26]一種MR 構(gòu)造工具,它使用數(shù)據(jù)變異來構(gòu)造輸入關(guān)系,以及與每個變異算子相關(guān)的通用映射規(guī)則來構(gòu)造輸出關(guān)系。
圖12 MR-1,MR-2,MR-3殺死以上變異體的測試損失圖
在本文中,研究了基于機器學(xué)習(xí)圖像分類器的實現(xiàn)錯誤的問題,由于機器學(xué)習(xí)圖像分類器存在著測試預(yù)言問題,采用了蛻變測試技術(shù),同時,為了規(guī)范測試流程、提高測試效率,提出了一種適用于機器學(xué)習(xí)圖像分類程序的蛻變測試框架。并且通過測試基于SVM和VGGNet圖像分類程序,驗證了該測試框架的合理性和有效性。實驗結(jié)果表明,平均有75%的實現(xiàn)錯誤能被本文方法所發(fā)現(xiàn),這為下一步自動化測試機器學(xué)習(xí)應(yīng)用程序奠定了良好的基礎(chǔ)。