• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      基于深度學(xué)習(xí)的軟件自動(dòng)修復(fù)方法的修復(fù)偏好研究

      2023-10-12 02:24:26姜元鵬姜淑娟
      關(guān)鍵詞:編碼器語(yǔ)句工具

      姜元鵬,黃 穎,姜淑娟

      1.中國(guó)礦業(yè)大學(xué) 圖書(shū)館,江蘇 徐州 221116

      2.中國(guó)礦業(yè)大學(xué) 計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院,江蘇 徐州 221116

      軟件缺陷修復(fù)是軟件調(diào)試維護(hù)過(guò)程中的重要環(huán)節(jié),并且隨著軟件復(fù)雜程度的增加以及軟件規(guī)模的擴(kuò)大,人工定位并修復(fù)軟件缺陷越來(lái)越難實(shí)現(xiàn),且面臨成本昂貴、難以修復(fù)等問(wèn)題[1-2]。而利用軟件自動(dòng)修復(fù)方法可以大幅度提高軟件調(diào)試的效率,減少軟件維護(hù)所耗費(fèi)的開(kāi)銷(xiāo)。近年來(lái),隨著深度學(xué)習(xí)技術(shù)的發(fā)展,越來(lái)越多研究人員將深度學(xué)習(xí)方法引入到軟件自動(dòng)修復(fù)領(lǐng)域,軟件自動(dòng)修復(fù)方法成為軟件工程領(lǐng)域研究熱點(diǎn)[3-5]。

      目前主要的傳統(tǒng)的軟件自動(dòng)修復(fù)方法可以分為基于搜索的方法與基于語(yǔ)義的方法,國(guó)內(nèi)外專(zhuān)家學(xué)者已經(jīng)重點(diǎn)對(duì)傳統(tǒng)的基于搜索的程序自動(dòng)修復(fù)方法以及基于語(yǔ)義的軟件自動(dòng)修復(fù)方法進(jìn)行了大量研究[6-9];近幾年提出了不少基于深度學(xué)習(xí)的軟件自動(dòng)修復(fù)方法[10-12],基于深度學(xué)習(xí)的軟件修復(fù)方法主要從使用學(xué)習(xí)模型學(xué)習(xí)正確補(bǔ)丁特征、學(xué)習(xí)搜索相似性代碼以及學(xué)習(xí)錯(cuò)誤代碼與正確代碼的轉(zhuǎn)換等角度來(lái)生成正確補(bǔ)丁。

      目前的深度學(xué)習(xí)的軟件自動(dòng)修復(fù)方法大多是通用的,即不針對(duì)某種特定的缺陷類(lèi)型,更多的是引入深度學(xué)習(xí)模型與相關(guān)的程序分析技術(shù)嘗試修復(fù)軟件代碼中的所有缺陷。而通用的自動(dòng)修復(fù)方法由于針對(duì)性不強(qiáng),因此對(duì)不同類(lèi)型缺陷的修復(fù)效果通常是不同的。在已有的文獻(xiàn)中,部分文獻(xiàn)對(duì)修復(fù)的缺陷進(jìn)行了簡(jiǎn)單的分類(lèi),但是并沒(méi)有系統(tǒng)地對(duì)缺陷庫(kù)中的缺陷進(jìn)行分類(lèi);不同類(lèi)型的缺陷以及補(bǔ)丁具有不同的特征,在基于深度學(xué)習(xí)的程序自動(dòng)修復(fù)方法中,深度學(xué)習(xí)模型的選擇是至關(guān)重要的,因?yàn)椴煌P涂赡芴崛〉奶卣鞑煌?。目前基于不同學(xué)習(xí)模型的程序修復(fù)方法針對(duì)不同類(lèi)型缺陷的修復(fù)偏好尚不明確,在現(xiàn)存的文獻(xiàn)中沒(méi)有關(guān)于基于深度學(xué)習(xí)的軟件自動(dòng)修復(fù)方法以及不同學(xué)習(xí)模型對(duì)不同缺陷類(lèi)型修復(fù)性能的研究,因此,本文擬在對(duì)缺陷分類(lèi)的基礎(chǔ)上通過(guò)分析比較近幾年有代表性的深度學(xué)習(xí)自動(dòng)軟件修復(fù)方法對(duì)不同缺陷類(lèi)型的修復(fù)偏好,可以幫助研究人員更好地了解不同的深度學(xué)習(xí)模型在軟件自動(dòng)修復(fù)當(dāng)中的作用,以便更好地進(jìn)行軟件自動(dòng)修復(fù)工作。

      1 基于深度學(xué)習(xí)的軟件修復(fù)工具

      目前幾種比較常用的基于深度學(xué)習(xí)的軟件缺陷修復(fù)工具,其使用的深度學(xué)習(xí)模型包括自編碼器、卷積神經(jīng)網(wǎng)絡(luò)、循環(huán)神經(jīng)網(wǎng)絡(luò)、長(zhǎng)短期記憶模型,它們的相關(guān)修復(fù)工具信息如表1所示。

      表1 修復(fù)工具信息Table 1 Ⅰnformation about repair tools

      表1 的第一列為5 種自動(dòng)修復(fù)工具;第二列是每種修復(fù)工具使用的模型,其中EDM指的是編碼器-解碼器模型(encoder-decoder model,EDM),LSTM-EDM 即為基于LSTM 的編碼器-解碼器模型,同理CNNs-EDM 是指基于CNNs的編碼器-解碼器模型,attention指注意力機(jī)制,copy 則是指復(fù)制機(jī)制;第三列是各種工具工作的代碼粒度,包括了多粒度級(jí)、代碼行以及方法級(jí);最后一列則是各個(gè)工具用于評(píng)估的數(shù)據(jù)集,這5種自動(dòng)修復(fù)工具都在Java程序的缺陷庫(kù)Defects4J[13]上進(jìn)行驗(yàn)證評(píng)估。

      1.1 DeepRepair

      DeepRepair[14]工具旨在通過(guò)深度學(xué)習(xí)代碼的相似性排序并轉(zhuǎn)換語(yǔ)句來(lái)推導(dǎo)程序修復(fù)成分,主要使用的學(xué)習(xí)模型為嵌入模型與自編碼器。實(shí)現(xiàn)這一工具的技術(shù)方法可分為三個(gè)階段:語(yǔ)言識(shí)別、機(jī)器學(xué)習(xí)與程序修復(fù)階段。該工具的方法框架如圖1所示。

      圖1 DeepRepair方法框架Fig.1 Framework of DeepRepair

      1.2 SequenceR

      SequenceR[15]是一種基于序列到序列的端到端的程序修復(fù)方法,該方法主要使用兩層的雙向長(zhǎng)短期記憶模型。這一技術(shù)主要分為兩個(gè)階段:訓(xùn)練以及推理階段。如圖2為SequenceR的方法框架。

      圖2 SequenceR方法框架Fig.2 Framework of SequenceR

      1.3 CODIT

      CODⅠT[16]使用基于樹(shù)的神經(jīng)網(wǎng)絡(luò)對(duì)源代碼更改進(jìn)行建模并學(xué)習(xí)代碼更改模式,即利用一個(gè)基于樹(shù)神經(jīng)機(jī)器翻譯模型來(lái)學(xué)習(xí)代碼中更改的概率分布,該方法包括兩個(gè)模型,使用的都為L(zhǎng)STM。如圖3 所示,實(shí)現(xiàn)這一工具同樣為三個(gè)階段:補(bǔ)丁預(yù)處理、模型訓(xùn)練、模型測(cè)試階段。

      圖3 CODⅠT方法框架Fig.3 Framework of CODⅠT

      1.4 DLFix

      DLFix[17]是用于程序自動(dòng)修復(fù)的基于上下文的代碼轉(zhuǎn)換學(xué)習(xí)方法,使用的是雙層基于樹(shù)的深度學(xué)習(xí)模型,該深度學(xué)習(xí)模型同樣為L(zhǎng)STM。工具實(shí)現(xiàn)主要分為四個(gè)階段:預(yù)處理、模型訓(xùn)練、程序分析過(guò)濾和補(bǔ)丁重排序階段。如圖4為DLFix的方法框架。

      圖4 DLFix方法框架Fig.4 Framework of DLFix

      1.5 CoCoNuT

      CoCoNuT[18]結(jié)合上下文感知的神經(jīng)機(jī)器翻譯模型并使用集成學(xué)習(xí)來(lái)進(jìn)行跨多語(yǔ)言的自動(dòng)修復(fù),主要使用的神經(jīng)網(wǎng)絡(luò)模型為卷積神經(jīng)網(wǎng)絡(luò),這是卷積神經(jīng)網(wǎng)絡(luò)在程序自動(dòng)修復(fù)中的首次應(yīng)用。如圖5所示,這一技術(shù)同樣包括三個(gè)階段:訓(xùn)練、推理和驗(yàn)證階段。

      圖5 CoCoNuT方法框架Fig.5 Framework of CoCoNuT

      2 缺陷分類(lèi)研究

      2.1 缺陷分類(lèi)

      缺陷分類(lèi)有很多種方法,根據(jù)不同的分類(lèi)目的,缺陷分類(lèi)的過(guò)程、復(fù)雜度和應(yīng)用領(lǐng)域也不同。在程序修復(fù)領(lǐng)域,Pan 等人[19]提出了針對(duì)Java 程序中的缺陷分類(lèi)方法,并將缺陷根據(jù)語(yǔ)句特征分為9 大類(lèi)。參照Pan 等人[19]及Liu 等人[20]提出修復(fù)模式,總結(jié)了10 個(gè)缺陷修復(fù)模式,并對(duì)缺陷庫(kù)Defects4J中缺陷進(jìn)行分類(lèi)。

      通過(guò)對(duì)Defects4J 中的補(bǔ)丁進(jìn)行分析,總結(jié)了基于代碼更改操作的10 個(gè)基本的缺陷類(lèi)型,每個(gè)類(lèi)型下會(huì)有不同的子類(lèi)型。

      (1)ⅠF語(yǔ)句:這一類(lèi)是與ⅠF語(yǔ)句相關(guān)的缺陷,包括增加/刪除ⅠF謂詞、增加/刪除ⅠF主體、增加/刪除else語(yǔ)句、ⅠF條件表達(dá)式的更改,以及ⅠF語(yǔ)句與其他語(yǔ)句的替換。

      (2)方法語(yǔ)句:這一類(lèi)是與方法語(yǔ)句相關(guān)的缺陷。包括增加/刪除/更改方法聲明、增加/刪除方法調(diào)用、更改調(diào)用方法、更改參數(shù)值或參數(shù)數(shù)量、其他語(yǔ)句與方法調(diào)用的替換。

      (3)循環(huán)語(yǔ)句:這一類(lèi)是與循環(huán)語(yǔ)句相關(guān)的缺陷。包括增加/刪除循環(huán)、循環(huán)條件更改以及其他語(yǔ)句與循環(huán)體之間的替換。

      (4)賦值語(yǔ)句:這一類(lèi)是與賦值語(yǔ)句相關(guān)的缺陷。包括增加/刪除賦值語(yǔ)句以及賦值表達(dá)式的更改。

      (5)switch:這一類(lèi)是與switch語(yǔ)句相關(guān)的缺陷。主要包括增加/刪除case分支/switch條件的更改。

      (6)try/catch:這一類(lèi)是與try/catch 語(yǔ)句相關(guān)的缺陷。包括添加/刪除try語(yǔ)句或catch語(yǔ)句塊。

      (7)return:這里的return 指代是return/break/continue/throw(拋出異常)語(yǔ)句,這類(lèi)缺陷是指與它們相關(guān)的缺陷。包括增加/刪除這些語(yǔ)句、return 表達(dá)式的更改,以及這些語(yǔ)句之間的替換。

      (8)類(lèi)字段:這一類(lèi)是與類(lèi)字段相關(guān)的缺陷。包括類(lèi)字段聲明更改、執(zhí)行多個(gè)類(lèi)實(shí)例創(chuàng)建。

      (9)移動(dòng)語(yǔ)句:這一類(lèi)主要是指需要改變語(yǔ)句所在位置的缺陷。

      (10)其他:這一類(lèi)缺陷的修復(fù)包括類(lèi)型更改、運(yùn)算符更改、變量更改、整數(shù)除法更改。這些類(lèi)型排除之前提到過(guò)的相關(guān)類(lèi)型。

      2.2 評(píng)測(cè)對(duì)象

      由于目前Defects4J 是軟件自動(dòng)修復(fù)工具最常使用的基準(zhǔn)集,且進(jìn)行比較的幾種基于深度學(xué)習(xí)的軟件自動(dòng)修復(fù)工具都可在Defects4J 上進(jìn)行評(píng)估,Defects4J 缺陷庫(kù)中的缺陷類(lèi)型包括6 個(gè)項(xiàng)目,如表2 所示。這里使用的是Defects4J-v1.1.0

      表2 Defects4J 的組成Table 2 Composition of Defects4J

      在使用Defects4J數(shù)據(jù)集時(shí),需要根據(jù)不同的模型對(duì)數(shù)據(jù)集進(jìn)行不同的預(yù)處理。比如,在使用工具SequenceR時(shí),由于SequenceR 專(zhuān)注于修復(fù)單行缺陷代碼,所以需要排除掉Defects4J中的非單行缺陷;在使用CODⅠT時(shí),則需要從Defects4J的6個(gè)項(xiàng)目中創(chuàng)建一個(gè)代碼更改集。

      2.3 Defects4J缺陷類(lèi)型分析

      Defects4J中全部缺陷類(lèi)型組成,如表3所示。

      表3 Defects4J中缺陷的類(lèi)型Table 3 Types of defects in Defects4J

      Defects4J中與ⅠF語(yǔ)句相關(guān)的缺陷多達(dá)230個(gè),占所有缺陷的58.5%,其中類(lèi)型為“增加ⅠF主體的缺陷”數(shù)量最多,有120個(gè),占ⅠF語(yǔ)句缺陷類(lèi)型的51.9%,其次有80個(gè)缺陷為“ⅠF條件表達(dá)式更改”類(lèi)型,占ⅠF語(yǔ)句缺陷類(lèi)型的34.6%;方法語(yǔ)句類(lèi)型:Defects4J 中與其相關(guān)的缺陷有92 個(gè),是全部缺陷的23.3%,是除ⅠF 語(yǔ)句類(lèi)型外最多的缺陷類(lèi)型,而其中“更改方法調(diào)用參數(shù)”類(lèi)型的缺陷數(shù)量最多;除此之外,Defects4J 中與return 語(yǔ)句類(lèi)型相關(guān)的缺陷數(shù)量最多,共50個(gè),占Defects4J中缺陷的12.7%;最少的是try/catch類(lèi)型。要注意的是,由于Defects4J中的缺陷一般包含多個(gè)錯(cuò)誤行,因此一個(gè)缺陷可能和多種缺陷類(lèi)型相關(guān),在表3 中,將Defects4J 中的缺陷歸到某一類(lèi)時(shí),主要是指該缺陷包含該缺陷類(lèi)型的錯(cuò)誤行,所以每種缺陷類(lèi)型的缺陷數(shù)量之和會(huì)超過(guò)Defects4J中的缺陷數(shù)量395,因?yàn)橥粋€(gè)缺陷可能會(huì)與多種缺陷類(lèi)型相關(guān)。

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

      該實(shí)證研究的目的是研究基于深度學(xué)習(xí)的軟件自動(dòng)修復(fù)方法對(duì)不同類(lèi)型缺陷的修復(fù)偏好。為此,首先分析基于深度學(xué)習(xí)模型的軟件自動(dòng)修復(fù)方法整體上對(duì)不同類(lèi)型缺陷的修復(fù)概率,然后比較不同學(xué)習(xí)模型對(duì)不同類(lèi)型缺陷的修復(fù)偏好,并比較分析每種方法各自更傾向于修復(fù)哪一類(lèi)型的缺陷。

      本文實(shí)驗(yàn)的運(yùn)行環(huán)境為64 位Windows 與Linux 系統(tǒng),編譯環(huán)境為Python3。

      3.1 不同缺陷類(lèi)型的總修復(fù)概率

      表4展示了5種修復(fù)工具通過(guò)實(shí)驗(yàn)修復(fù)的不同類(lèi)型缺陷的總的修復(fù)概率。由第三列可以看出,5種修復(fù)工具修復(fù)的缺陷類(lèi)型涉及了除try/catch語(yǔ)句之外的9種基本類(lèi)型,修復(fù)的缺陷數(shù)量最多的3種缺陷類(lèi)型依次為ⅠF語(yǔ)句類(lèi)型、方法語(yǔ)句類(lèi)型以及return語(yǔ)句類(lèi)型,然后是賦值語(yǔ)句與類(lèi)字段類(lèi)型的缺陷。而try/catch 語(yǔ)句類(lèi)型的缺陷沒(méi)有得到修復(fù)的原因,可能是Defects4J 中這一類(lèi)型的缺陷量最少,總共只有5個(gè)。

      表4 所有修復(fù)缺陷的缺陷類(lèi)型Table 4 Types of all repaired defects

      表4所示的修復(fù)概率可以看出,其他類(lèi)型的缺陷修復(fù)概率最高,其次是方法語(yǔ)句類(lèi)型的缺陷,然后是return語(yǔ)句類(lèi)型,賦值語(yǔ)句與類(lèi)字段類(lèi)型的修復(fù)概率相當(dāng),其后才是ⅠF語(yǔ)句類(lèi)型的缺陷??梢钥闯觯迯?fù)概率與修復(fù)缺陷數(shù)量并不是成正比的關(guān)系,基于下面的原因。

      首先,其他類(lèi)型的缺陷基本上只包含運(yùn)算符更改、類(lèi)型更改等簡(jiǎn)單易修復(fù)的缺陷,而且數(shù)據(jù)集中這一類(lèi)缺陷數(shù)量較少,因此盡管結(jié)果顯示這一類(lèi)缺陷修復(fù)概率較高,但這只是表明修復(fù)方法傾向于修復(fù)復(fù)雜程度低的缺陷,而方法語(yǔ)句與return語(yǔ)句類(lèi)型的修復(fù)概率較高,與之對(duì)應(yīng)的修復(fù)缺陷數(shù)量也較高,可以得出基于深度學(xué)習(xí)的軟件自動(dòng)修復(fù)方法對(duì)這兩種缺陷的修復(fù)偏好是較高的;對(duì)于賦值語(yǔ)句與類(lèi)字段類(lèi)型來(lái)說(shuō),由于類(lèi)字段類(lèi)型當(dāng)中包括類(lèi)字段的聲明與賦值,所以這兩種在很大程度上可以看作是賦值語(yǔ)句類(lèi)型,因此兩者的修復(fù)數(shù)量與概率都相差不大;對(duì)于ⅠF語(yǔ)句,從缺陷分類(lèi)的結(jié)果可以看到,數(shù)據(jù)集中與這一類(lèi)型相關(guān)的缺陷數(shù)量最多,而復(fù)雜程度較高的缺陷基本都與這一類(lèi)型相關(guān),復(fù)雜程度越高越難以修復(fù),因此這一類(lèi)型相關(guān)的缺陷修復(fù)概率與前面幾種相比顯得不高。

      因此,經(jīng)過(guò)綜合分析后可以得知:對(duì)于修復(fù)的缺陷數(shù)量來(lái)說(shuō),基于深度學(xué)習(xí)的軟件自動(dòng)修復(fù)方法修復(fù)最多的是ⅠF 語(yǔ)句類(lèi)型、方法語(yǔ)句類(lèi)型、return 語(yǔ)句類(lèi)型的缺陷,但是對(duì)于缺陷修復(fù)的概率來(lái)說(shuō),由于受到缺陷復(fù)雜程度的影響,基于深度學(xué)習(xí)的軟件自動(dòng)修復(fù)方法對(duì)ⅠF語(yǔ)句的修復(fù)概率較低,其他類(lèi)型的缺陷修復(fù)概率較高,同時(shí)修復(fù)方法語(yǔ)句類(lèi)型、return語(yǔ)句類(lèi)型、賦值語(yǔ)句與類(lèi)字段類(lèi)型缺陷的概率也較高。

      3.2 缺陷的修復(fù)偏好比較分析

      表5 展示了基于不同深度學(xué)習(xí)模型的軟件修復(fù)工具在Defects4J上修復(fù)的不同類(lèi)型的缺陷數(shù)量。第一列為缺陷類(lèi)型,第二至六列是5種缺陷修復(fù)工具的修復(fù)缺陷數(shù)量;最后一行的缺陷總數(shù)總是小于等于10 種缺陷類(lèi)型的修復(fù)缺陷數(shù)量之和,因?yàn)榇嬖谕蝗毕菖c多種缺陷類(lèi)型相關(guān)的情況。

      表5 各修復(fù)工具修復(fù)缺陷的缺陷類(lèi)型組成Table 5 Types composition of defects repaired by each repair tool

      如果僅從表4的占比來(lái)看,每一種類(lèi)型缺陷的修復(fù)偏好相差不大,其根本原因在于現(xiàn)有的缺陷自動(dòng)修復(fù)方法修復(fù)能力不足。例如,表5 中所示的修復(fù)Defect4J 數(shù)據(jù)集缺陷最多的DeepRepair 方法,僅僅修復(fù)了51 個(gè)缺陷,占總?cè)毕輸?shù)的12.9%(51/395),使得每一種類(lèi)的修復(fù)占比都比較低,差距小。在此背景下,DeepRepair 修復(fù)24個(gè)ⅠF語(yǔ)句類(lèi)型缺陷,10個(gè)方法語(yǔ)句缺陷,前者是后者的2.4倍,由此可以看出修復(fù)偏好相差較大。

      整體來(lái)看,除了CODⅠT之外,其他每種修復(fù)工具與3.1節(jié)的結(jié)論相符,修復(fù)最多的缺陷為ⅠF語(yǔ)句類(lèi)型、方法語(yǔ)句類(lèi)型以及return 語(yǔ)句類(lèi)型的缺陷;對(duì)于CODⅠT,除了方法語(yǔ)句類(lèi)型以及return語(yǔ)句類(lèi)型的缺陷,修復(fù)的類(lèi)字段類(lèi)型的缺陷比ⅠF語(yǔ)句類(lèi)型的缺陷更多。從最后一行可以看到,基于自編碼器且在多粒度上運(yùn)行的Deep-Repair 修復(fù)的缺陷最多,與其他的修復(fù)工具相比,它修復(fù)的ⅠF語(yǔ)句類(lèi)型、循環(huán)語(yǔ)句類(lèi)型、賦值語(yǔ)句類(lèi)型以及類(lèi)字段類(lèi)型相關(guān)的缺陷數(shù)量明顯高于其他工具,原因是DeepRepair使用了多個(gè)修復(fù)策略,并在多個(gè)粒度上尋找補(bǔ)丁。由此可知,修復(fù)策略、工作粒度對(duì)學(xué)習(xí)模型的修復(fù)效果具有極大的促進(jìn)作用;而SequenceR修復(fù)的缺陷數(shù)最少,因?yàn)樗会槍?duì)單行缺陷。下面詳細(xì)分析比較幾種修復(fù)方法的修復(fù)結(jié)果。

      (1)基于LSTM、AE以及CNNs模型修復(fù)工具的修復(fù)結(jié)果分析

      由于SequenceR、CODⅠT 與DLFix 使用基本的深度學(xué)習(xí)模型都為基于LSTM的編碼器-解碼器的神經(jīng)機(jī)器翻譯模型,可將三者的修復(fù)結(jié)果合為一體以LSTM 表示,與其他兩種工具的修復(fù)結(jié)果進(jìn)行比較;AE指的是基于自編碼器的DeepRepair 的結(jié)果;CNNs 指的是基于CNNs的CoCoNuT的結(jié)果。

      如圖6通過(guò)韋恩圖表示了3種學(xué)習(xí)模型所修復(fù)缺陷的重疊的情況,重點(diǎn)關(guān)注修復(fù)結(jié)果的不同之處,并結(jié)合表5分析圖6中非重疊的部分的缺陷。

      圖6 3種不同學(xué)習(xí)模型修復(fù)缺陷的重疊情況Fig.6 Overlapping of repaired defects of three different learning models

      首先,對(duì)于DeepRepair,非重疊部分的27個(gè)缺陷,其中有48.1%的缺陷與ⅠF語(yǔ)句類(lèi)型相關(guān),這表明與其他模型相比,它更擅長(zhǎng)于修復(fù)ⅠF 語(yǔ)句類(lèi)型的缺陷,這與表5中的結(jié)果一致;同時(shí),DeepRepair 修復(fù)的缺陷種類(lèi)數(shù)是最多的,只有它修復(fù)了一個(gè)移動(dòng)語(yǔ)句類(lèi)型的缺陷,而且它修復(fù)缺陷中的賦值語(yǔ)句類(lèi)型的缺陷占比明顯高于其他兩種基本學(xué)習(xí)模型。這表明基于自編碼器且擁有多種修復(fù)策略與工作粒度的軟件自動(dòng)修復(fù)方法在修復(fù)的缺陷數(shù)量和缺陷類(lèi)型數(shù)量上具有一定優(yōu)勢(shì)。

      其次,對(duì)使用基于LSTM 的編碼器-解碼器的神經(jīng)機(jī)器翻譯模型的修復(fù)方法來(lái)說(shuō),與其他兩種模型相比,它們修復(fù)的26個(gè)缺陷中與方法語(yǔ)句類(lèi)型相關(guān)的缺陷數(shù)最多,占比達(dá)到61.5%,這表明本文用于比較的3種基于LSTM 的修復(fù)方法整體上更傾向于修復(fù)方法語(yǔ)句類(lèi)型的缺陷,這同樣與表5中的結(jié)果一致;同時(shí),只有它獨(dú)自修復(fù)的缺陷中包含switch類(lèi)型的語(yǔ)句。

      最后,對(duì)于基于CNNs 的修復(fù)工具CoCoNuT 來(lái)說(shuō),不僅是從非重疊部分的11個(gè)缺陷的分析,還是從表5的分析中都可以發(fā)現(xiàn),它的修復(fù)結(jié)果中,與ⅠF語(yǔ)句類(lèi)型、方法語(yǔ)句類(lèi)型以及return語(yǔ)句類(lèi)型相關(guān)的缺陷數(shù)量相差不大,這表明它對(duì)這3 種類(lèi)型缺陷的修復(fù)偏好相差不大。而從缺陷的復(fù)雜程度來(lái)看,DeepRepair 與CoCoNuT 能修復(fù)更高復(fù)雜程度的缺陷。

      (2)SequenceR與CODⅠT的修復(fù)結(jié)果分析

      對(duì)于同樣使用LSTM模型的兩種修復(fù)方法SequenceR與CODⅠT來(lái)說(shuō),SequenceR是序列到序列的神經(jīng)機(jī)器翻譯模型,CODⅠT 是基于樹(shù)的序列到序列的神經(jīng)機(jī)器翻譯模型,如圖7是SequenceR與CODⅠT的修復(fù)結(jié)果的重疊情況。

      圖7 SequenceR與CODⅠT修復(fù)缺陷的重疊情況Fig.7 Overlapping of repaired defects of SequenceR and CODⅠT

      其中SequenceR 單獨(dú)修復(fù)13 個(gè)缺陷,而CODⅠT 單獨(dú)修復(fù)20個(gè)缺陷。在非重疊部分,SequenceR修復(fù)更多的是與ⅠF 語(yǔ)句類(lèi)型相關(guān)的缺陷,而CODⅠT 修復(fù)更多的是與方法語(yǔ)句類(lèi)型相關(guān)的缺陷。造成這一結(jié)果的原因是SequenceR 是序列到序列的模型,針對(duì)的是代碼行,而CODⅠT和DLFix都是方法粒度的。這說(shuō)明工作粒度在很大程度上影響了修復(fù)的缺陷類(lèi)型。

      (3)CODⅠT與DLFix的修復(fù)結(jié)果分析

      對(duì)于使用LSTM 模型的兩種修復(fù)方法CODⅠT 與DLFix來(lái)說(shuō),CODⅠT是基于樹(shù)的序列到序列的神經(jīng)機(jī)器翻譯模型,而DLFix則是雙層基于樹(shù)的代碼轉(zhuǎn)換的神經(jīng)機(jī)器翻譯模型,如圖8是CODⅠT與DLFix的修復(fù)結(jié)果的重疊情況,CODⅠT單獨(dú)修復(fù)缺陷17個(gè),而DLFix單獨(dú)修復(fù)缺陷32個(gè)。對(duì)圖8的非重疊部分的缺陷進(jìn)行分析,并結(jié)合表5可以看到,使用DLFix比CODⅠT能夠修復(fù)更多缺陷;同時(shí),從表5中可以看到,CODⅠT主要修復(fù)方法語(yǔ)句類(lèi)型缺陷而較大程度上忽略ⅠF 語(yǔ)句類(lèi)型的缺陷,而DLFix則彌補(bǔ)了這一缺陷,它對(duì)這兩種類(lèi)型缺陷的修復(fù)偏好相差不大。

      圖8 CODⅠT與DLFix修復(fù)缺陷的重疊情況Fig.8 Overlapping of repaired defects of CODⅠT and DLFix

      3.3 有效性影響因素分析

      可從內(nèi)部有效性和外部有效性兩個(gè)方面來(lái)分析可能影響到本文實(shí)證研究結(jié)論有效性的影響因素。

      影響內(nèi)部有效性的因素主要來(lái)自兩個(gè)方面,一個(gè)是缺陷分類(lèi)的標(biāo)準(zhǔn),另一個(gè)是用于比較的修復(fù)方法。對(duì)于缺陷分類(lèi),本文參考了多篇文獻(xiàn),根據(jù)修復(fù)模式逐個(gè)對(duì)缺陷進(jìn)行了分類(lèi),保證了分類(lèi)的準(zhǔn)確性;對(duì)于修復(fù)方法,本文主要比較的是文中選取的五種修復(fù)方法的結(jié)果,而其他修復(fù)方法的結(jié)果如何有待進(jìn)一步研究。而且在研究不同模型對(duì)缺陷類(lèi)型的修復(fù)偏好時(shí),其他因素(如工作粒度等)的影響較大,之后的工作可以進(jìn)行探討。

      而影響外部有效性的因素主要來(lái)源于缺陷庫(kù)。Defects4J中部分項(xiàng)目的缺陷數(shù)量較少,因此在分析不同項(xiàng)目?jī)?nèi)的缺陷時(shí)對(duì)結(jié)果的影響較大,但是本文主要是針對(duì)整體缺陷進(jìn)行研究,因此很大程度上可以避免這一影響;而Defect4J 數(shù)據(jù)集不涉及深度學(xué)習(xí)模型的訓(xùn)練,只是對(duì)訓(xùn)練后的深度學(xué)習(xí)模型進(jìn)行評(píng)估。本文之所以選取Defect4J進(jìn)行分析,是因?yàn)楸疚闹兴械姆椒ㄔ谠u(píng)估時(shí)都用到了該數(shù)據(jù)集。同時(shí),Defect4J數(shù)據(jù)集是一個(gè)被廣泛使用的缺陷基準(zhǔn)數(shù)據(jù)集,涉及的缺陷類(lèi)型全面,適合進(jìn)行缺陷修復(fù)偏好研究。為了進(jìn)一步減少數(shù)據(jù)集方面存在的有效性威脅,在未來(lái)的工作中,將進(jìn)行更全面的實(shí)驗(yàn),從而分析本文中的這些方法在更多缺陷基準(zhǔn)中的修復(fù)偏好性。

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

      本文根據(jù)缺陷修復(fù)模式對(duì)Defects4J 中的缺陷進(jìn)行分類(lèi),通過(guò)實(shí)驗(yàn)給出了5種基于不同學(xué)習(xí)模型的修復(fù)工具 在Defects4J 上整體的修復(fù)概率,同時(shí)分析這5 種修復(fù)工具各自在Defects4J 上的修復(fù)結(jié)果,并對(duì)各類(lèi)缺陷的修復(fù)偏好進(jìn)行比較分析。實(shí)驗(yàn)結(jié)果表明,基于深度學(xué)習(xí)的軟件自動(dòng)修復(fù)方法傾向于修復(fù)ⅠF語(yǔ)句類(lèi)型、方法語(yǔ)句類(lèi)型、return 語(yǔ)句類(lèi)型的缺陷?;谧跃幋a器的軟件自動(dòng)修復(fù)方法DeepRepair 更傾向于修復(fù)ⅠF 語(yǔ)句類(lèi)型的缺陷,選取的基于LSTM 的編碼器-解碼器的修復(fù)方法整體上更傾向于修復(fù)與方法語(yǔ)句類(lèi)型相關(guān)的缺陷,而基于CNNs 編碼器-解碼器的修復(fù)方法則對(duì)ⅠF 語(yǔ)句類(lèi)型、方法語(yǔ)句類(lèi)型以及return語(yǔ)句類(lèi)型這3種類(lèi)型缺陷的修復(fù)偏好相差不大。

      猜你喜歡
      編碼器語(yǔ)句工具
      波比的工具
      波比的工具
      重點(diǎn):語(yǔ)句銜接
      基于FPGA的同步機(jī)軸角編碼器
      精彩語(yǔ)句
      “巧用”工具
      讀者(2017年18期)2017-08-29 21:22:03
      基于PRBS檢測(cè)的8B/IOB編碼器設(shè)計(jì)
      JESD204B接口協(xié)議中的8B10B編碼器設(shè)計(jì)
      電子器件(2015年5期)2015-12-29 08:42:24
      多總線式光電編碼器的設(shè)計(jì)與應(yīng)用
      如何搞定語(yǔ)句銜接題
      石屏县| 青海省| 江北区| 灵丘县| 佛冈县| 富顺县| 涟水县| 丰宁| 新宁县| 梁河县| 永定县| 邵阳县| 河东区| 盐城市| 三原县| 城口县| 二手房| 英德市| 绍兴县| 彭泽县| 灌云县| 阿拉善右旗| 民丰县| 灌云县| 招远市| 宁陕县| 介休市| 乌兰察布市| 双流县| 循化| 宿州市| 田阳县| 棋牌| 灵宝市| 南陵县| 开化县| 慈利县| 岳阳市| 甘德县| 慈溪市| 大竹县|