国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

融合代碼靜態(tài)特征和頻譜的軟件缺陷定位技術(shù)

2023-10-18 08:11:14王浩仁岳雷李靜雯崔展齊

王浩仁 岳雷 李靜雯 崔展齊

摘 要:基于頻譜的缺陷定位(spectrum-based fault localization,SBFL)通過分析測試用例的覆蓋信息和執(zhí)行結(jié)果信息進(jìn)行快速定位,是目前最常用的缺陷定位技術(shù)。然而,該方法未能充分利用代碼中隱含的語義和結(jié)構(gòu)信息。若能將缺陷預(yù)測中使用到的代碼結(jié)構(gòu)信息和頻譜信息融合使用,將有助于進(jìn)一步提升缺陷定位的效果。為此,提出了一種融合代碼靜態(tài)特征和頻譜的軟件缺陷定位(fault localization combing static features and spectrums,F(xiàn)LFS)技術(shù)。首先,從Halstead等度量元集合中選取度量元指標(biāo)并進(jìn)行修改,以適用于度量代碼的方法級(jí)特征;然后,根據(jù)選取的度量元指標(biāo)提取程序中各個(gè)方法的靜態(tài)特征并用于訓(xùn)練缺陷預(yù)測模型;最后,使用缺陷預(yù)測模型預(yù)測程序中各方法存在缺陷的預(yù)測可疑度,并與SBFL技術(shù)計(jì)算的頻譜可疑度進(jìn)行融合,以定位缺陷所在方法。為驗(yàn)證FLFS的有效性,將其與兩種定位效果最好的SBFL技術(shù)DStar和Ochiai在Defects4J數(shù)據(jù)集上進(jìn)行了對(duì)比實(shí)驗(yàn)。結(jié)果表明,F(xiàn)LFS具有更好的缺陷定位性能,對(duì)于Einspect@n指標(biāo),當(dāng)n=1時(shí),F(xiàn)LFS相比DStar和Ochiai分別多定位到16和10個(gè)缺陷;對(duì)于MRR指標(biāo),F(xiàn)LFS相比DStar和Ochiai分別提升了4.13%和1.08%。

關(guān)鍵詞:缺陷定位;缺陷預(yù)測;程序頻譜;代碼結(jié)構(gòu)信息;可疑度

中圖分類號(hào):TP311.5?? 文獻(xiàn)標(biāo)志碼:A

文章編號(hào):1001-3695(2023)09-035-2785-07

doi:10.19734/j.issn.1001-3695.2023.02.0054

Fault localization combing static features and spectrums

Wang Haoren,Yue Lei,Li Jingwen,Cui Zhanqi

(School of Computer Science,Beijing Information Science & Technology University,Beijing 100101,China)

Abstract:SBFL is the most commonly used fault localization technique,which performs fast localization by analyzing the coverage and execution result information of test cases.However,SBFL fails to fully utilize the implicit semantic and structural information of the code.If the code structure information used in fault prediction and the spectrum information can be fused,it will further improve the effectiveness of fault localization.To this end,this paper proposed a software FLFS method.Firstly,it selected feature from the metrics,including Halstead,CK,etc,and adapted them to measure the method-level features of the code.Then,it extracted the static features of each method in the program according to the metrics and used them to train the fault prediction model.Finally,it used the fault prediction model to predict the prediction suspiciousness of each method in the program and fused it with the spectrum suspiciousness calculated by SBFL to locate the faulty method.To verify the effectiveness of FLFS,this paper compared it with two most effective SBFL techniques,DStar and Ochiai,on the Defects4J dataset.The results show that FLFS outperforms SBFL in terms of Einspect@n,and MRR.For Einspect@n,when n=1,F(xiàn)LFS locates 16 and 10 more faults than DStar and Ochiai respectively.For MRR,F(xiàn)LFS improves by 4.13% and 1.08% compared to DStar and Ochiai respectively.

Key words:fault localization;fault prediction;program spectrum;code structure information;suspiciousness

0 引言

軟件缺陷定位通過定位程序中的缺陷所在位置為調(diào)試提供關(guān)鍵信息,從而提高軟件調(diào)試和修復(fù)的效率,是一種重要的軟件質(zhì)量保障技術(shù)?;陬l譜的缺陷定位(SBFL)是目前應(yīng)用為最為廣泛的缺陷定位技術(shù)[1],該類技術(shù)通過分析測試用例的覆蓋信息和執(zhí)行結(jié)果信息計(jì)算出每個(gè)程序元素的可疑度值,可疑度值的大小與程序元素包含缺陷的可能性相關(guān)[1,2]。開發(fā)人員可以根據(jù)元素的可疑度值排名進(jìn)行檢查,達(dá)到快速定位、提高缺陷定位效率的目的。SBFL技術(shù)常被應(yīng)用于定位缺陷語句,然而程序員在確認(rèn)缺陷位置時(shí)仍然需要結(jié)合缺陷語句的上下文及代碼結(jié)構(gòu)才能修復(fù)缺陷。因此,與語句級(jí)缺陷定位相比,方法級(jí)的缺陷定位更有利于程序員理解和修復(fù)代碼,且方法級(jí)缺陷定位相比語句級(jí)缺陷定位具有更高的精度[3]。然而,DStar[4]作為定位效果最好的SBFL技術(shù)之一,其定位精度仍然有待提高,例如在對(duì)Defects4J[5]數(shù)據(jù)集進(jìn)行缺陷定位時(shí),檢查可疑度排名第一的方法也僅能定位到30.6%的缺陷。

而定位精度有限的原因之一是缺陷定位過程中通常僅使用了測試用例的覆蓋信息和執(zhí)行結(jié)果,未能充分利用代碼中隱含的語義和結(jié)構(gòu)信息?,F(xiàn)有一些工作嘗試將更多的信息與程序頻譜進(jìn)行結(jié)合,以提升軟件缺陷定位的性能。例如,姜淑娟等人[6]提出了一種基于路徑分析和信息熵的缺陷定位方法,通過對(duì)程序中所有執(zhí)行路徑的數(shù)據(jù)依賴關(guān)系進(jìn)行分析得到程序執(zhí)行路徑的上下文信息,并利用信息熵理論將測試事件信息引入可疑度公式來提高缺陷定位的性能。Wen等人[7]提出了一種基于歷史譜的缺陷定位技術(shù),該技術(shù)先從版本歷史記錄中識(shí)別導(dǎo)致缺陷的提交,用于構(gòu)建歷史譜,并通過結(jié)合歷史譜和常規(guī)頻譜進(jìn)行缺陷語句定位。Saha等人[8]考慮到代碼結(jié)構(gòu)特征,利用代碼類名、方法名、注釋等信息與缺陷報(bào)告組合,通過分別計(jì)算每個(gè)組合的文本相似度得分將所有組合得分加權(quán)求和作為文件的最終得分進(jìn)行缺陷定位。因此,若能夠合理利用代碼中隱含的語義和結(jié)構(gòu)信息將有助于提升缺陷定位性能。

