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