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

        ?

        結(jié)合多元度量指標(biāo)軟件缺陷預(yù)測研究進(jìn)展

        2021-03-09 16:40:58楊豐玉黃雅璇周世健
        計算機(jī)工程與應(yīng)用 2021年5期
        關(guān)鍵詞:源代碼度量語義

        楊豐玉,黃雅璇,周世健,鄭 巍

        1.南昌航空大學(xué) 軟件學(xué)院,南昌330063

        2.南昌航空大學(xué) 軟件測評中心,南昌330063

        軟件缺陷是指軟件產(chǎn)品的結(jié)果不符合軟件要求或最終用戶期望。它通常會以非預(yù)期的方式產(chǎn)生不正確或意外的結(jié)果和行為。軟件日益增加的復(fù)雜性和依賴性增加了軟件高質(zhì)量、低成本和可維護(hù)的難度,以及創(chuàng)建軟件缺陷的可能性。軟件缺陷預(yù)測[1]是在測試之前識別出易出錯的樣本,達(dá)到提高軟件質(zhì)量的目的,它能自動檢測出最可能出現(xiàn)錯誤的代碼區(qū)域中的潛在缺陷,有效地優(yōu)化有限資源的分配以進(jìn)行測試和維護(hù)。

        缺陷預(yù)測在軟件質(zhì)量保證中起著重要作用,是近年軟件測試領(lǐng)域的研究重點(diǎn)之一。軟件缺陷預(yù)測包括兩個階段[2]:從源文件中提取度量指標(biāo),使用各種機(jī)器學(xué)習(xí)算法構(gòu)建缺陷預(yù)測模型。首先從軟件歷史倉庫中創(chuàng)建數(shù)據(jù)樣本,根據(jù)樣本是否包含缺陷,可以將其標(biāo)記為有缺陷或無缺陷。然后,用機(jī)器學(xué)習(xí)算法構(gòu)建缺陷預(yù)測模型。最后,預(yù)測測試樣本是否有缺陷。利用預(yù)測模型,開發(fā)人員可以有效地在缺陷樣本上分配可用的測試資源,以便在開發(fā)生命周期的早期階段提高軟件質(zhì)量。如圖1所示。

        圖1 軟件缺陷預(yù)測過程

        其中,軟件歷史倉庫包含版本控制系統(tǒng)和缺陷跟蹤系統(tǒng),版本控制系統(tǒng)包含源代碼和文件變更信息,缺陷跟蹤系統(tǒng)包含缺陷信息。軟件歷史倉庫中每個樣本的粒度包含方法、類、文件、變更和包級別等,根據(jù)預(yù)測粒度,每個樣本可以表示為一個方法、一個類、一個源代碼文件、一個程序包或一個代碼更改。一個樣本通常包含許多缺陷預(yù)測度量指標(biāo),度量指標(biāo)表示軟件及其開發(fā)過程的復(fù)雜性。

        由于度量指標(biāo)的質(zhì)量會直接影響缺陷預(yù)測的效率和準(zhǔn)確性,現(xiàn)如今提取度量指標(biāo)的方法主要分為兩個方面:一方面手動設(shè)計新的判別度量指標(biāo)或組合度量指標(biāo),另一方面使用深度學(xué)習(xí)挖掘源代碼中復(fù)雜的非線性特征,這些特征可以很好地表達(dá)源代碼的語義和結(jié)構(gòu)。

        目前已有一些研究人員從不同方面對缺陷預(yù)測的相關(guān)研究工作進(jìn)行梳理和歸納[3-7],李勇等人[4]從數(shù)據(jù)驅(qū)動的角度對基于版本內(nèi)數(shù)據(jù)、跨版本數(shù)據(jù)和跨項目數(shù)據(jù)實現(xiàn)缺陷預(yù)測進(jìn)行分類歸納,陳翔等人[3,5]對靜態(tài)軟件缺陷預(yù)測方法和跨項目軟件缺陷預(yù)測進(jìn)行歸納和分析,蔡亮等人[6]從數(shù)據(jù)標(biāo)注、特征提取、模型構(gòu)建和模型評估等人方面對即時軟件缺陷預(yù)測進(jìn)行梳理歸納,宮麗娜等人[7]從數(shù)據(jù)集、構(gòu)建方法、評價指標(biāo)等多個角度對軟件缺陷預(yù)測進(jìn)行全面總結(jié)。

        與此不同的是,本文側(cè)重度量指標(biāo)的選擇,對多元度量指標(biāo)缺陷預(yù)測已有研究進(jìn)行歸納總結(jié),并總結(jié)了當(dāng)前存在的主要問題和未來發(fā)展方向。主要通過IEEE Xplore Digital Library、ACM Digital Library、Springer Link online Library、Elsevier ScienceDirect及CNKI等在線數(shù)據(jù)庫進(jìn)行檢索,檢索關(guān)鍵詞主要包括software defect prediction和software fault prediction等,最終選出與該研究問題直接相關(guān)的論文共73篇(截止到2020年10月)。

        1 基于傳統(tǒng)度量指標(biāo)的缺陷預(yù)測

        1.1 傳統(tǒng)度量指標(biāo)

        軟件度量指標(biāo)是影響缺陷預(yù)測質(zhì)量的核心因素,若設(shè)計與缺陷強(qiáng)相關(guān)性的度量指標(biāo)將很大幅度地提高缺陷預(yù)測的準(zhǔn)確度。源代碼是一種特殊的形式語言,包含豐富的語義和結(jié)構(gòu)信息,根據(jù)源代碼信息和軟件開發(fā)過程中的復(fù)雜性,現(xiàn)有的度量指標(biāo)分為代碼度量和過程度量[8]。代碼度量是直接收集現(xiàn)有源代碼,主要度量源代碼的代碼規(guī)模和復(fù)雜性等屬性,具有越高復(fù)雜度的軟件模塊更容易出現(xiàn)缺陷。從存儲在版本控制系統(tǒng)和缺陷跟蹤系統(tǒng)的歷史信息中提取的信息稱為過程度量,這些度量量化了隨著時間變化的軟件開發(fā)過程,如源代碼變更、代碼更改的數(shù)量、開發(fā)人員信息等。表1列出了常見的用于軟件缺陷預(yù)測的代碼度量和過程度量。

        表1 常見的傳統(tǒng)度量指標(biāo)

        1.1.1 傳統(tǒng)代碼度量

        常用的傳統(tǒng)度量指標(biāo)有代碼行(LOC)[9],基于運(yùn)算符和操作數(shù)的Halstead度量[10],基于依賴性的McCabe度量[11],面向?qū)ο蟪绦虻腃K度量[12],基于多態(tài)性因子、耦合因子的MOOD度量[13]和代碼氣味度量[14]。除此之外,Aman等人[15]證明了注釋行也能作為分析模塊缺陷的度量指標(biāo)。Majd等人[16]引入了32種新的語句級別的代碼度量指標(biāo),該預(yù)測模型可以預(yù)測某條語句可能存在多少缺陷。

        但是,并非所有的傳統(tǒng)代碼度量都對缺陷預(yù)測有利,冗余和無關(guān)度量會增加模型構(gòu)建時間,甚至降低模型性能,如何選擇合適的指標(biāo)是問題的關(guān)鍵。研究人員已嘗試用特征選擇來解決該問題,特征選擇旨在選擇特征子集來替換原始特征集[17],此特征子集能更有效地區(qū)分軟件模塊的類別標(biāo)簽。由于存在多種特征選擇方法,比較不同特征選擇方法的有效性變得至關(guān)重要。Chen等人[18]基于搜索的軟件工程的思想,將特征選擇形式化為一個多目標(biāo)問題并進(jìn)行多目標(biāo)優(yōu)化。他們考慮了兩個目標(biāo),一個是盡可能少地選擇特征,另一個是盡可能提高缺陷預(yù)測模型的性能。Xu等人[19]對32種不同的特征選擇方法進(jìn)行了大規(guī)模的實驗,最后確定出一組優(yōu)秀的特征選擇方法。隨后,他們提出了一種稱為KPWE的缺陷預(yù)測框架[20],該框架結(jié)合了基于核函數(shù)的主成分分析(Kernel Principal Component Analysis,KPCA)和加權(quán)極限學(xué)習(xí)機(jī)算法(Weighted Extreme Learning Machine,WELM)。首先,KPWE利用KPCA技術(shù)的非線性映射將原始數(shù)據(jù)投影到潛在特征空間,在空間中映射的特征可以很好地表示原始特征。其次,通過映射特性,KPWE應(yīng)用WELM來構(gòu)建一個高效且有效的缺陷預(yù)測模型,該模型可以處理不平衡的缺陷數(shù)據(jù)。

        1.1.2傳統(tǒng)過程度量

        近年來,研究者提出了許多代表性過程度量,如相對代碼更改攪動指標(biāo)[21]、開發(fā)者網(wǎng)絡(luò)和社交網(wǎng)絡(luò)指標(biāo)[22]、依賴圖指標(biāo)[23]和組織結(jié)構(gòu)指標(biāo)[24]等。其中,研究工作集中在如何利用軟件模塊之間的依賴關(guān)系,構(gòu)建網(wǎng)絡(luò)度量指標(biāo)[22-23,25-26]。

        一個軟件系統(tǒng)包括許多實體和元素,例如類、函數(shù)和變量。因此,如果將軟件系統(tǒng)的元素視為節(jié)點(diǎn),將關(guān)系視為網(wǎng)絡(luò)系統(tǒng)的邊緣,就可以將其轉(zhuǎn)換為網(wǎng)絡(luò)系統(tǒng)。許多軟件網(wǎng)絡(luò)的拓?fù)涮卣髋c缺陷密切相關(guān),可以用作軟件缺陷預(yù)測的指標(biāo)。例如,Zimmermann等人[23]基于Windows Server 2003生成了模塊依賴關(guān)系圖并對該圖進(jìn)行了網(wǎng)絡(luò)分析。該研究定義了局部、全局和中心網(wǎng)絡(luò)指標(biāo),并表明依賴圖上的網(wǎng)絡(luò)度量指標(biāo)可用于預(yù)測缺陷數(shù)量。實驗表明,網(wǎng)絡(luò)度量指標(biāo)在預(yù)測關(guān)鍵二進(jìn)制文件和缺陷方面比復(fù)雜性指標(biāo)更好。隨后,Premraj等人[27]復(fù)制了Zimmermann等人[23]的實驗,揭示在代價感知和CPDP方面,網(wǎng)絡(luò)度量指標(biāo)并不優(yōu)于代碼度量。因此,Ma等人[28]對11個具有不同規(guī)模、編程語言和應(yīng)用程序域的開源項目的多個版本進(jìn)行研究,與Premraj等人[27]不同的是,他們發(fā)現(xiàn)大多數(shù)網(wǎng)絡(luò)度量指標(biāo)都與缺陷傾向顯著正相關(guān),并且網(wǎng)絡(luò)度量指標(biāo)對于大型和復(fù)雜項目更為有效,而在小型項目中則不穩(wěn)定。

        Yang等人[29]基于軟件元素之間的關(guān)系及其演化關(guān)系建立了一個面向?qū)ο蟮能浖W(wǎng)絡(luò),并建立了許多度量指標(biāo)來宏觀地描述軟件模塊。此外,一些研究人員認(rèn)為可以將開發(fā)人員活動交互視為軟件網(wǎng)絡(luò),組成網(wǎng)絡(luò)度量。Meneely等人[22]使用一套新的基于開發(fā)人員社交網(wǎng)絡(luò)的開發(fā)人員指標(biāo),如果兩個開發(fā)人員在同一時間段內(nèi)處理相同的文件,則將其連接在一起。結(jié)果發(fā)現(xiàn)基于文件的開發(fā)人員指標(biāo)與軟件缺陷之間的顯著相關(guān)性。

        代碼度量和過程度量都能建立缺陷預(yù)測模型,但是,代碼度量和過程度量誰更優(yōu)存在不同爭論。Arisholm等人[30]分析了不同度量指標(biāo)對模型預(yù)測性能的影響,結(jié)果表明若選擇不同的性能評價指標(biāo),結(jié)果將相反。Moser等人[31]發(fā)現(xiàn)若使用Eclipse數(shù)據(jù)集,過程度量的效果比代碼度量更好。Rahman等人[32]從多個角度分析了代碼度量和過程度量的適用性和有效性,結(jié)果表明代碼度量有很高的滯后性,不如過程指標(biāo)有用。

        1.2 缺陷預(yù)測模型構(gòu)建

        根據(jù)數(shù)據(jù)來源不同,軟件缺陷預(yù)測可分為同項目缺陷預(yù)測(Within Project Defect Prediction,WPDP)和跨項目缺陷預(yù)測(Cross-Project Defect Prediction,CPDP)。WPDP指在帶標(biāo)簽的樣本上訓(xùn)練模型,并對同一項目中其余未標(biāo)記的樣本執(zhí)行預(yù)測。CPDP是指從其他項目中遷移出與目標(biāo)項目相關(guān)的知識進(jìn)行訓(xùn)練。目前最流行、應(yīng)用最廣泛的缺陷預(yù)測建模方法是機(jī)器學(xué)習(xí)方法[33],將基于傳統(tǒng)度量指標(biāo)的缺陷預(yù)測文獻(xiàn)大致分為以下四類:有監(jiān)督學(xué)習(xí)缺陷預(yù)測、半監(jiān)督學(xué)習(xí)缺陷預(yù)測、無監(jiān)督學(xué)習(xí)缺陷預(yù)測和跨項目缺陷預(yù)測。

        1.2.1 有監(jiān)督學(xué)習(xí)缺陷預(yù)測

        有監(jiān)督學(xué)習(xí)方法是指在項目中使用帶有標(biāo)簽的缺陷數(shù)據(jù)來訓(xùn)練分類或回歸模型,然后用該模型確定新軟件模塊的缺陷信息。如人工神經(jīng)網(wǎng)絡(luò)[34-35]、貝葉斯網(wǎng)絡(luò)[36]、支持向量機(jī)[37]、字典學(xué)習(xí)[38]、關(guān)聯(lián)規(guī)則[39]、樸素貝葉斯[40]、隨機(jī)森林[41]、遺傳算法[42]和集成學(xué)習(xí)[43]。

        Xu等人[44]提出一個基于深度神經(jīng)網(wǎng)絡(luò)(Deep Neural Networks,DNN)的學(xué)習(xí)深度特征表示框架,并向DNN引入了一種混合損失函數(shù)以學(xué)習(xí)更多具有區(qū)分度的特征,結(jié)果表明,在同項目缺陷預(yù)測可以獲得更好的性能。Yang等人[45]提出結(jié)合決策樹和集成學(xué)習(xí)的雙層集成學(xué)習(xí)方法來構(gòu)建即時缺陷預(yù)測模型。該方法在內(nèi)層使用基于決策樹的裝袋集成學(xué)習(xí)方法來構(gòu)建隨機(jī)森林模型,在外層使用隨機(jī)抽樣的方法來訓(xùn)練不同的隨機(jī)森林模型,然后按照堆疊方式來集成這些不同的隨機(jī)森林模型。Qiu等人[46]利用DNN從傳統(tǒng)特征中自動學(xué)習(xí)高維特征表示,然后用決策森林進(jìn)行分類,主要解決了以端到端方法結(jié)合神經(jīng)網(wǎng)絡(luò)和決策森林的問題。

        1.2.2 半監(jiān)督學(xué)習(xí)缺陷預(yù)測

        半監(jiān)督學(xué)習(xí)方法是通過在項目中僅使用少量標(biāo)簽的訓(xùn)練數(shù)據(jù)和大量沒有標(biāo)簽的數(shù)據(jù)來構(gòu)建缺陷預(yù)測模型。He等人[47]提出了半監(jiān)督學(xué)習(xí)方法extRF,該方法通過自我訓(xùn)練模式擴(kuò)展了有監(jiān)督的隨機(jī)森林算法。首先從數(shù)據(jù)集中抽取小部分?jǐn)?shù)據(jù)作為有標(biāo)簽的數(shù)據(jù)集,使用這小部分?jǐn)?shù)據(jù)集訓(xùn)練隨機(jī)森林分類器,根據(jù)訓(xùn)練好的分類器去預(yù)測未標(biāo)記的數(shù)據(jù)集,然后選擇最好的樣本加入到訓(xùn)練集中,并進(jìn)行訓(xùn)練初始模型,以此類推,最后形成精煉模型。Zhang等人[48]提出了一種基于非負(fù)稀疏圖的標(biāo)簽傳播方法進(jìn)行缺陷預(yù)測。首先對標(biāo)記的無缺陷實例重新采樣以生成平衡的訓(xùn)練數(shù)據(jù)集,并使用非負(fù)稀疏圖算法計算關(guān)系圖的權(quán)重以更好地學(xué)習(xí)數(shù)據(jù)關(guān)系。最后,在非負(fù)稀疏圖中,使用標(biāo)簽傳播算法來迭代預(yù)測未標(biāo)記的軟件模塊。Arshad等人[49]提出了一種基于半監(jiān)督的深度模糊C均值聚類的特征提取方法,該方法通過利用未標(biāo)記和標(biāo)記數(shù)據(jù)集的深度多聚類來生成新特征。Wu等人[50]介紹了半監(jiān)督詞典學(xué)習(xí)技術(shù)并提出了一種成本敏感的內(nèi)核化半監(jiān)督詞典學(xué)習(xí)(Cost-sensitive Kernelized Semisupervised Dictionary Learning,CKSDL)方法,CKSDL可以充分利用內(nèi)核空間中有限的標(biāo)記缺陷數(shù)據(jù)和大量未標(biāo)記數(shù)據(jù),在16個項目上進(jìn)行大量實驗,結(jié)果表明,該方法在WPDP和CPDP上都具有較好的預(yù)測性能。

        1.2.3 無監(jiān)督學(xué)習(xí)缺陷預(yù)測

        無監(jiān)督學(xué)習(xí)方法不需要有標(biāo)簽的訓(xùn)練數(shù)據(jù),它們直接利用項目中的未標(biāo)記數(shù)據(jù)來學(xué)習(xí)缺陷預(yù)測模型。對新項目或沒有足夠歷史數(shù)據(jù)的項目進(jìn)行缺陷預(yù)測是一個具有挑戰(zhàn)性的問題,為了解決這個問題,Nam和Kim[51]提出CLA和CLAMI方法,CLA方法對樣本進(jìn)行聚集和標(biāo)記,CLAMI方法在CLA基礎(chǔ)上還進(jìn)行了度量選擇和樣本選擇,其關(guān)鍵思想是通過度量值大小來標(biāo)記沒有標(biāo)簽的數(shù)據(jù)集。隨后,Yan等人[52]擴(kuò)展了CLAMI樣本聚集部分,在14個開源項目上評估了這種無監(jiān)督方法,結(jié)果表明,無監(jiān)督方法可以產(chǎn)生比有監(jiān)督方法更好的效果。由于頻譜聚類是基于連通性的無監(jiān)督聚類方法,不需要訓(xùn)練數(shù)據(jù),Zhang等人[53]利用頻譜聚類解決CPDP中源項目和目標(biāo)項目之間的異質(zhì)性,發(fā)現(xiàn)使用頻譜聚類的無監(jiān)督學(xué)習(xí)方法在CPDP和WPDP場景下都有可比較性。

        1.2.4 跨項目缺陷預(yù)測

        在實際情況下,目標(biāo)項目可能沒有任何標(biāo)記樣本的新項目,或者這個項目的標(biāo)記樣本較少,不足以訓(xùn)練高質(zhì)量的缺陷預(yù)測模型。如果直接使用從其他項目(即源項目)收集的帶標(biāo)簽數(shù)據(jù)并且不執(zhí)行任何數(shù)據(jù)預(yù)處理,訓(xùn)練后的模型的性能可能不佳,因為在大多數(shù)情況下,不同項目之間的數(shù)據(jù)分布無法滿足。因此,研究人員設(shè)計了不同的方法[54]來緩解跨項目情況下的數(shù)據(jù)分布差異。

        Pan等人[55]提出一種遷移成分分析(Transfer Component Analysis,TCA)方法,通過最小化數(shù)據(jù)分布之間的距離的同時保留住原始數(shù)據(jù)屬性,為源項目和目標(biāo)項目的數(shù)據(jù)發(fā)現(xiàn)新的特征表示,并根據(jù)新的特征表示對數(shù)據(jù)進(jìn)行轉(zhuǎn)換。結(jié)果顯示,TCA可以減小數(shù)據(jù)分布差異。然后,Nam等人[56]提出了TCA+,將源項目和目標(biāo)項目映射到共享的潛在空間中,使它們之間的數(shù)據(jù)分布距離很近,以提升跨項目缺陷預(yù)測的性能。

        常規(guī)的CPDP始終假定源項目和目標(biāo)項目使用相同的度量標(biāo)準(zhǔn)集。研究人員考慮到通用指標(biāo)的數(shù)量可能很小,或者在通用指標(biāo)中沒有高質(zhì)量的指標(biāo),在目標(biāo)項目中尋找源項目的相同指標(biāo)有一定難度等問題,他們提出異構(gòu)缺陷預(yù)測(Heterogeneous Defect Prediction,HDP)方法。He等人[57]提出一種特征集不平衡的CPDP(Cross-Project Defect Prediction Imbalanced Feature Sets,CPDP-IFS)方法,該方法提出了16個基于分布特征的新指標(biāo)。隨后,Nam等人[58]提出一種HDP方法,通過計算不同項目中源度量指標(biāo)和目標(biāo)度量指標(biāo)的匹配分?jǐn)?shù),刪除冗余無關(guān)的特征,找到相似性高的匹配度量指標(biāo)。實驗結(jié)果表明,使用該方法,即使項目使用不同的度量集,也有可能快速地遷移關(guān)于缺陷預(yù)測的信息??梢宰钚』错椖亢湍繕?biāo)項目之間的數(shù)據(jù)分布差異。

        Li等人[59]提出集成多核相關(guān)對齊(Ensemble Multiple Kernel Correlation Alignment,EMKCA)方法,通過多次內(nèi)核學(xué)習(xí)將源項目和目標(biāo)項目數(shù)據(jù)映射到高維內(nèi)核空間中,并利用內(nèi)核相關(guān)性對齊方法減少源項目和目標(biāo)項目的數(shù)據(jù)分布,最后集成了多個內(nèi)核分類器用來解決類不平衡問題。實驗結(jié)果顯示,該方法能更好地分離高維內(nèi)核空間中的有缺陷和無缺陷的模塊。隨后,他們提出一種代價敏感遷移核規(guī)范相關(guān)分析(Cost-sensitive Transfer Kernel Canonical Correlation Analysis,CTKCCA)方法[60],設(shè)計用于HDP的遷移核規(guī)范相關(guān)分析方法解決線性不可分問題,利用代價敏感緩解類不平衡問題。實驗表明,CTKCCA可以使非線性特征空間中的源項目和目標(biāo)項目的數(shù)據(jù)分布更加相似,且學(xué)習(xí)的特征具有良好的分離性。之后,他們擴(kuò)展了先前的研究[59],提出兩階段集成學(xué)習(xí)方法[61],該方法包含集成多內(nèi)核域自適應(yīng)(Ensemble Multi-kernel Domain Adaptation,EMDA)階段和集成數(shù)據(jù)采樣(Ensemble Data Sampling,EDS)階段。EMDA階段使用EMKCA預(yù)測器,EDS階段采用帶有替換技術(shù)的重采樣學(xué)習(xí)多個EMKCA預(yù)測器,并使用平均集成將它們組合在一起。

        1.3 數(shù)據(jù)質(zhì)量

        軟件缺陷預(yù)測的數(shù)據(jù)可以來源于開源項目和商業(yè)項目,現(xiàn)有的常用公開數(shù)據(jù)集包括PROMISE、NASA[62]、AEEEM[63]、SOFTLAB[64]和ReLink[65]等。有少量文獻(xiàn)和企業(yè)合作使用了商業(yè)項目[66]。

        數(shù)據(jù)質(zhì)量對缺陷預(yù)測性能有著巨大的影響,數(shù)據(jù)集中常包含一些降低預(yù)測模型性能的問題,如關(guān)鍵特征選擇和類不平衡等。

        1.3.1 數(shù)據(jù)集

        表2 匯總了研究文獻(xiàn)所用的數(shù)據(jù)集,以下對常用的數(shù)據(jù)集進(jìn)行簡短介紹。

        表2 數(shù)據(jù)集

        PROMISE:自2005年以來收集了一些開源項目和一些研究人員自發(fā)提供的項目的缺陷信息構(gòu)成PROMISE Repository。至今,該數(shù)據(jù)集包含38個開源項目,其中類級軟件度量指標(biāo)有20個。

        NASA:NASA MDP數(shù)據(jù)集包含13個NASA軟件項目的方法級軟件度量指標(biāo)。在這13個數(shù)據(jù)集中,一個用Java(KC3)編寫,其余使用C/C++。這些數(shù)據(jù)集中的缺陷率范圍從0.5%(PC2)到32.3%(MC2)。此外,這些數(shù)據(jù)集中的度量指標(biāo)并不完全相同,其中一些包含其他指標(biāo)。在該組數(shù)據(jù)集中,CM1、KC3、MC2、MW1、PC1、PC2、PC3和PC4有40個度量指標(biāo),MC1和PC5包含39個度量指標(biāo),JM1、KC1、KC2有21個度量指標(biāo)。

        AEEEM:AEEEM數(shù)據(jù)集包含五個開源項目(Eclipse JDT Core、Eclipse PDE UI、Equinox Framework、Mylyn、Apache Lucence)。每個數(shù)據(jù)集包含61個軟件度量指標(biāo),包括面向?qū)ο笾笜?biāo)和變更度量指標(biāo)。

        SOFTLAB:SOFTLAB由嵌入式控制器AR1、AR2、AR3、AR4、AR5和AR6項目組成,這些項目從PROMISE中獲得。每個數(shù)據(jù)集包含29個度量指標(biāo),其中包括Halstead和McCabe度量指標(biāo)。

        ReLink:ReLink中包含三個數(shù)據(jù)集Apache HTTP Server、OpenIntents Safe和ZXing。這些數(shù)據(jù)集包含26個軟件度量指標(biāo),并且手動驗證了缺陷標(biāo)簽。

        ELEF:ELEF數(shù)據(jù)集[67]一共有23個Java開源項目,包含了類級和方法級度量指標(biāo),其中類級度量指標(biāo)有39個,方法級度量指標(biāo)有26個。

        NetGen:NetGen是Herzig等人[68]收集的變更級數(shù)據(jù)集,此數(shù)據(jù)集由四個開源項目組成,總共有456個度量指標(biāo),包括與文件歷史相關(guān)的復(fù)雜性度量指標(biāo)、網(wǎng)絡(luò)度量指標(biāo)和變更度量指標(biāo)。

        1.3.2 關(guān)鍵特征選擇

        維數(shù)爆炸是影響缺陷預(yù)測模型性能的問題之一,特征選擇方法能夠從高維特征中選取具有代表性的特征子集,避免不相關(guān)或冗余特征帶來的分類干擾。為了解決這個問題,Jia[69]提出了一種結(jié)合了不同特征分類技術(shù)的混合特征選擇方法,該方法根據(jù)卡方、信息增益、Pearson相關(guān)系數(shù)對特征進(jìn)行排序并使用隨機(jī)森林構(gòu)建預(yù)測模型。Balogun等人[70]提出特征選擇的影響取決于搜索方法的選擇,使用四種不同的分類器對NASA的五個數(shù)據(jù)集進(jìn)行了四種篩選特征排序和十四種篩選特征子集選擇方法的評估。實驗表明,基于特征排序的缺陷預(yù)測在預(yù)測性能方面更加穩(wěn)定。

        Liu等人[71]提出一種基于特征聚類和特征排名的新特征選擇框架(Feature Clustering and Feature Ranking,F(xiàn)ECAR),根據(jù)特征間的相關(guān)性將原始特征劃分為k個聚類,使內(nèi)部聚類特征高度相關(guān)。然后,從每個聚類中選擇相關(guān)特征并按照相關(guān)性排序構(gòu)建最終特征子集,實驗表明,該方法有效地處理了冗余和不相關(guān)的特征。Xu等人[72]提出層次聚類的最大信息系數(shù)特征系數(shù)框架(Maximal Information Coefficient with Hierarchical Agglomerative Clustering,MICHAC),MICHAC利用最大信息系數(shù)對候選特征進(jìn)行排序,過濾不相關(guān)的特征;然后,采用分層聚類的方法對特征進(jìn)行分組,并從每一組特征中選取一個特征來去除冗余特征。

        1.3.3 類不平衡

        類不平衡問題是指至少一個類別比其他類別多。在軟件缺陷數(shù)據(jù)集中,缺陷模塊要少于非缺陷模塊,因此不平衡缺陷數(shù)據(jù)集上訓(xùn)練的模型通常偏向于非缺陷類模塊,而忽略了缺陷類模塊。類不平衡問題是軟件缺陷預(yù)測模型性能差的主要原因之一。隨機(jī)欠采樣和過采樣技術(shù)已被廣泛使用[73-74],但是它們的準(zhǔn)確性取決于現(xiàn)有數(shù)據(jù)和分類算法,為了普遍緩解類不平衡問題帶來的影響,Bennin等人[75]提出了一種基于染色體遺傳理論的新型高效合成過采樣方法(MAHAKIL),MAHAKIL將兩個不同的子類解釋為父類,并生成一個新實例,該實例從每個父類繼承不同特征并有助于數(shù)據(jù)分布內(nèi)的多樣性。為了同時解決類不平衡問題和支持向量機(jī)(Support Vector Machines,SVM)的參數(shù)選擇問題,Cai等人[76]提出了一種基于支持向量機(jī)的混合多目標(biāo)布谷鳥搜索欠采樣軟件缺陷預(yù)測模型,利用混合多目標(biāo)布谷鳥搜索與動態(tài)局部搜索來同步選擇無缺陷采樣并優(yōu)化SVM的參數(shù)。然后,該模型提出了三種欠采樣方法來選擇無缺陷的模塊。結(jié)果顯示,提出的方法對解決類不平衡問題生效。Huda等人[77]集成了隨機(jī)欠采樣和過采樣方法解決類不平衡問題,并在PROMISE數(shù)據(jù)集上驗證了所提出的方法的有效性。

        表3 列出了基于傳統(tǒng)度量指標(biāo)的研究文獻(xiàn)使用的度量指標(biāo)和數(shù)據(jù)集。

        2 基于語義結(jié)構(gòu)度量指標(biāo)的缺陷預(yù)測

        過去的幾十年已經(jīng)提出了多種研究人員手工設(shè)計的傳統(tǒng)度量指標(biāo)來區(qū)分有缺陷和無缺陷文件[78-79]。隨著研究的逐漸深入,研究人員發(fā)現(xiàn)傳統(tǒng)度量指標(biāo)主要關(guān)注代碼復(fù)雜性,通常無法區(qū)分具有不同語義的程序,不能完全捕獲源代碼中的復(fù)雜語義信息和度量指標(biāo)之間的潛在關(guān)聯(lián)[80-81]。

        近些年,深度學(xué)習(xí)方法已成功解決許多自然語言處理問題,包括解析、機(jī)器翻譯、情感分析和自動問答等。有學(xué)者[73]將深度學(xué)習(xí)引申到軟件缺陷預(yù)測中,開始嘗試?yán)蒙疃葘W(xué)習(xí)自動捕獲程序的語義表示和度量指標(biāo)之間的潛在關(guān)聯(lián)(即語法結(jié)構(gòu)),得到源代碼語義度量指標(biāo)和結(jié)構(gòu)度量指標(biāo)。從數(shù)據(jù)挖掘角度來看,軟件度量指標(biāo)可視為特征,傳統(tǒng)度量指標(biāo)可稱為傳統(tǒng)特征,語義度量指標(biāo)可稱為語義特征,結(jié)構(gòu)度量指標(biāo)可稱為結(jié)構(gòu)特征。

        2.1 語義度量指標(biāo)

        傳統(tǒng)代碼度量主要關(guān)注程序的統(tǒng)計特征,并假定有缺陷的軟件模塊和無缺陷的模塊具有可區(qū)分的統(tǒng)計特征和面向?qū)ο筇卣?。但是,研究者[80]通過對實際開發(fā)的軟件模塊觀察發(fā)現(xiàn),現(xiàn)有的傳統(tǒng)代碼度量指標(biāo)無法區(qū)分不同語義的模塊,即具有不同語義軟件模塊可能具有相似或相同的傳統(tǒng)代碼度量指標(biāo)。例如,在圖2中,有兩個Java文件,兩個文件都包含一個for語句和兩個函數(shù)調(diào)用。使用傳統(tǒng)度量來表示這兩個代碼段時,它們的特征向量是相同的,但是,語義信息明顯不同。如果隊列為空,調(diào)用remove()時,F(xiàn)ile2.java將遇到異常,需要建立更準(zhǔn)確的預(yù)測模型來區(qū)分此類語義差異的模塊。為了捕獲源代碼中的復(fù)雜語義信息和語法結(jié)構(gòu),Wang等人[80]首次提出利用深度學(xué)習(xí)從源代碼中提取語義特征。

        表3 研究文獻(xiàn)中度量指標(biāo)和數(shù)據(jù)集(一)

        圖2 例子

        2.1.1 從抽象語法樹捕獲語義度量

        目前,現(xiàn)有常用的提取方法是將源代碼轉(zhuǎn)化為抽象語法樹(Abstract Syntax Tree,AST)。AST是代碼在計算機(jī)內(nèi)存的一種樹狀數(shù)據(jù)結(jié)構(gòu),用于描述代碼上下文關(guān)系。AST可以有效地存儲語義信息和語法結(jié)構(gòu)[82],有助于準(zhǔn)確地分析和定位缺陷。利用深度學(xué)習(xí)來挖掘AST的隱藏特征可以生成更能體現(xiàn)代碼上下文信息的度量指標(biāo),從而更準(zhǔn)確地預(yù)測軟件缺陷。

        Wang等人[80]先將源代碼解析為AST,然后利用深度置信網(wǎng)絡(luò)(Deep Belief Network,DBN)從AST節(jié)點(diǎn)中提取token向量并生成語義特征。隨后,他們從源代碼變更中提取語義特征,對變更級的軟件缺陷預(yù)測進(jìn)行了擴(kuò)展[83]。Li等人[81]將傳統(tǒng)特征與卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Networks,CNN)學(xué)習(xí)的語義特征相結(jié)合,以構(gòu)建一個混合預(yù)測模型。為了更好地利用AST的樹結(jié)構(gòu)并在源代碼中反映語法和語義的多個層次,在記錄AST的聲明節(jié)點(diǎn)時,沒有記錄節(jié)點(diǎn)名稱,而是提取節(jié)點(diǎn)的值來構(gòu)建token向量。隨后,邱少健等人[84]采用三層卷積神經(jīng)網(wǎng)絡(luò)提取源代碼潛在語義特征,并用代價敏感對數(shù)據(jù)進(jìn)行處理解決了類不平衡問題。Pan等人[85]在此基礎(chǔ)上進(jìn)行了改進(jìn),將CNN模型的全連接層增加為四個,還添加了三個dropout層防止模型過擬合。結(jié)果表明,改進(jìn)的CNN模型在WPDP方面明顯優(yōu)于最新的機(jī)器學(xué)習(xí)模型。為了從程序中捕獲語義信息,Liang等人[86]構(gòu)建了一種基于長短期記憶網(wǎng)絡(luò)(Long Short Term Memory networks,LSTM)的缺陷預(yù)測框架,該框架采用了連續(xù)詞袋(Continuous Bag-Of-Words Model,CBOW)來學(xué)習(xí)程序AST的向量表示,其拋棄了傳統(tǒng)的機(jī)器學(xué)習(xí)模型,而是采用LSTM來構(gòu)建缺陷預(yù)測模型。

        程序中的上下文語義至關(guān)重要,但CNN無法捕獲長距離特征,F(xiàn)an等人[87]開始采用具有注意力機(jī)制的遞歸神經(jīng)網(wǎng)絡(luò)(Recurrent Neural Network,RNN)來區(qū)分關(guān)鍵語法結(jié)構(gòu)和語義特征。先從AST中提取的token向量中自動學(xué)習(xí)語義特征,再用注意力機(jī)制進(jìn)一步捕獲重要特征并賦予更高的權(quán)重,使訓(xùn)練更準(zhǔn)確。結(jié)果表明,缺陷預(yù)測模型性能得到了提升。與Liang等人[86]不同的是,Deng等人[88]并沒有選擇LSTM構(gòu)建缺陷預(yù)測模型,而是利用雙向長短期記憶網(wǎng)絡(luò)的長距離依賴特性更好地學(xué)習(xí)上下文語義特征。因為Transformer突出的并行計算能力,Zhang等人[89]嘗試使用Transformer捕獲向量中特定位置的關(guān)鍵特征。

        上述從AST節(jié)點(diǎn)中提取token向量過程中,通常選擇遍歷AST來進(jìn)行序列化,但這種方式會損失一定的語義信息。一些研究人員嘗試通過其他方法將AST序列化,從而捕獲更全面的語義特征。例如,F(xiàn)an等人[90]基于四個開源Android應(yīng)用程序,從AST中提取高頻關(guān)鍵字獲得基于規(guī)則的編程模式,使用DBN從編程模式中學(xué)習(xí)源代碼的內(nèi)部信息。實驗結(jié)果表明,該方法學(xué)習(xí)到的特征能比傳統(tǒng)特征預(yù)測更多缺陷。Dam等人[91]認(rèn)為遍歷AST沒有完全編碼代碼的語義和語法結(jié)構(gòu),提出了一個基于樹的長短期記憶網(wǎng)絡(luò)(TB-LSTM)模型來獲取整個AST的向量表示。為了避免AST序列化的損失,該模型直接使用樹形LSTM匹配AST表示,將每個AST節(jié)點(diǎn)都輸入LSTM單元,在Samsung項目和公共PROMISE數(shù)據(jù)集上的實驗結(jié)果證實了其有效性。Shi等人[92]認(rèn)為接近的源代碼之間存在很強(qiáng)的語義相關(guān)性,提出短路徑的概念來描述每個終端節(jié)點(diǎn)及其控制邏輯,并使用成對的短路徑描述代碼的語義信息,并通過注意力機(jī)制將它們?nèi)诤显谝黄?,在PROMISE數(shù)據(jù)集上進(jìn)行實驗表明,該方法比TB-LSTM具有更好的性能。Rahman等人[93]通過分析AST得到代碼配置文件,使用代碼配置文件作為語義特征代替?zhèn)鹘y(tǒng)度量指標(biāo)來改進(jìn)缺陷預(yù)測。在Eclipse數(shù)據(jù)集和Github缺陷數(shù)據(jù)庫進(jìn)行實驗,結(jié)果表明,在版本內(nèi)缺陷預(yù)測中該方法比傳統(tǒng)度量指標(biāo)更好,而在跨版本缺陷預(yù)測中表現(xiàn)不佳。

        考慮到細(xì)粒度級別的預(yù)測可能更能準(zhǔn)確定位預(yù)測的缺陷,Shippey等人[94]使用AST n-gram來識別有缺陷的Java代碼特征。將模塊中每個Java方法進(jìn)行AST序列化,再將方法序列按照字節(jié)進(jìn)行大小為N的滑動窗口操作,形成長度為N的字節(jié)片段序列,這個字節(jié)片段序列稱為AST n-gram。結(jié)果表明,AST n-gram在某些系統(tǒng)中與缺陷非常相關(guān),對預(yù)測模型影響很大,某些頻繁出現(xiàn)的AST n-gram意味著該方法包含缺陷的可能性比其他方法提高了三倍。曹靖[95]試圖考慮更細(xì)粒度的預(yù)測,他將代碼缺陷定位在代碼行,從AST中提取指定類的實例的API調(diào)用序列,預(yù)測API序列中的API誤用缺陷。

        2.1.2 其他方式捕獲語義度量

        一些研究者認(rèn)為,AST序列化不能完全表達(dá)源代碼語義,開始嘗試通過其他方式從源代碼中捕獲語義特征。Phan等人[96]認(rèn)為AST僅表示源代碼的抽象語法結(jié)構(gòu),不顯示程序的執(zhí)行過程,該方法通過編譯源代碼獲取匯編指令構(gòu)造控制流程圖(Control Flow Graph,CFG),然后利用基于多視圖多層有向圖的卷積神經(jīng)網(wǎng)絡(luò)在CFG上學(xué)習(xí)語義特征,結(jié)果表明與基于AST的語義特征相比,基于CFG的語義特征性能更好。Zhang等人[97]將交叉熵作為一種新的代碼度量引入缺陷預(yù)測中,該方法利用LSTM挖掘代碼語料庫,捕獲程序中常見模式和規(guī)律,然后將模型輸入到token序列的聯(lián)合概率分布中得到軟件模塊的交叉熵,實驗結(jié)果表明,交叉熵符合代碼自然性,對傳統(tǒng)代碼度量進(jìn)行很好的補(bǔ)充。隨后,在此基礎(chǔ)上,他們進(jìn)行了擴(kuò)展研究,提出了代碼抽象語法樹節(jié)點(diǎn)序列交叉熵(CE-AST)[98],結(jié)果表明,CE-AST具有更大的區(qū)分力。

        Scandariato等人[99]將Android源代碼中的Java文件看作文本,采用詞袋模型統(tǒng)計文件中相關(guān)詞的頻率,用符號特征生成缺陷特征向量。針對Android源代碼難以獲取的問題,Dong等人[100]從Android二進(jìn)制可執(zhí)行文件中提取符號特征和語義特征來構(gòu)建缺陷預(yù)測模型,結(jié)果表明,該方法在WPDP中的準(zhǔn)確率比CPDP更高。

        Okutan等人[101]從抄襲和克隆檢測技術(shù)中得到啟發(fā),從源代碼中學(xué)習(xí)到一種新的語義度量指標(biāo)。他們發(fā)現(xiàn)源文件的語法或語義相似度與其缺陷傾向性可能存在關(guān)聯(lián),基于這種假設(shè),他們?yōu)槊總€文件計算相似性度量指標(biāo)得到源文件之間的相似性,用這些相似性度量指標(biāo)來預(yù)測特定文件是否有缺陷。Huo等人[102]認(rèn)為注釋可以視為源代碼的另一個視圖,幫助生成語義特征,這些語義特征反映了用于識別缺陷模塊的代碼特征。但由于部分開發(fā)人員的習(xí)慣,有些項目的注釋很少,為了克服這個問題,他們構(gòu)建了一種基于注釋增強(qiáng)程序的卷積神經(jīng)網(wǎng)絡(luò)(CAP-CNN)的缺陷預(yù)測模型,該網(wǎng)絡(luò)可以在訓(xùn)練過程中自動編碼和吸收注釋信息以自動生成語義特征,實驗結(jié)果表明,注釋特征能夠提高缺陷預(yù)測性能。

        為了避免AST序列化過程中損失語義信息,Humphreys等人[103]直接將源代碼作為序列輸入到深度學(xué)習(xí)模型中,由于源代碼文件組成成千上萬個token,并且代碼區(qū)域之間的距離很長,因為需要能快速處理長距離依賴關(guān)系的深度學(xué)習(xí)模型,該研究使用transformer從長序列中提取語義特征并證明了模型的可解釋性。Miholca等人[104]提出一種將漸進(jìn)關(guān)系關(guān)聯(lián)規(guī)則與人工神經(jīng)網(wǎng)絡(luò)相結(jié)合的混合分類模型,該模型可以根據(jù)從源代碼中自動學(xué)習(xí)的語義特征來預(yù)測缺陷。

        2.1.3 基于CPDP的語義度量指標(biāo)

        在以前利用深度學(xué)習(xí)捕獲語義特征的研究中[80-81],沒有考慮項目之間語義特征分布差異的影響,因此,Lin等人[105]嘗試將從現(xiàn)有軟件項目獲取的語義表示遷移到新項目中,為了驗證方法的可行性,手動標(biāo)記了457個缺陷特征,并從6個開源項目中收集了30 000多個非缺陷特征。實驗結(jié)果證實,訓(xùn)練后的模型能跨多個項目進(jìn)行調(diào)整。Chen等人[106]設(shè)計了一種基于雙向長短期記憶網(wǎng)絡(luò)和注意力機(jī)制的CPDP方法,提出一種新的無監(jiān)督嵌入算法自動學(xué)習(xí)了從AST中提取的token向量的有意義表示,最后利用雙向長短期記憶網(wǎng)絡(luò)和注意力機(jī)制學(xué)習(xí)上下文語義特征。在不同的應(yīng)用程序域的10個開源項目中進(jìn)行實驗表明,該方法可以應(yīng)用在CPDP。

        為了最小化項目之間的分類誤差和分布差異,Qiu等人[107]將源和目標(biāo)項目特定數(shù)據(jù)的隱藏表示形式嵌入到再生內(nèi)核Hilbert空間中進(jìn)行分布匹配,然后將源文件解析的整數(shù)向量放入CNN中生成語義特征。Deng等人[108]探索了更合適CPDP的AST節(jié)點(diǎn)粒度并在CNN中添加多內(nèi)核匹配層以最小化源和目標(biāo)項目的數(shù)據(jù)分布差異。Sheng等人[109]提出了對抗判別卷積神經(jīng)網(wǎng)絡(luò),通過欺騙甄別器來學(xué)習(xí)目標(biāo)項目到源項目特征空間的判別映射。

        與Dam等人[91]類似的是,Cai等人[110]基于樹的嵌入,將AST節(jié)點(diǎn)編碼為向量并在再生內(nèi)核Hilbert空間中遷移不同項目的特征,其中還測量了AST之間的語義差距,最后將編碼后的AST饋入神經(jīng)網(wǎng)絡(luò)提取語義和結(jié)構(gòu)特征。

        2.2 結(jié)構(gòu)度量指標(biāo)

        若僅關(guān)注代碼度量,使用文件或類粒度的統(tǒng)計特征或語義特征,會忽略軟件模塊的宏觀完整性,破壞軟件模塊元素之間的相互影響。相比需要人工建立的傳統(tǒng)網(wǎng)絡(luò)度量指標(biāo),研究人員試圖使用網(wǎng)絡(luò)嵌入等方法對軟件系統(tǒng)網(wǎng)絡(luò)結(jié)構(gòu)進(jìn)行分析。

        網(wǎng)絡(luò)嵌入是將軟件網(wǎng)絡(luò)嵌入到低維空間,其中每個網(wǎng)絡(luò)節(jié)點(diǎn)都表示為低維向量,這種低維嵌入已經(jīng)解決了很多問題,例如節(jié)點(diǎn)分類、鏈路預(yù)測和個性化推薦。目前,大量的網(wǎng)絡(luò)嵌入算法已成功應(yīng)用于網(wǎng)絡(luò)表示學(xué)習(xí)中,包括DeepWalk[111]、Node2vec[112]和LINE[113]。這些算法對代碼文件之間依賴關(guān)系形成的軟件網(wǎng)絡(luò)進(jìn)行表示性學(xué)習(xí),提取軟件模塊的結(jié)構(gòu)特征進(jìn)行缺陷預(yù)測。

        與Meneely等人[22]的研究工作相似的是,Loyola等人[114]用開發(fā)人員活動數(shù)據(jù)構(gòu)建了依賴關(guān)系圖,但該研究沒有使用傳統(tǒng)網(wǎng)絡(luò)度量,而是將依賴關(guān)系圖中每個節(jié)點(diǎn)進(jìn)行截斷的隨機(jī)游走,從數(shù)據(jù)中自動學(xué)習(xí)表示。結(jié)果表明,數(shù)據(jù)的表示形式會極大地影響缺陷預(yù)測的性能。Qu等人[115]提出一種node2defect的方法,該方法先構(gòu)造了分析程序的類依賴網(wǎng)絡(luò)(Class Dependency Network,CDN),然后使用node2vec自動學(xué)習(xí)CDN的結(jié)構(gòu)特征。最后將該特征和傳統(tǒng)代碼度量結(jié)合形成新特征,實驗結(jié)果表明,node2defect方法可以顯著提高軟件缺陷的預(yù)測能力。

        與網(wǎng)絡(luò)嵌入不同的是,一些研究者試圖用其他方法對依賴關(guān)系圖進(jìn)行學(xué)習(xí),Qu等人[116]采用k-core算法分析CDN上的缺陷分布,他們發(fā)現(xiàn)具有越大k值的類,有更大幾率存在缺陷,根據(jù)結(jié)果對軟件模塊的所有類進(jìn)行排列能幫助測試人員更快速地找到缺陷。田永清[117]將系統(tǒng)依賴圖進(jìn)行程序切片,得到程序結(jié)構(gòu)的向量表示,然后利用門控循環(huán)單元神經(jīng)網(wǎng)絡(luò)提取網(wǎng)絡(luò)特征。

        一些研究者將語義度量指標(biāo)和結(jié)構(gòu)度量指標(biāo)混合使用。Meilong等人[118]用CNN從AST中自動學(xué)習(xí)語義特征,再基于軟件模塊之間的依賴關(guān)系構(gòu)建了網(wǎng)絡(luò)模型,并用node2vec進(jìn)行隨機(jī)游走得到結(jié)構(gòu)特征。最后將語義特征和結(jié)構(gòu)特征組合進(jìn)行缺陷預(yù)測,實證結(jié)果表明,語義特征和結(jié)構(gòu)特征的混合是目前軟件缺陷預(yù)測的首選。同樣,劉成斌等人[119]基于Apache的三個開源軟件項目將語義特征和結(jié)構(gòu)特征進(jìn)行混合預(yù)測,這兩項研究為多元度量指標(biāo)提供了有效的研究思路。

        2.3 缺陷預(yù)測模型構(gòu)建

        基于語義結(jié)構(gòu)度量指標(biāo)的缺陷預(yù)測的研究重點(diǎn)在提取更合適的度量,為了與傳統(tǒng)度量指標(biāo)進(jìn)行對比,研究人員對WPDP的模型構(gòu)建和數(shù)據(jù)質(zhì)量部分選擇和基于傳統(tǒng)度量指標(biāo)的缺陷預(yù)測保持一致,沒有改進(jìn)。

        綜上所述,研究人員對度量指標(biāo)的提取進(jìn)行了大量研究,主要包括傳統(tǒng)代碼度量、傳統(tǒng)網(wǎng)絡(luò)度量、語義度量、結(jié)構(gòu)度量和其他過程度量。其中,這些度量指標(biāo)體現(xiàn)了軟件模塊不同角度的信息,從現(xiàn)有研究來看,混合多元度量指標(biāo)能使缺陷預(yù)測模型最大程度上精確。表4列出了基于語義結(jié)構(gòu)度量指標(biāo)的研究文獻(xiàn)使用的度量指標(biāo)和數(shù)據(jù)集。

        表4 研究文獻(xiàn)中度量指標(biāo)和數(shù)據(jù)集(二)

        3 評價指標(biāo)

        為了判斷構(gòu)建的缺陷預(yù)測模型的性能,研究人員提出了多種評價指標(biāo),但在實際開發(fā)過程中,沒有充足的時間和資源審查代碼。為了將精力集中在最有可能發(fā)生缺陷的模塊上,開發(fā)人員提出了代價感知(effort-aware)指標(biāo)。而相對地,機(jī)器學(xué)習(xí)領(lǐng)域常用來缺陷預(yù)測模型的指標(biāo)稱為非代價感知(non-effort-aware)指標(biāo)。表5列出了現(xiàn)有研究中使用最廣泛的評價指標(biāo)。

        3.1 非代價感知指標(biāo)

        在非代價感知情況下,最常用的模型性能評價指標(biāo)是查準(zhǔn)率(Precision)、查全率(Recall)、F-measure和AUC[3,7]。

        其中,真正例(TP)表示有缺陷模塊被分類器正確標(biāo)記為有缺陷的數(shù)量,真負(fù)例(TN)表示無缺陷模塊被正確標(biāo)記為無缺陷的數(shù)量,假正例(FP)是指無缺陷模塊被錯誤地標(biāo)記為有缺陷的數(shù)量,假負(fù)例(FN)是指有缺陷模塊被錯誤地標(biāo)記為無缺陷的數(shù)量。更高的查準(zhǔn)率可以讓開發(fā)人員不將調(diào)試工作浪費(fèi)在無缺陷代碼上,查全率越高說明發(fā)現(xiàn)的缺陷越多。F-measure是綜合調(diào)和查準(zhǔn)率和查全率的指標(biāo),用來衡量缺陷預(yù)測的性能。

        AUC是ROC曲線下面積,ROC是一個x軸為假正例率,y軸為真正例率的二維曲線,AUC越高,模型性能越好。

        表5 評價指標(biāo)

        準(zhǔn)確率(Accuracy)表示正確預(yù)測實例的百分比。

        馬修斯相關(guān)系數(shù)(MCC)通過考慮所有真假的有缺陷數(shù)據(jù)和無缺陷數(shù)據(jù)來衡量預(yù)測結(jié)果和真實結(jié)果之間的關(guān)系。返回值是[?1,1],其中1表示完美正相關(guān),?1表示完美負(fù)相關(guān)。

        3.2 代價感知指標(biāo)

        在代價感知情況下,開發(fā)人員通常通過檢查代碼的前20%行來識別缺陷百分比,性能評價指標(biāo)是PofB20[26]。首先根據(jù)缺陷預(yù)測模型為每個實例生成的置信度,并使用置信度對測試數(shù)據(jù)集中的所有實例進(jìn)行排序,置信度是指被預(yù)測為缺陷的概率。然后,模擬一個開發(fā)人員來檢查這些潛在的缺陷實例,并累積檢查的代碼行和發(fā)現(xiàn)的缺陷數(shù)量。當(dāng)檢查了測試數(shù)據(jù)中的LOC的20%,并且已發(fā)現(xiàn)錯誤的百分比稱為PofB20分?jǐn)?shù)時,該過程將終止。PofB20越高表示在檢查有限代碼行時,開發(fā)人員能檢測到的缺陷越多。

        另一個廣泛使用的代價感知指標(biāo)是Popt,被定義為1-Δopt,其中Δopt是預(yù)測模型和最優(yōu)模型之間的面積,用來描述兩者的偏差,Popt越大預(yù)測模型越接近最優(yōu)模型,標(biāo)準(zhǔn)化的Popt定義如下:

        其中,Area(optimal)、Area(pre_model)、Area(worst)分別表示最優(yōu)模型、預(yù)測模型和最差模型對應(yīng)曲線下的面積。

        3.3 統(tǒng)計顯著分析方法

        統(tǒng)計顯著分析方法可以幫助分析兩個方法是否有統(tǒng)計學(xué)上的顯著性差異。

        (1)Wilcoxon signed-rank test[120]是一種非參數(shù)統(tǒng)計假設(shè)測試,用來比較兩個相關(guān)樣本,匹配樣本,或?qū)蝹€樣本重復(fù)測量,可用于確定是否從具有相同分布的總體中選擇了兩個相關(guān)樣本。該測試不需要基礎(chǔ)數(shù)據(jù)遵循任何分布,另外,它可以應(yīng)用于數(shù)據(jù)對,并且能夠?qū)⒉钪蹬c零進(jìn)行比較。在95%置信水平下,p值小于0.05表示受試者之間的差異具有統(tǒng)計學(xué)意義,而p值大于或等于0.05則表明差異在統(tǒng)計學(xué)上不顯著。

        (2)Scott-Knott ESD test[121]是一種使用層次聚類算法進(jìn)行統(tǒng)計分析的多重比較技術(shù)。本測試將方法進(jìn)行排序和聚類,分為差異顯著的組,同一組的方法無顯著差異,不同組的方法有顯著差異。該測試的優(yōu)點(diǎn)是,它產(chǎn)生完全不同的組,沒有任何重疊。

        (4)Friedman test[123]是一種非參數(shù)統(tǒng)計測試,它是基于績效值而不是實際值的排序,測試統(tǒng)計量由下式給出:

        其中,n表示數(shù)據(jù)集的項目總數(shù),k表示特征選擇方法的總數(shù)表示第i個方法在第j個項目排名。

        3.4 其他指標(biāo)

        (1)CEπ成本效益[124]是如何有效地使用并行計算來解決特定問題的指標(biāo)。標(biāo)準(zhǔn)化的成本效益指標(biāo)為:

        (2)Win/Tie/Loss用于不同實驗設(shè)置之間的性能比較,當(dāng)對目標(biāo)項目數(shù)據(jù)集重復(fù)實驗1 000次時,若模型的性能優(yōu)于相應(yīng)基線結(jié)果,標(biāo)記為“Win”,當(dāng)基線結(jié)果更好時,標(biāo)記為“Loss”,如果模型和基線之間沒有差異,標(biāo)記為“Tie”,根據(jù)Win/Tie/Loss評估的結(jié)果,可以改進(jìn)模型。

        4 結(jié)束語

        準(zhǔn)確的軟件缺陷預(yù)測保證了軟件可靠性、提高了軟件測試效率,本文從多元度量指標(biāo)角度總結(jié)了當(dāng)前軟件缺陷預(yù)測的相關(guān)工作,并列舉了部分具有代表性的研究文獻(xiàn)。盡管在軟件缺陷預(yù)測方面已經(jīng)進(jìn)行了很多研究,仍存在許多潛在的挑戰(zhàn)。在這里,對未來研究工作進(jìn)行展望。

        (1)預(yù)測粒度的研究展望

        現(xiàn)在的研究粒度大部分是文件級,由于文件的長度,開發(fā)人員需要很長時間才能找到缺陷,如果發(fā)生誤報,會過多地浪費(fèi)資源,所以需要縮小預(yù)測的缺陷的范圍。更細(xì)粒度的預(yù)測可以為開發(fā)人員提供更少的代碼行,其中方法級缺陷預(yù)測有助于預(yù)測軟件項目中帶有缺陷的方法,但是構(gòu)建方法級缺陷預(yù)測模型仍然是一個挑戰(zhàn)。

        (2)傳統(tǒng)軟件度量指標(biāo)的研究展望

        過去幾十年,研究人員提出了大量的傳統(tǒng)代碼度量和過程度量,但是冗余和無關(guān)度量指標(biāo)降低模型性能,為了使模型更精確,他們將多種度量指標(biāo)組合并試圖從軟件歷史倉庫中提取更能體現(xiàn)缺陷的新的度量指標(biāo)。如何提出合適的指標(biāo)仍需要進(jìn)一步研究。

        (3)基于深度學(xué)習(xí)的軟件度量指標(biāo)的研究展望

        近年來,語義度量代替了傳統(tǒng)代碼度量,許多研究表明語義度量構(gòu)建的缺陷預(yù)測模型比傳統(tǒng)代碼度量預(yù)測得更準(zhǔn)確。用深度學(xué)習(xí)直接從源代碼中學(xué)習(xí)語義表示過程,為了將源代碼饋入深度學(xué)習(xí)模型,通常會損失一些語義信息,哪種方式可以最小限度地減少損失需要進(jìn)一步研究。

        (4)跨項目軟件缺陷預(yù)測度量指標(biāo)的研究展望

        對于新項目或缺少足夠歷史數(shù)據(jù)的項目,研究和使用語義度量來預(yù)測缺陷非常有意義。由于源項目和目標(biāo)項目之間存在不同的數(shù)據(jù)分布,因此難以建立可實現(xiàn)令人滿意性能的良好缺陷預(yù)測模型。此外,CPDP方面的語義度量提取只是簡單地遷移了WPDP的方法,沒有針對數(shù)據(jù)分布問題進(jìn)行更好的可行性研究,若能針對該問題進(jìn)入深入研究,則可以為CPDP方面提供更好的缺陷預(yù)測模型。

        猜你喜歡
        源代碼度量語義
        有趣的度量
        人工智能下復(fù)雜軟件源代碼缺陷精準(zhǔn)校正
        模糊度量空間的強(qiáng)嵌入
        基于TXL的源代碼插樁技術(shù)研究
        語言與語義
        迷向表示分為6個不可約直和的旗流形上不變愛因斯坦度量
        軟件源代碼非公知性司法鑒定方法探析
        “上”與“下”語義的不對稱性及其認(rèn)知闡釋
        揭秘龍湖產(chǎn)品“源代碼”
        地質(zhì)異常的奇異性度量與隱伏源致礦異常識別
        蜜桃视频第一区免费观看| 亚洲国产成人AⅤ片在线观看| 最新国产精品精品视频 | 日本高清视频在线观看一区二区 | 好紧好爽免费午夜视频| 丰满岳乱妇久久久| 亚洲九九九| 高清国产亚洲精品自在久久| 一本久久综合亚洲鲁鲁五月天| 久久人人妻人人做人人爽| 天堂av一区二区在线观看| 女同舌吻互慰一区二区| 中文在线中文a| 久久精品一区二区三区av| 音影先锋色天堂av电影妓女久久| 熟女少妇av一区二区三区| 无码人妻精品一区二区三区夜夜嗨| 国产成人亚洲日韩欧美| 久久99久久99精品免观看女同| 国产午夜福利小视频在线观看 | 久久久g0g0午夜无码精品| 手机在线精品视频| av网站一区二区三区| 免费a级毛片18禁网站| 精品国产av最大网站| 日本高清在线播放一区二区三区| 亚洲免费在线视频播放| 国产激情无码一区二区三区| 免费一级特黄欧美大片久久网 | 色偷偷一区二区无码视频| 无遮挡很爽视频在线观看 | 免费a级毛片在线播放不收费| 亚洲男同帅gay片在线观看| 成人免费丝袜美腿视频| 日本一区三区三区在线观看| 99精品国产一区二区| 欧美人与禽交zozo| 亚洲综合久久中文字幕专区一区| 亚洲精品国产一区二区| 亚洲网站地址一地址二| 国产女主播在线免费观看|