軟件缺陷預(yù)測根據(jù)代碼的語義和結(jié)構(gòu)信息,借助隨機(jī)森林[9]、深度神經(jīng)網(wǎng)絡(luò)[10]等機(jī)器學(xué)習(xí)方法對(duì)程序代碼中存在缺陷的傾向性和數(shù)量等進(jìn)行預(yù)測。缺陷預(yù)測重點(diǎn)關(guān)注程序內(nèi)部模塊級(jí)的缺陷情況,因此當(dāng)其被用來預(yù)測更細(xì)粒度的方法級(jí)代碼時(shí),預(yù)測精度往往會(huì)大幅降低,難以準(zhǔn)確定位缺陷位置。例如,方法級(jí)缺陷預(yù)測技術(shù)IVDetect[11]在實(shí)際應(yīng)用中的F1值均低于0.3,precision值也均低于0.25。若能將缺陷預(yù)測中使用到的代碼結(jié)構(gòu)信息和SBFL的頻譜信息融合使用,將有助于提升缺陷定位的效果。在真實(shí)的應(yīng)用場景中,包含缺陷的方法數(shù)量在方法總數(shù)中占比極少,存在嚴(yán)重的類不平衡問題,若直接用于訓(xùn)練缺陷預(yù)測模型,將對(duì)缺陷預(yù)測模型的性能造成嚴(yán)重威脅。例如,在Defects4J的395個(gè)程序中,包含缺陷的方法只占所有方法的很小部分。如表1所示,TT(total test cases)和FT(failing test cases)列出了Defects4J各項(xiàng)目中所有方法的數(shù)量和包含缺陷的方法數(shù)量;FT/TT列表示缺陷方法數(shù)與所有方法數(shù)的比率;FT/TT列的值表明各項(xiàng)目中含有缺陷的方法僅占全部方法的0.05%~1.19%。嚴(yán)重的類不平衡問題將會(huì)降低缺陷預(yù)測模型的質(zhì)量,影響軟件缺陷預(yù)測的性能。

為此,本文提出了一種融合代碼靜態(tài)特征和頻譜的軟件缺陷定位技術(shù),稱做FLFS。首先,從Halstead、CK等度量元集合中選取度量元指標(biāo)并進(jìn)行修改,以適用于度量程序的方法級(jí)特征;然后根據(jù)度量元指標(biāo)提取程序中各個(gè)方法的靜態(tài)特征,對(duì)方法靜態(tài)特征數(shù)據(jù)集中不存在缺陷的方法進(jìn)行聚類,從不同類簇中選取代表性的方法,用于訓(xùn)練缺陷預(yù)測模型以緩解類不平衡問題;最后,使用缺陷預(yù)測模型預(yù)測程序中各方法存在缺陷的預(yù)測可疑度,并與SBFL技術(shù)計(jì)算各方法的頻譜可疑度進(jìn)行融合以定位缺陷所在方法。基于Defects4J數(shù)據(jù)集,將FLFS與現(xiàn)有缺陷定位效果最好的SBFL技術(shù)DStar和Ochiai[12]進(jìn)行對(duì)比實(shí)驗(yàn)。結(jié)果表明,對(duì)于Einspect@n指標(biāo),當(dāng)n=1時(shí),F(xiàn)LFS相比DStar和Ochiai分別多定位到16和10個(gè)缺陷;對(duì)于MRR指標(biāo),F(xiàn)LFS相比DStar和Ochiai分別提升了4.13%和1.08%。

本文提出一種融合代碼靜態(tài)特征和頻譜信息的軟件缺陷定位技術(shù),提取代碼結(jié)構(gòu)特征訓(xùn)練缺陷預(yù)測模型,并將基于模型預(yù)測的各方法中存在缺陷的預(yù)測可疑度與基于頻譜計(jì)算的頻譜可疑度融合,以進(jìn)行方法級(jí)的缺陷定位。

1 相關(guān)工作

1.1 基于頻譜的缺陷定位

國內(nèi)外研究人員針對(duì)軟件缺陷定位進(jìn)行了大量研究,常用技術(shù)包括基于頻譜的缺陷定位技術(shù)[1]、基于信息檢索的缺陷定位技術(shù)[13]等,本文重點(diǎn)關(guān)注基于頻譜的缺陷定位技術(shù)。

研究人員已經(jīng)提出了很多基于頻譜的缺陷定位技術(shù),其中,Jone等人[14]最先提出Tarantula,使用覆蓋率和測試用例執(zhí)行結(jié)果來度量語句的可疑度值。隨后,通過改進(jìn)可疑度公式,研究者相繼提出了一些效果更佳的SBFL技術(shù)。Abreu等人[12]受聚類分析中相似度系數(shù)的啟發(fā)提出了Ochiai,提高了軟件缺陷定位性能;Wong等人[4]通過進(jìn)一步分析測試用例在程序?qū)嶓w上成功執(zhí)行的數(shù)量對(duì)缺陷定位結(jié)果的影響,得出了被成功測試用例覆蓋次數(shù)越多的程序?qū)嶓w其覆蓋次數(shù)對(duì)可疑值的貢獻(xiàn)度越小這一結(jié)論。隨后為了突出在成功用例數(shù)量較多時(shí)失敗用例對(duì)定位結(jié)果的影響,又提出了DStar,并且通過實(shí)驗(yàn)對(duì)比發(fā)現(xiàn)DStar的缺陷定位效果優(yōu)于其他同類缺陷定位技術(shù)。此外,Xie等人[15]提出了一種基于蛻變切片(metamorphic slice,MS)SBFL技術(shù),通過蛻變測試和程序切片生成MS,并使用蛻變關(guān)系(metamorphic relation)生成更多測試用例以用于缺陷定位,此方法的特點(diǎn)在于無須測試用例的測試預(yù)言(test oracle),并取得了與現(xiàn)有SBFL相近的性能。

除僅使用程序頻譜信息進(jìn)行缺陷定位外,還有研究嘗試通過引入代碼中隱含的其他信息來提升缺陷定位的性能。Saha等人[8]考慮到代碼結(jié)構(gòu)特征,將缺陷報(bào)告分為標(biāo)題和描述兩個(gè)部分,將代碼分為類名、方法名、注釋等,并與缺陷報(bào)告組合,通過分別計(jì)算每個(gè)組合的文本相似度得分,將所有組合得分加權(quán)相加作為文件的最終得分。因此,合理利用代碼的結(jié)構(gòu)信息可以提升缺陷定位的準(zhǔn)確性。本文提出技術(shù)也將代碼結(jié)構(gòu)信息加入到缺陷定位中以提高定位效果。不同于上述SBFL僅使用語句覆蓋信息進(jìn)行缺陷定位,本文提出技術(shù)通過將缺陷預(yù)測中使用到的代碼結(jié)構(gòu)信息和SBFL的頻譜信息融合,以緩解SBFL使用代碼信息較少、定位精度有限的問題。

1.2 軟件缺陷預(yù)測

