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

        ?

        方法級(jí)別的細(xì)粒度軟件缺陷定位方法?

        2019-03-05 03:45:12李自強(qiáng)杜宇航
        軟件學(xué)報(bào) 2019年2期
        關(guān)鍵詞:報(bào)告信息方法

        張 文,李自強(qiáng),杜宇航,楊 葉

        1(北京化工大學(xué) 經(jīng)濟(jì)管理學(xué)院,北京 100029)

        2(北京工業(yè)大學(xué) 經(jīng)濟(jì)管理學(xué)院,北京 100124)

        3(School of Systems and Enterprises,Stevens Institute of Technology,Hoboken,NJ 07030,USA)

        軟件缺陷是計(jì)算機(jī)程序或系統(tǒng)中的錯(cuò)誤、故障或瑕疵,導(dǎo)致其產(chǎn)生不正確或意料之外的行為方式[1].軟件缺陷的存在,會(huì)導(dǎo)致軟件產(chǎn)品在某種程度上不能滿足用戶的需求.在軟件項(xiàng)目開發(fā)過程中,一些缺陷跟蹤系統(tǒng)常被用于管理缺陷,如 Bugzilla(Bugzilla:https://www.bugzilla.org/)、JIRA(JIRA:http://www.atlassian.com/software/jira/)、Mantis(Mantis:https://www.mantisbt.org/)等.這些缺陷跟蹤系統(tǒng)被用于管理軟件項(xiàng)目開發(fā)中缺陷報(bào)告的提交、確認(rèn)、分配、修復(fù)、關(guān)閉等整個(gè)軟件缺陷的生命周期[2].對(duì)于一個(gè)大型軟件項(xiàng)目來說,每天都會(huì)收到用戶提交的大量軟件缺陷報(bào)告,而且修復(fù)這些軟件缺陷耗費(fèi)了缺陷修復(fù)人員大量的時(shí)間和精力.例如,在Eclipse項(xiàng)目版本發(fā)布日期附近,每天有將近200個(gè)缺陷報(bào)告被提交到Eclipse項(xiàng)目缺陷報(bào)告庫(kù).同樣,每天有將近150個(gè)缺陷報(bào)告被提交到Debian項(xiàng)目缺陷報(bào)告庫(kù)[3].根據(jù)Jeong等人[4]的研究,在PostgreSQL項(xiàng)目中,大部分缺陷需要100天~200天被修復(fù);甚至有50%的缺陷報(bào)告需要將近100天~300天才能被修復(fù).根據(jù)本文對(duì)所采用的Tomcat7項(xiàng)目的觀察結(jié)果:大部分缺陷在40天~200天之內(nèi)被修復(fù);10%的缺陷在10h之內(nèi)可以得到修復(fù);另有5%的缺陷需要將近2年才能被最終修復(fù).

        一旦軟件缺陷報(bào)告被缺陷管理人員所確認(rèn)和分派給開發(fā)人員進(jìn)行缺陷修復(fù),那么被指派的缺陷修復(fù)人員就要進(jìn)行缺陷定位,也就是找出為修復(fù)該缺陷所需修改的代碼片段,然后進(jìn)行缺陷修復(fù)[5].對(duì)于軟件維護(hù)人員來講,要對(duì)某一個(gè)缺陷進(jìn)行修復(fù),首先必須對(duì)缺陷相關(guān)信息進(jìn)行充分的了解.為此,軟件維護(hù)人員需要閱讀大量的軟件源代碼來幫助自己確定缺陷所在的位置.當(dāng)缺陷報(bào)告和源代碼文件的數(shù)量很多時(shí),軟件缺陷定位就是一件非常費(fèi)時(shí)、費(fèi)工的任務(wù).如果一個(gè)缺陷久久不能定位到正確的位置,缺陷修復(fù)的時(shí)間就會(huì)增加,相應(yīng)的軟件項(xiàng)目的維護(hù)成本也會(huì)增加,同時(shí)用戶對(duì)軟件產(chǎn)品的滿意度就會(huì)下降.

        近年來,研究學(xué)者提出了一系列軟件缺陷定位方法,以期輔助缺陷修復(fù)人員進(jìn)行軟件缺陷定位,減少其在缺陷修復(fù)時(shí)的工作量.軟件缺陷定位一般可分為靜態(tài)定位方法和動(dòng)態(tài)定位方法:靜態(tài)缺陷定位依賴于軟件缺陷報(bào)告、源代碼和開發(fā)過程靜態(tài)信息來進(jìn)行軟件缺陷定位[6];動(dòng)態(tài)缺陷定位依賴于插樁技術(shù)、執(zhí)行監(jiān)控和形式化方法等技術(shù)來進(jìn)行軟件運(yùn)行時(shí)狀態(tài)跟蹤,以確定軟件缺陷可能發(fā)生的位置[7].靜態(tài)定位方法的優(yōu)點(diǎn)主要是不要求一個(gè)可運(yùn)行的軟件系統(tǒng),可以使用在軟件開發(fā)和維護(hù)的任意階段[8].本文的研究焦點(diǎn)在于靜態(tài)缺陷定位方法,即如何利用信息檢索技術(shù)來提高軟件缺陷定位的精度和效率.

        不同于傳統(tǒng)的將軟件缺陷定位為文件級(jí)別的方法,本文提出了一種方法級(jí)別的細(xì)粒度軟件缺陷定位方法:MethodLocator,輔助軟件缺陷修復(fù)人員進(jìn)行缺陷定位.具體來說,為了解決方法體中的詞項(xiàng)稀疏問題,MethodLocator使用基于word2vec詞向量的文檔向量表示方法[9]對(duì)缺陷報(bào)告和源代碼方法體內(nèi)容進(jìn)行向量表示;然后,利用夾角余弦計(jì)算缺陷報(bào)告和源代碼方法之間的相似度,進(jìn)而對(duì)查詢結(jié)果進(jìn)行排序.在對(duì)方法體進(jìn)行自然語(yǔ)言預(yù)處理的過程中,考慮到單個(gè)方法相對(duì)于單個(gè)缺陷報(bào)告的文本內(nèi)容較短,本文根據(jù)方法之間的相似度,利用其他方法對(duì)該單個(gè)方法的內(nèi)容實(shí)施了進(jìn)一步的擴(kuò)充.本文的貢獻(xiàn)包含了以下3個(gè)方面.

        1)在對(duì)傳統(tǒng)的缺陷定位方法進(jìn)行全面回顧的基礎(chǔ)之上,本文提出了一種方法級(jí)別的缺陷定位方法MethodLocator.

        2)本文首次提出了結(jié)合詞向量[9]和TD-IDF的源代碼方法和缺陷報(bào)告向量表示方法,并提出利用單個(gè)方法的相似方法對(duì)其表示向量進(jìn)行擴(kuò)充的方法,其目的是減小單個(gè)方法向量表示的特征稀疏性.

        3)本文自行完成了對(duì)ArgoUML、Ant、Maven和Kylin這4個(gè)開源項(xiàng)目的缺陷數(shù)據(jù)及其對(duì)應(yīng)的方法級(jí)別的源代碼變更數(shù)據(jù)的收集,建立了方法級(jí)別的缺陷定位研究的標(biāo)桿數(shù)據(jù)集.

        本文第1節(jié)介紹近年來在軟件缺陷定位方法研究方面的相關(guān)研究進(jìn)展.第2節(jié)提出一種方法級(jí)別的細(xì)粒度缺陷定位方法MethodLocator.第3節(jié)和第4節(jié)對(duì)本文所提出的MethodLoactor方法與基準(zhǔn)方法進(jìn)行實(shí)驗(yàn)論證和充分比較.第5節(jié)總結(jié)全文并提及未來的工作.

        1 相關(guān)研究

        本文的相關(guān)研究主要包括軟件缺陷靜態(tài)定位方法.Poshyvanyk等人利用潛在語(yǔ)義索引和概率檢索模型提出了PROMESIR方法[10].該方法將源代碼中的特征定位問題轉(zhuǎn)化為不確定性的決策問題.PROMESIR結(jié)合了兩種特征定位技術(shù),即基于情景的事件概率排序和使用潛在語(yǔ)義索引的信息檢索技術(shù)來進(jìn)行軟件缺陷定位.他們對(duì)Mozilla Web瀏覽器的源代碼缺陷數(shù)據(jù)進(jìn)行了實(shí)驗(yàn),其結(jié)果表明,與獨(dú)立使用一種技術(shù)相比,PROMESIR組合使用兩種特征定位技術(shù),顯著提高了缺陷定位的有效性.

        Lukinsu等人[5]提出了一種基于LDA(latent dirichlet allocation)的自動(dòng)缺陷定位技術(shù),并就下述5個(gè)問題開展了廣泛的實(shí)驗(yàn):(1)他們?cè)谥盎贚SI的缺陷定位方法應(yīng)用的數(shù)據(jù)集上進(jìn)行了實(shí)驗(yàn),結(jié)果顯示,基于LDA的缺陷定位方法的準(zhǔn)確性更優(yōu);(2)在軟件項(xiàng)目Rhino的數(shù)據(jù)集中進(jìn)行實(shí)驗(yàn),驗(yàn)證了基于LDA的缺陷定位方法的有效性;(3)在兩個(gè)軟件項(xiàng)目Rhino和Eclipse中進(jìn)行實(shí)驗(yàn),驗(yàn)證了基于LDA的缺陷定位方法的可擴(kuò)展性;(4)他們分析了基于LDA的缺陷定位方法的準(zhǔn)確性與軟件系統(tǒng)規(guī)模之間的關(guān)系,發(fā)現(xiàn)該方法在軟件缺陷定位方面的準(zhǔn)確性與軟件系統(tǒng)的規(guī)模并無顯著相關(guān)關(guān)系;(5)同時(shí),他們也分析了基于 LDA的缺陷定位方法的準(zhǔn)確性與軟件系統(tǒng)設(shè)計(jì)的穩(wěn)定性之間的關(guān)系,結(jié)果顯示,二者并無顯著相關(guān)關(guān)系.

        Zhou等人[11]提出了一種基于信息檢索的缺陷定位方法BugLocator.該方法分為4個(gè)步驟,即語(yǔ)料庫(kù)創(chuàng)建、缺陷報(bào)告和源代碼索引、查詢構(gòu)建/缺陷報(bào)告檢索、源代碼文件排序.首先,他們?cè)贐ugLocator方法中提出了修正的向量空間模型(rVSM),用以對(duì)缺陷報(bào)告和源代碼文件進(jìn)行文本表示;然后,他們根據(jù)給定的缺陷報(bào)告與歷史缺陷報(bào)告的相似度、該缺陷報(bào)告與源代碼文件的相似度以及歷史缺陷報(bào)告改動(dòng)的源代碼文件記錄這3個(gè)維度來對(duì)修復(fù)該缺陷報(bào)告可能需要修改的源代碼文件進(jìn)行排序.他們?cè)贓clipse、SWT、AspectJ、Zxing這4個(gè)項(xiàng)目的數(shù)據(jù)集上進(jìn)行了實(shí)驗(yàn),實(shí)驗(yàn)結(jié)果表明,BugLocator定位效果優(yōu)于基于LDA、LSI的定位方法.

        Moreno[12]提出了一種名為L(zhǎng)obster的靜態(tài)缺陷定位方法.該方法將缺陷報(bào)告中的堆棧信息引入到軟件缺陷靜態(tài)定位方法研究中來,利用堆棧分析和文本檢索相結(jié)合的方法進(jìn)行缺陷定位.具體來說,Lobster方法使用缺陷報(bào)告中的堆棧信息來計(jì)算缺陷報(bào)告的代碼元素和軟件系統(tǒng)的源代碼之間的相似度.結(jié)合堆棧信息與源代碼的相似性和文本信息與源代碼之間的文本相似性來定位與缺陷報(bào)告相關(guān)的代碼片段.

        Saha等人[13]提出一種僅需要源代碼和缺陷報(bào)告來進(jìn)行缺陷定位的方法BLUiR.該方法使用TF-IDF模型,并結(jié)合結(jié)構(gòu)信息檢索來度量缺陷報(bào)告和源代碼文件之間的相似性.首先,他們計(jì)算了缺陷報(bào)告的2個(gè)字段(即報(bào)告總結(jié)(summary)和內(nèi)容描述(description))與源代碼文件中的 4個(gè)部分(即類名(class)、方法名(method)、變量名(variable names)和注釋(comments))兩兩之間的相似性;然后將得到的 8個(gè)相似分?jǐn)?shù)組合,得到缺陷報(bào)告與源代碼文件之間的最終相似度,并依據(jù)此最終相似度,針對(duì)給定的缺陷報(bào)告對(duì)源代碼文件進(jìn)行排名.他們?cè)贑程序軟件的缺陷定位中驗(yàn)證了BLUiR缺陷定位方法的有效性[14].

        Wang等人[15]認(rèn)為,將源代碼的版本歷史、結(jié)構(gòu)化信息、相似缺陷報(bào)告三者結(jié)合起來可以提高軟件缺陷定位的性能,并提出了一種新的缺陷定位方法 Amalgam.該方法集成了 Rahman[16]提出的缺陷預(yù)測(cè)算法來分析源代碼的版本歷史,然后使用BugLocator來分析缺陷報(bào)告系統(tǒng)中類似的缺陷報(bào)告,最后使用BLUiR對(duì)源代碼的結(jié)構(gòu)化信息進(jìn)行分析.他們?cè)?4個(gè)開源項(xiàng)目(AspectJ、Eclipse、SWT和 ZXing)中進(jìn)行的實(shí)驗(yàn)結(jié)果表明,Amalgam的缺陷定位性能優(yōu)于BugLocator和BLUiR.

        Le等人[17]提出了一種多模式軟件缺陷定位方法,他們同時(shí)考慮了缺陷報(bào)告和程序光譜來進(jìn)行軟件缺陷定位.該方法通過構(gòu)建Bug-Specic模型,將特定的缺陷報(bào)告映射到其可能需要修改的源代碼文件.他們?cè)?個(gè)項(xiàng)目AspectJ、Ant、Lucene、Rhino的157個(gè)實(shí)際缺陷中進(jìn)行了實(shí)驗(yàn),驗(yàn)證了他們提出的方法的有效性.

        Wong等人[18]提出使用代碼分段和堆棧跟蹤分析來提高缺陷定位的性能.首先,他們將每個(gè)源代碼文件分成一系列的代碼片段,對(duì)于給定的一個(gè)缺陷報(bào)告,他們使用與該缺陷報(bào)告最相似的代碼片段來表示該源代碼文件;然后,他們分析缺陷報(bào)告中的堆棧信息與源代碼文件之間的相似性;最后,通過綜合兩種分析結(jié)果來定位到可能發(fā)生問題的源代碼文件.

        Ye等人[19]定義了一個(gè)排名模型,使用Learning to Rank(LtR)方法度量缺陷報(bào)告和源文件之間關(guān)系的6個(gè)特征來進(jìn)行缺陷定位.這6個(gè)特征包括:(1)缺陷報(bào)告和源代碼文件之間的相似性;(2)缺陷報(bào)告和源代碼API文檔之間的相似性;(3)以前修復(fù)過的類似缺陷報(bào)告;(4)缺陷修復(fù)新進(jìn)度,即以月為單位的上次修復(fù)時(shí)間;(5)缺陷修復(fù)頻率,即文件被修復(fù)的頻率;(6)特征縮放.他們通過設(shè)定對(duì)應(yīng)比例,綜合這6個(gè)方面的評(píng)分,從而得出單個(gè)源文件用于當(dāng)前修復(fù)該缺陷報(bào)告的可能性.Ye等人[20]認(rèn)為,以自然語(yǔ)言(例如英語(yǔ))表達(dá)的搜索查詢與通常以代碼(例如編程語(yǔ)言)表示的檢索文檔之間的“詞匯鴻溝”使得信息檢索技術(shù)在軟件工程中的搜索任務(wù)變得困難.他們提出引入詞向量以解決“詞匯鴻溝”的問題,之后的實(shí)驗(yàn)證明了使用詞向量能夠?qū)χ暗娜毕荻ㄎ环椒ㄟM(jìn)行改進(jìn).缺陷定位方法的研究從最初的只考慮源代碼文件與缺陷報(bào)告之間的相似性,到后來的考慮缺陷報(bào)告的結(jié)構(gòu)化信息,再加上源代碼文件的結(jié)構(gòu)化信息、缺陷報(bào)告中的堆棧信息等,逐漸豐富了缺陷定位的信息源,使缺陷定位的準(zhǔn)確率得到提升.這也在一定程度上減輕了軟件維護(hù)人員修復(fù)缺陷的復(fù)雜度,提高了缺陷修復(fù)的效率.

        上述關(guān)于軟件缺陷定位的研究都在源代碼文件級(jí)別,而關(guān)于方法級(jí)別上的軟件缺陷研究目前較少.在軟件缺陷預(yù)測(cè)的研究中,Giger等人[21]認(rèn)為,大多數(shù)缺陷預(yù)測(cè)方法是對(duì)文件級(jí)別的缺陷作出預(yù)測(cè),這通常會(huì)使得開發(fā)人員花費(fèi)大量的精力去檢查文件中的所有方法,直到找到發(fā)生錯(cuò)誤的地方.為了減少開發(fā)人員手動(dòng)檢查工作所需要的時(shí)間和精力,Giger等人[21]提出了一個(gè)方法級(jí)別的缺陷預(yù)測(cè)模型,之后,原子等人[22]和Hideak等人[23]也對(duì)方法級(jí)別的缺陷預(yù)測(cè)進(jìn)行了研究.

        和軟件缺陷預(yù)測(cè)類似,在軟件缺陷定位工作中,大多數(shù)軟件缺陷定位方法將研究粒度放在文件級(jí)別,整體存在著粒度比較粗糙的問題[24].如果將缺陷定位的粒度提高到方法級(jí)別,就可以進(jìn)一步提高缺陷修復(fù)人員的工作效率,減少軟件的維護(hù)成本.就目前的文獻(xiàn)調(diào)研結(jié)果來看,僅有Youm等人[25]提出一種綜合分析(bug localization using integrated analysis,簡(jiǎn)稱BLIA)方法來進(jìn)行方法級(jí)別的軟件缺陷定位.BLIA利用缺陷報(bào)告文本、堆棧信息、源代碼注釋、源代碼文件結(jié)構(gòu)信息和源代碼變更歷史信息進(jìn)行軟件缺陷定位.值得一提的是,BLIA 1.0基于文件級(jí)別的缺陷定位,BLIA 1.5將文件級(jí)別的缺陷定位的粒度提高到了方法級(jí)別.在其方法級(jí)別的定位技術(shù)中,首先,他們利用BLIA完成對(duì)文件級(jí)別的排序;然后選取排名前10的文件,對(duì)此類文件中的方法體進(jìn)行分析,得到源代碼方法體的排序,以此來實(shí)現(xiàn)方法級(jí)別的軟件缺陷定位.

        2 細(xì)粒度軟件缺陷定位

        2.1 問題描述

        圖1展示的是 Maven項(xiàng)目 ID為#MNG-4367的缺陷報(bào)告(https://issues.apache.org/jira/si/jira.issueviews:issue-html/MNG-4367/MNG-4367.html).

        Fig.1 An example of a bug report for a Maven project圖1 一個(gè)Maven項(xiàng)目的缺陷報(bào)告示例

        該缺陷報(bào)告頂端是缺陷的編號(hào)和缺陷的總結(jié);接下來是缺陷提交者對(duì)該缺陷做的詳細(xì)描述(description),主要包括缺陷發(fā)生時(shí)的軟件運(yùn)行上下文信息;對(duì)此缺陷感興趣的軟件項(xiàng)目開發(fā)人員可以在詳細(xì)描述下面進(jìn)行評(píng)論(comment),系統(tǒng)會(huì)自動(dòng)記錄評(píng)論人和評(píng)論時(shí)間.對(duì)缺陷報(bào)告進(jìn)行評(píng)論是軟件開發(fā)者圍繞該缺陷主題進(jìn)行交流溝通的主要方法.在遇到比較難以解決的軟件缺陷時(shí),對(duì)該缺陷報(bào)告的評(píng)論可能多達(dá)幾十條.

        假定對(duì)于一個(gè)軟件項(xiàng)目有n個(gè)缺陷報(bào)告BR=(br1,br2,…,brn),bri表示其中的一個(gè)缺陷報(bào)告.為了將bri所描述的缺陷進(jìn)行修復(fù),其所修改的文件為集合為表示該軟件項(xiàng)目的所有源代碼文件的集合,|f(bri)|表示集合f(bri)中元素的數(shù)量).事實(shí)上,當(dāng)一名缺陷修復(fù)人員在修改文件時(shí),他僅僅修改了文件中的1個(gè)或多個(gè)方法,表示文件中所有方法的集合).在傳統(tǒng)的方法中,軟件缺陷定位描述為如何利用缺陷報(bào)告bri從F中準(zhǔn)確定位所需修改的文件集合f(bri).然而在本文中,這里所關(guān)注的問題是如何利用缺陷報(bào)告bri從F中準(zhǔn)確定位所需修改的文件集合f(bri)及其對(duì)應(yīng)的方法.

        表1展示了Maven項(xiàng)目修復(fù)MNG-4367所涉及的具體文件及方法示例.缺陷報(bào)告MNG-4367如圖1所示.Maven項(xiàng)目包含的源代碼文件總數(shù)為898個(gè).為了修復(fù)缺陷報(bào)告MNG-4367描述的缺陷,需要對(duì)2個(gè)源代碼文件即DefaultMirrorSelector.java和DefaultMirrorSelector.java中的6個(gè)方法做出修改,其中,DefaultMirrorSelector.java文件總共包含了5種方法,實(shí)際需要修改其中的3種方法;MirrorProcessorTest.java文件總共包含了14個(gè)方法,實(shí)際需要修改其中的3種方法.具體需要修改的方法見表1.由此,本文將方法級(jí)別的軟件缺陷定位問題描述為:利用根據(jù)缺陷報(bào)告 MNG-4367的描述內(nèi)容,從 Maven項(xiàng)目 898個(gè)源代碼文件中找到要修改的 2個(gè)文件(DefaultMirrorSelector.java,MirrorProcessorTest.java),并進(jìn)一步找出在這2個(gè)文件中需要修改的6種方法.

        Table 1 Source code files and methods for fixing MNG-4367 as well as ranking of the changed methods by MethodLocator表1 修復(fù)MNG-4367所涉及具體文件和方法以及MethodLocator對(duì)所需修改方法的排序

        2.2 MethodLocator細(xì)粒度軟件缺陷定位方法

        本文提出了 MethodLoactor方法,以缺陷報(bào)告bri(包括缺陷報(bào)告中的總結(jié)內(nèi)容 summary、描述內(nèi)容discription和評(píng)論內(nèi)容comment)作為查詢,以M={m1,…,mk}(M表示所有源文件中方法的集合,mj表示其中的一個(gè)方法)作為查詢對(duì)象.使用基于詞向量word2vec的表示方法[9]對(duì)缺陷報(bào)告和源代碼方法體內(nèi)容進(jìn)行向量表示,并利用夾角余弦計(jì)算缺陷報(bào)告和源代碼方法之間的相似度,進(jìn)而對(duì)查詢結(jié)果進(jìn)行排序.

        表1中給出了MethodLocator方法對(duì)于Maven項(xiàng)目缺陷編號(hào)為MNG-4367的缺陷的定位效果,可以看到,6種被修改的方法分別出現(xiàn)在結(jié)果排序的第3位、第6位、第9位、第4位、第1位、第10位.

        圖2展示了本文提出的錯(cuò)誤定位方法MethodLocator的總體架構(gòu).如圖2中步驟③~步驟⑤所示,當(dāng)新的缺陷報(bào)告被提交時(shí),MethodLocator將其視為查詢并計(jì)算源代碼庫(kù)中的各方法與該缺陷報(bào)告的余弦相似度;從源代碼方法的查詢中返回定位到的相關(guān)方法的排名;最后,MethodLocator按相似度降序排列所返回的方法,以定位可能導(dǎo)致該缺陷的方法.

        考慮到方法級(jí)別的方法體(包括方法名稱和方法體內(nèi)容)的內(nèi)容相對(duì)于缺陷報(bào)告來說較少,長(zhǎng)度也較短,在查詢匹配時(shí)往往帶來了大量的稀疏性.在對(duì)近幾年關(guān)于短文本擴(kuò)充和查詢擴(kuò)充相關(guān)主題研究成果[26-29]進(jìn)行調(diào)研的基礎(chǔ)上,本文提出了一種方法體短文本擴(kuò)充方法.它根據(jù)方法體之間的相似性,利用其他方法體對(duì)當(dāng)前方法體短文本進(jìn)行擴(kuò)充.MethodLocator大致可以分為方法體擴(kuò)充和相似度計(jì)算兩個(gè)階段,其具體細(xì)節(jié)見第2.3節(jié)和第2.4節(jié).

        Fig.2 Overall structure of MethodLocator圖2 MethodLocator的總體結(jié)構(gòu)圖

        2.3 方法體向量表示及方法體擴(kuò)充

        圖3詳細(xì)解釋了圖2中的方法體提取①和方法體擴(kuò)充②部分.如圖3中第I部分所示,需要對(duì)方法內(nèi)容進(jìn)行預(yù)處理.首先,從源代碼文件中提取方法體,這里,通過抽象語(yǔ)法樹(abstract syntax tree,簡(jiǎn)稱AST)來實(shí)現(xiàn)對(duì)源代碼文件的解析,對(duì)于從源代碼.Java文件中提取出的一個(gè)方法體,記為mi(1≤i≤n,n為源代碼中方法體的總數(shù));然后,對(duì)每個(gè)方法體進(jìn)行文本預(yù)處理,包括依據(jù) Java編程駝峰命名規(guī)則從方法名中分離出英文單詞(Saha等人[13]的研究表明,將方法名進(jìn)行分離,對(duì)于基于信息檢索的缺陷定位方法來說,可以提高缺陷定位的準(zhǔn)確率)、去掉停用詞、去掉Java保留關(guān)鍵詞、去掉各種符號(hào),得到預(yù)處理后的方法;最后,對(duì)進(jìn)行向量表示,并將對(duì)方法mi預(yù)處理后的向量表示為.

        Fig.3 Method body pretreatment圖3 方法體預(yù)處理

        2.3.1 方法體向量表示

        TF-IDF[30]是一種統(tǒng)計(jì)方法,用以評(píng)估一個(gè)字詞對(duì)一個(gè)文件集或一個(gè)語(yǔ)料庫(kù)中的其中一份文件的重要程度.字詞的重要性隨著它在文件中出現(xiàn)的次數(shù)呈正比增加,但同時(shí)會(huì)隨著它在語(yǔ)料庫(kù)中出現(xiàn)的頻率呈反比下降.雖然TF-IDF能夠體現(xiàn)出各個(gè)詞在文檔中的重要程度,但是使用TF-IDF對(duì)文檔進(jìn)行向量表示沒有考慮文檔中詞之間的順序問題,句子中詞之間沒有聯(lián)系,會(huì)丟失很重要的信息.結(jié)合本文實(shí)際問題,源代碼中方法體內(nèi)容較少,包含詞的數(shù)量比較少,以Maven項(xiàng)目中方法體boolean equals(Object obj)為例,經(jīng)過預(yù)處理后,該方法體只包含7個(gè)詞.使用TF-IDF表示后,得到類似于這樣形式的向量表示(a1,a2,…,a7,0,...,0,0,0,0,0,0),其中包含了5 494個(gè)0項(xiàng)(詞典中詞根總數(shù)為5 501),所以只使用TF-IDF對(duì)方法體進(jìn)行向量表示,還會(huì)使得向量表示具有很大的稀疏性.

        將詞映射到一個(gè)新的空間中,并以多維的連續(xù)實(shí)數(shù)向量進(jìn)行表示,叫做“Word Represention”或“Word Embedding”,其最大的貢獻(xiàn)就是使相關(guān)或者相似的詞在距離上更接近了.本文使用 Word2Vec(word2vec:https://deeplearning4j.org/word2vec)模型中的Skip-gram模型進(jìn)行訓(xùn)練,得到詞所對(duì)應(yīng)的向量表示.Skip-gram模型[31]根據(jù)當(dāng)前詞語(yǔ)來預(yù)測(cè)上下文的概率,如圖4所示.采用基于Word2Vec的方法體向量表示方法一方面可以降低向量表示的緯度,減少向量表示的稀疏性;另一方面挖掘了詞之間的關(guān)聯(lián)屬性,從而提高了向量語(yǔ)義上的準(zhǔn)確度.Ye等人也在文獻(xiàn)[20]中使用詞向量來解決自然語(yǔ)言表述的缺陷報(bào)告和代碼表示的源代碼文件之間的“詞匯鴻溝”問題,提高了軟件缺陷定位的準(zhǔn)確率.

        Fig.4 Skip-gram model圖4 Skip-gram模型

        唐明等人在文獻(xiàn)[9]中提出了一種基于 word2vec的文檔向量表示方法.該方法結(jié)合了詞向量和 TF-IDF方法,并利用實(shí)驗(yàn)驗(yàn)證了該方法的有效性.本文中研究的方法體具有如下特點(diǎn):包含內(nèi)容少、文本長(zhǎng)度較短.采用基于詞向量的表示方法可以挖掘出詞之間的關(guān)聯(lián)屬性,從而提高了向量語(yǔ)義上的準(zhǔn)確度.使用TF-IDF可以考慮單個(gè)詞對(duì)整個(gè)方法體的影響力.為了能夠挖掘出方法體中更多的信息,方便之后的方法體擴(kuò)充,本文采用了文獻(xiàn)[9]中的文檔向量表示方法,即結(jié)合詞向量和TD-IDF對(duì)方法體進(jìn)行向量表示.

        · 首先,將所有的缺陷報(bào)告bri和方法mi′通過 Skip-gram 模型[28]訓(xùn)練,得到mi′中每個(gè)詞項(xiàng)對(duì)應(yīng)的N維詞向量w,即w=(v1,v2,…,vN),其中,vN表示在第N個(gè)維度的值.本文在使用 Skip-gram模型[31]進(jìn)行訓(xùn)練時(shí),結(jié)合一般經(jīng)驗(yàn)[32],將維度N的值設(shè)置為300.由于方法體中包含的單詞個(gè)數(shù)比較少,所以將Skip-gram模型的最低頻率設(shè)置為1,將窗口數(shù)設(shè)為默認(rèn)值5.

        · 然后,MethodLocator選用的基于詞向量的表示方法[9]結(jié)合了詞向量和經(jīng)典的TF-IDF方法[30],其一方面利用 Skip-gram 模型[30]計(jì)算每個(gè)詞項(xiàng)的詞向量;另一方面,也同時(shí)計(jì)算每個(gè)詞項(xiàng)的tfidf值,也就是分析每個(gè)詞項(xiàng)的詞匯頻率tf和逆文本頻率idf,然后計(jì)算其tfidf值.{t1,t2,…,tm}表示從方法體中提取出的詞項(xiàng),m表示詞干總數(shù),則對(duì)于單個(gè)詞項(xiàng)ti,其tfidf計(jì)算方式如公式(1)所示.

        公式(1)中,tf(ti),idf(ti)的計(jì)算方式如公式(2)所示.

        2.3.2 方法體擴(kuò)充

        圖3第II部分展示了方法之間的相似度計(jì)算過程.首先,以第k(1≤k≤|M|)種方法作為查詢,將其他方法視為查詢對(duì)象;然后,通過計(jì)算余弦相似度來對(duì)進(jìn)行排序,由此得到一個(gè)大小為|M|-1的序列;最后,通過對(duì)所有|M|種方法中的每一種方法的相似方法進(jìn)行排序,從而得到|M|個(gè)大小為|M|-1的序列.

        圖3第 III部分展示了方法體的擴(kuò)充過程.這里以第k(1≤k≤|M|)種方法為例,假設(shè)其與其他|M|-1種方法之間的夾角余弦相似度為.其中,方法與方法的夾角余弦相似度如公式(4)所示.

        圖5顯示了擴(kuò)充的偽代碼.

        Fig.5 Method body expansion algorithm圖5 方法體擴(kuò)充算法

        2.4 缺陷報(bào)告與方法體相似度計(jì)算及排序

        在第2.3節(jié)中,Skip-gram模型[31]的輸入為所有缺陷報(bào)告bri和所有方法.同理,對(duì)缺陷報(bào)告的內(nèi)容也利用詞向量進(jìn)行表示.具體而言,對(duì)于第k個(gè)缺陷報(bào)告brk,其包含的詞項(xiàng)為.首先,利用詞向量將缺陷報(bào)告brk中的每個(gè)詞項(xiàng)wk,i表示為;然后,將brk中所有的詞項(xiàng)量進(jìn)行聚集,并利用最大池化 MaxPooling方法[33]在每個(gè)特征維度上選取最大值作為brk的表示向量在該維度上的最大值,即中的第i個(gè)維度的值為.需要說明的是,結(jié)合前人的經(jīng)驗(yàn)及人工觀察,本文選取了缺陷報(bào)告中的總結(jié)、描述和評(píng)論這3個(gè)部分的內(nèi)容.經(jīng)過上述處理后,如圖2中步驟③~步驟⑤所示,MethodLocator以所有經(jīng)過處理的方法ami作為查詢對(duì)象,以缺陷報(bào)告作為查詢.通過計(jì)算二者的余弦相似度,選取相似度較大的方法視作為修復(fù)缺陷而可能修改的方法.

        3 實(shí) 驗(yàn)

        3.1 標(biāo)桿數(shù)據(jù)集建立

        為了驗(yàn)證MethodLocator方法在實(shí)際軟件缺陷定位中的有效性,本文選取了4個(gè)開源軟件項(xiàng)目:ArgoUML、Ant、Maven、Kylin,并收集它們的缺陷報(bào)告和源代碼變更信息,以開展本文的實(shí)驗(yàn).實(shí)驗(yàn)數(shù)據(jù)集的收集步驟具體如下所述.

        (1)獲取源代碼文件.

        這一步的目的是從開源項(xiàng)目代碼庫(kù)中獲取實(shí)驗(yàn)所需的源代碼文件,對(duì)于ArgoUML項(xiàng)目和Ant項(xiàng)目,本文利用SVN工具來獲取源代碼數(shù)據(jù);對(duì)于Maven項(xiàng)目和Kylin項(xiàng)目,本文利用Git工具來獲取源代碼數(shù)據(jù).

        (2)建立由缺陷修復(fù)引起的文件變更數(shù)據(jù)集.

        首先,利用SVN或者Git工具將步驟(1)中所收集的源代碼文件中所有的.java文件的log日志收集下來,并就每一個(gè).java文件,在其log日志中將bug_number(缺陷編號(hào),與缺陷報(bào)告編號(hào)相同)利用SZZ算法[34]抽取出來.然后,從 log日志中獲取該 bug_number對(duì)應(yīng)的.java文件的當(dāng)時(shí)版本號(hào).隨后,從 log日志中找出該 bug_number當(dāng)時(shí)版本的前面所有版本(按修改時(shí)間由近到遠(yuǎn)排序).接著,利用 diff命令比較前面版本與當(dāng)時(shí)版本,選擇一個(gè)最近的有改動(dòng)的前面版本作為基礎(chǔ)版本.比較當(dāng)時(shí)版本與基礎(chǔ)版本的diff(不同的地方),作為修復(fù)該bug_number的bug所導(dǎo)致的代碼變化.然后,利用AST抽象語(yǔ)法樹對(duì)每個(gè)基礎(chǔ)版本源代碼文件和當(dāng)時(shí)版本源代碼文件進(jìn)行解析,提取出所有的method,并查找diff結(jié)果代碼行所屬于的method.最后,將bug_number、修改的Java文件、修改的代碼行以及修改的method集中起來,建立一個(gè)數(shù)據(jù)集.

        (3)缺陷報(bào)告獲取.

        本文分別從這 4個(gè)軟件項(xiàng)目的缺陷跟蹤系統(tǒng)中獲取到對(duì)應(yīng)的缺陷報(bào)告.結(jié)合前人的經(jīng)驗(yàn)及人工觀察[2],本文選取了缺陷報(bào)告的總結(jié)(summary)、描述(description)和評(píng)論(comment)這3個(gè)字段的內(nèi)容作為缺陷報(bào)告的自然語(yǔ)言描述內(nèi)容.為了保證實(shí)驗(yàn)的可重復(fù)性和可驗(yàn)證性,本實(shí)驗(yàn)從全部缺陷報(bào)告中選出缺陷變更記錄可追蹤性良好的部分缺陷報(bào)告作為實(shí)驗(yàn)數(shù)據(jù),即通過缺陷編號(hào)(bug_number),能夠準(zhǔn)確地對(duì)應(yīng)缺陷報(bào)告以及步驟(2)中的源代碼修改記錄.表2展示了本文收集到的4個(gè)開源項(xiàng)目的各類數(shù)據(jù)的信息.

        Table 2 Information on experimental data表2 實(shí)驗(yàn)數(shù)據(jù)信息

        這里需要說明的是,在步驟(2)中,為了探明對(duì)某一個(gè)缺陷號(hào) bug_number所做出的在源代碼中的具體修改,本文將源代碼文件的當(dāng)時(shí)版本和之前的所有源代碼版本進(jìn)行了 diff比較操作.這樣做的原因是,在某些源代碼的提交過程中,僅僅是對(duì)源代碼的注釋或者在版本控制系統(tǒng)的批注信息做了添加和變更操作,而未對(duì)源代碼本身做出實(shí)質(zhì)的變更.因此,當(dāng)在源代碼文件中得到一個(gè)缺陷號(hào)之后,我們需要追蹤離當(dāng)時(shí)版本最近的一次的軟件源代碼變更,并將該變更視作為修復(fù)該缺陷所做出的變更.

        3.2 Word2vec訓(xùn)練

        本文利用 deeplearning4j(deeplearning4j:https://deeplearning4j.org/word2vec)中的 Word2Vec完成各項(xiàng)目中的詞的訓(xùn)練及詞向量的獲得.訓(xùn)練基本情況見表3.

        Table 3 Basic information of Word2Vec training表3 Word2Vec訓(xùn)練的基本信息

        3.3 基準(zhǔn)方法

        為了論證 MethodLocator方法在缺陷定位方面的實(shí)際性能,本文選取了兩種基準(zhǔn)方法進(jìn)行對(duì)比實(shí)驗(yàn),包括BugLocator[11]和BLIA 1.5[25].Zhou等人提出的Buglocator[10]是最近提出的靜態(tài)缺陷定位方法中比較典型和廣為接受的文件級(jí)別的定位方法.由于本文的關(guān)注點(diǎn)在于方法級(jí)別的軟件缺陷定位,因此,我們將BugLocator方法的定位粒度由原始的文件級(jí)別調(diào)整到方法級(jí)別,而其基本的計(jì)算過程得以完全重復(fù),即由以前的使用源代碼文件建立索引變更為使用方法體建立索引;由考察相似缺陷報(bào)告修改的源代碼文件情況變更為考察相似缺陷報(bào)告修改的方法體情況.在方法級(jí)別的基于信息檢索的靜態(tài)缺陷定位方面,目前僅有Youm[25]提出的BLIA 1.5方法可用于實(shí)際比較.因此,本文同時(shí)也選擇了Youm的BLIA 1.5作為基準(zhǔn)方法,用于論證MethodLocator的有效性.BLIA 1.5定位方法針對(duì)特定的缺陷報(bào)告,首先對(duì)可能作出變更的源代碼文件進(jìn)行排序,然后選取排序靠前的文件對(duì)它們中的方法做進(jìn)一步的排序,從而實(shí)現(xiàn)方法級(jí)別的定位.也就是說,BLIA 1.5定位方法過濾掉了排名較后的文件中的方法.BLIA 1.5方法中有4個(gè)參數(shù)可以對(duì)定位效果進(jìn)行控制.經(jīng)過反復(fù)實(shí)驗(yàn),本文確定了對(duì)應(yīng)的各實(shí)驗(yàn)數(shù)據(jù)的參數(shù)設(shè)置,具體設(shè)置如下:Ant(α=0.3,β=0.2,γ=0.4,k=120),Maven(α=0.2,β=0.2,γ=0.3,k=120),Kylin(α=0.0,β=0.2,γ=0.5,k=120),ArgoUML(α=0.3,β=0.0,γ=0.5,k=120).

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

        為了論證本文提出的缺陷定位方法的有效性及意義,本文選擇前N排名(topNrank)、平均準(zhǔn)確率(mean average precision,簡(jiǎn)稱MAP)和平均倒數(shù)排名(mean reciprocal rank,簡(jiǎn)稱MRR)這3個(gè)指標(biāo)進(jìn)行實(shí)驗(yàn)結(jié)果比較.對(duì)于某個(gè)項(xiàng)目的第i個(gè)缺陷報(bào)告bri,為修復(fù)該缺陷,實(shí)際修改的方法體的集合為.在對(duì)本文提出的方法進(jìn)行評(píng)價(jià)時(shí),需利用實(shí)際修改的方法體集合中所有方法體在本文推薦結(jié)果列表中出現(xiàn)的位置進(jìn)行相應(yīng)的計(jì)算,以此來評(píng)價(jià)本文提出的方法的優(yōu)劣.

        1)前N排名(topNrank)

        它表示缺陷報(bào)告對(duì)應(yīng)做出變更的方法體出現(xiàn)在返回結(jié)果的前N(N=1,5,10)位中的數(shù)量的比率.使用該度量方法,對(duì)于給定的缺陷報(bào)告,如果前N個(gè)查詢結(jié)果包含至少1個(gè)修復(fù)缺陷的方法體,就認(rèn)為缺陷被準(zhǔn)確定位.TopNRank度量值越大,說明缺陷定位方法的定位性能就越好.

        2)平均準(zhǔn)確率值(mean average precision,簡(jiǎn)稱MAP)

        它表示對(duì)所有缺陷報(bào)告進(jìn)行源代碼定位后的準(zhǔn)確率的平均值.MAP值反映了缺陷定位方法在全部缺陷上準(zhǔn)確定位所有需要修改的源代碼的單值指標(biāo).缺陷定位方法檢索出來的需要修改的源代碼方法體越靠前(rank越高),MAP就越大;反之,如果缺陷定位方法沒有檢索出需要修改的源代碼方法體,則準(zhǔn)確率默認(rèn)為0.其中,單個(gè)缺陷的平均精度(表示為AvgP)如公式(7)所示.

        其中,R表示一次缺陷定位中所能正確定位的源代碼方法體排序的集合,|R|表示正確定位的源代碼方法體個(gè)數(shù),rankk表示第k個(gè)正確的源代碼方法體的排名.針對(duì)所有的缺陷報(bào)告的MAP如公式(8)所示.

        其中,Q為缺陷報(bào)告的集合,|Q|表示Q中缺陷報(bào)告的數(shù)目,AvgPj表示第j個(gè)缺陷報(bào)告的平均精度值.

        3)平均倒數(shù)排名(mean reciprocal rank,簡(jiǎn)稱MRR)

        表示相關(guān)源代碼方法體的位置倒數(shù)的平均值,MRR越高,說明算法的準(zhǔn)確率越高.MRR計(jì)算公式如下.

        其中,Q為缺陷報(bào)告的集合,|Q|表示Q中缺陷報(bào)告的數(shù)目,ranki表示定位出的與第i個(gè)缺陷報(bào)告相關(guān)的方法體最靠前排名的位置.

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

        為了全面評(píng)價(jià) MethodLocator在方法級(jí)別的軟件缺陷定位上的性能,本文設(shè)置了以下 3個(gè)研究問題,對(duì)MethodLocator的參數(shù)設(shè)置以及基準(zhǔn)方法進(jìn)行了全面的分析.

        · 研究問題1:在MethodLocator中,方法體擴(kuò)充速率α的變化對(duì)軟件缺陷定位的性能有何影響?

        · 研究問題2:當(dāng)把文件級(jí)別的缺陷定位方法(BugLocator)運(yùn)用于方法級(jí)別缺陷定位時(shí),其性能與本文所提出的MethodLocator相比,孰優(yōu)孰劣?

        · 研究問題3:本文提出的MethodLocator與現(xiàn)有的方法級(jí)別的缺陷定位方法BLIA 1.5相比,孰優(yōu)孰劣?

        4.1 對(duì)研究問題1的分析

        MethodLocator中,方法體擴(kuò)充系數(shù)α變化對(duì)定位效果的影響如圖6~圖8所示,其中,圖6顯示了α變化對(duì)MAP的影響,圖7顯示了α變化對(duì)MRR的影響,圖8顯示了α變化對(duì)ToP-N的影響.本文實(shí)驗(yàn)設(shè)置α從0到1變化,每次增加0.05.當(dāng)α=0時(shí),顯示的就是對(duì)方法體不進(jìn)行擴(kuò)充的定位效果.

        從圖6~圖8展示的效果可以看出:

        · 首先,在選定的4個(gè)項(xiàng)目中,當(dāng)α=0.05時(shí)取得最優(yōu)效果;當(dāng)α>0.05時(shí),定位效果逐漸變差,MAP、MRR和ToP-N值逐漸降低.當(dāng)α的值增大到一定程度之后,Top-N指標(biāo)、MAP指標(biāo)和MRR指標(biāo)的性能都會(huì)降低到α=0對(duì)應(yīng)性能水平的下方.也就是說,當(dāng)α的取值較大時(shí),擴(kuò)充的效果明顯不如不擴(kuò)充的效果.對(duì)于這個(gè)結(jié)果的解釋是,當(dāng)α較小時(shí),其他方法對(duì)當(dāng)前方法的擴(kuò)充表示向量amk形成了有益補(bǔ)充;當(dāng)α較大時(shí),其他方法給當(dāng)前方法的擴(kuò)充表示向量amk帶來了大量噪聲.這也說明,在對(duì)方法體進(jìn)行擴(kuò)充時(shí),在增強(qiáng)原方法體信息表示的同時(shí)也會(huì)引入一些噪聲干擾.α在一定的取值范圍內(nèi),增強(qiáng)效果大于干擾效果,這樣就使定位效果得到提升;當(dāng)α取值離開該范圍時(shí),干擾效果大于增強(qiáng)效果,這樣就會(huì)使定位效果變差.在 MethodLocator中,方法體擴(kuò)充時(shí)如何減少干擾信息是一個(gè)難點(diǎn).方法體擴(kuò)充不可避免地會(huì)引入進(jìn)干擾信息,α值的作用就是盡量控制干擾信息的影響.α值與定位效果的好壞息息相關(guān).對(duì)于不同的方法體,其α值可能也會(huì)不同.本文在進(jìn)行實(shí)驗(yàn)時(shí),將α值作為定值,以 0.05為步長(zhǎng)進(jìn)行實(shí)驗(yàn).關(guān)于如何更為精確和自動(dòng)化地設(shè)定α的取值,本文會(huì)在未來的工作中進(jìn)一步研究.

        · 其次,就4個(gè)項(xiàng)目來說,在所有的度量指標(biāo)Top-N、MAP和MRR上,MethodLocator在Ant項(xiàng)目上的表現(xiàn)最好,而在其余3個(gè)項(xiàng)目ArgoUML、Maven和Kylin上的表現(xiàn)不相上下.經(jīng)過對(duì)實(shí)驗(yàn)數(shù)據(jù)的分析,我們發(fā)現(xiàn),修復(fù)一個(gè)缺陷,在 Ant項(xiàng)目中平均要修改 4個(gè)方法體;在 Kylin項(xiàng)目中平均要修改 8個(gè)方法體;Maven項(xiàng)目中平均要修改5.4個(gè)方法體;Argouml項(xiàng)目中平均要修改6.2個(gè)方法體.就修復(fù)一個(gè)缺陷所要修改方法體的數(shù)量方面,明顯 Ant項(xiàng)目需要修改的數(shù)量最少,這在一定程度上降低了缺陷定位的難度,使得MethodLocator在Ant項(xiàng)目上具有較好的表現(xiàn).

        Fig.6 Effect of expansion coefficientαon MAP value in MethodLocator圖6 MethodLocator中,擴(kuò)充系數(shù)α對(duì)MAP值的影響

        Fig.7 Effect of expansion coefficientαon MRR value in MethodLocator圖7 MethodLocator中,擴(kuò)充系數(shù)α對(duì)MRR值的影響

        Fig.8 Effect of expansion coefficientαon ToP-Nvalue in MethodLocator圖8 MethodLocator中,擴(kuò)充系數(shù)α對(duì)ToP-N值的影響

        4.2 對(duì)研究問題2的分析

        本文將傳統(tǒng)的文件級(jí)別的缺陷定位方法 BugLocator應(yīng)用到方法級(jí)別進(jìn)行實(shí)驗(yàn),以考察文件級(jí)別定位方法被運(yùn)用到方法級(jí)別定位時(shí)的表現(xiàn).當(dāng)α=0.05時(shí),與本文提出的方法 MethodLocator相比,二者的不同之處主要在于,BugLocator對(duì)方法體進(jìn)行向量表示時(shí)直接采用 tfidf的向量表示方法,且沒有對(duì)方法體進(jìn)行擴(kuò)充;MethodLocator在對(duì)方法體進(jìn)行向量表示時(shí),采用將word2vec和tfidf相結(jié)合的方法,并且對(duì)方法體進(jìn)行擴(kuò)充.表4顯示了MethodLocator和BugLocator在本文選擇的4個(gè)項(xiàng)目上的實(shí)驗(yàn)結(jié)果.

        Table 4 MethodLocator and BugLocator comparison of experimental results表4 MethodLocator和BugLocator實(shí)驗(yàn)結(jié)果對(duì)比

        從表中可以看到,MethodLocator具有比BugLocator更好的效果.具體來說,在MAP指標(biāo)上,MethodLocator較之BugLocator在4個(gè)項(xiàng)目上分別提高了16.4%、25.9%、9.9%、8.2%;在MRR指標(biāo)上,MethodLocator較之BugLocator在 4個(gè)項(xiàng)目上分別提高了 15.2%、25.7%、12.5%、13.6%;在 TOP-N指標(biāo)上,以 ToP-1為例,MethodLocator較之BugLocator在4個(gè)項(xiàng)目上分別提高了12.9%、37.7%、13.2%、37.0%.方法體相對(duì)于源代碼文件來說,文本內(nèi)容及可包含信息明顯較少,對(duì)于傳統(tǒng)文件級(jí)方法運(yùn)用到方法級(jí)別定位時(shí),直接對(duì)方法體進(jìn)行向量表示并進(jìn)行定位,就會(huì)因?yàn)榉椒w信息表示不足而取得較差的結(jié)果.

        當(dāng)α=0時(shí),表4中展示的即為不對(duì)方法體進(jìn)行擴(kuò)充時(shí)的缺陷定位效果.可以發(fā)現(xiàn),在20個(gè)指標(biāo)中,有3個(gè)是與BugLocator相同的,只有在1個(gè)指標(biāo)上比BugLocator表現(xiàn)好.所以,只使用新的向量表示方法而不對(duì)方法體進(jìn)行擴(kuò)充,MethodLocator缺陷定位效果并沒有優(yōu)于基準(zhǔn)方法,進(jìn)一步顯示出方法體擴(kuò)充的重要性.關(guān)于采用新的向量表示方法與方法體擴(kuò)充對(duì)準(zhǔn)確率的影響更為詳細(xì)的測(cè)算問題,則需要設(shè)置更為精確的對(duì)比實(shí)驗(yàn)來探討.

        4.3 對(duì)研究問題3的分析

        BLIA 1.5方法是一種綜合了多方面信息源進(jìn)行方法級(jí)缺陷定位的方法.從文獻(xiàn)[25]中各信息源的影響分析中可以看到,如果一個(gè)缺陷報(bào)告包含有缺陷的堆棧信息,那么在缺陷定位中,堆棧信息的分析將起到主要作用,其次才是源代碼與缺陷報(bào)告之間的相似性;如果一個(gè)缺陷報(bào)告中不包含堆棧信息,在缺陷定位時(shí),源代碼與缺陷報(bào)告之間的相似性則起主要作用.與本文所提出的MethodLocator相比,BLIA 1.5考慮的信息源較多.但是由于多源信息之間往往會(huì)存在相互沖突和噪聲情況,因此,BLIA 1.5在方法級(jí)別缺陷定位上的性能需要進(jìn)一步驗(yàn)證.

        從表5可以看出,MethodLocator方法相對(duì)于BLIA 1.5方法在方法級(jí)別的軟件缺陷定位方面達(dá)到了較好的效果.具體來說,在MAP指標(biāo)上,MethodLocator較之BLIA 1.5在4個(gè)項(xiàng)目上分別提高了16.4%、23.6%、6.9%、3.9%;在MRR指標(biāo)上,MethodLocator較之BLIA 1.5在4個(gè)項(xiàng)目上分別提高了14.7%、24.5%、10.8%、11.7%;在TOP-N指標(biāo)上,以ToP-1為例,MethodLocator較之BLIA 1.5在4個(gè)項(xiàng)目上分別提高了12.1%、32.7%、8.5%、28.6%.盡管BLIA 1.5方法單獨(dú)考慮了缺陷報(bào)告中的堆棧信息,將其與總結(jié)、描述和評(píng)論文本中的自然語(yǔ)言文本分開處理,但是首先,在本文所考察的項(xiàng)目中,所有缺陷報(bào)告中包含堆棧信息的缺陷報(bào)告所占比例并不大,普遍為 5%~10%之間,這些堆棧信息顯然并不能在缺陷定位的結(jié)果中起到?jīng)Q定性的作用;其次,即使缺陷報(bào)告中含有堆棧信息,然而,由于堆棧信息所包含信息往往從最表面調(diào)用的函數(shù)代碼追蹤到最深層出現(xiàn)問題的源代碼,整個(gè)堆棧軌跡的路徑較長(zhǎng),從而導(dǎo)致對(duì)可能發(fā)生缺陷的源代碼的誤判.例如,在本文考察的 ArgoUML項(xiàng)目缺陷報(bào)告4 173中,它包含的堆棧信息由表及里的追蹤到了11個(gè)類的14個(gè)函數(shù).也就是說,11個(gè)類和14個(gè)函數(shù)以及它們依賴的類和函數(shù)都可能是造成該缺陷的原因.進(jìn)一步來說,通過本文調(diào)研發(fā)現(xiàn),堆棧信息一般在文件級(jí)別的粗粒度缺陷定位中有較好的效果[14,16].但是對(duì)于方法級(jí)別的細(xì)粒度定位,由于堆棧信息在引起缺陷的方法的指向性信息上弱化,因此并未見利用其改善缺陷預(yù)測(cè)或者定位的研究成果.由于以上諸多原因,在本文的實(shí)驗(yàn)中,堆棧信息并不能顯著提高方法級(jí)別的缺陷定位的效果.

        Table 5 MethodLocator and BLIA 1.5 comparison of experimental results表5 MethodLocator和BLIA 1.5實(shí)驗(yàn)結(jié)果對(duì)比

        5 結(jié) 論

        對(duì)于任何軟件項(xiàng)目,軟件缺陷的出現(xiàn)都是不可避免的.為了提高軟件質(zhì)量和用戶滿意度,必須快速而及時(shí)、準(zhǔn)確而有效地修復(fù)軟件在實(shí)際使用中的缺陷.面對(duì)一個(gè)缺陷報(bào)告,軟件開發(fā)人員需要找到缺陷發(fā)生的位置并修復(fù)該缺陷,這是一項(xiàng)費(fèi)時(shí)、費(fèi)力的任務(wù).為了幫助軟件開發(fā)人員能快速找到缺陷發(fā)生的位置,本文提出了一種基于信息檢索的方法級(jí)別的缺陷定位方法 MethodLocaor.不同于傳統(tǒng)的文件級(jí)別的定位方法,該方法旨在縮小缺陷定位的粒度而盡量減少缺陷修復(fù)人員的修復(fù)工作量.通過詞向量方法和TF-IDF方法,MethodLocaor實(shí)現(xiàn)了源代碼方法的初步向量表示.通過方法體擴(kuò)充方法,MethodLocaor解決了源代碼方法在文本表示上的稀疏性.在 4個(gè)實(shí)際項(xiàng)目中的實(shí)驗(yàn)表明,MethodLocaor的定位效果受到方法體擴(kuò)充系數(shù)α的影響,在本文實(shí)驗(yàn)的數(shù)據(jù)集上,α在0.05處定位效果最優(yōu);與傳統(tǒng)文件級(jí)定位方法BugLocator應(yīng)用到方法級(jí)別的效果相比,MethodLocaor具有更好的定位性能;與方法級(jí)定位方法BLIA 1.5方法相比,MethodLocaor有更好的表現(xiàn).

        在未來的工作中,我們將綜合考慮缺陷報(bào)告和源代碼方法的豐富信息來進(jìn)一步提高M(jìn)ethodLacator在方法級(jí)別上的缺陷定位效果.具體來說,在缺陷報(bào)告向量表示方面,我們將考慮缺陷報(bào)告提交人員的級(jí)別、缺陷報(bào)告提交時(shí)間、超文本鏈接信息、堆棧信息和代碼信息等;在源代碼方法方面,我們將考慮方法的圈復(fù)雜度、方法之間的依賴關(guān)系、開發(fā)人員版本信息等.目的是研究有關(guān)缺陷報(bào)告和源代碼方法的全方位信息,并利用其來進(jìn)行軟件方法級(jí)別的缺陷定位,以期得到效果更好的缺陷定位方法.

        猜你喜歡
        報(bào)告信息方法
        一圖看懂十九大報(bào)告
        訂閱信息
        中華手工(2017年2期)2017-06-06 23:00:31
        報(bào)告
        可能是方法不對(duì)
        用對(duì)方法才能瘦
        Coco薇(2016年2期)2016-03-22 02:42:52
        報(bào)告
        四大方法 教你不再“坐以待病”!
        Coco薇(2015年1期)2015-08-13 02:47:34
        捕魚
        報(bào)告
        展會(huì)信息
        国产精品永久免费| 亚洲综合中文字幕乱码在线| 中文字幕精品久久天堂一区| 中文在线最新版天堂av| 成人大片免费视频播放一级| 国产一精品一av一免费| 中文字幕美人妻亅u乚一596| 一本色道久久88加勒比—综合| 少妇做爰免费视频网站| 一本久到久久亚洲综合| 男女啪啪免费视频网址| 好大好爽我要高潮在线观看| 亚洲综合欧美在线一区在线播放| 亚洲аv天堂无码| 美女高潮流白浆视频在线观看| 蜜桃视频色版在线观看| 日本免费看片一区二区三区| 天堂国产一区二区三区| 毛茸茸性xxxx毛茸茸毛茸茸| 国产AV秘 无码一区二区三区| 国产三级在线观看不卡| 曰批免费视频播放免费| 国产精品久久久久久影视 | 日本加勒比一区二区在线观看| 人妻诱惑中文字幕在线视频| 日日拍夜夜嗷嗷叫国产| 夜夜揉揉日日人人| 国产一区二区三区杨幂| 97超碰精品成人国产| 99久久精品国产一区二区三区| 久久国产亚洲AV无码麻豆| 亚洲av高清一区三区三区| 99国产精品99久久久久久| 亚洲中文无码永久免| 99久久99久久久精品久久| 亚洲女同精品一区二区久久| 帅小伙自慰videogay男男| 亚洲av鲁丝一区二区三区| 日韩国产有码精品一区二在线| 国产一区二区黄色录像| 98久9在线 | 免费|