葛修婷 潘 婭
(1.西南科技大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院 四川綿陽(yáng) 621010;2. 西南科技大學(xué)計(jì)算機(jī)應(yīng)用研究所 四川綿陽(yáng) 621010)
隨著互聯(lián)網(wǎng)的快速發(fā)展,軟件的功能不斷豐富,軟件的規(guī)模不斷增大,軟件的迭代速度不斷加快,這給傳統(tǒng)的軟件測(cè)試工作帶來(lái)了較大的壓力,主要體現(xiàn)在:(1)由于Android系統(tǒng)的開源性和碎片化,移動(dòng)應(yīng)用軟件的安全性與可靠性是一個(gè)值得關(guān)注的問(wèn)題,傳統(tǒng)的測(cè)試無(wú)法解決軟件多樣性帶來(lái)的安全問(wèn)題;(2)隨著軟件開發(fā)的復(fù)雜度和迭代速度的增加,傳統(tǒng)的測(cè)試方法無(wú)法快速地發(fā)現(xiàn)和定位軟件缺陷;(3)在軟件的開發(fā)、測(cè)試和運(yùn)維過(guò)程中,產(chǎn)生了大量的數(shù)據(jù),如何有效地利用這些數(shù)據(jù)來(lái)提高軟件測(cè)試的效率也是亟待解決的問(wèn)題。
近年來(lái),人工智能的發(fā)展加速了將機(jī)器學(xué)習(xí)用于軟件、醫(yī)療、教育等多個(gè)方面。機(jī)器學(xué)習(xí)橫跨計(jì)算機(jī)科學(xué)、工程技術(shù)和統(tǒng)計(jì)學(xué)等多個(gè)學(xué)科,致力于研究如何通過(guò)計(jì)算手段來(lái)改善系統(tǒng)自身的性能,即通過(guò)從數(shù)據(jù)中學(xué)得的結(jié)果,來(lái)幫助新數(shù)據(jù)的預(yù)測(cè)和判斷。機(jī)器學(xué)習(xí)技術(shù)對(duì)實(shí)際問(wèn)題有較好的普適性,它不僅能從復(fù)雜且棘手的問(wèn)題中提取有用的信息,而且對(duì)不精確的、不確定的和錯(cuò)誤的數(shù)據(jù)有一定的容忍性。
由于軟件功能的增多和軟件規(guī)模的增大,利用機(jī)器學(xué)習(xí)技術(shù)對(duì)產(chǎn)生的數(shù)據(jù)進(jìn)行挖掘和學(xué)習(xí),可以較準(zhǔn)確地對(duì)軟件中存在的缺陷進(jìn)行預(yù)測(cè)和判斷,為軟件質(zhì)量保證提供了一定幫助,提高軟件測(cè)試效率。因此,近年來(lái),利用機(jī)器學(xué)習(xí)技術(shù)研究提高軟件測(cè)試效率和保證軟件質(zhì)量是逐步成為軟件測(cè)試領(lǐng)域的研究熱點(diǎn)之一。
本文希望通過(guò)討論機(jī)器學(xué)習(xí)技術(shù)在軟件測(cè)試領(lǐng)域的應(yīng)用,以對(duì)測(cè)試技術(shù)改進(jìn)進(jìn)行一些展望。論文結(jié)構(gòu)組織如下:第1節(jié)總結(jié)了機(jī)器學(xué)習(xí)技術(shù)在軟件測(cè)試領(lǐng)域的應(yīng)用概況的相關(guān)文獻(xiàn);第2小節(jié)分析和討論了機(jī)器學(xué)習(xí)在軟件測(cè)試領(lǐng)域的主要技術(shù);第3小節(jié)對(duì)全文做了總結(jié)。
本文文獻(xiàn)主要來(lái)源于兩個(gè)方面,第一方面是ACM Digital Library,IEEE Xplore Digital Library,Springer Link Online,ScienceDirect等數(shù)據(jù)庫(kù),第二方面是軟件的主要期刊和會(huì)議,如SATE、ISSTA、ASE等。使用搜索關(guān)鍵詞software testing AND machine learning,或software testing and data mining,或software testing and statistical learning theory,或software defects OR faults OR bugs OR vulnerability,或software security OR reliability,同時(shí)在文獻(xiàn)的標(biāo)題、摘要、關(guān)鍵詞和索引中進(jìn)行搜索,搜索時(shí)間范圍從2015年1月到2018年1月。在此基礎(chǔ)上,通過(guò)去除重復(fù)和與軟件測(cè)試領(lǐng)域不相關(guān)的論文,最后共篩選出80余篇文獻(xiàn)(因篇幅限制,參考文獻(xiàn)僅列出19篇)。
本文對(duì)篩選出的文獻(xiàn)進(jìn)行了分類,按研究主題主要分為基于機(jī)器學(xué)習(xí)的軟件安全與可靠性檢測(cè)、軟件缺陷、基于源碼的研究和其他4大類,如圖1文獻(xiàn)分類圖(括號(hào)的數(shù)字表示涉及到此類別的文獻(xiàn)數(shù))所示。
從圖1的主題分類再細(xì)分一下可知,基于機(jī)器學(xué)習(xí)的軟件測(cè)試領(lǐng)域的研究問(wèn)題主要集中在二值分類問(wèn)題和優(yōu)化問(wèn)題兩方面。大部分研究者主要針對(duì)軟件安全性與可靠性和軟件缺陷方面的研究,這屬于二值分類的問(wèn)題。其余大部分是優(yōu)化問(wèn)題,如:自動(dòng)化測(cè)試、測(cè)試用例優(yōu)化。下面將對(duì)每個(gè)類別逐一進(jìn)行總結(jié)。
圖1 文獻(xiàn)分類圖Fig.1 Literature classification map
1.2.1 關(guān)于軟件安全可靠性的研究
在軟件安全可靠性研究的30篇文獻(xiàn)中,多數(shù)是針對(duì)移動(dòng)應(yīng)用軟件的安全性和可靠性的檢測(cè)和預(yù)測(cè),少數(shù)文獻(xiàn)是針對(duì)Window和Linux應(yīng)用軟件[3,14,19]。
對(duì)于Window和Linux應(yīng)用軟件的安全性和可靠性檢測(cè)和預(yù)測(cè),通常是對(duì)API分類和API調(diào)用序列進(jìn)行分析、利用工具從源碼中提取信息、監(jiān)控并記錄軟件行為等方法提取信息作為模型的輸入特征,利用支持向量機(jī)、邏輯回歸、隨機(jī)森林等常用的機(jī)器學(xué)習(xí)模型在虛擬機(jī)或沙箱中進(jìn)行實(shí)驗(yàn)和分析。
對(duì)于Android應(yīng)用程序[6,8,12],主要是利用AAPT提取APK的元信息,同時(shí)結(jié)合應(yīng)用程序的性能數(shù)據(jù)、網(wǎng)絡(luò)流量、軟件行為等信息對(duì)應(yīng)用程序進(jìn)行靜態(tài)和動(dòng)態(tài)分析,提取特征集,利用常用的機(jī)器學(xué)習(xí)算法進(jìn)行模型構(gòu)建、訓(xùn)練、預(yù)測(cè)和評(píng)估,實(shí)驗(yàn)結(jié)果表明在檢測(cè)新軟件是否是惡意軟件,利用機(jī)器學(xué)習(xí)方法對(duì)軟件安全性和可靠性的檢測(cè)和預(yù)測(cè)相對(duì)于傳統(tǒng)的殺毒軟件更快速且更高效。
1.2.2 關(guān)于軟件缺陷的研究
軟件缺陷是計(jì)算機(jī)軟件或程序中存在的某種破壞正常運(yùn)行能力的問(wèn)題、錯(cuò)誤,或者隱藏的功能缺陷。在軟件缺陷方面,所閱讀的部分研究文獻(xiàn)針對(duì)缺陷預(yù)測(cè)、缺陷定位和缺陷分類進(jìn)行了研究。
(1)軟件缺陷預(yù)測(cè)
軟件缺陷預(yù)測(cè)是用已有的歷史數(shù)據(jù)來(lái)預(yù)測(cè)軟件中是否存在缺陷。研究文獻(xiàn)中主要以靜態(tài)分析為主,動(dòng)態(tài)分析為輔,利用機(jī)器學(xué)習(xí)算法進(jìn)行模型構(gòu)建、訓(xùn)練和評(píng)估,其中靜態(tài)分析中提取的特征主要包括:面向?qū)ο鬁?zhǔn)則、繼承準(zhǔn)則、代碼準(zhǔn)則等特征。由于靜態(tài)分析所得到的特征較多,且不同的特征對(duì)預(yù)測(cè)缺陷的權(quán)重不同,且分類類別不平衡,因此,在將這些特征進(jìn)行機(jī)器學(xué)習(xí)訓(xùn)練時(shí),需要對(duì)數(shù)據(jù)進(jìn)行清洗后才能用于學(xué)習(xí)和訓(xùn)練,以避免產(chǎn)生較大的誤差。隨著軟件測(cè)試領(lǐng)域逐漸發(fā)展,軟件缺陷數(shù)據(jù)的積累越來(lái)越多,充分利用已積累的缺陷數(shù)據(jù),可以減少開發(fā)人員和測(cè)試人員的工作量,提高軟件測(cè)試的效率。
(2)軟件缺陷定位
軟件缺陷定位在軟件測(cè)試領(lǐng)域是一個(gè)較為困難的問(wèn)題。目前,大多數(shù)的缺陷需要人為查找和排除,代碼走查和審查成為了查找和排除缺陷的重要手段和方法,但是此方法會(huì)耗費(fèi)大量的人力和時(shí)間,因此,如何快速有效地定位軟件缺陷成為了亟待解決的問(wèn)題。在研究文獻(xiàn)中,軟件缺陷定位的方法分為兩類,一類是Li等[1]基于模糊理論進(jìn)行定位,即把歷史數(shù)據(jù)中產(chǎn)生的軟件缺陷進(jìn)行抽象和概括;另一類類似于軟件缺陷預(yù)測(cè)的方法,Jonsson等[17]和Le等[19]以靜態(tài)分析進(jìn)行模型構(gòu)建、訓(xùn)練和評(píng)估。
(3)軟件缺陷分類
軟件缺陷分類主要是判別提交的缺陷是否是真正的缺陷。在研究文獻(xiàn)中,不同的學(xué)者對(duì)缺陷的提取特征不同。例如:在開源的項(xiàng)目中,Pandey等提取JIRA和BUGZILLA中的缺陷描述、發(fā)現(xiàn)缺陷的步驟、缺陷隸屬的項(xiàng)目等信息作為特征;在眾包測(cè)試中,Wang等提取交叉領(lǐng)域的歷史測(cè)試數(shù)據(jù)作為特征;在軟件開發(fā)項(xiàng)目中,提出軟件的靜態(tài)分析準(zhǔn)則作為特征。在缺陷管理平臺(tái)的眾多缺陷中,準(zhǔn)確地判斷缺陷可以較少開發(fā)人員和測(cè)試人員的工作量。但是,隨著眾包測(cè)試和開源工具的增多,檢測(cè)缺陷的重復(fù)提交還需更進(jìn)一步研究。
(4)缺陷復(fù)現(xiàn)
在缺陷管理平臺(tái)中,不同的缺陷復(fù)現(xiàn)的難易程度是不一樣的,如閃退或崩潰類型的缺陷。Gu等通過(guò)對(duì)軟件歷史版本的缺陷復(fù)現(xiàn)的路徑分析來(lái)預(yù)測(cè)新缺陷復(fù)現(xiàn)的難易程度,在缺陷修復(fù)的過(guò)程中,給開發(fā)人員提供幫助。
1.2.3 基于源碼的研究
基于源碼的研究主要是對(duì)源碼進(jìn)行靜態(tài)分析找出源碼中的缺陷。此研究主題最重要的是對(duì)源碼進(jìn)行抽象語(yǔ)法數(shù)、函數(shù)調(diào)用圖、符號(hào)執(zhí)行等方法的靜態(tài)代碼分析,提取有效的特征進(jìn)行模型構(gòu)建、訓(xùn)練和評(píng)估?;谠创a的研究大致可分為代碼重用、代碼相似度的檢測(cè)、代碼審查、緩沖區(qū)溢出檢測(cè)。代碼重用和代碼相似度檢測(cè)類似,即檢測(cè)源碼中的相似的代碼,對(duì)相似的代碼進(jìn)行封裝,減少開發(fā)的工作量和代碼維護(hù)成本。在有源碼的基礎(chǔ)下,對(duì)源碼進(jìn)行分析可為軟件質(zhì)量提供更好的保障。
1.2.4 其他
(1)測(cè)試用例優(yōu)化
回歸測(cè)試在整個(gè)軟件測(cè)試過(guò)程中占有較大的比重,軟件開發(fā)的各個(gè)階段都會(huì)進(jìn)行多次回歸測(cè)試。在回歸測(cè)試過(guò)程中,測(cè)試用例優(yōu)化是用來(lái)解決如何在巨大的測(cè)試用例庫(kù)中選擇較少的測(cè)試用例以達(dá)到較大的代碼覆蓋率和功能覆蓋率的問(wèn)題。在研究文獻(xiàn)中,不同的研究者對(duì)測(cè)試用例優(yōu)化問(wèn)題進(jìn)行了研究,以整個(gè)測(cè)試用例庫(kù)作為特征集,通過(guò)對(duì)用例自然語(yǔ)言處理、執(zhí)行用例后的代碼覆蓋率、變異得分等對(duì)測(cè)試用例庫(kù)進(jìn)行降維,去除冗余的測(cè)試用例,再將得到的數(shù)據(jù)進(jìn)行模型構(gòu)建、訓(xùn)練和評(píng)估。
(2)自動(dòng)化測(cè)試
自動(dòng)化測(cè)試在軟件測(cè)試過(guò)程中有極其重要的作用,自動(dòng)化測(cè)試能減少測(cè)試人員的工作量,提高測(cè)試效率。Rosenfeld等利用機(jī)器學(xué)習(xí)基于預(yù)定義的activity類別對(duì)activity進(jìn)行分類后,根據(jù)不同的分類進(jìn)行自動(dòng)化測(cè)試,以提高自動(dòng)化測(cè)試的缺陷檢測(cè)率。
(3)對(duì)測(cè)試質(zhì)量評(píng)價(jià)
評(píng)價(jià)軟件或項(xiàng)目測(cè)試質(zhì)量的好壞對(duì)提高測(cè)試效率和質(zhì)量有重要作用。Zhou等通過(guò)對(duì)軟件或項(xiàng)目涉及相關(guān)人員、測(cè)試流程、軟件或項(xiàng)目屬性等特征進(jìn)行模型選擇、構(gòu)建和評(píng)估,以此來(lái)評(píng)估軟件或項(xiàng)目的測(cè)試質(zhì)量。一個(gè)軟件或項(xiàng)目的測(cè)試質(zhì)量的影響因素是多方面且是不穩(wěn)定的,因此,文獻(xiàn)中實(shí)驗(yàn)結(jié)果還有待考證。
(4)軟件質(zhì)量
軟件測(cè)試最終目的是提高軟件的質(zhì)量。在研究文獻(xiàn)中,通過(guò)對(duì)歷史軟件版本的靜態(tài)分析和動(dòng)態(tài)分析,預(yù)測(cè)下一版本軟件的改變趨勢(shì),使得測(cè)試人員對(duì)軟件有更好的了解和測(cè)試,以此提高軟件的質(zhì)量。
(5)蛻變測(cè)試
蛻變測(cè)試是利用一些成功的測(cè)試用例來(lái)產(chǎn)生后續(xù)測(cè)試用例的一種技術(shù)。在研究文獻(xiàn)中,主要是利用機(jī)器學(xué)習(xí)技術(shù)去除冗余或相似的蛻變規(guī)則以產(chǎn)生有效的蛻變測(cè)試用例,達(dá)到找到軟件缺陷的目的。同時(shí),Nakajima等在測(cè)試機(jī)器學(xué)習(xí)程序和軟件方面基于蛻變測(cè)試為后面的研究者提供了一些思路。
機(jī)器學(xué)習(xí)的一般流程是數(shù)據(jù)收集、數(shù)據(jù)特征提取和選擇、不平衡數(shù)據(jù)的處理、模型選擇與訓(xùn)練、模型預(yù)測(cè)與評(píng)估。在軟件測(cè)試的過(guò)程中,會(huì)產(chǎn)生過(guò)程數(shù)據(jù),同時(shí),軟件本身所具有的屬性及軟件運(yùn)行過(guò)程中會(huì)產(chǎn)生大量的數(shù)據(jù),因此,可以利用機(jī)器學(xué)習(xí)技術(shù)對(duì)這些數(shù)據(jù)進(jìn)行處理。
通過(guò)對(duì)上述文獻(xiàn)的細(xì)致分析和研究,可以發(fā)現(xiàn)利用機(jī)器學(xué)習(xí)技術(shù)對(duì)軟件測(cè)試過(guò)程的貢獻(xiàn)和進(jìn)一步研究的可能性。
文獻(xiàn)研究發(fā)現(xiàn)數(shù)據(jù)來(lái)源分為兩類,分別是開源數(shù)據(jù)集和未開源數(shù)據(jù)集。部分文獻(xiàn)的實(shí)驗(yàn)數(shù)據(jù)來(lái)自多個(gè)數(shù)據(jù)集。開源數(shù)據(jù)集是可以免費(fèi)獲取到的,同時(shí),在開源數(shù)據(jù)集上的實(shí)驗(yàn)是可重復(fù)性的,使得文獻(xiàn)中的結(jié)果更具有可信度。未開源數(shù)據(jù)集主要是來(lái)自于商業(yè)項(xiàng)目的數(shù)據(jù)或作者提供的數(shù)據(jù)集,在此類數(shù)據(jù)集上的實(shí)驗(yàn)不可重復(fù),實(shí)驗(yàn)結(jié)果可信度不高。圖2開源數(shù)據(jù)集柱狀圖是對(duì)開源數(shù)據(jù)集的分類及每個(gè)分類的簡(jiǎn)要說(shuō)明。
圖2 開源數(shù)據(jù)集柱狀圖Fig.2 Histogram of open source datasets
(1)NASA
NASA數(shù)據(jù)集是由美國(guó)國(guó)家航空航天局測(cè)量程序所提供的,并且是公開的。在研究文獻(xiàn)中,相對(duì)于開源數(shù)據(jù)集,占比10%。
(2)PROMISE
PROMISE數(shù)據(jù)集是免費(fèi)且公開的,可以從PROMISE倉(cāng)庫(kù)中獲得。在研究文獻(xiàn)中,相對(duì)于開源數(shù)據(jù)集,占比大約13%(PROMISE倉(cāng)庫(kù):https://code.google.com/p/promisedata/)。
(3)常用軟件源碼
常用的軟件源碼數(shù)據(jù)集可從代碼倉(cāng)庫(kù)Github或常用軟件的官網(wǎng)上獲得,這些常用的軟件包括Apache,Eclipse,ANT,JEdit等。但是,需要獲得這些常用軟件源碼的測(cè)量數(shù)據(jù)集時(shí),需要有更高的權(quán)限。在研究文獻(xiàn)中,相對(duì)于開源數(shù)據(jù)集,占比大約23%。
(4)Android軟件
Android軟件數(shù)據(jù)集可從代碼倉(cāng)庫(kù)Github和Android開源項(xiàng)目(https://source.android.com/index.html)獲得。部分Android項(xiàng)目是比較常用且迭代版本較多的軟件,如:Email,SMS,Mozilla。在研究文獻(xiàn)中,相對(duì)于開源數(shù)據(jù)集,占比大約10%。
(5)Window軟件
使用Window軟件數(shù)據(jù)集的有2篇文獻(xiàn),且數(shù)據(jù)集都是用于惡意軟件研究的文獻(xiàn),占比大約3%。
(6)其他
在研究文獻(xiàn)中,其他類數(shù)據(jù)集使用較多。這些數(shù)據(jù)集都來(lái)自免費(fèi)且公開的數(shù)據(jù)源,如:
檢測(cè)僵尸網(wǎng)絡(luò)的數(shù)據(jù)集來(lái)自http:www.uvic.ca/engineering/ece/isot/datasets/index.p,部分檢測(cè)惡意軟件的數(shù)據(jù)集來(lái)自Defects4J Dataset,部分檢測(cè)惡意程序的數(shù)據(jù)集來(lái)自KDDCup99。在研究文獻(xiàn)中,相對(duì)于開源數(shù)據(jù)集,占比為40%。
綜上所述,研究文獻(xiàn)中大多數(shù)的實(shí)驗(yàn)數(shù)據(jù)集是開源的,因此,在實(shí)驗(yàn)中應(yīng)選擇開源且被實(shí)驗(yàn)頻率較多的數(shù)據(jù)集進(jìn)行研究和實(shí)驗(yàn),以避免偶然性誤差,確保實(shí)驗(yàn)的可重復(fù)性。
特征提取與選擇是機(jī)器學(xué)習(xí)流程中的重要階段,有效的特征提取和選擇技術(shù)能提高機(jī)器學(xué)習(xí)模型的預(yù)測(cè)精度。特征提取和選擇技術(shù)一般分為兩大類,一類是特征降維或特征提取,即組合不同的屬性得到新的屬性,改變?cè)继卣鲾?shù)據(jù)集的特征空間;一類是特征選擇,即從原始特征數(shù)據(jù)集中選擇出子集,沒(méi)有更改原始特征數(shù)據(jù)集的特征空間。其中特征選擇又分為三大類:一類是Filter方法,即對(duì)每一維特征賦予權(quán)重,然后再依據(jù)權(quán)重排序,取TopK維特征;一類是Wrapper方法,即將特征子集的選擇看作是一個(gè)優(yōu)化問(wèn)題;一類是Eembedded方法,即在模型確定的情況下學(xué)習(xí)出對(duì)提高模型準(zhǔn)確性最好的屬性。
表1詳細(xì)列出了80篇文獻(xiàn)中采取的特征提取和特征選擇技術(shù)統(tǒng)計(jì)。其中,在所研究的文獻(xiàn)中沒(méi)有使用Eembedded方法,部分文獻(xiàn)中使用了多種特征提取和特征選擇技術(shù)。
表1 特征提取和特征選擇技術(shù)統(tǒng)計(jì)Table 1 Technical statistics of feature extraction and feature selection
由表1可知,在研究文獻(xiàn)中,在特征降維和特征選擇的方法中,使用較多的是特征選擇方法,特征選擇中使用較多的方法是信息增益(IG)和基于相關(guān)性特征選擇(CFS)。
類別不平衡的處理方法大致可分為三類,一類是過(guò)采樣,即增加類別較少的樣本;一類是欠采樣,即減少類別較多的樣本;一類是再縮放,即為不同類別賦予不同權(quán)重的方式。部分文獻(xiàn)采用過(guò)采樣方式處理類別不平衡問(wèn)題,過(guò)采樣中最常用的工具是SMOTE;有的文獻(xiàn)采用欠采樣方式處理類別不平衡問(wèn)題;沒(méi)有文獻(xiàn)采用再縮放方式。除此之外,有的文獻(xiàn)在利用數(shù)據(jù)集進(jìn)行訓(xùn)練時(shí),選擇的是類別相對(duì)平衡的數(shù)據(jù)集。其余研究文獻(xiàn)未進(jìn)行類別不平衡處理或文獻(xiàn)中未提及是否進(jìn)行類別不平衡處理。
機(jī)器學(xué)習(xí)算法可分為監(jiān)督學(xué)習(xí)、半監(jiān)督學(xué)習(xí)和無(wú)監(jiān)督學(xué)習(xí),不同的場(chǎng)景需要使用不同類別的方法。表2詳細(xì)列出了機(jī)器學(xué)習(xí)算法以及所研究文獻(xiàn)在軟件測(cè)試領(lǐng)域中所用到的機(jī)器學(xué)習(xí)算法的對(duì)比信息。其中,“百分比1”表示涉及到此算法的文獻(xiàn)數(shù)/涉及到機(jī)器學(xué)習(xí)算法每個(gè)分類中總數(shù),“百分比2”表示涉及到此算法的文獻(xiàn)數(shù)/所有機(jī)器學(xué)習(xí)算法分類的總數(shù)。
表2 機(jī)器學(xué)習(xí)算法詳細(xì)信息Table 2 Algorithm details for machine learning
由表2可知,從機(jī)器學(xué)習(xí)算法分類上看,在統(tǒng)計(jì)分類中使用較多的算法是邏輯回歸(LR)和樸素貝葉斯(NB);在神經(jīng)網(wǎng)絡(luò)中使用最多的是多層感知器(MLP);在基于支持向量的方法中使用最多的是支持向量機(jī)(SVM);在決策樹的方法中使用最多的是C4.5;在集成學(xué)習(xí)中使用最多的是隨機(jī)森林(RF);在混雜學(xué)習(xí)中使用最多的是K近鄰(KNN)。從整體上看,在研究文獻(xiàn)中,使用最多的機(jī)器學(xué)習(xí)算法是基于支持向量算法中支持向量機(jī)(SVM),隨后是集成學(xué)習(xí)中的隨機(jī)森林算法(RF),神經(jīng)網(wǎng)絡(luò)中的多層感知器(MLP)與隨機(jī)森林(RF)使用的百分比差別不大。支持向量機(jī)(SVM)、邏輯回歸(LR)、C4.5,樸素貝葉斯(NB)和隨機(jī)森林(RF)在數(shù)據(jù)樣本較少時(shí)也能具有較好的泛化能力,但是當(dāng)數(shù)據(jù)樣本過(guò)大時(shí),訓(xùn)練時(shí)長(zhǎng)會(huì)明顯增大。其中樸素貝葉斯(NB)可以較為容易地處理多分類問(wèn)題;隨機(jī)森林(RF)可應(yīng)用在大部分分類器上,無(wú)需參數(shù)調(diào)整,但是對(duì)離群點(diǎn)較為敏感。神經(jīng)網(wǎng)絡(luò)算法雖然能較好擬合數(shù)據(jù),但是易造成過(guò)學(xué)習(xí)、欠學(xué)習(xí)或局部收斂問(wèn)題。
評(píng)估準(zhǔn)則是用來(lái)評(píng)估機(jī)器學(xué)習(xí)算法的預(yù)測(cè)精度和泛化能力。預(yù)測(cè)精度是指利用機(jī)器學(xué)習(xí)算法對(duì)某一數(shù)據(jù)集預(yù)測(cè)結(jié)果的正確率或錯(cuò)誤率,泛化能力是用來(lái)表征學(xué)習(xí)系統(tǒng)對(duì)新數(shù)據(jù)的適用性,提高泛化能力是機(jī)器學(xué)習(xí)的目標(biāo)。表3詳細(xì)描述了軟件測(cè)試領(lǐng)域中對(duì)所用到機(jī)器學(xué)習(xí)技術(shù)的性能評(píng)估準(zhǔn)則。
表3 性能評(píng)估準(zhǔn)則使用總結(jié)Table 3 Summary of performance evaluation criteria
由表3可知,在研究文獻(xiàn)中,在評(píng)估機(jī)器學(xué)習(xí)算法的預(yù)測(cè)精度方面使用較多的是Accuracy,Precision,Recall;在評(píng)估機(jī)器學(xué)習(xí)算法的泛化能力方面使用較多的是F-measure及AUC。部分文獻(xiàn)對(duì)機(jī)器學(xué)習(xí)算法的訓(xùn)練和預(yù)測(cè)所耗費(fèi)的時(shí)間進(jìn)行了評(píng)估,以證明利用機(jī)器學(xué)習(xí)算法在解決軟件測(cè)試問(wèn)題方面的可行性。
由于作者搜索的側(cè)重點(diǎn)不同,因此可能有少數(shù)利用機(jī)器學(xué)習(xí)技術(shù)在軟件測(cè)試領(lǐng)域的相關(guān)文獻(xiàn)被遺漏,但是,從本文對(duì)機(jī)器學(xué)習(xí)技術(shù)在軟件測(cè)試領(lǐng)域的應(yīng)用總結(jié)來(lái)看,本文仍可反映機(jī)器學(xué)習(xí)技術(shù)在軟件測(cè)試領(lǐng)域的應(yīng)用趨勢(shì)情況。
本文總結(jié)了近幾年研究者利用機(jī)器學(xué)習(xí)在軟件測(cè)試領(lǐng)域的研究和應(yīng)用進(jìn)展,同時(shí),對(duì)基于機(jī)器學(xué)習(xí)在軟件測(cè)試領(lǐng)域的研究進(jìn)行了分類。根據(jù)本文對(duì)80余篇文獻(xiàn)的總結(jié)與概述,目前機(jī)器學(xué)習(xí)技術(shù)在軟件測(cè)試領(lǐng)域的研究熱點(diǎn)主要是關(guān)于軟件安全可靠性的研究和關(guān)于軟件缺陷的研究,其中在關(guān)于軟件缺陷的研究中,又以軟件缺陷預(yù)測(cè)為主。通過(guò)對(duì)機(jī)器學(xué)習(xí)在軟件測(cè)試領(lǐng)域的主要技術(shù)的分析和討論,發(fā)現(xiàn)在特征提取、選擇技術(shù)和機(jī)器學(xué)習(xí)算法等方面仍存在問(wèn)題,因此,在未來(lái)的工作中,應(yīng)著重關(guān)注如何優(yōu)化特征提取、選擇技術(shù)和機(jī)器學(xué)習(xí)算法以提高預(yù)測(cè)的精度。