靜態(tài)軟件缺陷預(yù)測可以將程序模塊的缺陷傾向性、缺陷數(shù)量作為預(yù)測目標(biāo)[16]。本文將重點(diǎn)關(guān)注軟件缺陷預(yù)測中預(yù)測代碼缺陷傾向性的技術(shù)。該技術(shù)首先分析軟件程序代碼,從中抽取出程序元素,并根據(jù)實(shí)際應(yīng)用場景,元素的粒度可分別為文件、類或函數(shù)等;然后提取出程序元素的各類度量元特征,并將是否包含缺陷作為程序元素的標(biāo)簽,以構(gòu)建缺陷預(yù)測數(shù)據(jù)集;最后,對(duì)缺陷預(yù)測數(shù)據(jù)集進(jìn)行必要的數(shù)據(jù)預(yù)處理后使用分類和回歸等機(jī)器學(xué)習(xí)方法構(gòu)建缺陷預(yù)測模型。已有研究嘗試使用不同機(jī)器學(xué)習(xí)方法構(gòu)建缺陷預(yù)測模型的性能進(jìn)行比較。例如,Elish等人[17]基于NASA數(shù)據(jù)集,將支持向量機(jī)與樸素貝葉斯、隨機(jī)森林等其他八種機(jī)器學(xué)習(xí)方法構(gòu)建的缺陷預(yù)測模型進(jìn)行了系統(tǒng)比較,實(shí)驗(yàn)結(jié)果表明,SVM在總體評(píng)價(jià)上要優(yōu)于其他八種方法構(gòu)建的缺陷預(yù)測模型。

還有研究人員通過研究對(duì)缺陷預(yù)測模型性能的影響條件,以判斷機(jī)器學(xué)習(xí)方法應(yīng)用于缺陷預(yù)測時(shí)的性能差異。例如。Catal等人[18]基于NASA數(shù)據(jù)集,以AUC值為評(píng)價(jià)指標(biāo),深入分析了數(shù)據(jù)集規(guī)模、度量元和特征子集選擇方法對(duì)缺陷預(yù)測模型性能的影響,結(jié)果表明隨機(jī)森林法在大規(guī)模數(shù)據(jù)集上性能最優(yōu),而樸素貝葉斯則在小規(guī)模數(shù)據(jù)集上的性能最優(yōu)。除此之外,已有研究提出了多種基于深度神經(jīng)網(wǎng)絡(luò)的方法來進(jìn)行缺陷預(yù)測。例如,Russell等人[19]提出了一種基于RNN的架構(gòu)來自動(dòng)提取源代碼的特征以進(jìn)行缺陷預(yù)測;Dam等人[20]提出了一種基于LSTM的架構(gòu)來自動(dòng)學(xué)習(xí)源代碼的語義和句法特征。

不同于上述缺陷預(yù)測技術(shù)主要在文件級(jí)或類級(jí)對(duì)代碼中存在缺陷的傾向性進(jìn)行預(yù)測。本文提出的FLFS通過將缺陷預(yù)測中使用到的代碼結(jié)構(gòu)信息和頻譜信息融合,以更充分地利用代碼結(jié)構(gòu)信息取得更好的軟件缺陷定位效果。

2 FLFS方法設(shè)計(jì)

現(xiàn)有基于頻譜的缺陷定位技術(shù)中的突出問題之一是未充分利用代碼結(jié)構(gòu)信息,導(dǎo)致定位精度受限,人工檢查和調(diào)試開銷較高。為此,本文提出了一種融合代碼靜態(tài)特征和頻譜的軟件缺陷定位技術(shù),其流程如圖1所示。

2.1 方法級(jí)靜態(tài)特征

分析軟件歷史倉庫、設(shè)置與軟件缺陷存在強(qiáng)相關(guān)性的度量元是構(gòu)建高質(zhì)量缺陷預(yù)測模型的關(guān)鍵。因此,度量元的設(shè)計(jì)一直是軟件缺陷預(yù)測研究中的一個(gè)核心問題[16]。本文從現(xiàn)有的研究中選取適用的方法級(jí)度量元指標(biāo),這些度量元信息將用于訓(xùn)練方法級(jí)缺陷預(yù)測模型,進(jìn)而為缺陷定位提供指導(dǎo)。缺陷預(yù)測領(lǐng)域經(jīng)常使用的靜態(tài)特征有Halstead度量元[21]、CK(Chidamber Kemerer)度量元[22]、Martin度量元[23]和McCabe圈復(fù)雜度(cyclomatic complexity)[24]等。其中,Halstead度量元主要通過統(tǒng)計(jì)程序內(nèi)操作符和操作數(shù)的數(shù)量來度量代碼的閱讀難度,并假設(shè)代碼的閱讀難度越高,代碼含有缺陷的可能性也越高;CK度量元和Martin度量元集合則是為面向?qū)ο蟪绦蛟O(shè)計(jì)的,通常代碼中類的復(fù)雜度越高,存在缺陷的概率也越高;McCabe圈復(fù)雜度關(guān)注的是程序的控制流復(fù)雜度,該度量元假設(shè)程序的控制流復(fù)雜度越高,則其含有缺陷的可能性也越高。參考上述度量元集,通過去除Halstead、CK、Martin和McCabe度量元中部分不適用的度量元、合并具有相同含義的度量元,并將其中模塊級(jí)、類級(jí)的度量元進(jìn)行修改,以適用于方法級(jí),構(gòu)建了一套適用于度量方法級(jí)代碼特征的度量指標(biāo)集合,包括注釋代碼行數(shù)、代碼行數(shù)、方法調(diào)用數(shù)量、圈復(fù)雜度等,如表2所示,共包含21種度量元。其中,從Halstead度量元中選擇了12種,包括方法中分支的個(gè)數(shù)、操作符種類數(shù)等;從CK度量元中選擇了4種,包括方法被其他方法調(diào)用次數(shù)、方法調(diào)用其他方法的次數(shù)等;從Martin度量元中選擇了3種,如方法中參數(shù)的個(gè)數(shù)等;從McCabe度量元中選擇了2種,為圈復(fù)雜度和代碼行數(shù)。被選取的21種度量元中有14種是將原用于模塊級(jí)或類級(jí)的度量元應(yīng)用于方法級(jí),另外7種則需要進(jìn)行適當(dāng)修改以適用于度量方法級(jí)特征。

