• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

    基于信息檢索的缺陷定位:問(wèn)題、進(jìn)展與挑戰(zhàn)?

    2020-11-03 12:26:04郭肇強(qiáng)周慧聰劉釋然李言輝周毓明徐寶文
    軟件學(xué)報(bào) 2020年9期
    關(guān)鍵詞:報(bào)告方法模型

    郭肇強(qiáng) , 周慧聰 , 劉釋然 , 李言輝 , 陳 林 , 周毓明 , 徐寶文

    1(計(jì)算機(jī)軟件新技術(shù)國(guó)家重點(diǎn)實(shí)驗(yàn)室(南京大學(xué)),江蘇 南京 210023)2(南京大學(xué) 計(jì)算機(jī)科學(xué)與技術(shù)系,江蘇 南京 210023)

    軟件缺陷(software bug)是伴隨軟件產(chǎn)品整個(gè)生命周期的產(chǎn)物.特別對(duì)于大型軟件,由于其復(fù)雜的結(jié)構(gòu)和眾多的開(kāi)發(fā)者,缺陷不可避免地在開(kāi)發(fā)過(guò)程中被引入.軟件缺陷的存在,極大地降低了軟件質(zhì)量并且增加了軟件的維護(hù)成本,嚴(yán)重的缺陷可能會(huì)給企業(yè)造成經(jīng)濟(jì)損失甚至對(duì)人的生命安全造成威脅.為了提升軟件的質(zhì)量,軟件產(chǎn)品要在不斷更新?lián)Q代或者版本更迭中對(duì)已經(jīng)發(fā)現(xiàn)的缺陷進(jìn)行清除.從歷史數(shù)據(jù)來(lái)看,對(duì)缺陷的清除工作消耗了接近一半的軟件開(kāi)發(fā)和維護(hù)成本[1].因此,在學(xué)術(shù)界有大量的研究者致力于缺陷相關(guān)(包括但不限于缺陷預(yù)測(cè)[2,3]、缺陷定位[4,5]和缺陷修復(fù)[6]等)的研究.其中,非常重要并且耗費(fèi)時(shí)間和精力的一個(gè)任務(wù)是對(duì)缺陷進(jìn)行定位,即找出產(chǎn)生該缺陷的軟件實(shí)體(例如源文件).

    當(dāng)軟件中的缺陷被發(fā)現(xiàn)時(shí),根據(jù)缺陷產(chǎn)生時(shí)的軟件狀況,用戶(hù)或者軟件系統(tǒng)會(huì)記錄缺陷相關(guān)的信息,并且生成一份半結(jié)構(gòu)化的缺陷報(bào)告上傳到缺陷追蹤系統(tǒng)上[7].軟件維護(hù)人員對(duì)缺陷的修復(fù)工作始于閱讀缺陷報(bào)告,在理解缺陷的基礎(chǔ)上,他們從代碼庫(kù)中查找與缺陷報(bào)告描述內(nèi)容相關(guān)的代碼實(shí)體進(jìn)行審查,直至找出產(chǎn)生該缺陷的位置.值得注意的是:一個(gè)在實(shí)際開(kāi)發(fā)項(xiàng)目通常包含成百上千甚至更多的源文件,手工從其中找出與缺陷相關(guān)的那極小部分代碼是十分困難的.為此,開(kāi)發(fā)人員急需借助于缺陷自動(dòng)定位工具來(lái)輔助他們查找產(chǎn)生缺陷位置.

    為了幫助開(kāi)發(fā)人員快速找到產(chǎn)生缺陷的位置,研究者們提出了多種自動(dòng)化的缺陷定位(bug localization,簡(jiǎn)稱(chēng)BL)解決方法.現(xiàn)有的解決方法可以根據(jù)是否需要執(zhí)行測(cè)試用例劃分為動(dòng)態(tài)缺陷定位方法和靜態(tài)缺陷定位方法.其中,動(dòng)態(tài)缺陷定位方法要運(yùn)行被測(cè)程序來(lái)收集程序執(zhí)行的動(dòng)態(tài)信息(包括執(zhí)行路徑和結(jié)果等),根據(jù)這些信息來(lái)定位缺陷語(yǔ)句在代碼中的可疑位置.這類(lèi)方法的主流思路被稱(chēng)為基于程序頻譜的缺陷定位[4].由于直接運(yùn)行目標(biāo)程序,這類(lèi)方法通??梢栽谳^細(xì)的粒度上對(duì)缺陷進(jìn)行定位,但是需要消耗執(zhí)行程序的時(shí)間和資源成本.因此,這類(lèi)方法有助于對(duì)代碼進(jìn)行調(diào)試.而靜態(tài)缺陷定位方法不需要直接運(yùn)行被測(cè)程序,這類(lèi)方法主要分析代碼和缺陷報(bào)告中的靜態(tài)信息(包括文本、代碼實(shí)體等),然后計(jì)算每個(gè)代碼實(shí)體(源文件)和報(bào)告中的靜態(tài)信息的相似度分值,最后根據(jù)得分將可疑的代碼實(shí)體推薦給開(kāi)發(fā)者.靜態(tài)方法的優(yōu)勢(shì)在于使用簡(jiǎn)單,成本低廉(不需要運(yùn)行代碼).同時(shí),它的不足是定位粒度較粗糙,通常在文件或者方法級(jí)別對(duì)缺陷進(jìn)行定位.可以看出,這類(lèi)方法適用于幫助開(kāi)發(fā)者快速找到缺陷報(bào)告所描述的問(wèn)題的相關(guān)位置.

    近年來(lái),靜態(tài)缺陷定位研究工作的一類(lèi)主流方法是基于信息檢索的缺陷定位(information retrieval based bug localization,簡(jiǎn)稱(chēng)IRBL).該領(lǐng)域目前的研究重點(diǎn)在于改良IRBL 方法和完善IRBL 的評(píng)價(jià)體系兩方面.截止2020 年3 月,已有20 多種(仍在增長(zhǎng))不同IRBL 方法和多種不同的評(píng)價(jià)指標(biāo)被提出.從現(xiàn)有研究結(jié)果來(lái)看,IRBL方法在實(shí)驗(yàn)評(píng)估中已經(jīng)取得了較高的性能.然而,由于現(xiàn)實(shí)中不同項(xiàng)目代碼的結(jié)構(gòu)和風(fēng)格存在差異性,并且收到的缺陷報(bào)告內(nèi)容質(zhì)量參差不齊,目前的IRBL 方法仍然存在局限性,在現(xiàn)實(shí)的實(shí)踐應(yīng)用中仍然面臨一些挑戰(zhàn).

    (1) 方法所用的特征由人工設(shè)計(jì),對(duì)目標(biāo)項(xiàng)目依賴(lài)高,在其他項(xiàng)目上遷移性能較差;

    (2) 目前,這些方法僅在實(shí)驗(yàn)評(píng)估中取得較好性能分?jǐn)?shù),但是由于各自實(shí)驗(yàn)設(shè)置的差異性,開(kāi)發(fā)者無(wú)法準(zhǔn)確判斷哪一種方法最具有實(shí)用性.因此,這些方法在生產(chǎn)實(shí)踐中的表現(xiàn)結(jié)果未知;

    (3) 現(xiàn)有方法僅僅給開(kāi)發(fā)者推薦出與缺陷有關(guān)的代碼文件列表,沒(méi)有包含任何有助于定位的提示信息.

    值得注意的是,目前學(xué)術(shù)界已有多份綜述性的工作[4,8-12]對(duì)缺陷定位領(lǐng)域的技術(shù)研究進(jìn)行總結(jié).這些工作對(duì)多種特定類(lèi)型的缺陷定位技術(shù)進(jìn)行了整理和歸納,包括基于程序頻譜的缺陷定位技術(shù)[4]、基于程序變異的缺陷定位技術(shù)[12]等.但是據(jù)我們所知,還沒(méi)有一項(xiàng)工作對(duì)IRBL 這種特定類(lèi)型的缺陷定位方向進(jìn)行總結(jié)(截止2020 年3 月).由于對(duì)IRBL 研究的論文體量已經(jīng)較為龐大并且是一類(lèi)熱門(mén)的研究方向,為了彌補(bǔ)這一空白,同時(shí)方便后續(xù)相關(guān)研究工作的進(jìn)行,本文首次對(duì)近10 年來(lái)IRBL 的研究歷史進(jìn)行回顧,對(duì)現(xiàn)有的成果進(jìn)行分類(lèi)介紹和總結(jié),并在此基礎(chǔ)上指出該領(lǐng)域面臨的挑戰(zhàn).

    本文在第1 節(jié)概述主要的研究問(wèn)題.第2 節(jié)說(shuō)明本綜述的文獻(xiàn)檢索方式和文獻(xiàn)匯總信息.然后,分別在第3節(jié)和第4 節(jié)從模型改良和模型評(píng)估兩個(gè)方面介紹近年的研究進(jìn)展.在第5 節(jié)分類(lèi)別地介紹缺陷定位領(lǐng)域的其他研究方法.在第6 節(jié)分析IRBL 領(lǐng)域的研究所面臨的挑戰(zhàn).最后,在第7 節(jié)總結(jié)本文的內(nèi)容.

    1 研究問(wèn)題

    1.1 IRBL概要介紹

    信息檢索技術(shù)早期被用來(lái)在代碼中進(jìn)行概念/特征定位(不同文獻(xiàn)中的術(shù)語(yǔ)略有差別:concept location[13-15],feature location[16-18]或者concern localization[19-22])任務(wù),其目的是從代碼庫(kù)中找出與特定功能相關(guān)的代碼.后來(lái)演變?yōu)槭褂眯畔z索技術(shù)對(duì)缺陷進(jìn)行定位(IRBL),并成為目前主流的靜態(tài)缺陷定位研究方法.具體來(lái)說(shuō),程序中的特征是指能夠被開(kāi)發(fā)者感知或者看見(jiàn)的功能,其中,那些想要被拋棄并且被移除的“功能”便可以看作是一種特殊的特征(即缺陷).特征定位是指從項(xiàng)目中找出具有指定特征的那部分源代碼.因此,對(duì)于要在程序中拋棄并移除的“功能”的定位,便逐步變成現(xiàn)有的基于信息檢索的缺陷定位.

    IRBL 方法關(guān)注的對(duì)象是缺陷報(bào)告和軟件源碼.從技術(shù)角度看,IRBL 方法將缺陷定位任務(wù)看作是進(jìn)行信息檢索(IR)的過(guò)程.Rao 等人[23]在2011 年總結(jié)了信息檢索領(lǐng)域的IR 術(shù)語(yǔ)與軟件工程領(lǐng)域在缺陷定位時(shí)所用術(shù)語(yǔ)的對(duì)照關(guān)系如表1 所示.據(jù)此,IRBL 任務(wù)執(zhí)行過(guò)程可以描述如下:IRBL 模型將缺陷報(bào)告看作查詢(xún)(query),將報(bào)告中的文本進(jìn)行分詞處理組成查詢(xún)語(yǔ)句.同時(shí),將項(xiàng)目源碼看作文檔庫(kù)(documents),對(duì)每份源文件進(jìn)行預(yù)處理,構(gòu)造出一個(gè)語(yǔ)料庫(kù).當(dāng)收到缺陷報(bào)告時(shí),從報(bào)告中構(gòu)建查詢(xún)語(yǔ)句并在文檔庫(kù)中檢索(retrieval),根據(jù)查詢(xún)語(yǔ)句與每個(gè)文檔的相似度通過(guò)索引(index)將所有文檔降序排列后反饋給開(kāi)發(fā)者.在結(jié)果列表中,包含缺陷的文件(buggy files)盡可能排列在靠前的位置.開(kāi)發(fā)者按照列表順序?qū)Υa進(jìn)行審查,可以在花費(fèi)較少的工作量的情況下找到有缺陷的源文件,從而加速缺陷定位的進(jìn)程.

    Table 1 Parallels between IR terminology and the more traditional SE terminology表1 IR 術(shù)語(yǔ)與傳統(tǒng)軟件工程術(shù)語(yǔ)的對(duì)照關(guān)系

    IRBL 方法能夠獲得眾多研究者和軟件開(kāi)發(fā)者的關(guān)注主要得益于這類(lèi)方法在應(yīng)用時(shí)具有以下兩點(diǎn)優(yōu)勢(shì).

    (1) 外部依賴(lài)少[24-27].相比于動(dòng)態(tài)定位,技術(shù)靜態(tài)技術(shù)不需要執(zhí)行測(cè)試用例來(lái)觸發(fā)缺陷,并且不需要工作在可運(yùn)行的目標(biāo)軟件系統(tǒng)中,只需要從源代碼和缺陷報(bào)告中收集信息即可進(jìn)行定位.因此,它們具備使用簡(jiǎn)單的特點(diǎn),從而可以應(yīng)用于軟件開(kāi)發(fā)或維護(hù)過(guò)程的任何階段;

    (2) 計(jì)算成本低[24,27].IRBL 方法對(duì)源碼文檔的排序的主要依據(jù)是缺陷報(bào)告與文檔之間的文本相似度,這部分分值的計(jì)算對(duì)現(xiàn)在的機(jī)器來(lái)說(shuō)是十分簡(jiǎn)單,通??梢钥焖俳o出排序結(jié)果.因而這類(lèi)方法具備反饋迅速的特點(diǎn),所以在應(yīng)用時(shí)的用戶(hù)體驗(yàn)良好.而動(dòng)態(tài)方法通常需要執(zhí)行目標(biāo)程序,實(shí)際響應(yīng)時(shí)間和計(jì)算成本取決于目標(biāo)程序的復(fù)雜程度.

    1.2 IRBL方法流程

    本小節(jié)對(duì)IRBL 方法的流程進(jìn)行細(xì)致描述.綜合該領(lǐng)域的多個(gè)優(yōu)秀的研究工作[24,25,28-32],IRBL 方法的流程主要包含建立語(yǔ)料庫(kù)、構(gòu)建索引、抽取特征、構(gòu)建查詢(xún)以及檢索排序這5 個(gè)基本步驟,如圖1 所示.

    (1) 建立語(yǔ)料庫(kù).對(duì)代碼庫(kù)中的每個(gè)源代碼文件的文本進(jìn)行分詞,同時(shí)對(duì)分好的詞匯進(jìn)行預(yù)處理,主要包括去除關(guān)鍵詞(例如“int”“public”等)、去除停用詞(例如“a”“the”等)、詞根還原(例如,“delegating”還原為“delegate”)、拆分復(fù)合詞(例如,“TypeDeclaration”分為“type”和“declaration”)等.處理完成之后,每個(gè)源文件對(duì)應(yīng)一組詞匯,所有源文件構(gòu)成了整個(gè)項(xiàng)目的語(yǔ)料庫(kù);

    (2) 構(gòu)建索引.為語(yǔ)料庫(kù)中的所有源代碼文件構(gòu)建索引,模型可以在后續(xù)步驟中根據(jù)索引信息找到指定文件,并對(duì)這些文件根據(jù)相似度得分進(jìn)行排序;

    (3) 抽取特征.從目標(biāo)項(xiàng)目中抽取有利于缺陷定位的特征信息(例如版本歷史信息、堆棧信息等).這些特征信息會(huì)在第(5)步中集成到檢索模型用于優(yōu)化排序結(jié)果;

    (4) 構(gòu)建查詢(xún).IRBL 方法將缺陷報(bào)告當(dāng)作一條查詢(xún)語(yǔ)句.使用步驟(1)中的方法對(duì)缺陷報(bào)告中的標(biāo)題和描述進(jìn)行數(shù)據(jù)預(yù)處理,可以獲得該缺陷報(bào)告對(duì)應(yīng)的一組詞匯;

    (5) 檢索和排序.使用一種IR 模型(例如VSM[28],LSI[33],SUM[23],LDA[34]等)進(jìn)行建模,并利用步驟(3)中的特征優(yōu)化模型,對(duì)建立好索引的語(yǔ)料庫(kù)計(jì)算查詢(xún)語(yǔ)句和每個(gè)源代碼文件之間的相似程度(例如文本相似度),然后按照相似度得分高低對(duì)這些源代碼文件進(jìn)行降序排序.

    經(jīng)過(guò)上述5 個(gè)步驟,IRBL 模型會(huì)對(duì)每份缺陷報(bào)告輸出一份排序列表.需要說(shuō)明的是:除非代碼版本更迭導(dǎo)致源文件內(nèi)容更新,否則步驟(1)和步驟(2)通常只需要執(zhí)行一次,而步驟(3)~步驟(5)在每次收到新的缺陷報(bào)告后都需要執(zhí)行.

    1.3 IRBL研究?jī)?nèi)容

    目前,IRBL 領(lǐng)域的研究重點(diǎn)是模型改良和模型評(píng)估,以下分別從兩方面列出IRBL 研究面臨的主要挑戰(zhàn)并和對(duì)應(yīng)的研究?jī)?nèi)容.具體內(nèi)容將在第3 節(jié)和第4 節(jié)詳細(xì)介紹.

    1.3.1 模型改良(見(jiàn)第3 節(jié))

    IR 模型最初是為檢索非結(jié)構(gòu)化的自然語(yǔ)言文本設(shè)計(jì)的,因此適合處理純自然語(yǔ)言文本的應(yīng)用.對(duì)于缺陷定位應(yīng)用來(lái)說(shuō),不論是軟件庫(kù)中的代碼文件還是軟件平臺(tái)收到的缺陷報(bào)告,其中都包含著豐富的結(jié)構(gòu)信息.當(dāng)IR模型被直接應(yīng)用到具有特定結(jié)構(gòu)化信息的軟件代碼庫(kù)檢索時(shí),會(huì)遇到來(lái)自以下兩方面挑戰(zhàn).

    (1) 有用特征使用不完全.對(duì)源代碼來(lái)說(shuō),有大量可以使用的附加特征(如提交歷史[32]、代碼結(jié)構(gòu)[24,25,30,31]等)可以輔助定位缺陷.對(duì)缺陷報(bào)告來(lái)說(shuō),其中包含了標(biāo)題(title)和描述(description)兩部分內(nèi)容,每部分中包含的詞匯的權(quán)重是有差別的[35];

    (2) 無(wú)用信息過(guò)濾不充分.源代碼中的關(guān)鍵字是一種干擾詞匯[24,28],例如關(guān)鍵字“public”,“class”和“int”等等.這類(lèi)詞匯對(duì)于文本語(yǔ)義沒(méi)有任何幫助,并且?guī)缀鯐?huì)出現(xiàn)在所有的代碼文件中.代碼中的部分注釋組成另一類(lèi)干擾詞匯,例如,代碼文件的許可證注釋(license comments)通常和文檔語(yǔ)義無(wú)關(guān).這類(lèi)詞匯會(huì)影響檢索模型的效果.

    上述挑戰(zhàn)使得IRRL 模型的定位性能低下.為了解決上述挑戰(zhàn),IRBL 領(lǐng)域研究的一個(gè)重點(diǎn)在于模型改良.即不斷對(duì)模型進(jìn)行修改以提高其定位準(zhǔn)確性.可行的探索方向是挑選較好的IR 模型;從各個(gè)角度分析代碼和缺陷報(bào)告的特征信息并將其集成到IR 模型中.現(xiàn)有研究人員已經(jīng)挖掘出包括版本歷史、代碼結(jié)構(gòu)、堆棧蹤跡等多種重要的特征信息(見(jiàn)圖1 中點(diǎn)劃線標(biāo)明的特征工程路徑);提升缺陷報(bào)告的質(zhì)量;使用深度學(xué)習(xí)技術(shù)自動(dòng)提取特征等.

    1.3.2 模型評(píng)估(見(jiàn)第4 節(jié))

    IRBL 方法的輸出結(jié)果是一個(gè)排序列表,因此在對(duì)這類(lèi)方法進(jìn)行性能評(píng)估時(shí),使用的是常用的3 個(gè)排序指標(biāo)Top@K,MRR,MAP.這些指標(biāo)在評(píng)估純排序結(jié)果時(shí)是客觀公平和有效的,然而在實(shí)際使用過(guò)程中是否有效,不僅僅取決于排序結(jié)果,還與待排序的對(duì)象有關(guān).在評(píng)估模型時(shí)主要有以下3 個(gè)方面挑戰(zhàn).

    (1) 評(píng)估指標(biāo)不全面.單純的排序指標(biāo)并不能得到全面的評(píng)價(jià)結(jié)果.例如:對(duì)于缺陷定位來(lái)說(shuō),開(kāi)發(fā)人員要花費(fèi)工作量在排序結(jié)果中依次審查代碼文件[36,37];

    (2) 測(cè)試項(xiàng)目不充足.要取得可靠的評(píng)估結(jié)果,必須要在大量的項(xiàng)目上對(duì)模型進(jìn)行評(píng)估.僅在個(gè)別項(xiàng)目上的評(píng)價(jià)結(jié)果,在更多項(xiàng)目上測(cè)試其泛化性能;

    (3) 實(shí)驗(yàn)過(guò)程不統(tǒng)一.為了對(duì)比不同方法的性能,需要在統(tǒng)一的實(shí)驗(yàn)配置下進(jìn)行實(shí)驗(yàn).然而在不同研究者的實(shí)驗(yàn)設(shè)置中存在的差異,使得研究者很難得到真實(shí)客觀的對(duì)比結(jié)果.

    上述挑戰(zhàn)使得IRBL 模型的良好表現(xiàn)只停留在實(shí)驗(yàn)階段而無(wú)法在現(xiàn)實(shí)項(xiàng)目中被廣泛應(yīng)用.為了解決上述挑戰(zhàn),該領(lǐng)域的另一個(gè)研究重點(diǎn)是更加科學(xué)全面地評(píng)估IRBL 模型,即使用更加合理的評(píng)估指標(biāo)[36]、更加豐富的數(shù)據(jù)集[26,38,39]和統(tǒng)一的實(shí)驗(yàn)設(shè)置對(duì)模型進(jìn)行評(píng)估.

    2 文獻(xiàn)檢索

    2.1 文獻(xiàn)篩選與檢索

    IRBL 方法一直是缺陷定位領(lǐng)域的熱點(diǎn)研究問(wèn)題.近年來(lái),大量的研究工作集中在該領(lǐng)域,并不斷地對(duì)定位方法和評(píng)價(jià)體系進(jìn)行改善.為了對(duì)該問(wèn)題進(jìn)行系統(tǒng)的分析、總結(jié)和比較,本文的參考文獻(xiàn)力圖覆蓋近10 年來(lái)與IRBL 相關(guān)的主要研究工作,同時(shí)包含缺陷定位領(lǐng)域的其他相關(guān)技術(shù)的主要文獻(xiàn).具體來(lái)說(shuō),本文使用以下的步驟來(lái)進(jìn)行相關(guān)文獻(xiàn)的檢索和篩選.

    (1) 檢索目標(biāo):谷歌學(xué)術(shù)搜索引擎(Google scholar)、DBLP Computer Science Bibliography、ACM Digital Library、IEEE Xplore Digital Library 以及Springer Link Online Library 等論文數(shù)據(jù)庫(kù).檢索內(nèi)容主要包括軟件工程-系統(tǒng)軟件-程序設(shè)計(jì)語(yǔ)言方向的國(guó)際一流會(huì)議(ESEC/FSE,ICSE,ASE 等)和一流期刊(TSE,EMSE,IST 等)以及其他重要的會(huì)議和期刊如MSR,SIGIR,WCRE 等錄用的文章;

    (2) 檢索關(guān)鍵詞:包括“bug localization”“l(fā)ocating bugs”“information retrieval”和“fault localization”等以及相近的主題關(guān)鍵詞如“text retrieval”;

    (3) 檢索起止時(shí)間:2000 年~2019 年之間的文獻(xiàn).需要說(shuō)明的是:2010 年以前關(guān)于IRBL 的相關(guān)研究相對(duì)較少,所以重點(diǎn)關(guān)注2010 年及其之后的文獻(xiàn);

    (4) 文獻(xiàn)審查:首先對(duì)檢索出來(lái)的文獻(xiàn)進(jìn)行人工篩選,去除不符合研究主題的文獻(xiàn);然后檢查選中論文中的參考文獻(xiàn)列表以防遺漏掉未檢索到的文獻(xiàn);最后,在第2.2 節(jié)中對(duì)所選文獻(xiàn)進(jìn)行匯總.

    2.2 歷史文獻(xiàn)的匯總

    經(jīng)過(guò)文獻(xiàn)的檢索與篩選,本文收集了基于信息檢索的缺陷定位領(lǐng)域中近10 年來(lái)的學(xué)術(shù)論文共82 篇.這些研究論文將會(huì)按照種類(lèi)分別在第3 節(jié)和第4 節(jié)進(jìn)行詳細(xì)介紹.對(duì)于其他種類(lèi)的缺陷定位相關(guān)技術(shù),我們?cè)诘?節(jié)中對(duì)其進(jìn)行分類(lèi)和介紹.

    表2 列出了基于信息檢索技術(shù)的相關(guān)文獻(xiàn)的詳細(xì)列表.可以看出:在CCF 劃分的軟件工程領(lǐng)域A 類(lèi)會(huì)議上有15 篇,期刊上有6 篇.這表明IRBL 研究是軟件工程領(lǐng)域一個(gè)比較活躍的研究方向.圖2 展示了10 年來(lái)IRBL領(lǐng)域的研究論文發(fā)表的數(shù)量分布情況.從圖中可以看出,該領(lǐng)域的逐年論文發(fā)表數(shù)量呈現(xiàn)出一個(gè)波動(dòng)上升的趨勢(shì).這說(shuō)明對(duì)IRBL 這個(gè)領(lǐng)域正越來(lái)越受到研究者的重視.在2019 年,相關(guān)論文數(shù)量有所下降但仍然保持著較高的活躍度.

    Table 2 List of related literature on IR-based bug localization researches表2 基于信息檢索的缺陷定位研究的相關(guān)文獻(xiàn)列表

    3 IRBL 模型的改良

    對(duì)IRBL 模型的改良研究在不同研究階段有不同的側(cè)重點(diǎn).圖3 展示了基于信息檢索的缺陷定位方法從2010 年以來(lái)的模型改良趨勢(shì)和側(cè)重點(diǎn).同時(shí),我們?cè)诒? 中列出了現(xiàn)有的代表性的IRBL 模型匯總比較信息.根據(jù)對(duì)現(xiàn)有研究的匯總,我們得出IRBL 領(lǐng)域的研究側(cè)重點(diǎn)主要包含以下4 個(gè)方面.

    (1) 更換檢索模型.早在2010 年及以前,由于IR 技術(shù)剛剛被應(yīng)用到缺陷定位領(lǐng)域,研究者的研究重點(diǎn)是嘗試使用不同的IR 模型對(duì)缺陷定位任務(wù)進(jìn)行建模來(lái)找出該領(lǐng)域比較合適的IR 模型(例如VSM,LDA,SUM,LSI 等);

    (2) 使用特征分析.約從2011 年開(kāi)始,研究者們發(fā)現(xiàn),單純使用IR 模型定位缺陷的性能低下很難滿(mǎn)足實(shí)際的應(yīng)用需求.研究者們發(fā)現(xiàn):除了文本相似度之外,軟件中的其他特征也可以幫助定位缺陷.所以,這一階段的研究者們主要集中在挖掘軟件項(xiàng)目中與缺陷有關(guān)的特有特征(例如項(xiàng)目版本歷史、缺陷堆棧等),并結(jié)合使用這些特征和IR 模型來(lái)提升缺陷定位在測(cè)試項(xiàng)目上的性能;

    (3) 進(jìn)行查詢(xún)重構(gòu).作為查詢(xún)語(yǔ)句的缺陷報(bào)告是由不同的人員提交的,所以質(zhì)量參差不齊.這些低質(zhì)量的查詢(xún)導(dǎo)致很多IRBL 模型表現(xiàn)較差,因而在2013 年后出現(xiàn)一些研究者著重于對(duì)查詢(xún)進(jìn)行重構(gòu),以改善現(xiàn)有IRBL 模型的查詢(xún)準(zhǔn)確性;

    (4) 應(yīng)用深度學(xué)習(xí).隨著深度學(xué)習(xí)技術(shù)的發(fā)展,從2017 年起,不少研究者開(kāi)始嘗試使用深度學(xué)習(xí)模型(如卷積神經(jīng)網(wǎng)絡(luò)CNN)對(duì)特征進(jìn)行自動(dòng)提取,然后結(jié)合信息檢索技術(shù)對(duì)缺陷進(jìn)行定位.

    Table 3 Summary of representative IR-based bug localization models表3 基于信息檢索的缺陷定位代表性模型匯總

    Table 3 Summary of representative IR-based bug localization models (Continued)表3 基于信息檢索的缺陷定位代表性模型匯總(續(xù))

    3.1 更換檢索模型

    在信息檢索領(lǐng)域有很多模型,其中最常見(jiàn)的包括向量空間模型(vector space model,簡(jiǎn)稱(chēng)VSM)[106]、潛在語(yǔ)義索引模型(latent semantic index,簡(jiǎn)稱(chēng)LSI)[107]、隱狄利克雷分布模型(latent Dirichlet allocation,簡(jiǎn)稱(chēng)LDA)[108]等等.經(jīng)過(guò)多年研究,IRBL 領(lǐng)域的方法中所用的檢索模型已經(jīng)涵蓋了上述所有以及其他更多的IR 模型.

    3.1.1 VSM 模型

    VSM 是將自然語(yǔ)言文檔庫(kù)轉(zhuǎn)化為一個(gè)字詞-文件矩陣的向量模型.矩陣的每一行代表一個(gè)單詞在不同文件中的權(quán)重值(可以通過(guò)TF.IDF[109]來(lái)表示),每一列代表一個(gè)文檔所對(duì)應(yīng)的特征向量.在字詞矩陣的基礎(chǔ)上,我們可以很容易地通過(guò)向量距離計(jì)算來(lái)衡量不同文檔之間的相似性.因此,在IRBL 領(lǐng)域現(xiàn)有的方法中,VSM 和它的變體是使用最廣泛的IR 模型.

    在現(xiàn)有的研究中,大約有超過(guò)半數(shù)的IRBL 方法[25,28,30-32,35,47,50,63,68,74,79,80,90,92]都使用VSM 模型來(lái)進(jìn)行建模.以下是該模型的相關(guān)應(yīng)用.

    2009 年,Gay 等人[110]提出一個(gè)使用相關(guān)反饋(relevance feedback)機(jī)制的方法來(lái)提升概念定位的結(jié)果.在他們的方法中,最先明確使用VSM 模型來(lái)進(jìn)行檢索.2012 年,Zhou 等人[28]指出,傳統(tǒng)VSM 模型更傾向于將長(zhǎng)度較短的文檔排在前面,而已有研究表明,長(zhǎng)度較大的文檔包含缺陷的可能更高.基于這點(diǎn)認(rèn)識(shí),他們對(duì)VSM 模型進(jìn)行改進(jìn),提出了rVSM 模型,其中,將文檔長(zhǎng)度作為一個(gè)權(quán)重參數(shù).后續(xù)有多個(gè)研究工作(Wong 等人[30]、Rahman等人[103]、Youm[74]等)均是在rVSM 模型之上構(gòu)建新的IRBL 方法.2014 年,Wang 等人[50]設(shè)計(jì)了基于搜索的引擎VSMcomposite,該引擎使用遺傳算法(GA)將各種不同的VSM 變體(即,向量元素的計(jì)算方式不同)模型進(jìn)行組合,得到新的近似最優(yōu)組合模型來(lái)進(jìn)行缺陷定位.

    3.1.2 LSI 模型

    LSI 是一種實(shí)用的主題模型[107,111],它是在傳統(tǒng)的VSM 模型基礎(chǔ)上進(jìn)行改良后得到的.LSI 利用奇異值分解(singular value decomposition,簡(jiǎn)稱(chēng)SVD)將詞匯和文本映射到一個(gè)新的空間來(lái)表示文檔矩陣之間的潛在語(yǔ)義關(guān)系.它的優(yōu)勢(shì)是可以解決詞語(yǔ)中出現(xiàn)的同義詞和多義詞對(duì)結(jié)果的影響,這些詞匯是無(wú)法被VSM 模型識(shí)別處理的.然而,它的缺點(diǎn)是需要進(jìn)行高階矩陣運(yùn)算來(lái)計(jì)算查詢(xún)字段和每篇文檔的相似度,所以運(yùn)行速度慢于VSM 模型.其次,在使用SVD 時(shí)需要假設(shè)數(shù)據(jù)的分布是正態(tài)分布,然而類(lèi)似詞頻的統(tǒng)計(jì)數(shù)據(jù)往往不能符合這個(gè)條件.經(jīng)過(guò)對(duì)文獻(xiàn)的整理,我們發(fā)現(xiàn):在IRBL 領(lǐng)域LSI 是最早被用來(lái)進(jìn)行特征/缺陷定位的IR 模型,并且只活躍在研究早期(2010 年以前).近年來(lái),幾乎已經(jīng)沒(méi)有方法使用LSI 作為IR 模型來(lái)進(jìn)行缺陷定位.以下是該模型的相關(guān)應(yīng)用.

    2004 年,Marcus 等人[13]最先將LSI 模型應(yīng)用到概念定位領(lǐng)域中.2006 年,Poshyvanyk 等人[16]將特征定位視為一個(gè)決策問(wèn)題,他們使用LSI 模型和基于場(chǎng)景的事件概率排序兩種技術(shù)來(lái)強(qiáng)化定位結(jié)果.隨后,他們?cè)?007 年又在LSI 模型基礎(chǔ)上提出了PROMESIR 模型[18]進(jìn)行特征定位.同年,Liu 等人[17]將LSI 模型和代碼執(zhí)行蹤跡以及代碼中的注釋和標(biāo)識(shí)符信息相結(jié)合來(lái)提升定位性能.考慮到現(xiàn)有技術(shù)沒(méi)有使用到軟件倉(cāng)庫(kù)的動(dòng)態(tài)特性,Rao等人[87]在2015 年提出了一個(gè)可以隨著數(shù)據(jù)演化增量更新LSA 模型參數(shù)的定位框架.

    3.1.3 LDA 模型

    LDA 是一種生成式的統(tǒng)計(jì)主題模型,同時(shí)也是一種典型的詞袋模型.它將一篇文檔看成是詞語(yǔ)之間沒(méi)有先后順序和上下文關(guān)聯(lián)的一組詞語(yǔ)集合,文檔中的這些詞語(yǔ)屬于多個(gè)主題,并且每個(gè)詞語(yǔ)都由其中一個(gè)主題生成.LDA 模型在模塊化和可擴(kuò)展方面強(qiáng)于LSI 模型.與此同時(shí),它在基于主題模型的信息檢索應(yīng)用上十分有效.在IRBL 領(lǐng)域里,LDA 模型也是在早期研究中就被應(yīng)用到IRBL 領(lǐng)域中,并且在近年來(lái)仍有部分研究關(guān)注于改良LDA 模型.以下是該模型的相關(guān)應(yīng)用.

    2008 年,Lukins 等人[27]就明確提出使用LDA 模型檢索源代碼進(jìn)行缺陷定位.在2010 年,他們?cè)俅问褂肔DA模型來(lái)構(gòu)建IRBL 方法[3].他們得出結(jié)論,基于LDA 的缺陷定位方法的定位準(zhǔn)確度與目標(biāo)項(xiàng)目尺寸或者源代碼的穩(wěn)定性沒(méi)有顯著關(guān)聯(lián).因此,LDA 有廣泛的應(yīng)用前景.在2011 年時(shí),Nguyen 等人[49]提出了基于LDA 主題模型的新方法BugScout,使得缺陷定位效果有明顯提升.2018 年,Wang 等人[98]在他們的方法STMLocator 中使用了LDA 模型,并且利用代碼庫(kù)的歷史信息來(lái)進(jìn)行有監(jiān)督的學(xué)習(xí),進(jìn)一步發(fā)掘了LDA 模型的性能.

    3.1.4 其他IR 模型

    除了上述3 種主流的IR 模型之外,還有其他一些模型也被某些研究者用來(lái)進(jìn)行缺陷定位.

    2010 年,通過(guò)聚集和挖掘被相同位置共同引用的歷史缺陷報(bào)告,Chen 等人[85,112]提出一個(gè)有效的使用協(xié)同位置收縮(co-location shrinkage,簡(jiǎn)稱(chēng)CS)技術(shù)的支持向量機(jī)模型(CS-SVM)來(lái)檢索潛在的缺陷位置.2011 年,Rao等人[23]使用平滑一元模型(smoothed unigram model,簡(jiǎn)稱(chēng)SUM)進(jìn)行缺陷定位工作.在他們的實(shí)驗(yàn)結(jié)果中,SUM的缺陷定位性能比VSM,LSI 和LDA 都要優(yōu)秀.2012 年,Sisman 等人[60]使用DFR 偏離隨機(jī)性(divergence from randomness,簡(jiǎn)稱(chēng)DFR)模型進(jìn)行缺陷定位.該模型會(huì)根據(jù)文檔特征概率與純非判別隨機(jī)分布的差異,來(lái)評(píng)估文檔對(duì)查詢(xún)的恰當(dāng)性.

    除了手動(dòng)構(gòu)建IR 模型,還有一些研究使用了現(xiàn)成的信息檢索工具.例如,Saha 等人[24]在他們的方法BLUiR中使用了Indri[113],Kilinc 等人[90]和Rahman 等人[35]則使用Apache Luence 作為他們方法的檢索模型.

    3.2 使用特征分析

    直接應(yīng)用IR 模型進(jìn)行檢索很難得到令人滿(mǎn)意的結(jié)果,因此需要進(jìn)一步進(jìn)行特征分析來(lái)改良IRBL 模型.代碼庫(kù)和缺陷報(bào)告都不是由純自然語(yǔ)言組成的文本,它們具有一些領(lǐng)域相關(guān)的結(jié)構(gòu)化信息和特征.對(duì)這些特征進(jìn)行挖掘,可以在一定程度上提升檢索結(jié)果的準(zhǔn)確性.綜合現(xiàn)有文獻(xiàn)的研究,我們發(fā)現(xiàn)對(duì),代碼庫(kù)和缺陷報(bào)告提取的特征主要包括版本歷史、相似報(bào)告、代碼結(jié)構(gòu)、堆棧蹤跡以及其他一些不常用的特征.本小節(jié)從提取特征的角度來(lái)介紹現(xiàn)有研究如何通過(guò)對(duì)特征進(jìn)行細(xì)致地挖掘來(lái)提升定位模型的性能.

    3.2.1 版本歷史

    軟件項(xiàng)目在演化過(guò)程中會(huì)通過(guò)版本更迭來(lái)實(shí)現(xiàn)對(duì)項(xiàng)目的更新和完善(例如修復(fù)缺陷、添加新功能等),每一次變更都會(huì)向代碼庫(kù)中添加豐富的歷史信息(例如日志信息、文件變動(dòng)信息等).與此同時(shí),多數(shù)缺陷正是在代碼變動(dòng)的過(guò)程中因?yàn)殚_(kāi)發(fā)人員主觀疏忽或者是客觀設(shè)計(jì)不合理而被引入到項(xiàng)目中,所以分析版本這些歷史信息有利于為缺陷定位或者預(yù)測(cè)任務(wù)帶來(lái)一些提示性的幫助.在現(xiàn)有的IRBL 方法中,很多方法已經(jīng)將版本歷史信息作為一個(gè)重要的特征組件來(lái)提升方法的性能.版本歷史特征的應(yīng)用示例過(guò)程如圖4 所示.

    2010 年,Chen 等人[85,112]利用歷史缺陷報(bào)告和歷史被修復(fù)的模塊信息為新收到的缺陷尋找可能的位置,其中特別利用了缺陷報(bào)告之間的共位置關(guān)系.在他們的方法中,如果兩個(gè)缺陷報(bào)告的修復(fù)模塊相同,那么認(rèn)為這兩個(gè)缺陷報(bào)告有共位置關(guān)系.

    2012 年,Sisman 等人[60]挖掘版本歷史時(shí)應(yīng)用到以下兩點(diǎn)先驗(yàn)知識(shí):(1) 在短期內(nèi)被多次提交的修改很可能會(huì)包含缺陷;(2) 歷史上包含缺陷的文件在之后版本中可能仍然有缺陷.其中,先驗(yàn)知識(shí)(1)也被應(yīng)用在Rahman等人[103]的方法中.相比前兩個(gè)方法,Wang 等人[31]和Youm 等人[74]考慮到新發(fā)現(xiàn)的缺陷通常是由最新的提交引入而非遠(yuǎn)古提交,因此在他們的方法中,只考慮近期的版本歷史而完全丟棄距提交的新缺陷報(bào)告超過(guò)k天的版本歷史信息.

    2013 年,Tantithamthavorn 等人[29]挖掘代碼文件之間的共同變更歷史信息調(diào)整現(xiàn)有方法BugLocator[28]的結(jié)果.挖掘步驟如下:首先找出先前所有被修復(fù)的文件,并根據(jù)其所屬的變更構(gòu)建一個(gè)共同變更矩陣,矩陣中的元素代表兩個(gè)文件之間的共同變更一致性;然后,對(duì)BugLocator 生成的列表從共同變更矩陣尋找一致性較高的文件提升它們的排名.相比之下,共同變更歷史信息可以對(duì)原方法的結(jié)果產(chǎn)生顯著提升.

    2016 年,Wen 等人[32]在產(chǎn)生缺陷之前版本歷史中,把每個(gè)變更塊(change hunk,包括變更行的內(nèi)容、變更日志等)索引為一個(gè)文檔,并從這個(gè)文檔構(gòu)建自然語(yǔ)言和代碼實(shí)體兩個(gè)語(yǔ)料庫(kù).此外,提取每個(gè)源文件的缺陷修復(fù)歷史后計(jì)算一個(gè)加強(qiáng)得分,并將其用作指示源文件包含缺陷可疑度的另一個(gè)特征.他們的定位模型不僅可以在文件級(jí)別定位缺陷,同時(shí)首次提出在變更級(jí)別定位缺陷,即定位引入缺陷的變更.這可以幫助開(kāi)發(fā)人員更容易找出產(chǎn)生缺陷的原因.

    3.2.2 相似報(bào)告

    相似缺陷報(bào)告是另一類(lèi)重要的輔助特征.一個(gè)直觀的理解是:若兩個(gè)缺陷報(bào)告在描述上具有較高的相似度,那么這兩個(gè)報(bào)告所對(duì)應(yīng)的缺陷文件有很大概率有重疊的部分甚至完全一致.在這個(gè)基礎(chǔ)上,可以先收集已經(jīng)定位到產(chǎn)生缺陷位置(例如源文件)的相似缺陷報(bào)告,適當(dāng)增加這些位置的可疑度分值,可以在一定程度上提升IRBL 結(jié)果的性能.相似報(bào)告特征的應(yīng)用示例過(guò)程如圖5 所示.

    2012 年,Zhou 等人[28]在他們的方法BugLocator 中使用到了相似缺陷報(bào)告特征.對(duì)于新收到缺陷報(bào)告,他們首先在rVSM 模型的基礎(chǔ)上計(jì)算出該缺陷與每個(gè)源文件的文本相似度分值;然后計(jì)算該報(bào)告與歷史上已經(jīng)解決的缺陷報(bào)告之間的相似度;接著,對(duì)歷史上有缺陷的文件根據(jù)其對(duì)應(yīng)的歷史缺陷報(bào)告進(jìn)行加權(quán),得到這部分文件的歷史特征分?jǐn)?shù);最后結(jié)合兩部分的分?jǐn)?shù),將所有文件倒序排列作為最終的推薦結(jié)果.

    Zhou 等人使用相似缺陷報(bào)告特征的方法在后續(xù)多個(gè)研究工作中被應(yīng)用.Saha 等人[24]在BLUiR 變體中、Wong[30]等人在BRTracer 變體中、Wang 等人在AmaLgam[31]和改良版AmaLgam+[80]中都以同樣的方式使用到了相似缺陷報(bào)告信息.2017 年,Youm 等人[74]在 BugLocator 的基礎(chǔ)上用到了歷史缺陷報(bào)告中的評(píng)論信息(comment)來(lái)強(qiáng)化定位方法.

    3.2.3 堆棧蹤跡

    堆棧蹤跡是缺陷產(chǎn)生時(shí)代碼執(zhí)行的異常信息.這些信息是高度結(jié)構(gòu)化的,其中包含了異常的類(lèi)型(例如空指針異常和地址超界等)和出錯(cuò)代碼所執(zhí)行的路徑信息(例如代碼行、類(lèi)名、方法名).因?yàn)槿毕菟诘奈恢煤芸赡茉谟谶@個(gè)出錯(cuò)路徑上,所以堆棧信息對(duì)于開(kāi)發(fā)人員手動(dòng)進(jìn)行缺陷定位是十分重要的.而在研究定位工具時(shí),也可以通過(guò)提取堆棧中的信息(例如出錯(cuò)的類(lèi)名)進(jìn)一步強(qiáng)化工具的定位準(zhǔn)確度.

    堆棧蹤跡特征的應(yīng)用示例過(guò)程如圖6 所示.

    2014 年,Moreno 等人[25]考慮將堆棧蹤跡信息應(yīng)用到他們的方法Lobster 中.他們使用缺陷報(bào)告中的堆棧蹤跡和軟件源碼中的程序依賴(lài)圖來(lái)尋找在結(jié)構(gòu)上相似的代碼元素.具體說(shuō):對(duì)于給定的堆棧蹤跡和代碼元素,他們之間的結(jié)構(gòu)相似性被定義為堆棧蹤跡中元素和代碼中元素的最小距離.同年,Wong 等人[30]使用正則表達(dá)式從缺陷報(bào)告的堆棧中提取所有的文件名以及對(duì)應(yīng)的方法.在得到一組可疑的文件集合后,將上述文件對(duì)應(yīng)方法中直接使用到的類(lèi)所對(duì)應(yīng)的文件也加入到可疑文件集合,最后通過(guò)提高對(duì)這些文件在結(jié)果中的排名來(lái)改善定位結(jié)果.2017 年,Youm 等人[74]在他們的方法BLIA 中集成了Wong 等人對(duì)堆棧蹤跡的處理方法.

    2016 年,Wang 等人[80]在他們的改良方法AmaLgam+使用了堆棧蹤跡特征.他們提出一個(gè)直觀假設(shè):若某個(gè)類(lèi)的引用距離堆棧頂部越近(出錯(cuò)位置),那么這個(gè)引用所在的文件越可能包含該缺陷.因此,他們?cè)O(shè)計(jì)了一個(gè)堆棧分?jǐn)?shù)來(lái)度量堆棧中出現(xiàn)的每個(gè)文件的可疑程度.對(duì)每缺陷報(bào)告中的堆棧,他們首先按序提取出所有文件名并進(jìn)行去重處理,然后使用每個(gè)文件排名的倒數(shù)作為該文件與缺陷報(bào)告在堆棧上的可疑程度.

    2018 年,Rahman 等人[35]利用堆棧蹤跡來(lái)重新查詢(xún).他們從堆棧蹤跡中提取代碼實(shí)體(類(lèi)名和方法名).根據(jù)執(zhí)行順序構(gòu)造出權(quán)重圖,并在圖上面應(yīng)用PageRank 算法計(jì)算出每個(gè)代碼實(shí)體的權(quán)重來(lái)重新構(gòu)造查詢(xún)語(yǔ)句.

    3.2.4 代碼結(jié)構(gòu)

    項(xiàng)目中的源代碼是一種結(jié)構(gòu)化文本,它的內(nèi)容是由各種不同的代碼實(shí)體(例如類(lèi)名、方法名等)組成.直接將它們看作自然語(yǔ)言文本處理會(huì)丟失其中的結(jié)構(gòu)化信息,會(huì)導(dǎo)致定位結(jié)果準(zhǔn)確率低下.合理利用這些結(jié)構(gòu)特征,可以幫助進(jìn)一步提升自動(dòng)工具的準(zhǔn)確性.代碼結(jié)構(gòu)特征的應(yīng)用示例過(guò)程如圖7 所示.

    2013 年,Saha 等人[24]在設(shè)計(jì)模型時(shí)首先考慮到代碼結(jié)構(gòu)特征.對(duì)于代碼庫(kù)來(lái)說(shuō),他們使用Eclipse JDT 解析源代碼的AST 樹(shù),并提取其中的4 種代碼實(shí)體(類(lèi)名、方法名、變量名和注釋)信息;對(duì)于缺陷報(bào)告,他們分別使用標(biāo)題和描述構(gòu)建兩種查詢(xún).上述代碼實(shí)體和查詢(xún)共有8 種不同的組合方式,他們分別計(jì)算每種組合的分?jǐn)?shù),然后將所有組合的分?jǐn)?shù)相加作為某個(gè)源文件的最終分?jǐn)?shù).最后,他們依據(jù)該分?jǐn)?shù)向開(kāi)發(fā)者推薦有缺陷的文件.

    2016 年,Kilinc 等人[90]提出了BugCatcher 方法,該方法首先使用基礎(chǔ)的檢索方法對(duì)源代碼進(jìn)行檢索獲得一個(gè)排序結(jié)果;然后,從代碼中提取類(lèi)名、方法名和注釋分別建立索引,并且根據(jù)這3 類(lèi)信息對(duì)首次結(jié)果進(jìn)行重排;最后使用一種用到重新索引的縮小范圍技術(shù)計(jì)算最終結(jié)果.同年,Wen 等人[32]提出了Locus 方法.該方法對(duì)自然語(yǔ)言和代碼實(shí)體分別構(gòu)建語(yǔ)料庫(kù)和查詢(xún)語(yǔ)句,將兩個(gè)查詢(xún)結(jié)果組合起來(lái)輸出變更塊(change hunk)的排序,并在此基礎(chǔ)上選出可以的文件或者變更.

    2018 年,Dilshener 等人[79]提出一種不需要?dú)v史信息,僅使用結(jié)構(gòu)和堆棧信息的缺陷定位方法.同年,Swe 等人[99]將代碼結(jié)構(gòu)細(xì)分為類(lèi)名、方法名和變量名分別處理來(lái)避免代碼文件過(guò)大對(duì)結(jié)果帶來(lái)的影響.Rath 等人[97]研究了缺陷報(bào)告中的結(jié)構(gòu)信息對(duì)IRBL 方法的影響.他們的結(jié)果表明:堆棧蹤跡會(huì)傾向于降低缺陷定位的性能,并且需要額外的處理.

    3.2.5 其他特征

    除了上述4 種被大量使用的特征之外,還有一些現(xiàn)有研究[30,74,79,80,103]挖掘了源代碼和缺陷報(bào)告中的其他隱藏的對(duì)缺陷定位有利特征.這些工作也在一定的場(chǎng)景下改進(jìn)了IRBL 方法,并提升了它們的定位性能.

    2014 年,Wong 等人[30]考慮到缺陷通常發(fā)生在源文件中的小部分代碼里,而某些源文件的尺寸很大,會(huì)嚴(yán)重降低VSM 模型的準(zhǔn)確性,因此,他們將每個(gè)的源文件按照某一閾值(例如100 行代碼)分為若干大小相等片段,并在此基礎(chǔ)上計(jì)算每個(gè)片段與缺陷報(bào)告的相似性.然后,用得分最高的片段代表該文件.分段操作消除了文件大小對(duì)定位模型的影響.該特征在2017 年也被Youm 等人[74]應(yīng)用在他們的方法BLIA 中.

    在某些缺陷報(bào)告中會(huì)記錄代碼庫(kù)里出現(xiàn)的源文件名或者方法名等代碼實(shí)體信息,這些信息往往與缺陷關(guān)聯(lián)密切.因此,Rahman 等人[103](在2015 年)和Dilshener[79](在2018 年)在他們的定位方法中提高了這些出現(xiàn)在缺陷報(bào)告中的代碼實(shí)體所對(duì)應(yīng)的源文件(或者源方法)所在的最終排序列表中的優(yōu)先級(jí)來(lái)獲取更加可靠的結(jié)果.

    2016 年,Wang 等人[80]提出了使用缺陷報(bào)告中的報(bào)告者信息來(lái)提升定位性能的方法AmaLgam+.他們的直觀理解是,一個(gè)報(bào)告者很可能去報(bào)告與相同/相似的代碼組件有關(guān)的缺陷.因此,當(dāng)受到新的缺陷報(bào)告時(shí),查看該報(bào)告者之前提交的缺陷報(bào)告和對(duì)應(yīng)的包含缺陷的文件對(duì)于新缺陷的定位有幫助.

    3.3 進(jìn)行查詢(xún)重構(gòu)

    在一定程度上來(lái)說(shuō),由于大量研究已經(jīng)對(duì)代碼庫(kù)和缺陷報(bào)告中的相關(guān)特征進(jìn)行了比較充分的挖掘,很難再提取新的特征來(lái)改良IRBL 方法.研究者從改善查詢(xún)的角度提出了查詢(xún)重構(gòu)(query reformulation,簡(jiǎn)稱(chēng)QR)的策略來(lái)提升性能.這類(lèi)策略的一個(gè)優(yōu)勢(shì)是獨(dú)立于IRBL 方法本身,可以作為一個(gè)預(yù)處理步驟集成到現(xiàn)有的IRBL 方法中,因此它的可移植性較好.查詢(xún)重構(gòu)的應(yīng)用場(chǎng)景如圖8 所示.開(kāi)發(fā)者首先使用自動(dòng)方法構(gòu)建初始查詢(xún)并獲取一個(gè)結(jié)果列表.當(dāng)他們?cè)谂琶壳暗拇a中沒(méi)有找到缺陷時(shí),就請(qǐng)求進(jìn)行查詢(xún)重構(gòu)重新獲取推薦結(jié)果.

    需要重構(gòu)的對(duì)象是用來(lái)構(gòu)建查詢(xún)語(yǔ)句的缺陷報(bào)告,因此,對(duì)缺陷報(bào)告的組成部分及特征有全面的理解十分重要.在實(shí)際使用過(guò)程中,開(kāi)發(fā)者也是需要根據(jù)初始查詢(xún)的反饋結(jié)果來(lái)決定是否需要使用查詢(xún)重構(gòu)策略.因此,對(duì)缺陷報(bào)告的分析是進(jìn)行查詢(xún)重構(gòu)的前序工作.根據(jù)研究的前后承接關(guān)系,我們將這部分相關(guān)內(nèi)容分為缺陷報(bào)告分析和查詢(xún)重構(gòu)策略?xún)蓚€(gè)部分來(lái)介紹.

    3.3.1 缺陷報(bào)告分析

    2008 年,Bettenburg 等人[70,114]對(duì)現(xiàn)實(shí)項(xiàng)目中(例如Apache)的開(kāi)發(fā)者和用戶(hù)進(jìn)行一項(xiàng)調(diào)研.他們發(fā)現(xiàn),用戶(hù)提交的報(bào)告內(nèi)容與開(kāi)發(fā)者希望收到的信息之間不匹配.開(kāi)發(fā)者想要得到的信息是復(fù)現(xiàn)步驟、錯(cuò)誤堆棧和測(cè)試用例等,然而用戶(hù)很難提供這些信息.為了解決這個(gè)問(wèn)題,他們提出一個(gè)原型工具CUEZILLA 來(lái)測(cè)量缺陷報(bào)告的質(zhì)量,并且能夠向用戶(hù)推薦填寫(xiě)缺陷的信息來(lái)提升報(bào)告質(zhì)量.

    2014 年,Kochhar 等人[48]總結(jié)了會(huì)影響缺陷定位有效性的潛在偏好:

    1) 被錯(cuò)誤分類(lèi)的缺陷報(bào)告.被標(biāo)記為缺陷的問(wèn)題報(bào)告并非總是由缺陷引起,也包含了文檔更新、代碼重構(gòu)等;

    2) 已經(jīng)可定位的缺陷報(bào)告.缺陷報(bào)告中可能已經(jīng)指出了有缺陷的程序文件,沒(méi)有必要對(duì)這些報(bào)告使用缺陷定位工具;

    3) 不正確的真實(shí)值.在修復(fù)缺陷的更新提交中被修改的文件中,可能并非所有文件都與這個(gè)缺陷有關(guān).

    他們的實(shí)驗(yàn)結(jié)果表明,偏好(2)對(duì)IRBL 有效性有顯著影響,因此應(yīng)當(dāng)在后續(xù)研究中被糾正.

    2018 年,Mills 等人[53]對(duì)缺陷報(bào)告進(jìn)行調(diào)研,他們發(fā)現(xiàn),缺陷報(bào)告中的大多數(shù)詞匯的確可以用來(lái)構(gòu)建有效查詢(xún)語(yǔ)句,從而使得在沒(méi)有輔助查詢(xún)擴(kuò)展的情況下,可以成功進(jìn)行缺陷定位.在此基礎(chǔ)上,他們?cè)O(shè)計(jì)了一種遺傳算法(GA)來(lái)分析帶有和不帶有定位提示(localization hint,例如方法名)的缺陷報(bào)告文本,以獲得一個(gè)接近最優(yōu)的查詢(xún),該查詢(xún)提高了缺陷報(bào)告在IRBL 應(yīng)用中的潛力.然而在同年,Lawrie 等人[52]研究了缺陷報(bào)告在IRBL 中的價(jià)值.他們指出:GA 算法存在作弊(cheats)問(wèn)題,因?yàn)镚A 算法根據(jù)查詢(xún)的性能評(píng)估值來(lái)產(chǎn)生優(yōu)質(zhì)的查詢(xún).然而在現(xiàn)實(shí)場(chǎng)景中,一個(gè)查詢(xún)的性能評(píng)估值是未知的,因此不具備實(shí)用性.

    2019 年,Rath 等人[84]著重分析了缺陷報(bào)告中結(jié)構(gòu)化信息對(duì)IRBL 方法的影響.他們發(fā)現(xiàn),缺陷報(bào)告中的堆棧蹤跡信息更傾向于對(duì)缺陷定位結(jié)果產(chǎn)生負(fù)面影響,因此對(duì)包含這類(lèi)信息的報(bào)告需要特別處理.與此同時(shí),相比于只包含自然語(yǔ)言的缺陷報(bào)告,那些包含源代碼信息的缺陷報(bào)告不僅可以提升BL 算法的性能,而且有助于開(kāi)發(fā)人員更快找到缺陷位置.

    3.3.2 查詢(xún)重構(gòu)策略

    2013 年,Sisman[61]首先將查詢(xún)重構(gòu)策略應(yīng)用到缺陷定位領(lǐng)域中.在不需要用戶(hù)提供額外的輸入信息的情況下,他們的QR 框架的工作原理是先進(jìn)行一次初始查詢(xún)得到相關(guān)的軟件制品(artifact,例如文件)排名列表,然后從排名靠前的制品中抽取附加的詞匯來(lái)擴(kuò)充查詢(xún)語(yǔ)句.

    2017 年,Chaparro 等人在文獻(xiàn)[40,46]中將缺陷報(bào)告的內(nèi)容詳細(xì)地劃分為 OB(observed behavior),EB(expected behavior),S2R(step to reproduce)這3 個(gè)部分,他們使用啟發(fā)式的規(guī)則識(shí)別和檢測(cè)這3 部分內(nèi)容,并發(fā)現(xiàn)多數(shù)缺陷報(bào)告中缺少EB 和S2R 這兩部分內(nèi)容.接著,他們?cè)谖墨I(xiàn)[51]中進(jìn)行對(duì)比實(shí)驗(yàn),發(fā)現(xiàn)使用OB 替代整個(gè)報(bào)告的內(nèi)容來(lái)構(gòu)造查詢(xún)語(yǔ)句,是一種簡(jiǎn)單有效的方法來(lái)重構(gòu)低質(zhì)量的缺陷報(bào)告.在此基礎(chǔ)上,Chaparro 等人[73]在2019 年了擴(kuò)大了實(shí)驗(yàn)對(duì)象和數(shù)據(jù)集,發(fā)現(xiàn)使用OB 和報(bào)告標(biāo)題的組合內(nèi)容替代整份缺陷報(bào)告來(lái)定位能夠達(dá)到更好的效果.

    2018 年,Rahman 等人[35,42]提出使用一種上下文感知的查詢(xún)重構(gòu)方法BLZZARD.他們的重構(gòu)方法對(duì)缺陷報(bào)告中的兩類(lèi)重要信息——堆棧蹤跡和程序元素(例如類(lèi)名、方法名等)分別構(gòu)造蹤跡圖和文本圖模型,對(duì)這兩部分中的詞匯進(jìn)行建模.在構(gòu)造好的圖模型基礎(chǔ)上,使用PageRank 算法對(duì)圖中的詞匯進(jìn)行加權(quán),并根據(jù)權(quán)重來(lái)選取加入查詢(xún)語(yǔ)句的詞匯.

    2019 年,Kim等人[102]提出目前最新的自動(dòng)查詢(xún)重構(gòu)方法.他們的方法包含3個(gè)組件:1) 缺陷報(bào)告擴(kuò)展;2) 候選詞提取;3) 查詢(xún)擴(kuò)展.首先,他們使用缺陷報(bào)告中的附件信息(attachment)擴(kuò)展缺陷報(bào)告;然后,在提取候選詞時(shí),通過(guò)將情感詞匯加入到停用詞表來(lái)將它們移除,并且使用偽相關(guān)反饋的方式從源碼中檢索文件并移除噪音文件;最后,他們對(duì)檢索到文件中的詞匯加權(quán),并選擇權(quán)重較高的部分來(lái)擴(kuò)展查詢(xún)語(yǔ)句.

    3.4 應(yīng)用深度學(xué)習(xí)

    隨著深度學(xué)習(xí)技術(shù)的發(fā)展,近年來(lái),研究者們將深度學(xué)習(xí)技術(shù)引入缺陷定位領(lǐng)域.相較于基于信息檢索的缺陷定位只考慮了缺陷報(bào)告和源代碼文本上的特征,基于深度學(xué)習(xí)的缺陷定位方法可以提取缺陷報(bào)告和源代碼文件更深層和更高維的抽象特征.這類(lèi)方法可以減少人為設(shè)計(jì)特征的工作量,同時(shí)也提高了缺陷定位的準(zhǔn)確率.

    2017 年,Lam 等人[55]將深度神經(jīng)網(wǎng)絡(luò)(DNN)與信息檢索技術(shù)中的rVSM 相結(jié)合進(jìn)行缺陷定位.首先,他們使用rVSM 收集缺陷報(bào)告和源代碼文件之間文本相似性的特征;然后,他們用DNN 來(lái)學(xué)習(xí)缺陷報(bào)告中的術(shù)語(yǔ),并將它們與源代碼中潛在不同的代碼字段關(guān)聯(lián)起來(lái).實(shí)驗(yàn)證明:深度神經(jīng)網(wǎng)絡(luò)和信息檢索技術(shù)可以很好地相互補(bǔ)充,能夠?qū)崿F(xiàn)比單個(gè)模型更高的缺陷定位精度.

    2018 年,Xiao 等人[64]提出一個(gè)深度學(xué)習(xí)方法,在字符級(jí)別解釋缺陷報(bào)告,并使用語(yǔ)言模型來(lái)進(jìn)行分析.該方法類(lèi)似于機(jī)器翻譯,首先將缺陷報(bào)告和源代碼文件用字符表示,然后將結(jié)果傳入到CNN 模型中進(jìn)行卷積操作,最后把CNN 的結(jié)果應(yīng)用在基于RNN 的編碼器-解碼器中進(jìn)行缺陷定位.

    同年,Xiao 等人[96]使用卷積神經(jīng)網(wǎng)絡(luò)和級(jí)聯(lián)森林對(duì)語(yǔ)義信息和結(jié)構(gòu)特征建模.首先,采用具有多個(gè)過(guò)濾器的卷積神經(jīng)網(wǎng)絡(luò)和具有多粒度掃描的隨機(jī)森林集合,從缺陷報(bào)告和源文件中提取詞向量的語(yǔ)義和結(jié)構(gòu)特征;隨后從級(jí)聯(lián)森林進(jìn)一步提取更深層次的特征,并觀察缺陷報(bào)告與源代碼文件之間的相關(guān)關(guān)系.

    2019 年,Xiao 等人[77]提出使用詞嵌入和強(qiáng)化的卷積神經(jīng)網(wǎng)絡(luò)來(lái)提升缺陷定位性能.他們使用詞嵌入來(lái)表示缺陷報(bào)告和源文件中保留語(yǔ)義信息的單詞,并使用不同的CNN 模型來(lái)提取它們的特征.Polisetty 等人[101]研究了基于深度學(xué)習(xí)的缺陷定位模型是否能夠滿(mǎn)足參與人員的需求,他們的結(jié)果表明:雖然深度學(xué)習(xí)模型比經(jīng)典的機(jī)器學(xué)習(xí)模型表現(xiàn)得更好,但它們只能部分滿(mǎn)足研究者實(shí)驗(yàn)中設(shè)定的采用標(biāo)準(zhǔn).Huo 等人[69]提出了一種跨項(xiàng)目缺陷定位的深度遷移學(xué)習(xí)方法.使用他們所提出TRANP-CNN 方法,可以從源項(xiàng)目中提取出可轉(zhuǎn)移的語(yǔ)義特征,充分利用目標(biāo)項(xiàng)目中的標(biāo)記數(shù)據(jù)進(jìn)行有效的跨項(xiàng)目缺陷定位.

    3.5 小 結(jié)

    本節(jié)從更換檢索模型、使用特征分析、進(jìn)行查詢(xún)重構(gòu)和應(yīng)用深度學(xué)習(xí)這4 個(gè)方面詳細(xì)介紹了在改良IRBL模型近年的研究進(jìn)展.下面簡(jiǎn)述主要發(fā)現(xiàn):

    (1) 相比于其他IR 模型,VSM 作為一種簡(jiǎn)單的IR 模型,能夠在IRBL 的研究中獲得較好的性能.因此,目前超過(guò)半數(shù)的IRBL 方法都使用VSM 或者VSM 的變體作為他們方法中IR 模型;

    (2) 從代碼庫(kù)和缺陷報(bào)告中挖掘出的特征里,對(duì)提升缺陷定位方法性能十分有效的是版本歷史、相似報(bào)告、代碼結(jié)構(gòu)和堆棧蹤跡這4 種特征,并在大量研究中被以不同的方式集成到他們的IRBL 方法中;

    (3) 查詢(xún)重構(gòu)是一種獨(dú)立于具體定位方法的優(yōu)化策略,因此,它可以作為一個(gè)預(yù)處理步驟集成在任何現(xiàn)有的IRBL 方法中,具有很好的可移植性;

    (4) 將深度學(xué)習(xí)模型應(yīng)用到基于信息檢索的缺陷定位中,可以自動(dòng)地從代碼和缺陷報(bào)告中提取特征.最新的研究顯示了深度學(xué)習(xí)模型在缺陷定位應(yīng)用中十分有效.

    4 IRBL 模型的評(píng)估

    本節(jié)介紹IRBL 模型評(píng)估方向的研究進(jìn)展,根據(jù)對(duì)現(xiàn)有文獻(xiàn)的分類(lèi),主要從模型比較、評(píng)價(jià)指標(biāo)和實(shí)驗(yàn)數(shù)據(jù)這3 個(gè)部分展開(kāi)介紹.

    4.1 模型比較

    研究者在提出新的IRBL 方法時(shí),會(huì)設(shè)計(jì)實(shí)驗(yàn)來(lái)驗(yàn)證新方法的有效性.然而通常的情況是,不同研究者在設(shè)計(jì)實(shí)驗(yàn)時(shí)不能夠完全確保實(shí)驗(yàn)的一致性(即:與基準(zhǔn)方法使用的實(shí)驗(yàn)設(shè)置是否一致,是否正確復(fù)現(xiàn)了基準(zhǔn)方法)與合理性(即實(shí)驗(yàn)設(shè)置是否存在問(wèn)題).這些因素可能會(huì)使得實(shí)驗(yàn)結(jié)果不能準(zhǔn)確顯示新方法的真實(shí)性能,從而誤導(dǎo)后續(xù)的研究工作.

    為了獲得比較真實(shí)客觀的實(shí)驗(yàn)結(jié)果,一些研究工作致力于設(shè)置公平的實(shí)驗(yàn)對(duì)已有定位方法或者IR 模型的效果進(jìn)行比較和評(píng)估的實(shí)證研究,我們簡(jiǎn)稱(chēng)為模型比較研究.這類(lèi)研究的好處在于以下3 個(gè)方面[89]:(1) 對(duì)研究者,幫助他們理解現(xiàn)有模型的優(yōu)缺點(diǎn)和真實(shí)效果,并在此基礎(chǔ)上研究更有效的定位方法;(2) 對(duì)缺陷定位編程人員,幫助他們理解如何更好地使用現(xiàn)有方法來(lái)達(dá)到理想的定位結(jié)果;(3) 對(duì)缺陷報(bào)告者來(lái)說(shuō),幫助他們?cè)谔峤蝗毕輬?bào)告時(shí)填寫(xiě)對(duì)定位缺陷最有用的信息來(lái)加強(qiáng)缺陷定位的成功.

    4.1.1 對(duì)不同參數(shù)性能的比較

    2011 年,Thomas 等人[66]在超過(guò)8 000 個(gè)缺陷報(bào)告上實(shí)證調(diào)查了分類(lèi)器參數(shù)(總共3 172 種參數(shù)設(shè)置)和不同分類(lèi)器組合對(duì)缺陷定位的影響.他們主要得出兩個(gè)結(jié)論:(1) 分類(lèi)器的參數(shù)設(shè)置對(duì)性能有顯著的影響;(2) 使用不同分類(lèi)器組合的結(jié)果優(yōu)于使用任意單獨(dú)的分類(lèi)器.

    2018 年,Tantithamthavorn 等人[76]研究了IR 分類(lèi)器的配置參數(shù)對(duì)方法級(jí)別缺陷定位的性能和工作量的影響.他們的主要結(jié)論如下:(1) 即使在分類(lèi)結(jié)果的排序性能相似的情況下,不同的參數(shù)對(duì)分類(lèi)結(jié)果的工作量有十分顯著的影響;(2) 在方法級(jí)別表現(xiàn)較好的參數(shù)設(shè)置可以應(yīng)用到文件級(jí)別,反之亦然.他們最后強(qiáng)調(diào),在評(píng)估方法時(shí)應(yīng)當(dāng)考慮審查結(jié)果所花費(fèi)工作量.

    4.1.2 對(duì)不同模型性能的比較

    2011 年,Wang 等人[19]在一個(gè)大型的Linux 內(nèi)核數(shù)據(jù)集上比較了10 種不同IR 技術(shù)的關(guān)注點(diǎn)定位(concern localization)方法.他們的結(jié)果顯示:(1) 簡(jiǎn)單的IR 模型(如VSM 和SUM)比復(fù)雜的模型(如LDA)定位效果要好;(2) 相同的IR 技術(shù)在不同系統(tǒng)上處理不同應(yīng)用時(shí)的表現(xiàn)有差異;(3) 基于IR 的關(guān)注點(diǎn)定位技術(shù)在大型軟件系統(tǒng)中和小型軟件系統(tǒng)中一樣有效;(4) 現(xiàn)有的IR 技術(shù)在處理軟件語(yǔ)料庫(kù)時(shí),效果差于處理自然語(yǔ)言的語(yǔ)料庫(kù).

    2015 年Alduailij 等人[89]使用統(tǒng)計(jì)推斷比較3 種文本模型(VSM,LSI,LDA)在方法級(jí)別缺陷定位時(shí)的性能.他們得出結(jié)論是,VSM 是比較好的模型.接著,他們研究了額外參數(shù)對(duì)VSM 性能的影響,包括方法長(zhǎng)度、查詢(xún)長(zhǎng)度、方法的文檔注釋以及缺陷報(bào)告中提及的產(chǎn)品名稱(chēng)和組件名稱(chēng).他們發(fā)現(xiàn),VSM 與大多數(shù)被測(cè)的參數(shù)正相關(guān).

    2018 年,Shi 等人[94]對(duì)混合缺陷定位方法(hybrid bug localization,即同時(shí)使用IR 相似度和附加特征的方法)進(jìn)行研究.他們比較了8 種不同的LtR 技術(shù)在使用4 種歸一化方法時(shí)的性能表現(xiàn).他們發(fā)現(xiàn),LtR 的表現(xiàn)好于最新的BLUiR[24]和AmaLgam 方法[31].

    4.1.3 對(duì)不同實(shí)驗(yàn)方案的比較

    一些研究者指出:在進(jìn)行模型比較的實(shí)驗(yàn)驗(yàn)證過(guò)程中存在不合理的設(shè)置,這些不合理的設(shè)置會(huì)影響實(shí)驗(yàn)結(jié)果的準(zhǔn)確性.2018 年,Kim 等人[41]發(fā)現(xiàn),現(xiàn)有研究的實(shí)驗(yàn)數(shù)據(jù)集中包含一些non-buggy 文件(例如測(cè)試文件).他們指出:將這些文件包含在數(shù)據(jù)集中會(huì)影響現(xiàn)有技術(shù)的可靠性,所以在以后實(shí)驗(yàn)方案中應(yīng)當(dāng)被去掉.根據(jù)他們?cè)谂懦郎y(cè)試文件的數(shù)據(jù)集上的實(shí)驗(yàn)結(jié)果,被多數(shù)研究者作為基準(zhǔn)方法的BLUiR[24]的實(shí)際定位效果并沒(méi)有原文實(shí)驗(yàn)中表現(xiàn)得那么好.Kim 等人[41]指出的不合理的實(shí)驗(yàn)方案在得到認(rèn)同,例如,Lee 等人[39]在他們的實(shí)證研究中排除了數(shù)據(jù)集中的測(cè)試文件.

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

    評(píng)價(jià)指標(biāo)是度量方法有效性的重要依據(jù).針對(duì)不同模型的輸出結(jié)果,研究者使用多種類(lèi)型的指標(biāo)對(duì)結(jié)果進(jìn)行評(píng)價(jià).本節(jié)從排序性能、分類(lèi)性能和工作量這3 個(gè)角度介紹IRBL 領(lǐng)域的評(píng)價(jià)指標(biāo).

    4.2.1 評(píng)估排序性能的指標(biāo)

    目前,大多數(shù)IRBL 領(lǐng)域的研究都將缺陷定位視為一個(gè)排序任務(wù),對(duì)于給定的缺陷報(bào)告,定位方法會(huì)輸出一個(gè)根據(jù)其包含缺陷可能性從大到小排序的文件列表.因此,大量研究使用排序指標(biāo)來(lái)評(píng)價(jià)IRBL 方法的性能.表4對(duì)排序性能評(píng)估指標(biāo)的計(jì)算方法和使用情況進(jìn)行了匯總.這些指標(biāo)的具體含義如下.

    (1) Top@K.表示對(duì)缺陷定位方法生成的推薦列表中前k個(gè)文件進(jìn)行審查時(shí)缺陷定位方法定位成功的概率.特別地,給定一個(gè)待定位的缺陷報(bào)告,如果缺陷定位方法生成的推薦列表的前k個(gè)源代碼文件中至少有一個(gè)與給定的缺陷報(bào)告相關(guān),則認(rèn)為定位成功;

    (2)MRR(mean reciprocal rank).測(cè)量的是缺陷定位方法定位到的首個(gè)與缺陷報(bào)告相關(guān)的源代碼文件在排序列表中的位置;

    (3)MAP(mean average precision).測(cè)量的是缺陷定位方法定位到的所有與缺陷報(bào)告相關(guān)的源代碼文件在排序列表中的位置;

    (4)E(effectiveness).表示在找到一個(gè)與缺陷報(bào)告相關(guān)的文件之前最少需要被開(kāi)發(fā)者審查的源文件數(shù)目.

    前 3 個(gè)指標(biāo)的值越大,說(shuō)明包含缺陷的文件在結(jié)果列表的位置越靠前,即方法的排序性能越好;而Effectiveness 的值越小,方法的性能越好.從表4 可以看出:其中,Top@K,MRR和MAP是應(yīng)用最多的3 種指標(biāo),分別在40,38 和46 篇文獻(xiàn)中被用來(lái)評(píng)估IRBL 方法.

    Table 4 Summary of evaluation metrics for IRBL models in terms of ranking performance表4 評(píng)價(jià)IRBL 模型的排序性能指標(biāo)匯總

    4.2.2 評(píng)估分類(lèi)性能的指標(biāo)

    在信息檢索領(lǐng)域,另一類(lèi)重要的指標(biāo)是用來(lái)評(píng)價(jià)一種方法的分類(lèi)性能.然而,由于IRBL 的輸出結(jié)果是一個(gè)序列,分類(lèi)指標(biāo)不能被直接用于對(duì)這些方法進(jìn)行評(píng)價(jià).現(xiàn)有部分研究[60-62,86]的做法是,設(shè)置一個(gè)排名閾值將該序列分成兩種類(lèi)型,即:在排名之前的文件包含缺陷,反之不包含缺陷.

    從二分類(lèi)的角度來(lái)看,IRBL 方法的定位結(jié)果總共可以劃分為以下4 種可能情況.

    · 對(duì)于一個(gè)被定位為包含該缺陷的文件,它的確包含該缺陷,這種結(jié)果屬于TP(true positive);

    · 對(duì)于一個(gè)被定位為包含該缺陷的文件,它并不包含該缺陷,這種結(jié)果屬于FP(false positive);

    · 對(duì)于一個(gè)被定位為沒(méi)有該缺陷的文件,它的確包含該缺陷,這種結(jié)果屬于FN(false negative);

    · 對(duì)于一個(gè)被定位為沒(méi)有該缺陷的文件,它并不包含該缺陷,這種結(jié)果屬于TN(true negative).

    現(xiàn)有的二分類(lèi)評(píng)價(jià)指標(biāo)是基于上述4 種情況的統(tǒng)計(jì)技術(shù)來(lái)計(jì)算的.表5 對(duì)這些分類(lèi)性能評(píng)估指標(biāo)的計(jì)算方法和使用情況進(jìn)行了匯總.這些指標(biāo)的具體含義如下.

    (1) Precision(精度):在預(yù)測(cè)為有缺陷的文件中,有多少比例的文件真正與該缺陷相關(guān);

    (2) Recall(召回率):在所有與缺陷相關(guān)的文件中,有多少比例的文件被定位為與該缺陷相關(guān);

    (3)F1-score(調(diào)和平均值):精度和召回率的調(diào)和平均值,可以更加客觀地評(píng)價(jià)分類(lèi)結(jié)果;

    (4) Accuracy(準(zhǔn)確率)[85]:在所有分類(lèi)結(jié)果中,正確分類(lèi)的文件(包括正確分為與缺陷相關(guān)和正確分為與缺陷無(wú)關(guān)的文件)占所有文件的比例;

    (5) MCC(Matthews correlation coefficient,馬修斯相關(guān)系數(shù))[82]:表示的是真實(shí)類(lèi)別和預(yù)測(cè)類(lèi)別的二元分類(lèi)之間的相關(guān)系數(shù).

    這些指標(biāo)的計(jì)算與設(shè)定的排名閾值有關(guān),即:在排名閾值之前的文件被定為包含某缺陷,反之不包含該缺陷.因?yàn)樵跊](méi)有閾值的情況下,任何結(jié)果是沒(méi)有意義的.例如,召回率都為1.0 而精度都為k/K(K是項(xiàng)目中所有文件的數(shù)目,k是其中包含缺陷的文件數(shù)目).在這些指標(biāo)中使用最多的是精度和召回率,它們都在11 篇文獻(xiàn)中被使用過(guò).

    Table 5 Summary of evaluation metrics for IRBL models in terms of classification performance表5 評(píng)價(jià)IRBL 模型的分類(lèi)性能指標(biāo)匯總

    4.2.3 評(píng)估工作量的指標(biāo)

    在缺陷定位領(lǐng)域,研究人員發(fā)現(xiàn),上述性能評(píng)價(jià)指標(biāo)不能完全滿(mǎn)足IRBL 方法在實(shí)際應(yīng)用中的評(píng)估需求.由于開(kāi)發(fā)人員需要花費(fèi)有限的工作量(時(shí)間和資源)來(lái)對(duì)IRBL 方法推薦的結(jié)果進(jìn)行人工審查.在此期間,能夠以較小工作量的找到缺陷所在位置才能夠說(shuō)明一個(gè)方法的實(shí)際有效性.因此,研究者們從工作量感知(effort aware)的角度來(lái)對(duì)結(jié)果進(jìn)行評(píng)價(jià).

    表6 中對(duì)工作量性能評(píng)估指標(biāo)的計(jì)算方法和使用情況進(jìn)行了匯總,其中大部分評(píng)估指標(biāo)是Zhao 等人[36,37]在2015 年首先提出的,他們使用代碼行數(shù)來(lái)衡量一個(gè)文件在審查時(shí)所需花費(fèi)的工作量.其具體含義如下.

    (1) Effort@K:由Top@K派生而來(lái),衡量了缺陷定位方法推薦對(duì)列表中前K個(gè)源代碼文件進(jìn)行審查時(shí),開(kāi)發(fā)人員找到與缺陷報(bào)告相關(guān)的源代碼文件平均需要花費(fèi)多少工作量;

    (2) MAE(mean average effort):由MAP 派生而來(lái),表示從推薦列表中找出所有與缺陷報(bào)告相關(guān)的源代碼文件時(shí)平均所需花費(fèi)的工作量;

    (3) MFE(mean first effort):由MRR 派生而來(lái),表示從源代碼文件推薦列表中找到第一個(gè)與缺陷報(bào)告相關(guān)的源代碼文件平均所需要的工作量.它的值越小,表示在工作量感知下方法的性能越好.

    Table 6 Summary of evaluation metrics for IRBL models in terms of effort-aware performance表6 評(píng)價(jià)IRBL 模型的工作量性能指標(biāo)匯總

    4.3 實(shí)驗(yàn)數(shù)據(jù)

    經(jīng)過(guò)十幾年的發(fā)展,目前IRBL 領(lǐng)域已有較多研究者收集并且公開(kāi)了它們的實(shí)驗(yàn)數(shù)據(jù)集,這對(duì)于繼續(xù)在缺陷定位領(lǐng)域進(jìn)行研究十分有利.表7 列出了IRBL 領(lǐng)域的公開(kāi)可用數(shù)據(jù)集的匯總信息,包括數(shù)據(jù)集提供者、所使用的項(xiàng)目數(shù)和提供的缺陷報(bào)告數(shù)目等.

    Table 7 Summary of experiments datasets for IR-based bug localization models表7 基于信息檢索的缺陷定位模型的數(shù)據(jù)集匯總

    目前,IRBL 領(lǐng)域的數(shù)據(jù)集的收集和使用過(guò)程中仍存在一些問(wèn)題需要得到重視.

    (1) 項(xiàng)目語(yǔ)言偏向于Java.目前,絕大多數(shù)研究者提供的數(shù)據(jù)集中的實(shí)驗(yàn)項(xiàng)目是由Java 開(kāi)發(fā)的,其他語(yǔ)言開(kāi)發(fā)的數(shù)據(jù)集相對(duì)較少并且沒(méi)有被大量引用.例如,Saha 等人[26]收集的C 語(yǔ)言項(xiàng)目和對(duì)Garnier 等人[38]收集的C#語(yǔ)言項(xiàng)目都僅在各自的研究中被使用.Java語(yǔ)言項(xiàng)目受到關(guān)注,這得益于Java語(yǔ)言的流行和相關(guān)項(xiàng)目的良好維護(hù).現(xiàn)有研究可以在一定程度上說(shuō)明目前的方法在對(duì)Java 項(xiàng)目進(jìn)行缺陷定位時(shí)是有效的.然而,不同的語(yǔ)言在進(jìn)行開(kāi)發(fā)時(shí)有各自的特點(diǎn),僅僅在一種語(yǔ)言的項(xiàng)目上實(shí)驗(yàn)的結(jié)果不能直接應(yīng)用到其他語(yǔ)言開(kāi)發(fā)的項(xiàng)目之上.其有效性還需要進(jìn)一步的實(shí)驗(yàn)證實(shí);

    (2) 數(shù)據(jù)集質(zhì)量各異.盡管數(shù)據(jù)集的收集過(guò)程都是按照Dallmeier 等人[115]提供的過(guò)程進(jìn)行收集,但是具體操作過(guò)程會(huì)有一些差異,從而導(dǎo)致不同研究者收集的數(shù)據(jù)集存在一定到偏差,在這些數(shù)據(jù)上進(jìn)行實(shí)驗(yàn)得到的結(jié)果可能會(huì)對(duì)分析帶來(lái)誤差.因此,為了得到客觀公正的結(jié)果,需要花費(fèi)更多的工作來(lái)審查數(shù)據(jù)集的質(zhì)量來(lái)確保其準(zhǔn)確性;

    (3) 實(shí)驗(yàn)驗(yàn)證不充分.雖然已有較多的數(shù)據(jù)集,但是從統(tǒng)計(jì)信息來(lái)看,大多數(shù)研究者還是集中于使用個(gè)別數(shù)據(jù)集(例如Zhou 等人[28]和Ye 等人[47])來(lái)驗(yàn)證他們的方法.一方面說(shuō)明現(xiàn)有的多個(gè)數(shù)據(jù)集還未受到研究者的重視,其數(shù)據(jù)集的可靠性有待于進(jìn)一步被驗(yàn)證;另一方面表明,現(xiàn)有IRBL 方法僅在個(gè)別數(shù)據(jù)集上獲得好的性能,其泛化能力仍有待更多實(shí)驗(yàn)數(shù)據(jù)的證實(shí).

    4.4 小 結(jié)

    本節(jié)從模型比較、評(píng)價(jià)指標(biāo)和實(shí)驗(yàn)數(shù)據(jù)這3 個(gè)方面詳細(xì)介紹了在近年來(lái)對(duì)IRBL 方法進(jìn)行評(píng)估的研究進(jìn)展.下面簡(jiǎn)述主要的發(fā)現(xiàn):

    (1) 在實(shí)際定位中要選擇合適的IRBL 方法,同時(shí)應(yīng)當(dāng)注意到,參數(shù)配置對(duì)結(jié)果的有效性的影響比較大.因此在應(yīng)用具體IRBL 方法時(shí),應(yīng)當(dāng)選擇適當(dāng)?shù)膮?shù);

    (2) 現(xiàn)有研究主要是評(píng)價(jià)IRBL 方法的排序性能和分類(lèi)性能,多數(shù)研究并沒(méi)有從工作量感知的角度來(lái)評(píng)價(jià)他們的方法,導(dǎo)致現(xiàn)有的研究方法很難滿(mǎn)足實(shí)際應(yīng)用的需求;

    (3) 目前,已有不同研究者提供的規(guī)模較大的數(shù)據(jù)集供后人使用,但是仍存在一些問(wèn)題,例如數(shù)據(jù)集偏向于Java 編寫(xiě)的項(xiàng)目.此外,目前大多數(shù)研究仍只在少數(shù)數(shù)據(jù)集上測(cè)試它們的方法,無(wú)法確保其具有良好的泛化性能.

    5 缺陷定位的相關(guān)研究工作

    缺陷定位是一個(gè)涉及層面十分廣闊的領(lǐng)域,除了可以使用信息檢索技術(shù)實(shí)現(xiàn)軟件缺陷定位,還可以通過(guò)其他多種途徑定位軟件中的缺陷,例如基于程序頻譜的缺陷定位、基于程序變異的缺陷定位、基于多模態(tài)的缺陷定位等.本節(jié)中,對(duì)其他類(lèi)型缺陷定位的相關(guān)工作進(jìn)行簡(jiǎn)要介紹.

    5.1 基于程序頻譜的缺陷定位

    基于程序頻譜的缺陷定位(spectrum-based fault localization,簡(jiǎn)稱(chēng)SFL)是一類(lèi)重要的動(dòng)態(tài)定位技術(shù),該類(lèi)方法在進(jìn)定位缺陷時(shí)需要執(zhí)行大量的測(cè)試用例,然后通過(guò)對(duì)測(cè)試用例的程序頻譜應(yīng)用評(píng)估度量來(lái)定位錯(cuò)誤語(yǔ)句.與基于信息檢索的方法相類(lèi)似的,該方法根據(jù)度量公式計(jì)算程序組件的分?jǐn)?shù),并對(duì)它們進(jìn)行排序.基于程序頻譜的定位效果依賴(lài)于程序頻譜的構(gòu)造方式和度量指標(biāo).以下是部分相關(guān)研究工作.

    2009 年,Rui 等人[116]對(duì)早期的用于分析程序頻譜的特定相似系數(shù)的性能進(jìn)行了評(píng)估.實(shí)驗(yàn)結(jié)果表明,用于分析程序譜的特定相似系數(shù)的優(yōu)越性能在很大程度上與實(shí)驗(yàn)的設(shè)計(jì)無(wú)關(guān).此外,對(duì)于低質(zhì)量的缺陷觀察和有限數(shù)量的測(cè)試用例,基于程序頻譜的缺陷定位已經(jīng)獲得了近乎最佳的準(zhǔn)確性.實(shí)驗(yàn)也證明了基于程序頻譜的缺陷定位可以有效地應(yīng)用于嵌入式軟件開(kāi)發(fā)的環(huán)境中.

    2010 年,Lee 等人[117]提出了一種利用頻率加權(quán)函數(shù)進(jìn)行缺陷定位的方法.該方法考慮了每個(gè)測(cè)試用例執(zhí)行的程序語(yǔ)句的頻率執(zhí)行計(jì)數(shù)來(lái)進(jìn)一步提高缺陷定位的性能.

    2015 年,Naish 等人[88]發(fā)現(xiàn),現(xiàn)有的遺傳規(guī)劃方法由于評(píng)估度量的巨大搜索空間變得緩慢而不可靠.因此,他們提出了一個(gè)“hyperbolic”度量的限定類(lèi),其中包含少量的數(shù)值參數(shù),由此,遺傳規(guī)劃算法可以在大量的程序頻譜上可靠地發(fā)現(xiàn)有效度量,從而使程序組件排序更準(zhǔn)確.

    2019 年,Ribeiro 等人[118]使用數(shù)據(jù)流頻譜評(píng)估了10 個(gè)基于程序頻譜方法的排名指標(biāo)的有效性和效率.該實(shí)驗(yàn)證明:使用數(shù)據(jù)流頻譜進(jìn)行分析,比使用控制流頻譜分析效果更好,最高有50%的缺陷位于排序列表的前15位.同年,Ma 等人[119]提出了一個(gè)統(tǒng)一的系統(tǒng)研究框架來(lái)評(píng)估和比較單缺陷和多缺陷情況下的基于程序頻譜的缺陷定位方法.該框架實(shí)現(xiàn)了一個(gè)通用向量模型來(lái)深入理解各種基于程序頻譜的缺陷定位方法.

    5.2 基于變異分析的缺陷定位

    基于程序變異的缺陷定位(mutation-based fault localization,簡(jiǎn)稱(chēng)MFL)是一種使用變異算子模擬人為錯(cuò)誤來(lái)檢測(cè)未知錯(cuò)誤的定位方法[12,120-124],根據(jù)變異體與被測(cè)程序的執(zhí)行結(jié)果,利用公式來(lái)推算代碼語(yǔ)句的出錯(cuò)可能性.通常來(lái)說(shuō),這類(lèi)方法在語(yǔ)句級(jí)別生成變異體,從而能夠比較準(zhǔn)確地定位出程序中有缺陷的語(yǔ)句.同時(shí),由于需對(duì)大量程序變異體執(zhí)行測(cè)試用例集,其執(zhí)行開(kāi)銷(xiāo)較大.以下是部分相關(guān)研究工作.

    2015 年,Papadakis 等人[125]首次提出了基于變異分析的缺陷定位的概念.他們提出的方法利用各個(gè)變異體間的相似性來(lái)檢測(cè)缺陷:首先,使用變異算子為待測(cè)程序生成變異體;然后,對(duì)原程序和變異體執(zhí)行測(cè)試用例并獲取執(zhí)行結(jié)果;接著,對(duì)執(zhí)行結(jié)果構(gòu)建特征計(jì)算變異體包含缺陷的風(fēng)險(xiǎn)分?jǐn)?shù);最后,根據(jù)相同位置的變異體與原程序語(yǔ)句風(fēng)險(xiǎn)分?jǐn)?shù)來(lái)預(yù)測(cè)可能包含缺陷語(yǔ)句的位置.

    同年,為了能夠很好地處理真實(shí)世界中多語(yǔ)言程序的缺陷定位問(wèn)題,Hong 等人[120]提出了一種基于變異的缺陷定位技術(shù).該技術(shù)以目標(biāo)程序的多語(yǔ)言源代碼和一組測(cè)試用例作為輸入,生成一個(gè)按照包含缺陷風(fēng)險(xiǎn)值排序的語(yǔ)句列表.為了計(jì)算每個(gè)語(yǔ)句的風(fēng)險(xiǎn)值,該技術(shù)首先通過(guò)系統(tǒng)地改變每個(gè)語(yǔ)句來(lái)生成原程序的不同變體;接著,根據(jù)語(yǔ)句發(fā)生特定變異后,測(cè)試結(jié)果變化情況來(lái)計(jì)算風(fēng)險(xiǎn)值.值得注意的是:為了提高對(duì)多語(yǔ)言程序缺陷定位的準(zhǔn)確性,他們提出了適用于多語(yǔ)言程序的變異算子.

    由于MFL 技術(shù)的計(jì)算開(kāi)銷(xiāo)較大,Liu 等人[121,122]在2017 年提出了兩種變異約簡(jiǎn)策略來(lái)降低MFL 技術(shù)的計(jì)算成本.

    · 一種是面向語(yǔ)句的變異約簡(jiǎn)策略[121],該策略首先用全套變異算子在失敗測(cè)試用例覆蓋的每個(gè)語(yǔ)句上產(chǎn)生變異,以確保能夠使用完整類(lèi)別的變異算子;然后利用每個(gè)語(yǔ)句上的變異體抽樣策略,選擇使用特定百分比的變異體;

    · 另一種是動(dòng)態(tài)變異執(zhí)行策略[122],該策略會(huì)確定優(yōu)先執(zhí)行的變異體和測(cè)試用例首先執(zhí)行,避免進(jìn)行無(wú)用的執(zhí)行來(lái)降低計(jì)算開(kāi)銷(xiāo).

    2018 年,Oliveira 等人[123]提出一種面向失敗測(cè)試的變異運(yùn)行策略FTMES 來(lái)提高基于變異的缺陷定位的有效性,并且降低其所需的計(jì)算開(kāi)銷(xiāo).FTMES 只使用一組失敗的測(cè)試用例來(lái)執(zhí)行變異,并且通過(guò)使用覆蓋率數(shù)據(jù)替換終止信息來(lái)避免執(zhí)行已通過(guò)的測(cè)試用例.

    5.3 基于多種模態(tài)的缺陷定位

    很多方法只考慮了某一種類(lèi)型的缺陷定位技術(shù),比如:基于信息檢索的方法只考慮了缺陷報(bào)告中的文本信息及靜態(tài)特征;基于程序頻譜的方法只考慮動(dòng)態(tài)的程序頻譜特征.很多研究者發(fā)現(xiàn):同時(shí)結(jié)合兩種或以上類(lèi)型的缺陷定位技術(shù)能夠發(fā)揮出各自的優(yōu)勢(shì),從而能夠獲得更好的缺陷定位效果.以下是部分相關(guān)研究工作.

    2015 年,Le 等人[45]將多模態(tài)信息檢索與程序頻譜組合進(jìn)行缺陷定位,并且自適應(yīng)地創(chuàng)建了一個(gè)特定于某個(gè)缺陷的模型,以將特定的缺陷映射到它可能的位置.該方法同時(shí)考慮了缺陷報(bào)告中的文本描述和程序的頻譜信息,最后結(jié)合兩者的分析結(jié)果獲得可疑的術(shù)語(yǔ)或單詞,并且以此來(lái)判斷程序組件包含缺陷的可疑程度.

    2017 年,Dao 等人[54]研究了代碼運(yùn)行信息對(duì)基于信息檢索的缺陷定位的幫助.作者在文中比較了3 種目前流行的基于信息檢索的缺陷定位方法(BugLocator[28],BLUiR[24],AmaLgam[31])和3 種代碼運(yùn)行信息(程序覆蓋、程序切片和程序頻譜).實(shí)驗(yàn)證明,代碼的運(yùn)行信息會(huì)很大改進(jìn)基于信息檢索的缺陷定位方法.

    2019 年,Hoang 等人[67]也發(fā)現(xiàn)了只考慮缺陷報(bào)告和只考慮執(zhí)行跟蹤的方法的限制.他們提出了一種多模態(tài)缺陷定位方法,通過(guò)聯(lián)合使用缺陷報(bào)告和執(zhí)行跟蹤來(lái)解決現(xiàn)有方法存在的問(wèn)題.

    5.4 基于新型應(yīng)用的缺陷定位

    目前,大多的IRBL 方法在進(jìn)行缺陷定位時(shí)并沒(méi)有細(xì)致考慮到缺陷的類(lèi)型,他們的研究是針對(duì)所有類(lèi)型的缺陷而言.在現(xiàn)實(shí)應(yīng)用中,進(jìn)行缺陷定位要面臨不同的應(yīng)用場(chǎng)景,此時(shí),直接使用這些方法可能無(wú)法得到預(yù)期效果.因此,有部分研究開(kāi)始在更加細(xì)分類(lèi)別的缺陷上研究定位方法.

    · 對(duì)軟件崩潰的定位.軟件崩潰開(kāi)始研究一種特殊缺陷,這種缺陷經(jīng)常發(fā)生在用戶(hù)使用軟件的過(guò)程中,它導(dǎo)致軟件無(wú)法正常工作而出現(xiàn)崩潰界面,因而嚴(yán)重影響用戶(hù)體驗(yàn).這類(lèi)缺陷通常會(huì)由軟件后臺(tái)自動(dòng)收集相應(yīng)的崩潰信息提交給后臺(tái)服務(wù)器.Wu 等人通過(guò)挖掘這些崩潰信息,提出了CrashLocator[126]和ChangeLocator[127],分別在方法級(jí)別和變更級(jí)別定位這種缺陷.2020 年,Guo 等人[128]在ChangeLocator的基礎(chǔ)上對(duì)崩潰變更的特征進(jìn)行選擇,他們發(fā)現(xiàn):過(guò)濾后的特征,能夠用來(lái)構(gòu)建更好的崩潰變更定位模型;

    · 對(duì)Android 應(yīng)用缺陷的定位.Android 應(yīng)用與開(kāi)源的桌面軟件有所不同,它們運(yùn)行在手機(jī)操作系統(tǒng)之上,這類(lèi)應(yīng)用的歷史缺陷報(bào)告較少,并且沒(méi)有充足的詳細(xì)描述信息.因此,很難將現(xiàn)有的IRBL 方法直接用于對(duì)Android 應(yīng)用進(jìn)行缺陷定位.2019 年,Zhang 等人[100]基于提交信息,提出了一種適用于Android 應(yīng)用的缺陷定位方法.

    5.5 小 結(jié)

    本節(jié)從程序頻譜、變異分析、多模態(tài)和新型應(yīng)用這4 個(gè)方面簡(jiǎn)要介紹了缺陷定位領(lǐng)域中其他相關(guān)研究.下面簡(jiǎn)述主要的發(fā)現(xiàn):

    (1) 程序頻譜是主流的動(dòng)態(tài)缺陷定位方法,其相關(guān)研究一直是缺陷定位領(lǐng)域的另一個(gè)熱點(diǎn);

    (2) 變異分析是一種有效的動(dòng)態(tài)缺陷定位方法,目前多數(shù)研究主要致力于降低這類(lèi)方法的計(jì)算成本;

    (3) 多模態(tài)的缺陷定位方法可以結(jié)合多種定位技術(shù)的優(yōu)點(diǎn),近年來(lái)也逐漸受到研究者的重視;

    (4) 缺陷定位的應(yīng)用已經(jīng)開(kāi)始逐步細(xì)分到研究具體類(lèi)型的缺陷,這種趨勢(shì)有利于更精細(xì)化地將缺陷定位技術(shù)應(yīng)用到實(shí)踐中.

    6 挑 戰(zhàn)

    從現(xiàn)有文獻(xiàn)來(lái)看,IRBL 技術(shù)的相關(guān)研究已經(jīng)取得了很好的成效,最新的定位方法已經(jīng)能夠?qū)⒍ㄎ恍阅芴嵘揭粋€(gè)較高的層面.但是我們應(yīng)當(dāng)注意到,現(xiàn)有的研究技術(shù)在工業(yè)界中并沒(méi)有被廣泛應(yīng)用[39],因?yàn)樗€難以滿(mǎn)足實(shí)際軟件開(kāi)發(fā)和維護(hù)過(guò)程的需求.本節(jié)從局限性、泛化性、準(zhǔn)確性和實(shí)用性這4 個(gè)角度來(lái)介紹IRBL 領(lǐng)域的研究面臨著以下挑戰(zhàn).

    (1) 局限性.目前,對(duì)IRBL 方法的性能評(píng)估是基于該方法在一組缺陷報(bào)告上測(cè)試的平均性能值(例如MRR).這類(lèi)評(píng)估指標(biāo)可以在整體上對(duì)某個(gè)方法進(jìn)行評(píng)價(jià),但是有一點(diǎn)需要注意:在整體上具有較高的評(píng)估分?jǐn)?shù),不代表該方法在每個(gè)具體缺陷報(bào)告的推薦結(jié)果也令人滿(mǎn)意[73].對(duì)任何IRBL 方法來(lái)說(shuō),是不可能對(duì)所有的缺陷報(bào)告都給出最優(yōu)排序結(jié)果的.在應(yīng)用一種方法時(shí),可能會(huì)遇到以下情況:對(duì)某些(可能僅僅一小部分)缺陷報(bào)告進(jìn)行推薦時(shí),該方法會(huì)將這些缺陷報(bào)告對(duì)應(yīng)的源文件排在十分靠后的位置.對(duì)這樣的推薦結(jié)果,開(kāi)發(fā)者按照列表順序從頭審查將會(huì)花費(fèi)巨大的工作量.盡管這種推薦結(jié)果出現(xiàn)的次數(shù)較少,但是由于開(kāi)發(fā)者不知道何時(shí)會(huì)遇到這種推薦,他們會(huì)傾向于不使用該方法.上述情況屬于一個(gè)IRBL 方法的應(yīng)用局限性.能夠準(zhǔn)確分析每個(gè)IRBL 方法的局限性十分關(guān)鍵,這可以在使用時(shí)規(guī)避上述情況的發(fā)生.現(xiàn)有研究的一個(gè)問(wèn)題是局限性分析較少,導(dǎo)致開(kāi)發(fā)者不能夠在恰當(dāng)?shù)膱?chǎng)景下使用這些IRBL 方法,從而這些方法的最大優(yōu)勢(shì)不能被充分利用,同時(shí)在使用時(shí)不能及時(shí)避免其劣勢(shì);

    (2) 泛化性.影響泛化性的因素有兩點(diǎn).

    1) 測(cè)試數(shù)據(jù)集稀少.雖然現(xiàn)在已有多個(gè)公開(kāi)數(shù)據(jù)集,最近兩年提出的一部分IRBL 方法[41,64,65,79,94,99]仍?xún)H僅在很少的測(cè)試項(xiàng)目(Zhou 等人[28]在2012 年提供的4 個(gè)項(xiàng)目)上進(jìn)行了驗(yàn)證.特別地,這些項(xiàng)目數(shù)據(jù)大多是是由Java 語(yǔ)言開(kāi)發(fā)的,因此多數(shù)現(xiàn)有的實(shí)驗(yàn)結(jié)果是適用于Java 項(xiàng)目的[35],但是在其他類(lèi)型的項(xiàng)目上的性能表現(xiàn)未知,即IRBL 方法的泛化性能未知.由于存在這種不確定性,目前的方法很難受到開(kāi)發(fā)人員的信任,并且他們也很難挑選出優(yōu)秀的方法.因此,許多工作[25,31,80]指出,仍然需要在更多的項(xiàng)目上進(jìn)行實(shí)驗(yàn)來(lái)測(cè)試IRBL 方法的性能;

    2) 人工設(shè)計(jì)特征.現(xiàn)有的IRBL 方法的特征選取和挖掘都是人工根據(jù)某一部分的缺陷數(shù)據(jù)進(jìn)行設(shè)計(jì)的,用這種方式構(gòu)建出的方法可以在可以一些數(shù)據(jù)上達(dá)到較好的效果.然而,遇到具有不同特征的數(shù)據(jù),這些方法的定位能力便會(huì)降低,從而就表現(xiàn)為泛化性低下[68];

    (3) 準(zhǔn)確性.準(zhǔn)確的實(shí)驗(yàn)數(shù)據(jù)集是保證定位方法質(zhì)量的重要依據(jù).現(xiàn)有的數(shù)據(jù)集雖然都是按照Dallmeier等人[115]提供的方法進(jìn)行收集的,但是不同的研究者在具體操作過(guò)程中會(huì)有細(xì)節(jié)上的差別[28,35,39,115],從而導(dǎo)致不同數(shù)據(jù)集的準(zhǔn)確性受到影響.其中,一些重要的細(xì)節(jié)信息需要驗(yàn)證,例如:與缺陷報(bào)告進(jìn)行匹配的源代碼的版本是否為被修復(fù)前的版本[47];數(shù)據(jù)集中明顯不包含缺陷的部分(例如測(cè)試文件)應(yīng)當(dāng)被排除在推薦列表之外[39]等等.這些不完全統(tǒng)一的處理細(xì)節(jié)會(huì)嚴(yán)重影響方法測(cè)試結(jié)果的準(zhǔn)確性,甚至產(chǎn)生互相矛盾的比較結(jié)果[66];

    (4) 實(shí)用性.目前的IRBL 方法僅活躍在實(shí)驗(yàn)研究階段,它們并沒(méi)有在工程實(shí)踐中大量應(yīng)用[39].除了準(zhǔn)確性和泛化性較低的因素之外,更重要的原因是這些定位方法(如BugLocator[28],BRTracer[30],Locus[32]等)只能夠提供給開(kāi)發(fā)者建議性的缺陷文件列表,無(wú)法為開(kāi)發(fā)人員修復(fù)缺陷提供更多的指導(dǎo)信息.在生產(chǎn)實(shí)踐中,開(kāi)發(fā)人員需要完全依靠自己對(duì)代碼的理解來(lái)手動(dòng)檢查,所以目前缺陷定位技術(shù)所提供的幫助很小,我們分析,這是導(dǎo)致它們的實(shí)用性很難滿(mǎn)足開(kāi)發(fā)者的需要的另一個(gè)重要原因.

    針對(duì)缺陷定位技術(shù)面臨的問(wèn)題挑戰(zhàn),我們從結(jié)果分析、實(shí)驗(yàn)驗(yàn)證和修復(fù)指導(dǎo)總結(jié)了以下幾方面可能將會(huì)成為進(jìn)一步深入研究的重要方向.

    (1) 結(jié)果分析.其中一個(gè)研究方向是在缺陷定位框架中應(yīng)當(dāng)具有偵測(cè)機(jī)制,對(duì)缺陷報(bào)告的特征進(jìn)行檢測(cè)并進(jìn)行分類(lèi),根據(jù)檢測(cè)結(jié)果,缺陷定位框架應(yīng)當(dāng)決定是使用他們提出IRBL 方法進(jìn)行定位還是放棄對(duì)該報(bào)告的定位.這一過(guò)程的實(shí)現(xiàn),有利于開(kāi)發(fā)者充分發(fā)揮IRBL 方法在其擅長(zhǎng)處理的缺陷報(bào)告中進(jìn)行推薦的能力,并且避免他們給出低效的推薦結(jié)果.這種機(jī)制的建立,需要對(duì)IRBL 方法的定位結(jié)果進(jìn)行分析,通過(guò)收集較差的推薦列表所對(duì)應(yīng)的的缺陷報(bào)告,分析這些缺陷報(bào)告的特征,在應(yīng)用時(shí),遇到具備這類(lèi)特征的缺陷報(bào)告就停止使用IRBL 方法,而是進(jìn)行人工處理或者借助其他技術(shù)來(lái)幫助定位.除此之外,需要增多對(duì)IRBL 方法進(jìn)行工作量感知[36,37]方面的性能評(píng)估分析;

    (2) 實(shí)驗(yàn)驗(yàn)證.針對(duì)泛化性和準(zhǔn)確性的挑戰(zhàn)問(wèn)題,一個(gè)研究方向是增加科學(xué)準(zhǔn)確對(duì)比實(shí)驗(yàn)研究目前方法的有效性.主要包括兩個(gè)方面.

    1) 收集全面精準(zhǔn)的數(shù)據(jù)集.目前的研究所使用的數(shù)據(jù)集極其不統(tǒng)一,所以他們得出的結(jié)論具有片面性,不能代表其真實(shí)的性能.為基于信息檢索的缺陷定位研究收集更多的準(zhǔn)確數(shù)據(jù)集,需要涵蓋各種語(yǔ)言的書(shū)寫(xiě)的項(xiàng)目以及各個(gè)領(lǐng)域的項(xiàng)目,用來(lái)驗(yàn)證方法的有效性和泛化性;

    2) 設(shè)置科學(xué)的實(shí)驗(yàn)流程和設(shè)置.目前的研究所用的實(shí)驗(yàn)設(shè)置比較混亂,這也會(huì)影響實(shí)驗(yàn)結(jié)果的準(zhǔn)確性.因此,需要在科學(xué)統(tǒng)一的流程和設(shè)置下進(jìn)行實(shí)驗(yàn).實(shí)驗(yàn)設(shè)計(jì)要符合現(xiàn)實(shí)開(kāi)發(fā)的場(chǎng)景,以確保其合理性;

    (3) 修復(fù)指導(dǎo).為了提高定位方法的實(shí)用性能,一個(gè)重要的研究方向便是對(duì)缺陷定位的結(jié)果提供修復(fù)指導(dǎo)提示信息.對(duì)于給定的推薦結(jié)果列表,開(kāi)發(fā)人員只能按照順序從頭開(kāi)始審查,這還是需要大量花費(fèi)精力來(lái)理解缺陷.如果IRBL 方法能夠指出其中列表中的文件中哪些特征是與缺陷報(bào)告描述內(nèi)容相符,這可以在很大程度上幫助開(kāi)發(fā)人員快速理解缺陷,并順利進(jìn)行后續(xù)的修復(fù)工作.

    7 結(jié)束語(yǔ)

    近年來(lái),基于信息檢索的缺陷定位技術(shù)(IRBL)由于其具有外部依賴(lài)少、計(jì)算成本低的優(yōu)勢(shì),成為了缺陷定位領(lǐng)域的研究熱點(diǎn).本文圍繞IRBL 方法的模型改良和模型評(píng)估兩大方面,對(duì)當(dāng)前的研究工作進(jìn)行了梳理和總結(jié).基于當(dāng)前的研究進(jìn)展,本文總結(jié)了該領(lǐng)域面臨的主要挑戰(zhàn)并指出了未來(lái)可能的研究方向.主要工作總結(jié)如下:(1) 針對(duì)模型改良,本文從更換檢索模型、使用特征分析和進(jìn)行查詢(xún)重構(gòu)這3 個(gè)維度進(jìn)行歸類(lèi)和闡述;(2) 針對(duì)模型評(píng)估,本文從模型比較、評(píng)價(jià)指標(biāo)和實(shí)驗(yàn)數(shù)據(jù)這3 個(gè)維度總結(jié)該領(lǐng)域的評(píng)估現(xiàn)狀和存在的問(wèn)題;(3) 本文從局限性、泛化性、準(zhǔn)確性和實(shí)用性這4 個(gè)角度總結(jié)了當(dāng)前IRBL 領(lǐng)域研究面臨的問(wèn)題挑戰(zhàn),并針對(duì)性地指出了未來(lái)的研究方向.

    致謝感謝各位審稿專(zhuān)家提出的寶貴意見(jiàn).

    猜你喜歡
    報(bào)告方法模型
    一半模型
    重要模型『一線三等角』
    重尾非線性自回歸模型自加權(quán)M-估計(jì)的漸近分布
    一圖看懂十九大報(bào)告
    報(bào)告
    可能是方法不對(duì)
    3D打印中的模型分割與打包
    用對(duì)方法才能瘦
    Coco薇(2016年2期)2016-03-22 02:42:52
    報(bào)告
    四大方法 教你不再“坐以待病”!
    Coco薇(2015年1期)2015-08-13 02:47:34
    午夜福利一区二区在线看| 香蕉国产在线看| 多毛熟女@视频| 一区二区三区国产精品乱码| 韩国精品一区二区三区| 一个人免费在线观看的高清视频| 波多野结衣一区麻豆| 精品久久久久久成人av| 热99国产精品久久久久久7| 国产精品影院久久| 亚洲人成77777在线视频| 国产精品成人在线| 黄色丝袜av网址大全| 亚洲专区字幕在线| 亚洲欧美日韩无卡精品| 亚洲人成77777在线视频| 国产极品粉嫩免费观看在线| 人妻丰满熟妇av一区二区三区| 9热在线视频观看99| 美女大奶头视频| 亚洲性夜色夜夜综合| 日本一区二区免费在线视频| 丝袜美足系列| 亚洲美女黄片视频| 51午夜福利影视在线观看| 国产成人av教育| 欧美另类亚洲清纯唯美| 亚洲欧洲精品一区二区精品久久久| 久久影院123| 亚洲中文日韩欧美视频| 久久久久亚洲av毛片大全| 国产一区二区在线av高清观看| 亚洲aⅴ乱码一区二区在线播放 | 国产精品一区二区三区四区久久 | 午夜福利,免费看| 麻豆av在线久日| 午夜久久久在线观看| 免费日韩欧美在线观看| 精品一区二区三卡| 久久香蕉国产精品| 日日干狠狠操夜夜爽| 真人一进一出gif抽搐免费| 老司机福利观看| 黄色毛片三级朝国网站| 精品福利观看| 亚洲专区中文字幕在线| 黄片小视频在线播放| 午夜亚洲福利在线播放| 日日干狠狠操夜夜爽| 性色av乱码一区二区三区2| 一区二区三区精品91| 精品国产超薄肉色丝袜足j| xxxhd国产人妻xxx| 看片在线看免费视频| 搡老熟女国产l中国老女人| 又黄又爽又免费观看的视频| 国产熟女xx| 岛国在线观看网站| 水蜜桃什么品种好| 久久精品国产清高在天天线| 久9热在线精品视频| 精品国产乱子伦一区二区三区| 一区二区三区激情视频| 国产精品日韩av在线免费观看 | 日日夜夜操网爽| 丝袜在线中文字幕| 99精品欧美一区二区三区四区| 18禁裸乳无遮挡免费网站照片 | 久久性视频一级片| 日日摸夜夜添夜夜添小说| 女人被躁到高潮嗷嗷叫费观| 日韩欧美三级三区| 国产伦人伦偷精品视频| 91国产中文字幕| 久久久国产成人免费| 精品熟女少妇八av免费久了| 欧美乱妇无乱码| 日韩有码中文字幕| x7x7x7水蜜桃| 欧美另类亚洲清纯唯美| 亚洲情色 制服丝袜| 窝窝影院91人妻| 亚洲在线自拍视频| 色播在线永久视频| 色老头精品视频在线观看| 国产亚洲精品久久久久久毛片| 欧美大码av| 高潮久久久久久久久久久不卡| 精品国产国语对白av| 日本免费一区二区三区高清不卡 | 欧美成人性av电影在线观看| 一级片'在线观看视频| 欧美精品啪啪一区二区三区| 日本欧美视频一区| 亚洲欧美一区二区三区黑人| 人妻久久中文字幕网| 欧美国产精品va在线观看不卡| 无遮挡黄片免费观看| 国内毛片毛片毛片毛片毛片| 亚洲欧美精品综合久久99| 欧美人与性动交α欧美软件| 午夜福利一区二区在线看| 午夜福利在线观看吧| 日本三级黄在线观看| 午夜激情av网站| 国产主播在线观看一区二区| 老鸭窝网址在线观看| 国产亚洲欧美精品永久| 女同久久另类99精品国产91| 黄片小视频在线播放| 男人操女人黄网站| 亚洲午夜理论影院| 国产成人系列免费观看| 国产精品久久视频播放| 亚洲精品国产色婷婷电影| 国产精品亚洲一级av第二区| 长腿黑丝高跟| 18禁黄网站禁片午夜丰满| 91精品国产国语对白视频| 亚洲专区中文字幕在线| 亚洲av电影在线进入| 亚洲欧美激情综合另类| 又黄又爽又免费观看的视频| 美女高潮喷水抽搐中文字幕| 欧美日韩一级在线毛片| 好看av亚洲va欧美ⅴa在| 日本五十路高清| videosex国产| 欧美日韩亚洲国产一区二区在线观看| 国产精品99久久99久久久不卡| av视频免费观看在线观看| 18禁裸乳无遮挡免费网站照片 | 俄罗斯特黄特色一大片| 国产精品永久免费网站| 老汉色∧v一级毛片| 欧美激情极品国产一区二区三区| 精品久久蜜臀av无| 超碰97精品在线观看| 90打野战视频偷拍视频| 性欧美人与动物交配| 亚洲 欧美一区二区三区| 老熟妇乱子伦视频在线观看| 国产99白浆流出| 美女午夜性视频免费| 久久精品国产亚洲av香蕉五月| 久久精品国产清高在天天线| 淫秽高清视频在线观看| 欧美成人性av电影在线观看| av福利片在线| 亚洲国产中文字幕在线视频| 一区二区三区国产精品乱码| 97人妻天天添夜夜摸| 身体一侧抽搐| 80岁老熟妇乱子伦牲交| 久久久水蜜桃国产精品网| 少妇裸体淫交视频免费看高清 | 69精品国产乱码久久久| 欧美乱妇无乱码| 精品欧美一区二区三区在线| 亚洲 欧美一区二区三区| 久久人人精品亚洲av| 免费女性裸体啪啪无遮挡网站| 日韩欧美在线二视频| 亚洲精品在线美女| 99热只有精品国产| 亚洲av第一区精品v没综合| 亚洲午夜精品一区,二区,三区| 国产免费男女视频| 国产高清视频在线播放一区| 啦啦啦 在线观看视频| 琪琪午夜伦伦电影理论片6080| 麻豆国产av国片精品| 桃色一区二区三区在线观看| 免费观看精品视频网站| 超碰97精品在线观看| 国产一区二区三区在线臀色熟女 | 精品久久久精品久久久| 最好的美女福利视频网| 天堂动漫精品| 超色免费av| 免费av中文字幕在线| 久久国产精品影院| 啦啦啦免费观看视频1| 国产成人精品在线电影| 久9热在线精品视频| 久久人妻av系列| 国产熟女xx| 妹子高潮喷水视频| 国产不卡一卡二| av有码第一页| 欧美激情高清一区二区三区| tocl精华| 亚洲欧美精品综合久久99| 黑人操中国人逼视频| 一级黄色大片毛片| 亚洲成人精品中文字幕电影 | 欧美日韩视频精品一区| 9色porny在线观看| 日韩中文字幕欧美一区二区| 国产三级黄色录像| 午夜精品久久久久久毛片777| 日韩国内少妇激情av| 精品乱码久久久久久99久播| 欧美成人免费av一区二区三区| 日本黄色视频三级网站网址| 久久人妻福利社区极品人妻图片| 脱女人内裤的视频| 亚洲精品一二三| 午夜精品久久久久久毛片777| 国产精品乱码一区二三区的特点 | 久9热在线精品视频| 757午夜福利合集在线观看| 十八禁网站免费在线| 99久久综合精品五月天人人| 久久久久亚洲av毛片大全| 亚洲精华国产精华精| 亚洲 欧美一区二区三区| 国产精品影院久久| 99香蕉大伊视频| 久久久久国产精品人妻aⅴ院| 19禁男女啪啪无遮挡网站| 精品久久久久久成人av| 婷婷精品国产亚洲av在线| 交换朋友夫妻互换小说| 91九色精品人成在线观看| 国产一卡二卡三卡精品| 精品久久蜜臀av无| 国产av在哪里看| 日韩大码丰满熟妇| 美国免费a级毛片| 免费在线观看完整版高清| 亚洲欧美激情综合另类| 12—13女人毛片做爰片一| 免费搜索国产男女视频| 精品卡一卡二卡四卡免费| 亚洲激情在线av| 免费不卡黄色视频| 老司机靠b影院| 大型av网站在线播放| 国产精品电影一区二区三区| 免费av毛片视频| 99久久国产精品久久久| 老司机在亚洲福利影院| 欧美日韩乱码在线| 在线观看免费高清a一片| 他把我摸到了高潮在线观看| 国产成人欧美在线观看| 大型黄色视频在线免费观看| 国产欧美日韩一区二区精品| 成人特级黄色片久久久久久久| 日本免费a在线| 夜夜躁狠狠躁天天躁| 一a级毛片在线观看| 99久久国产精品久久久| 老汉色∧v一级毛片| 母亲3免费完整高清在线观看| 美女福利国产在线| 久久精品影院6| 国产成人啪精品午夜网站| 神马国产精品三级电影在线观看 | 国产野战对白在线观看| 一区在线观看完整版| 水蜜桃什么品种好| 天堂中文最新版在线下载| 精品久久久久久久久久免费视频 | 欧美黄色淫秽网站| 少妇粗大呻吟视频| 中文欧美无线码| 欧美国产精品va在线观看不卡| 亚洲中文av在线| 成人影院久久| 久久人人97超碰香蕉20202| 日本免费a在线| 少妇裸体淫交视频免费看高清 | 国产真人三级小视频在线观看| 日韩三级视频一区二区三区| 一进一出抽搐动态| 久久久久久久久免费视频了| 高清欧美精品videossex| 在线观看免费视频网站a站| 国产精品久久久久久人妻精品电影| 自拍欧美九色日韩亚洲蝌蚪91| 国产精品99久久99久久久不卡| 欧美午夜高清在线| a在线观看视频网站| 午夜成年电影在线免费观看| 黑人猛操日本美女一级片| 日韩中文字幕欧美一区二区| 欧美日韩亚洲高清精品| 国产精品av久久久久免费| 夜夜夜夜夜久久久久| 国产成人av激情在线播放| 免费在线观看影片大全网站| 午夜福利,免费看| 亚洲性夜色夜夜综合| www.精华液| 女人被躁到高潮嗷嗷叫费观| 99国产综合亚洲精品| 色尼玛亚洲综合影院| 老司机靠b影院| 极品教师在线免费播放| 精品第一国产精品| 神马国产精品三级电影在线观看 | 日韩成人在线观看一区二区三区| 午夜老司机福利片| 亚洲av成人不卡在线观看播放网| 在线观看免费午夜福利视频| 亚洲国产欧美日韩在线播放| 欧美精品一区二区免费开放| 亚洲精品成人av观看孕妇| 亚洲国产精品一区二区三区在线| 免费日韩欧美在线观看| 亚洲国产精品一区二区三区在线| 热99国产精品久久久久久7| 久久久精品欧美日韩精品| 可以在线观看毛片的网站| 亚洲成人国产一区在线观看| 天堂影院成人在线观看| 啦啦啦免费观看视频1| 十分钟在线观看高清视频www| 黑人巨大精品欧美一区二区蜜桃| 日本wwww免费看| 午夜精品国产一区二区电影| 国产精品美女特级片免费视频播放器 | 成人18禁高潮啪啪吃奶动态图| 99re在线观看精品视频| 在线av久久热| 五月伊人婷婷丁香| 亚洲欧美精品综合久久99| 亚洲成人精品中文字幕电影| 成年女人毛片免费观看观看9| 动漫黄色视频在线观看| 久久性视频一级片| 日本黄大片高清| 桃红色精品国产亚洲av| 麻豆成人av在线观看| 久久久久久久精品吃奶| h日本视频在线播放| а√天堂www在线а√下载| 亚洲无线观看免费| 性色av乱码一区二区三区2| 91狼人影院| 黄色视频,在线免费观看| 午夜日韩欧美国产| 免费看美女性在线毛片视频| 一个人看视频在线观看www免费| 午夜福利免费观看在线| 精品久久久久久久人妻蜜臀av| 有码 亚洲区| 亚洲三级黄色毛片| 国产一区二区亚洲精品在线观看| 午夜免费男女啪啪视频观看 | 亚州av有码| 乱码一卡2卡4卡精品| 欧美午夜高清在线| 国产精品一区二区免费欧美| 国产精品免费一区二区三区在线| 亚洲不卡免费看| 欧美又色又爽又黄视频| 老司机午夜十八禁免费视频| 亚洲真实伦在线观看| 午夜激情欧美在线| 亚洲美女黄片视频| 国产精品伦人一区二区| 搡老岳熟女国产| 国产v大片淫在线免费观看| 97人妻精品一区二区三区麻豆| 免费看日本二区| 无遮挡黄片免费观看| 国产69精品久久久久777片| 村上凉子中文字幕在线| 免费看日本二区| 91av网一区二区| 特大巨黑吊av在线直播| 男女做爰动态图高潮gif福利片| 久久精品国产亚洲av天美| 久久精品国产亚洲av香蕉五月| 别揉我奶头 嗯啊视频| 热99在线观看视频| 中文字幕人妻熟人妻熟丝袜美| 日韩欧美一区二区三区在线观看| 国产在线精品亚洲第一网站| 十八禁网站免费在线| 免费在线观看日本一区| 午夜福利免费观看在线| 搞女人的毛片| 欧美黑人巨大hd| 亚洲专区国产一区二区| 国产亚洲av嫩草精品影院| 在线天堂最新版资源| 毛片女人毛片| 精品人妻偷拍中文字幕| 国内精品久久久久久久电影| 精品人妻视频免费看| 美女高潮的动态| 久久人人精品亚洲av| 欧美3d第一页| 亚洲片人在线观看| 级片在线观看| 精品午夜福利在线看| 亚洲欧美日韩高清在线视频| 九九热线精品视视频播放| 日韩欧美在线乱码| 51午夜福利影视在线观看| 人妻制服诱惑在线中文字幕| 亚洲七黄色美女视频| 亚洲国产精品合色在线| 久久亚洲真实| 一级黄色大片毛片| 久久九九热精品免费| 午夜福利在线观看免费完整高清在 | 免费看光身美女| 日本a在线网址| 欧美日韩瑟瑟在线播放| 午夜老司机福利剧场| 99视频精品全部免费 在线| 亚洲成av人片免费观看| 男人舔奶头视频| 国产亚洲欧美98| 搡老岳熟女国产| 亚洲国产精品久久男人天堂| 天堂动漫精品| 在线播放无遮挡| 国产黄色小视频在线观看| 日本熟妇午夜| 97热精品久久久久久| 九九在线视频观看精品| 精品欧美国产一区二区三| 国产乱人视频| 欧美黄色淫秽网站| 国产精品av视频在线免费观看| 老女人水多毛片| 国产黄a三级三级三级人| 麻豆一二三区av精品| 国产精品女同一区二区软件 | 精品久久久久久久久亚洲 | 久久香蕉精品热| 男插女下体视频免费在线播放| 1000部很黄的大片| 美女高潮的动态| 久久精品久久久久久噜噜老黄 | 国产一级毛片七仙女欲春2| 国产人妻一区二区三区在| 午夜福利在线在线| 成熟少妇高潮喷水视频| 亚州av有码| a级一级毛片免费在线观看| 嫩草影院精品99| 欧美激情久久久久久爽电影| 久久久久九九精品影院| 欧美+亚洲+日韩+国产| 欧美中文日本在线观看视频| 日韩欧美一区二区三区在线观看| 中文字幕久久专区| 亚洲乱码一区二区免费版| 国产视频内射| 99久久精品热视频| 99精品在免费线老司机午夜| 超碰av人人做人人爽久久| 伦理电影大哥的女人| 一本久久中文字幕| 97碰自拍视频| 亚洲男人的天堂狠狠| 亚洲精品色激情综合| 精品久久久久久久人妻蜜臀av| 性色av乱码一区二区三区2| 欧美最新免费一区二区三区 | 国语自产精品视频在线第100页| 一本久久中文字幕| 波多野结衣高清无吗| 国产精品伦人一区二区| 97超视频在线观看视频| 国产亚洲精品av在线| 日韩av在线大香蕉| 悠悠久久av| 日本撒尿小便嘘嘘汇集6| 一a级毛片在线观看| 久久久久久久亚洲中文字幕 | 一个人看的www免费观看视频| 国产亚洲av嫩草精品影院| 成人国产一区最新在线观看| 精品久久久久久成人av| 国产av不卡久久| 色5月婷婷丁香| 午夜福利在线观看吧| 成人av一区二区三区在线看| 久久精品国产99精品国产亚洲性色| 国产精品久久久久久精品电影| 可以在线观看毛片的网站| 欧美日韩乱码在线| 久久精品91蜜桃| 日本撒尿小便嘘嘘汇集6| 亚洲片人在线观看| av专区在线播放| 日韩欧美免费精品| 亚洲人成网站在线播放欧美日韩| 非洲黑人性xxxx精品又粗又长| 午夜福利欧美成人| 99热精品在线国产| а√天堂www在线а√下载| 中文亚洲av片在线观看爽| 国产中年淑女户外野战色| 中文字幕人成人乱码亚洲影| 夜夜躁狠狠躁天天躁| 免费大片18禁| 精品国产亚洲在线| 最新在线观看一区二区三区| 亚洲综合色惰| 赤兔流量卡办理| 色播亚洲综合网| 亚洲成人久久性| 欧美3d第一页| 88av欧美| 欧美激情国产日韩精品一区| 18禁裸乳无遮挡免费网站照片| 此物有八面人人有两片| 国产久久久一区二区三区| 国产一区二区激情短视频| 激情在线观看视频在线高清| 欧美日韩福利视频一区二区| 色噜噜av男人的天堂激情| 精品国内亚洲2022精品成人| 91在线精品国自产拍蜜月| 亚洲中文字幕一区二区三区有码在线看| 国产亚洲欧美98| 色吧在线观看| 韩国av一区二区三区四区| www.www免费av| 日本五十路高清| 别揉我奶头 嗯啊视频| 色综合站精品国产| 国产精品98久久久久久宅男小说| 一进一出抽搐动态| 久久99热这里只有精品18| 小蜜桃在线观看免费完整版高清| 嫩草影院入口| av天堂在线播放| 日韩欧美国产在线观看| 国产精品精品国产色婷婷| 又紧又爽又黄一区二区| 99热6这里只有精品| 亚洲av.av天堂| 久久久久免费精品人妻一区二区| 性色avwww在线观看| av在线观看视频网站免费| av黄色大香蕉| 国产精品自产拍在线观看55亚洲| 亚洲专区国产一区二区| 老司机午夜十八禁免费视频| 色吧在线观看| 欧美乱色亚洲激情| 国产精品嫩草影院av在线观看 | 国产私拍福利视频在线观看| 91九色精品人成在线观看| 夜夜夜夜夜久久久久| 精品乱码久久久久久99久播| 国产探花极品一区二区| 久久午夜亚洲精品久久| 欧美bdsm另类| 看黄色毛片网站| 成人无遮挡网站| 人人妻,人人澡人人爽秒播| 国产aⅴ精品一区二区三区波| 美女xxoo啪啪120秒动态图 | 久久久久性生活片| 丰满的人妻完整版| 成人永久免费在线观看视频| 最后的刺客免费高清国语| 2021天堂中文幕一二区在线观| 最近最新中文字幕大全电影3| 免费观看人在逋| 午夜福利在线观看免费完整高清在 | 日韩免费av在线播放| 亚洲精品乱码久久久v下载方式| 亚洲最大成人av| 在线天堂最新版资源| 久久精品国产99精品国产亚洲性色| 长腿黑丝高跟| 国产乱人伦免费视频| 日本撒尿小便嘘嘘汇集6| 欧美黑人欧美精品刺激| 搞女人的毛片| 欧美日韩福利视频一区二区| 国产精品久久久久久精品电影| 中文资源天堂在线| 午夜精品在线福利| 久久精品夜夜夜夜夜久久蜜豆| 中文字幕av在线有码专区| 亚洲欧美清纯卡通| www日本黄色视频网| 日日夜夜操网爽| 亚洲精华国产精华精| 午夜影院日韩av| 看免费av毛片| 欧美xxxx黑人xx丫x性爽| 久久国产乱子伦精品免费另类| 久久久精品大字幕| 亚洲国产精品成人综合色| av中文乱码字幕在线| 人妻丰满熟妇av一区二区三区| 毛片一级片免费看久久久久 | 国产精品,欧美在线| 国产成+人综合+亚洲专区| 国产淫片久久久久久久久 | 国产精品伦人一区二区| 国产一区二区在线av高清观看| 国产视频一区二区在线看| 特大巨黑吊av在线直播| a级毛片免费高清观看在线播放| 成人特级黄色片久久久久久久| 人妻久久中文字幕网| 露出奶头的视频| 亚洲精品在线美女| 亚洲精品乱码久久久v下载方式| 国产精品精品国产色婷婷|