基于缺陷上下文深度學(xué)習(xí)的程序修復(fù)方法
發(fā)布時(shí)間:2021-11-19 12:05
由于近些年來(lái)軟件程序應(yīng)用領(lǐng)域逐漸擴(kuò)大,這便導(dǎo)致軟件規(guī)模也會(huì)隨之變大。因?yàn)槌绦蛑腥諠u增加的缺陷會(huì)導(dǎo)致程序運(yùn)行時(shí)出現(xiàn)錯(cuò)誤的頻率越來(lái)越大,這種缺陷程序存在的隱患將會(huì)影響到整個(gè)軟件領(lǐng)域。所以,盡可能提前的發(fā)現(xiàn)并且修復(fù)程序中可能存在的缺陷,是當(dāng)前軟件工程學(xué)科中非常值得研究的方向。在修復(fù)程序缺陷的問(wèn)題上,自動(dòng)修復(fù)編程錯(cuò)誤,也稱(chēng)為程序修復(fù),在一定程度上提高了修復(fù)程序缺陷的效率,推動(dòng)了軟件開(kāi)發(fā)的進(jìn)程。然而,目前的程序修復(fù)方法仍然存在修復(fù)率低以及修復(fù)類(lèi)型少等問(wèn)題,修復(fù)效果有待提升。在程序修復(fù)的語(yǔ)法錯(cuò)誤修復(fù)方面,對(duì)于修復(fù)部分缺陷程序語(yǔ)句,有時(shí)可能需要分析整個(gè)程序結(jié)構(gòu),從而浪費(fèi)了大量的有效時(shí)間。而在對(duì)程序修復(fù)的語(yǔ)義錯(cuò)誤修復(fù)方面,對(duì)程序語(yǔ)句進(jìn)行有效的結(jié)構(gòu)語(yǔ)義分析又成為了目前語(yǔ)義錯(cuò)誤修復(fù)的主要限制。針對(duì)上述問(wèn)題,本文提出了一種基于缺陷上下文的深度學(xué)習(xí)方法來(lái)進(jìn)行錯(cuò)誤程序的自動(dòng)修復(fù),主要分為不考慮編譯信息的語(yǔ)法錯(cuò)誤修復(fù)方法、考慮編譯信息的語(yǔ)法錯(cuò)誤修復(fù)方法和語(yǔ)義錯(cuò)誤修復(fù)方法。首先,對(duì)于修復(fù)程序語(yǔ)法錯(cuò)誤,本文采用不考慮編譯信息的語(yǔ)法錯(cuò)誤修復(fù)方法和考慮編譯信息的語(yǔ)法錯(cuò)誤修復(fù)方法,采用編譯器對(duì)程序語(yǔ)句分別進(jìn)行不編譯和編譯處...
【文章來(lái)源】:哈爾濱工業(yè)大學(xué)黑龍江省 211工程院校 985工程院校
【文章頁(yè)數(shù)】:79 頁(yè)
【學(xué)位級(jí)別】:碩士
【部分圖文】:
論文結(jié)構(gòu)圖
哈爾濱工業(yè)大學(xué)工程碩士學(xué)位論文-12-(4)模型測(cè)試:對(duì)數(shù)據(jù)集中的測(cè)試集進(jìn)行預(yù)處理,通過(guò)編碼映射得到測(cè)試數(shù)據(jù)集的向量矩陣,然后將數(shù)據(jù)送入經(jīng)過(guò)訓(xùn)練好的Transformer模型進(jìn)行缺陷程序的自動(dòng)檢測(cè)和修復(fù),模型的輸出結(jié)果為建議修復(fù)程序語(yǔ)句。圖2-1不考慮編譯信息的語(yǔ)法錯(cuò)誤修復(fù)總體流程2.3不考慮編譯信息的語(yǔ)法錯(cuò)誤修復(fù)方法數(shù)據(jù)處理本方法是基于大量的學(xué)生C語(yǔ)言程序基礎(chǔ)上的,然而對(duì)于原始的這種程序代碼,程序語(yǔ)句中含有大量的不必要的冗余信息,例如:代碼注釋。在數(shù)據(jù)預(yù)處理階段首先要對(duì)數(shù)據(jù)集中無(wú)用信息進(jìn)行刪除,另外為了適應(yīng)模型訓(xùn)練數(shù)據(jù)集的要求,需要對(duì)缺陷程序數(shù)據(jù)進(jìn)行標(biāo)準(zhǔn)化處理,實(shí)際操作在后續(xù)小節(jié)做詳細(xì)介紹。為了后續(xù)數(shù)據(jù)處理的方便,需要對(duì)原始程序代碼進(jìn)行代碼行編碼。本方法在實(shí)際操作中還需將處理過(guò)存儲(chǔ)在數(shù)據(jù)庫(kù)中的原始訓(xùn)練數(shù)據(jù)集進(jìn)行篩選過(guò)濾,過(guò)濾掉代碼長(zhǎng)度過(guò)短和過(guò)長(zhǎng)的數(shù)據(jù)集。另外考慮到實(shí)際搜集的學(xué)生C語(yǔ)言程序數(shù)量較少,為了適應(yīng)深度學(xué)習(xí)的大數(shù)據(jù)集要求,在這里需要對(duì)上述處理好的原始數(shù)據(jù)集進(jìn)行程序代碼的變異操作,變異操作分為兩類(lèi):typomutator、undeclaredmutator。在變異操作之后會(huì)構(gòu)成錯(cuò)誤程序語(yǔ)句和修復(fù)語(yǔ)句集,再按照在標(biāo)準(zhǔn)化過(guò)程中統(tǒng)計(jì)構(gòu)成的詞典構(gòu)造本方法下的向量編碼映射,映射后的訓(xùn)練集向量矩陣存儲(chǔ)于數(shù)據(jù)集下。不考慮編譯信息的語(yǔ)法錯(cuò)誤修復(fù)方法的數(shù)據(jù)處理流程如圖2-2所示,可分為如下四個(gè)步驟。
哈爾濱工業(yè)大學(xué)工程碩士學(xué)位論文-13-圖2-2不考慮編譯信息的語(yǔ)法錯(cuò)誤修復(fù)方法數(shù)據(jù)處理流程2.3.1程序預(yù)處理本方法采用的數(shù)據(jù)集是學(xué)生的C語(yǔ)言程序,所以本階段需要對(duì)這些數(shù)據(jù)進(jìn)行統(tǒng)一的標(biāo)準(zhǔn)化處理,并為每一個(gè)程序分配唯一的程序id和對(duì)應(yīng)的任務(wù)id。在設(shè)計(jì)標(biāo)準(zhǔn)化處理時(shí),將每個(gè)C語(yǔ)言字符對(duì)應(yīng)標(biāo)準(zhǔn)化為(kind,value)。Value值處理過(guò)程:類(lèi)型名、關(guān)鍵字、特殊字符和庫(kù)函數(shù)在不同程序之間共享,我們?cè)跇?biāo)準(zhǔn)化程序時(shí)保留它們;對(duì)于常量、字符串等采取統(tǒng)一的符號(hào)表示,如:0用#表示。Kind值處理過(guò)程:利用編寫(xiě)好的正則表達(dá)式來(lái)匹配程序語(yǔ)句中的每一個(gè)C語(yǔ)言字符,得到其對(duì)應(yīng)的類(lèi)型值。結(jié)合之前標(biāo)準(zhǔn)化處理得到的,在程序表示中對(duì)行號(hào)進(jìn)行編碼,例如第L行的語(yǔ)句S用(L,S)表示,具有k行的程序P表示為(L1,S1),…,(Lk,Sk)<eos>,其中L1,...,Lk是行號(hào),而S1,...,Sk是在相應(yīng)行的語(yǔ)句的token序列。將處理后的數(shù)據(jù)利用SQLite數(shù)據(jù)庫(kù)進(jìn)行建表保存。缺陷程序的標(biāo)準(zhǔn)化示例如圖2-3所示。圖2-3缺陷程序的標(biāo)準(zhǔn)化示例
【參考文獻(xiàn)】:
期刊論文
[1]C/C++程序缺陷自動(dòng)修復(fù)與確認(rèn)方法[J]. 周風(fēng)順,王林章,李宣東. 軟件學(xué)報(bào). 2019(05)
[2]軟件錯(cuò)誤自動(dòng)定位關(guān)鍵科學(xué)問(wèn)題及研究進(jìn)展[J]. 王克朝,王甜甜,蘇小紅,馬培軍. 計(jì)算機(jī)學(xué)報(bào). 2015(11)
本文編號(hào):3505001
【文章來(lái)源】:哈爾濱工業(yè)大學(xué)黑龍江省 211工程院校 985工程院校
【文章頁(yè)數(shù)】:79 頁(yè)
【學(xué)位級(jí)別】:碩士
【部分圖文】:
論文結(jié)構(gòu)圖
哈爾濱工業(yè)大學(xué)工程碩士學(xué)位論文-12-(4)模型測(cè)試:對(duì)數(shù)據(jù)集中的測(cè)試集進(jìn)行預(yù)處理,通過(guò)編碼映射得到測(cè)試數(shù)據(jù)集的向量矩陣,然后將數(shù)據(jù)送入經(jīng)過(guò)訓(xùn)練好的Transformer模型進(jìn)行缺陷程序的自動(dòng)檢測(cè)和修復(fù),模型的輸出結(jié)果為建議修復(fù)程序語(yǔ)句。圖2-1不考慮編譯信息的語(yǔ)法錯(cuò)誤修復(fù)總體流程2.3不考慮編譯信息的語(yǔ)法錯(cuò)誤修復(fù)方法數(shù)據(jù)處理本方法是基于大量的學(xué)生C語(yǔ)言程序基礎(chǔ)上的,然而對(duì)于原始的這種程序代碼,程序語(yǔ)句中含有大量的不必要的冗余信息,例如:代碼注釋。在數(shù)據(jù)預(yù)處理階段首先要對(duì)數(shù)據(jù)集中無(wú)用信息進(jìn)行刪除,另外為了適應(yīng)模型訓(xùn)練數(shù)據(jù)集的要求,需要對(duì)缺陷程序數(shù)據(jù)進(jìn)行標(biāo)準(zhǔn)化處理,實(shí)際操作在后續(xù)小節(jié)做詳細(xì)介紹。為了后續(xù)數(shù)據(jù)處理的方便,需要對(duì)原始程序代碼進(jìn)行代碼行編碼。本方法在實(shí)際操作中還需將處理過(guò)存儲(chǔ)在數(shù)據(jù)庫(kù)中的原始訓(xùn)練數(shù)據(jù)集進(jìn)行篩選過(guò)濾,過(guò)濾掉代碼長(zhǎng)度過(guò)短和過(guò)長(zhǎng)的數(shù)據(jù)集。另外考慮到實(shí)際搜集的學(xué)生C語(yǔ)言程序數(shù)量較少,為了適應(yīng)深度學(xué)習(xí)的大數(shù)據(jù)集要求,在這里需要對(duì)上述處理好的原始數(shù)據(jù)集進(jìn)行程序代碼的變異操作,變異操作分為兩類(lèi):typomutator、undeclaredmutator。在變異操作之后會(huì)構(gòu)成錯(cuò)誤程序語(yǔ)句和修復(fù)語(yǔ)句集,再按照在標(biāo)準(zhǔn)化過(guò)程中統(tǒng)計(jì)構(gòu)成的詞典構(gòu)造本方法下的向量編碼映射,映射后的訓(xùn)練集向量矩陣存儲(chǔ)于數(shù)據(jù)集下。不考慮編譯信息的語(yǔ)法錯(cuò)誤修復(fù)方法的數(shù)據(jù)處理流程如圖2-2所示,可分為如下四個(gè)步驟。
哈爾濱工業(yè)大學(xué)工程碩士學(xué)位論文-13-圖2-2不考慮編譯信息的語(yǔ)法錯(cuò)誤修復(fù)方法數(shù)據(jù)處理流程2.3.1程序預(yù)處理本方法采用的數(shù)據(jù)集是學(xué)生的C語(yǔ)言程序,所以本階段需要對(duì)這些數(shù)據(jù)進(jìn)行統(tǒng)一的標(biāo)準(zhǔn)化處理,并為每一個(gè)程序分配唯一的程序id和對(duì)應(yīng)的任務(wù)id。在設(shè)計(jì)標(biāo)準(zhǔn)化處理時(shí),將每個(gè)C語(yǔ)言字符對(duì)應(yīng)標(biāo)準(zhǔn)化為(kind,value)。Value值處理過(guò)程:類(lèi)型名、關(guān)鍵字、特殊字符和庫(kù)函數(shù)在不同程序之間共享,我們?cè)跇?biāo)準(zhǔn)化程序時(shí)保留它們;對(duì)于常量、字符串等采取統(tǒng)一的符號(hào)表示,如:0用#表示。Kind值處理過(guò)程:利用編寫(xiě)好的正則表達(dá)式來(lái)匹配程序語(yǔ)句中的每一個(gè)C語(yǔ)言字符,得到其對(duì)應(yīng)的類(lèi)型值。結(jié)合之前標(biāo)準(zhǔn)化處理得到的,在程序表示中對(duì)行號(hào)進(jìn)行編碼,例如第L行的語(yǔ)句S用(L,S)表示,具有k行的程序P表示為(L1,S1),…,(Lk,Sk)<eos>,其中L1,...,Lk是行號(hào),而S1,...,Sk是在相應(yīng)行的語(yǔ)句的token序列。將處理后的數(shù)據(jù)利用SQLite數(shù)據(jù)庫(kù)進(jìn)行建表保存。缺陷程序的標(biāo)準(zhǔn)化示例如圖2-3所示。圖2-3缺陷程序的標(biāo)準(zhǔn)化示例
【參考文獻(xiàn)】:
期刊論文
[1]C/C++程序缺陷自動(dòng)修復(fù)與確認(rèn)方法[J]. 周風(fēng)順,王林章,李宣東. 軟件學(xué)報(bào). 2019(05)
[2]軟件錯(cuò)誤自動(dòng)定位關(guān)鍵科學(xué)問(wèn)題及研究進(jìn)展[J]. 王克朝,王甜甜,蘇小紅,馬培軍. 計(jì)算機(jī)學(xué)報(bào). 2015(11)
本文編號(hào):3505001
本文鏈接:http://sikaile.net/kejilunwen/zidonghuakongzhilunwen/3505001.html
最近更新
教材專(zhuān)著