各個(gè)度量元的具體含義為:a)n1,該度量元用來統(tǒng)計(jì)方法中的操作符種類數(shù),操作符包括關(guān)鍵字、函數(shù)調(diào)用、運(yùn)算符,該特征的具體數(shù)值為關(guān)鍵字、函數(shù)調(diào)用和運(yùn)算符種類的和;b)N1,該度量元用來統(tǒng)計(jì)方法中的操作符種個(gè)數(shù),具體數(shù)值為關(guān)鍵字、函數(shù)調(diào)用和運(yùn)算符個(gè)數(shù)的和;c)n2,該度量元用來統(tǒng)計(jì)方法中的操作數(shù)的種類,操作數(shù)包括常數(shù)、常量、變量,其中變量的類型有整數(shù)型的byte、short、int、long,浮點(diǎn)類型的float和double等;d)N2,該度量元用來統(tǒng)計(jì)方法中的操作數(shù)的個(gè)數(shù),具體為方法中常數(shù)、常量和變量個(gè)數(shù)的和;e)N,該度量元在Halstead度量元中表示程序長度,應(yīng)用到方法級(jí)中為每個(gè)方法所有操作符和操作數(shù)的和,即N=N1+N2;f)n,該度量元表示每個(gè)方法中所有操作符種類和操作數(shù)種類的和,即n=n1+n2;g)BranchCount,該度量元用來統(tǒng)計(jì)方法中所有分支的個(gè)數(shù);h)Volume,該度量元參考Halstead度量元中體積的計(jì)算公式Volume=N log2n,表示方法的規(guī)模;i)Difficulty,該度量元表示復(fù)雜度,使用公式Difficulty=(n1/2)×(N2/n2)計(jì)算方法的復(fù)雜度;j)Level,該度量元表示可理解程度,使用公式Level=(2/n1)×(n2/N2)計(jì)算方法的可理解程度;k)Effort,該度量元表示工作量,使用公式Effort=Volume×Difficulty計(jì)算方法的工作量;l)Time,該度量元表示開發(fā)方法所需耗費(fèi)的時(shí)間,參考Halstead度量元,使用公式Time=Effort/18來計(jì)算;m)FunIn,該度量元表示方法被其他方法調(diào)用的次數(shù);n)FunOut,該度量元表示方法調(diào)用其他方法的次數(shù);o)CBO,該度量元表示方法之間的耦合關(guān)系,具體公式為CBO=FunIn+FunOut,即該方法被調(diào)用和調(diào)用其他方法次數(shù)的和;p)Length,該度量元表示方法名的長度;q)LongParameter,該度量元參考Martin度量元,表示過長參數(shù)列表,即一個(gè)方法需要傳遞太多的參數(shù)時(shí)更有可能包含缺陷,將其修改為方法的參數(shù)個(gè)數(shù);r)SwitchCount,該度量元表示方法中switch語句的個(gè)數(shù);s)Comments,該度量元記錄方法中注釋的行數(shù),程序語言中通常有單行注釋、多行注釋和文檔注釋三種注釋,本文將方法包含注釋行數(shù)的和作為該度量元的值;t)CycComplexity,該度量元表示方法的圈復(fù)雜度,圈復(fù)雜度用來衡量一個(gè)模塊判定結(jié)構(gòu)的復(fù)雜程度,數(shù)量上表現(xiàn)為線性無關(guān)的路徑條數(shù),即所需測試的最少路徑條數(shù);u)LOC,該度量元表示方法中包含語句(非空行)的數(shù)量。

2.2 融合代碼靜態(tài)特征和頻譜的軟件缺陷定位技術(shù)

首先,使用所提取的代碼靜態(tài)特征(如行數(shù)、方法調(diào)用次數(shù)等)組成方法級(jí)靜態(tài)特征數(shù)據(jù)集,并通過對(duì)方法級(jí)靜態(tài)特征數(shù)據(jù)集中不包含缺陷的方法進(jìn)行聚類,從不同類簇中選取代表性的方法,與包含缺陷的方法靜態(tài)特征組合,以訓(xùn)練缺陷預(yù)測模型;然后使用SBFL計(jì)算方法中所有語句的可疑度值,將方法中所有語句可疑度的最大值作為方法的頻譜可疑度,并與模型預(yù)測每個(gè)方法存在缺陷的預(yù)測可疑度進(jìn)行融合,通過增加分析程序的靜態(tài)特征信息以進(jìn)一步提升SBFL的缺陷定位性能。在融合預(yù)測可疑度和頻譜可疑度時(shí),借鑒文獻(xiàn)[25]中將詞頻和逆文本頻率指數(shù)進(jìn)行數(shù)值相乘得到詞頻—逆文件頻率的方式,通過將預(yù)測可疑度與頻譜可疑度相乘得到方法融合可疑度。

M(i)=spectrum(i)×prediction(i)(1)

其中:spectrum(i)表示第i個(gè)方法的頻譜可疑度值;而prediction(i)表示模型對(duì)第i個(gè)方法預(yù)測的預(yù)測可疑度值,即該方法預(yù)測為缺陷的概率;M(i)表示第i個(gè)方法通過將預(yù)測可疑度與頻譜可疑度相乘得到的融合可疑度值。

2.3 類不平衡問題處理

在分類學(xué)習(xí)任務(wù)中常會(huì)遇到類不平衡問題,即數(shù)據(jù)集中不同類樣本的數(shù)據(jù)量差距較為懸殊[26],使用類不平衡的數(shù)據(jù)集訓(xùn)練所得的模型,往往對(duì)少數(shù)類數(shù)據(jù)的預(yù)測精度較低。對(duì)于類不平衡的數(shù)據(jù)集,可通過對(duì)負(fù)類樣本進(jìn)行過采樣和對(duì)正類樣本進(jìn)行欠采樣來改善數(shù)據(jù)分布,使數(shù)據(jù)集趨向類平衡。但需要注意的是隨機(jī)過采樣方法容易導(dǎo)致過度擬合問題,而隨機(jī)欠采樣方法常常會(huì)引起信息丟失。為了彌補(bǔ)隨機(jī)欠采樣過程中可能丟失有用信息樣本的缺點(diǎn),對(duì)方法靜態(tài)特征數(shù)據(jù)集中的數(shù)據(jù)使用基于聚類的欠采樣方法[27]進(jìn)行處理。聚類是一種無監(jiān)督學(xué)習(xí)方法,按照劃分思想以簇內(nèi)相似、簇間相異原則通過迭代將數(shù)據(jù)劃分到不同的簇中,并使生成的簇盡可能地緊湊和獨(dú)立。通常,聚類算法常被用于數(shù)據(jù)壓縮和信息檢索,可通過聚類達(dá)到降低數(shù)據(jù)維度來完成數(shù)據(jù)劃分等目的[27]。

在構(gòu)建方法靜態(tài)特征數(shù)據(jù)集的過程中,發(fā)現(xiàn)數(shù)據(jù)集存在非常嚴(yán)重的類不平衡現(xiàn)象。在Defects4J的395個(gè)程序中,包含缺陷的方法只占所有方法的很小部分,各項(xiàng)目中含有缺陷的方法僅占全部方法的0.05%~1.19%,即包含缺陷的方法極少而不存在缺陷的正確的方法占絕大多數(shù)。為緩解此問題,將去除方法靜態(tài)特征數(shù)據(jù)集中重復(fù)的方法,并對(duì)不存在缺陷的方法進(jìn)行聚類,再通過從不同類簇中選取代表性方法以達(dá)到減少重復(fù)數(shù)據(jù)、緩解類不平衡問題的目的,經(jīng)過處理后將得到類分布更平衡的數(shù)據(jù)集,并用于訓(xùn)練缺陷預(yù)測模型。

2.4 實(shí)例分析

本節(jié)使用Defects4J中Chart項(xiàng)目的第14個(gè)版本作為示例,以介紹FLFS的實(shí)際使用過程。a)通過使用DStar計(jì)算程序中的所有方法的頻譜可疑度,表3中,Spectrum表示方法的頻譜可疑度值,Spectrum-Rank表示方法的頻譜可疑度排名,可以看出含有缺陷的方法removeRangeMarker按照頻譜可疑度值被排為第四;b)使用缺陷預(yù)測模型預(yù)測程序中各方法的預(yù)測可疑度,表3中Prediction列表示缺陷預(yù)測模型預(yù)測方法為缺陷的預(yù)測可疑度值;c)使用式(1)將SBFL技術(shù)計(jì)算的各方法的頻譜可疑度與預(yù)測可疑度進(jìn)行融合以定位缺陷所在方法。定位結(jié)果如表3所示,其中,F(xiàn)LFS列表示方法的融合可疑度值,F(xiàn)LFS-Rank表示方法的融合可疑度值排名;Faulty表示該方法是否存在缺陷,1為含有缺陷的方法,0為無缺陷方法??梢钥闯觯ㄟ^FLFS進(jìn)行缺陷定位,能夠?qū)毕莸姆椒╮emoveRangeMarker排到第一。

由上述示例可以看出,SBFL僅使用頻譜信息計(jì)算可疑度,將覆蓋更多錯(cuò)誤測試用例的方法賦以更高的頻譜可疑度,但未能充分利用代碼中隱含的語義和結(jié)構(gòu)信息,導(dǎo)致缺陷方法的可疑度值低,定位效果較差。而在SBFL中加入缺陷預(yù)測的結(jié)果后,通過增加靜態(tài)特征信息,如方法的圈復(fù)雜度、參數(shù)個(gè)數(shù)等信息來提高缺陷定位的效果。含有缺陷的方法removeRangeMarker因其規(guī)模、圈復(fù)雜度等特征相比其他方法更高,將得到較高的預(yù)測可疑度值,進(jìn)而導(dǎo)致融合可疑度值排名更高,所以比SBFL的定位效果更好。

3 實(shí)驗(yàn)與結(jié)果

為了檢驗(yàn)FLFS的有效性,將在Defects4J(V1.4.0)數(shù)據(jù)集上進(jìn)行實(shí)驗(yàn)。在實(shí)現(xiàn)FLFS過程中,使用了第三方機(jī)器學(xué)習(xí)庫Scikit-learn(https://scikit-learn.org/stable/)中的K-means算法和RF模型對(duì)方法靜態(tài)特征數(shù)據(jù)集進(jìn)行聚類和缺陷預(yù)測。具體來講,首先匯總數(shù)據(jù)集中不包含缺陷方法的靜態(tài)特征信息,使用K-means算法對(duì)這些方法的靜態(tài)特征信息進(jìn)行聚類,其中,在聚類算法中設(shè)置的類簇?cái)?shù)量為當(dāng)前訓(xùn)練數(shù)據(jù)集中正樣本的數(shù)量,以保持包含缺陷的方法和不包含缺陷的方法數(shù)量相同,而最大迭代次數(shù)等其他參數(shù)則保持默認(rèn)參數(shù);然后,從聚類的不同類簇中各隨機(jī)選取一條方法的靜態(tài)特征數(shù)據(jù)作為代表性數(shù)據(jù),與包含缺陷的正樣本數(shù)據(jù)組合為訓(xùn)練集,以緩解類不平衡問題;基于RF訓(xùn)練缺陷預(yù)測模型,以預(yù)測程序中各方法存在缺陷的預(yù)測可疑度,并與SBFL技術(shù)計(jì)算出的各方法的頻譜可疑度進(jìn)行融合。由于缺陷預(yù)測模型的直接輸出僅為方法是否包含缺陷,為了更充分地利用缺陷預(yù)測模型的結(jié)果,使用Scikit-learn中的predict_proba方法來得到語句的估計(jì)概率(estimated probabilities),作為預(yù)測可疑度,與頻譜可疑度結(jié)合以提高缺陷定位的準(zhǔn)確性。

實(shí)驗(yàn)運(yùn)行硬件環(huán)境為Intel Xeon E5-2678 v3 @ 2.50 GHz、64 GB物理內(nèi)存;軟件環(huán)境為Windows 10、JDK 1.8.0、Python 3.7.0。

3.1 實(shí)驗(yàn)設(shè)計(jì)

3.1.1 研究問題

a)為了評(píng)估FLFS的缺陷定位性能,本文將其與SBFL中定位效果最好的技術(shù)DStar和Ochiai進(jìn)行對(duì)比,以分析本文所提技術(shù)的有效性。

b)通過對(duì)比使用聚類算法對(duì)數(shù)據(jù)預(yù)處理后和不使用聚類方法預(yù)處理的方法靜態(tài)特征數(shù)據(jù)集訓(xùn)練模型的性能來驗(yàn)證解決方法級(jí)靜態(tài)特征數(shù)據(jù)集中的類不平衡問題是否會(huì)提高FLFS的缺陷定位效果。

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

表4給出了Defects4J數(shù)據(jù)集的相關(guān)統(tǒng)計(jì)信息,包括來自6個(gè)開源項(xiàng)目的395個(gè)含有缺陷的版本,Chart(26個(gè)缺陷版本)、Closure(133個(gè)缺陷版本)、Lang(65個(gè)缺陷版本)、Math(106個(gè)缺陷版本)、Mockito(38個(gè)缺陷版本)和Time(27個(gè)缺陷版本)。在表4中,第二列是各項(xiàng)目存在缺陷的版本數(shù)量,每個(gè)缺陷版本包含至少一個(gè)缺陷;第三列是每個(gè)項(xiàng)目的平均代碼行數(shù)。第四列是每個(gè)項(xiàng)目的平均測試用例數(shù)量。

實(shí)驗(yàn)中基于Eclipse的JDT庫和所編寫的語法分析器,根據(jù)2.1節(jié)設(shè)計(jì)的度量元指標(biāo),提取Defects4J數(shù)據(jù)集中6個(gè)項(xiàng)目的方法靜態(tài)特征以構(gòu)建方法靜態(tài)特征數(shù)據(jù)集并進(jìn)行實(shí)驗(yàn)。其中,訓(xùn)練集和測試集的劃分方式為輪流選取一個(gè)項(xiàng)目作為測試集,剩余五個(gè)項(xiàng)目數(shù)據(jù)則作為訓(xùn)練集。

3.1.3 評(píng)價(jià)指標(biāo)

為評(píng)價(jià)FLFS的有效性,本文采用Einspect@n和MRR(mean reciprocal rank)兩個(gè)被廣泛使用的評(píng)價(jià)指標(biāo)。

Einspect@n是指可疑度值排在前n的方法中存在缺陷的數(shù)量,n越小且Einspect@n的值越大,缺陷定位技術(shù)的性能就越好。與語句級(jí)缺陷定位的評(píng)估過程類似,本文通過統(tǒng)計(jì)可疑度值排在前n的方法中存在的缺陷數(shù)量對(duì)不同技術(shù)進(jìn)行評(píng)估。

MRR也是一種對(duì)缺陷定位技術(shù)進(jìn)行評(píng)估的通用評(píng)價(jià)指標(biāo),通過查找可疑列表中第一個(gè)包含缺陷的方法,并計(jì)算其排名的倒數(shù)值來評(píng)估缺陷定位技術(shù)的性能,MRR值越高,說明定位技術(shù)的準(zhǔn)確率越高。MRR計(jì)算公式如式(2)所示。其中R為該程序所有含有缺陷方法的集合,|R|表示集合中缺陷方法的數(shù)目,ranki表示定位出的與第i個(gè)缺陷方法最靠前排名[28]。

MRR=1|R|∑Ri=11ranki(2)

3.2 實(shí)驗(yàn)結(jié)果分析

表5為DStar、Ochiai、FLFSDStar和FLFSOchiai對(duì)Defects4J數(shù)據(jù)集進(jìn)行缺陷定位的效果對(duì)比,其中FLFSDStar表示將缺陷預(yù)測模型預(yù)測的預(yù)測可疑度與DStar計(jì)算的頻譜可疑度值進(jìn)行融合,F(xiàn)LFSOchiai表示與Ochiai計(jì)算的頻譜可疑度值進(jìn)行融合。實(shí)驗(yàn)使用的評(píng)價(jià)指標(biāo)為Einspect@n(n=1,3,5)和MRR。

對(duì)于Einspect@n,當(dāng)n=1、3、5時(shí),F(xiàn)LFS均取得了更好的定位效果,相比DStar、Ochiai分別能夠多定位到5~16個(gè)缺陷,且當(dāng)n=1時(shí),F(xiàn)LFS能夠表現(xiàn)出更有效的缺陷定位性能。具體地,當(dāng)n=1時(shí),F(xiàn)LFSDStar、FLFSOchiai相比DStar、Ochiai分別能夠多定位16和10個(gè)缺陷;當(dāng)n=3時(shí),F(xiàn)LFSDStar、FLFSOchiai相比DStar、Ochiai分別能夠多定位到12和8個(gè)缺陷;當(dāng)n=5時(shí),F(xiàn)LFSDStar、FLFSOchiai相比DStar、Ochiai分別能夠多定位到8和5個(gè)缺陷。對(duì)于MRR,F(xiàn)LFSDStar在除Lang外的五個(gè)項(xiàng)目上相比DStar的MRR值均更高;FLFSOchiai在Chart、Math、Time三個(gè)項(xiàng)目上相比Ochiai的MRR值均更高。其中,DStar和Ochiai在Lang項(xiàng)目上相比FLFS均有更好的定位效果,原因是DStar和Ochiai在Lang項(xiàng)目上已經(jīng)取得了比其他五個(gè)項(xiàng)目更好的缺陷定位效果,導(dǎo)致在融合代碼結(jié)構(gòu)信息后定位性能提升空間有限,甚至可能會(huì)降低缺陷定位效果。此外還可以發(fā)現(xiàn)FLFS技術(shù)的定位效果會(huì)受到所融合技術(shù)定位效果的影響,通過實(shí)驗(yàn)結(jié)果可以看出,F(xiàn)LFS與所融合的SBFL技術(shù)的定位效果呈正相關(guān)。例如,對(duì)于Chart、Math和Closure項(xiàng)目,Ochiai的定位效果均優(yōu)于DStar,因此FLFSOchiai相比FLFSDStar的性能也更好。

實(shí)驗(yàn)結(jié)果表明,針對(duì)問題a),對(duì)于Einspect@n(n=1),F(xiàn)LFS相比DStar和Ochiai均取得了更好的定位效果,分別多定位到16和10個(gè)缺陷,提升了13.22%和7.63%;對(duì)于MRR,F(xiàn)LFS相比DStar和Ochiai分別提升了4.12%和1.09%。此外,F(xiàn)LFS的性能與所融合的SBFL技術(shù)的缺陷定位性能正相關(guān)。

為了評(píng)價(jià)方法靜態(tài)特征數(shù)據(jù)集中存在的類不平衡問題對(duì)FLFS缺陷定位效果的影響,本文將不通過聚類選取方法靜態(tài)特征數(shù)據(jù)集中不存在缺陷方法的FLFS表示為FLFS w/o clustering,并與FLFS進(jìn)行比較,結(jié)果如表6所示。其中FLFSDStar w/o Clustering和FLFSOchiai w/o Clustering分別表示使用DStar和Ochiai計(jì)算頻譜可疑度。

從表5、6中可以看出,對(duì)于Einspect@n和MRR指標(biāo),F(xiàn)LFSDStar和FLFSOchiai分別取得了比FLFSDStar w/o Clustering和FLFSOchiai w/o Clustering更好的定位效果。對(duì)于Einspect@n指標(biāo),除n=1時(shí),F(xiàn)LFSDStar w/o Clustering比DStar多定位到1個(gè)缺陷外,F(xiàn)LFSDStar w/o Clustering和FLFSOchiai w/o Clustering的定位效果甚至弱于DStar和Ochiai。例如,當(dāng)n=3時(shí),F(xiàn)LFSDStar w/o Clustering比DStar、FLFSDStar分別少定位到2和14個(gè)缺陷;FLFSOchiai w/o Clustering比Ochiai和FLFSOchiai分別少定位到5和13個(gè)缺陷。當(dāng)n=1時(shí),緩解方法靜態(tài)特征數(shù)據(jù)集中存在的類不平衡問題對(duì)FLFS定位效果提升最為明顯,F(xiàn)LFSDStar比FLFSDStar w/o Clustering提高了12.30%,F(xiàn)LFSOchiai比FLFSOchiai w/o Clustering提高了10.16%。而對(duì)于MRR指標(biāo),F(xiàn)LFSDStar比FLFSDStar w/o clustering提高了7.87%,F(xiàn)LFSOchiai比FLFSOchiai w/o Clustering提高了5.14%。

綜合以上分析,針對(duì)問題b),使用聚類方法處理數(shù)據(jù)集的類不平衡問題能夠有效提升缺陷預(yù)測模型的性能,進(jìn)而提升缺陷定位效果。若不對(duì)數(shù)據(jù)集的類不平衡問題進(jìn)行處理,直接將預(yù)測可疑度和頻譜可疑度融合,將不能提高SBFL的缺陷定位性能。

4 分析討論

4.1 FLFS使用不同融合方式時(shí)缺陷定位的性能

FLFS通過式(1)使用數(shù)值相乘的方式來融合缺陷預(yù)測模型的預(yù)測可疑度與SBFL的頻譜可疑度,得到各方法的融合可疑度值。除了這種方式外,還可以使用其他方式將頻譜可疑度和預(yù)測可疑度進(jìn)行融合。例如,參考缺陷定位領(lǐng)域中融合歷史譜和頻譜可疑度的工作HSFL[7]以及融合代碼異味和文本相似度的工作BLI[29],對(duì)頻譜可疑度和預(yù)測可疑度使用權(quán)重相加方式進(jìn)行融合,計(jì)算方式如式(3)所示。

M′(i)=k×spectrum(i)+(1-k)×prediction(i)(3)

其中:M′(i)表示第i個(gè)方法通過不同權(quán)重相加計(jì)算的融合可疑度值,而spectrum(i)和prediction(i)分別表示該方法的頻譜可疑度和預(yù)測可疑度;k是用來融合頻譜可疑度和預(yù)測可疑度的權(quán)重。參考HSFL和BLI的實(shí)驗(yàn)設(shè)置,本文將k分別設(shè)置為0.1、0.3、0.5、0.7、0.9,通過實(shí)驗(yàn)和FLFS進(jìn)行對(duì)比。

本文將使用權(quán)重相加的方式計(jì)算融合可疑度的FLFS技術(shù)表示為FLFS′,其缺陷定位結(jié)果如表7、8所示。表中數(shù)據(jù)為FLFS′在不同項(xiàng)目上Einspect@n(n=1)和MRR的評(píng)估表現(xiàn),F(xiàn)LFS′DStar和FLFS′Ochiai分別表示使用權(quán)重相加方式將缺陷預(yù)測模型預(yù)測的預(yù)測可疑度與DStar、Ochiai的頻譜可疑度進(jìn)行融合??梢钥闯觯琸的取值越高,F(xiàn)LFS′的定位效果越好,當(dāng)k=0.9時(shí),對(duì)于Einspect@1,F(xiàn)LFS′DStar雖然比DStar多定位到8個(gè)缺陷,但仍比FLFSDStar少定位到8個(gè)缺陷;而FLFS′Ochiai雖然比Ochiai多定位到3個(gè)缺陷,但仍比FLFSOchiai少定位到7個(gè)缺陷。此外,對(duì)于MRR,F(xiàn)LFS′DStar和FLFS′Ochiai的MRR平均值分別低于DStar、FLFSDStar和Ochiai、FLFSOchiai。實(shí)驗(yàn)結(jié)果表明,融合可疑度方式的差異會(huì)影響FLFS的缺陷定位效果,雖然FLFS′對(duì)于Einspect@1指標(biāo)也能在一定程度上提高基線技術(shù)的定位效果,但是當(dāng)使用相乘的方式來融合預(yù)測可疑度和頻譜可疑度時(shí),能取得更好的缺陷定位效果。

4.2 有效性分析

外部有效性與本文實(shí)驗(yàn)使用的數(shù)據(jù)集有關(guān)。本文使用Defecst4J作為實(shí)驗(yàn)對(duì)象,它包括來自6個(gè)開源項(xiàng)目的395個(gè)缺陷。該數(shù)據(jù)集被廣泛用于評(píng)估缺陷定位方法的性能[25]。Defects4J數(shù)據(jù)集雖然具有一定的代表性,但無法保證FLFS在其他數(shù)據(jù)集上能得到相同的結(jié)果。此外,本文僅在實(shí)驗(yàn)中使用了性能最好的SBFL技術(shù)(DStar和Ochiai)、常用的缺陷預(yù)測模型(RF)和被廣泛使用的聚類算法。上述技術(shù)雖然具有一定的代表性,但不能確保融合其他SBFL技術(shù)和缺陷預(yù)測技術(shù)進(jìn)行軟件缺陷定位時(shí)具有相同效果。

內(nèi)部有效性主要體現(xiàn)在方法實(shí)現(xiàn)及實(shí)驗(yàn)過程的正確性。為緩解內(nèi)部有效性威脅,使用第三方機(jī)器學(xué)習(xí)庫Scikit-learn實(shí)現(xiàn)的K-means算法對(duì)方法級(jí)靜態(tài)特征數(shù)據(jù)集中正確的數(shù)據(jù)進(jìn)行聚類。由于DStar和Ochiai都未開源且方法易于實(shí)現(xiàn),所以本文對(duì)其復(fù)現(xiàn)后在Defects4J數(shù)據(jù)集上進(jìn)行了實(shí)驗(yàn),并將實(shí)驗(yàn)結(jié)果與相關(guān)研究進(jìn)行對(duì)比驗(yàn)證,以確保實(shí)驗(yàn)的正確性。此外,在實(shí)驗(yàn)過程中對(duì)所編寫的代碼進(jìn)行了多次檢查和測試,盡可能減少內(nèi)部有效性威脅。構(gòu)造有效性主要與實(shí)驗(yàn)使用的評(píng)價(jià)指標(biāo)有關(guān)。本文使用Einspect@n和MRR作為本文方法有效性的評(píng)價(jià)指標(biāo)。其中,將Einspect@n用于統(tǒng)計(jì)缺陷定位的絕對(duì)排名,因?yàn)殚_發(fā)人員在檢查給定的可疑元素列表時(shí)更關(guān)注排名靠前的缺陷元素,所以實(shí)驗(yàn)中重點(diǎn)關(guān)注了Einspect@n(n=1);而MRR則用于統(tǒng)計(jì)缺陷定位的相對(duì)排名。兩種評(píng)價(jià)指標(biāo)已被廣泛應(yīng)用在軟件缺陷定位領(lǐng)域[30]。

5 結(jié)束語

針對(duì)現(xiàn)有基于頻譜的缺陷定位方法中分析代碼信息不足導(dǎo)致精度和定位效果有限的問題,本文提出了一種融合代碼靜態(tài)特征和頻譜的軟件缺陷定位技術(shù)FLFS,通過將缺陷預(yù)測中使用到的代碼結(jié)構(gòu)信息和SBFL的頻譜信息融合使用,以提升缺陷定位技術(shù)的性能。在Defects4J數(shù)據(jù)集上進(jìn)行的實(shí)驗(yàn)結(jié)果表明,對(duì)于Einspect@n和MRR,F(xiàn)LFS比SBFL技術(shù)均取得了更好的缺陷定位效果。在下一步工作中,嘗試將更多聚類方法應(yīng)用于FLFS,同時(shí)融合更多SBFL技術(shù)并深入分析FLFS用于軟件多缺陷定位的效果;此外,還將嘗試在更多更大規(guī)模的數(shù)據(jù)集上進(jìn)行實(shí)驗(yàn),以進(jìn)一步驗(yàn)證FLFS的有效性。

參考文獻(xiàn):

[1]陳翔,鞠小林,文萬志,等.基于程序頻譜的動(dòng)態(tài)缺陷定位方法研究[J].軟件學(xué)報(bào),2015,26(2):390-412.(Chen Xiang,Ju Xiaolin,Wen Wanzhi,et al.Review of dynamic fault localization approaches based on program spectrum[J].Journal of Software,2015,26(2):390-412.)

[2]朱潤凝,趙逢禹.一種基于謂詞分層覆蓋矩陣的缺陷定位方法[J].計(jì)算機(jī)應(yīng)用研究,2016,33(8):2375-2380,2395.(Zhu Running,Zhao Fengyu.Fault localization method based on predicate hierarchical coverage matrix[J].Application Research of Computers,2016,33(8):2375-2380,2395.)

[3]張文,李自強(qiáng),杜宇航,等.方法級(jí)別的細(xì)粒度軟件缺陷定位方法[J].軟件學(xué)報(bào),2019,30(2):195-210.(Zhang Wen,Li Ziqiang,Du Yuhang,et al.Fine-grained software bug location approach at method level[J].Journal of Software,2019,30(2):195-210.)

[4]Wong W E,Debroy V,Gao Ruizhi,et al.The DStar method for effective software fault localization[J].IEEE Trans on Reliability,2013,63(1):290-308.

[5]Just R,Jalali D,Ernst M D.Defects4J:a database of existing faults to enable controlled testing studies for Java programs[C]//Proc of International Symposium on Software Testing and Analysis.New York:ACM Press,2014:437-440.

[6]姜淑娟,張旭,王榮存,等.基于路徑分析和信息熵的錯(cuò)誤定位方法[J].軟件學(xué)報(bào),2021,32(7):2166-2182.(Jiang Shujuan,Zhang Xu,Wang Rongcun,et al.Fault localization approach based on path analysis and information entropy[J].Journal of Software,2021,32(7):2166-2182.)

[7]Wen Ming,Chen Junjie,Tian Yongqiang,et al.Historical spectrum based fault localization[J].IEEE Trans on Software Engineering,2019,47(11):2348-2368.

[8]Saha R K,Lease M,Khurshid S,et al.Improving bug localization using structured information retrieval[C]//Proc of the 28th IEEE/ACM International Conference on Automated Software Engineering.Piscataway,NJ:IEEE Press,2013:345-355.

[9]Jain A,Zongker D.Feature selection:evaluation,application,and small sample performance[J].IEEE Trans on Pattern Analysis and Machine Intelligence,1997,19(2):153-158.

[10]LeCun Y,Bengio Y,Hinton G.Deep learning[J].Nature,2015,521(7553):436-444.

[11]Li Yi,Wang Shaohua,Nguyen T N.Vulnerability detection with fine-grained interpretations[C]//Proc of the 29th ACM Joint Meeting on European Software Engineering Conference and Symposium on the Foundations of Software Engineering.New York:ACM Press,2021:292-303.

[12]Abreu R,Zoeteweij P,Golsteijn R,et al.A practical evaluation of spectrum-based fault localization[J].Journal of Systems and Software,2009,82(11):1780-1792.

[13]Zhou Jian,Zhang Hongyu,Lo D.Where should the bugs be fixed? More accurate information retrieval-based bug localization based on bug reports[C]//Proc of the 34th International Conference on Software Engineering.Piscataway,NJ:IEEE Press,2012:14-24.

[14]Jones J A,Harrold M J.Empirical evaluation of the tarantula automatic fault-localization technique[C]//Proc of the 20th IEEE/ACM International Conference on Automated Software Engineering.New York:ACM Press,2005:273-282.

[15]Xie Xiaoyuan,Wong W E,Chen T Y,et al.Metamorphic slice:an application in spectrum-based fault localization[J].Information and Software Technology,2013,55(5):866-879.

[16]陳翔,顧慶,劉望舒,等.靜態(tài)軟件缺陷預(yù)測方法研究[J].軟件學(xué)報(bào),2016,27(1):1-25.(Chen Xiang,Gu Qing,Liu Wangshu,et al.Survey of static software defect prediction[J].Journal of Software,2016,27(1):1-25.)

[17]Elish K O,Elish M O.Predicting defect-prone software modules using support vector machines[J].Journal of Systems and Software,2008,81(5):649-660.

[18]Catal C,Diri B.Investigating the effect of dataset size,metrics sets,and feature selection techniques on software fault prediction problem[J].Information Sciences,2009,179(8):1040-1058.

[19]Russell R,Kim L,Hamilton L,et al.Automated vulnerability detection in source code using deep representation learning[C]//Proc of the 17th IEEE International Conference on Machine Learning and Applications.Piscataway,NJ:IEEE Press,2018:757-762.

[20]Dam H K,Tran T,Pham T,et al.Automatic feature learning for vulnerability prediction[EB/OL].(2017-08-08).https://arxiv.org/abs/1708.02368.

[21]Halstead M H.Elements of software science[M].New York:Elsevier Science Inc.,1977.

[22]Chidamber S R,Kemerer C F.A metrics suite for object oriented design[J].IEEE Trans on Software Engineering,1994,20(6):476-493.

[23]Martin R.OO design quality metrics:an analysis of dependencies[EB/OL].(1994-10-28).https://www.cin.ufpe.br/~alt/mestrado/oodmetrc.pdf.

[24]McCabe T J.A complexity measure[J].IEEE Transactions on Software Engineering,1976,SE-2(4):308-320.

[25]張卓,雷晏,毛曉光,等.基于詞頻-逆文件頻率的錯(cuò)誤定位方法[J].軟件學(xué)報(bào),2020,31(11):3448-3460.(Zhang Zhuo,Lei Yan,Mao Xiaoguang,et al.Fault localization using term frequency-inverse document frequency[J].Journal of Software,2020,31(11):3448-3460.

[26]Tanha J,Abdi Y,Samadi N,et al.Boosting methods for multi-class imbalanced data classification:an experimental review[J].Journal of Big Data,2020,7(9):article No.70.

[27]胡小生,張潤晶,鐘勇.兩層聚類的類別不平衡數(shù)據(jù)挖掘算法[J].計(jì)算機(jī)科學(xué),2013,40(11):271-275.(Hu Xiaosheng,Zhang Runjing,Zhong Yong.Two-tier clustering for mining imbalanced datasets[J].Computer Science,2013,40(11):271-275.)

[28]Voorhees E M.The TREC-8 question answering track report[EB/OL].(2000-12-11).https://tsapps.nist.gov/publication/get_pdf.cfm?pub_id=151495.

[29]Takahashi A,Sae-Lim N,Hayashi S,et al.A preliminary study on using code smells to improve bug localization[C]//Proc of the 26th Conference on Program Comprehension.New York:ACM Press,2018:324-327.

[30]Zou Daming,Liang Jingjing,Xiong Yingfei,et al.An empirical study of fault localization families and their combinations[J].IEEE Trans on Software Engineering,2021,47(2):332-347.

收稿日期:2023-02-20;修回日期:2023-04-13? 基金項(xiàng)目:國家自然科學(xué)基金資助項(xiàng)目(61702041);北京市教委科技計(jì)劃資助項(xiàng)目(KM201811232016);北京信息科技大學(xué)“勤信人才”培育計(jì)劃資助項(xiàng)目(QXTCPC201906)

作者簡介:王浩仁(1997-),男,河北石家莊人,碩士,CCF會(huì)員,主要研究方向?yàn)檐浖毕荻ㄎ唬辉览祝?998-),男,甘肅蘭州人,碩士研究生,主要研究方向?yàn)檐浖毕荻ㄎ?;李靜雯(1999-),女,河北滄州人,碩士研究生,主要研究方向?yàn)檐浖毕荻ㄎ?;崔展齊(1984-),男(通信作者),貴州金沙人,教授,碩導(dǎo),博士,主要研究方向?yàn)檐浖治雠c軟件測試技術(shù)(czq@bistu.edu.cn).

离岛区| 察雅县| 和林格尔县| 甘谷县| 南丰县| 高清| 田阳县| 晋州市| 宁德市| 金川县| 河曲县| 遂昌县| 崇义县| 岳阳县| 大方县| 和硕县| 鄂尔多斯市| 台州市| 盐城市| 海盐县| 高密市| 武隆县| 甘孜县| 北流市| 济宁市| 新建县| 鄂托克前旗| 九台市| 肃北| 怀集县| 新营市| 慈利县| 高尔夫| 青浦区| 那坡县| 顺义区| 仪征市| 广州市| 改则县| 开江县| 武宣县|