語句包裹變更模式的識別方法研究
發(fā)布時間:2021-01-21 08:07
軟件變更過程中,由于軟件需求的變化以及軟件維護的需要,大量的軟件變更代碼被提交到軟件版本管理系統(tǒng)中,軟件代碼的結(jié)構(gòu)也變得越來越復(fù)雜,使得軟件開發(fā)人員理解變更代碼變得困難,軟件變更中摻雜了大量的代碼變更模式,將這些模式與其他變更代碼分離,將方便理解變更。本文對將一個語句或語句序列移動到一個或多個語法實體中的語句包裹模式進行了研究,做出了如下貢獻:首先,由于當(dāng)前還沒有對于語句包裹模式的定義,本文從四個維度對語句包裹模式進行了分類;其次,提出了語句包裹模式的識別算法,算法首先識別發(fā)生移動的語句或語句序列,然后通過分析抽象語法樹對語句包裹變更模式進行確認;最后,對提出的識別算法進行了實驗驗證,并對識別出的語句包裹模式進行了分類分析。識別算法首先使用基于文本的差異化分析工具獲取代碼變更前后版本文件的hunk,然后對存在相似代碼行的語句包裹模式候選hunk進行了識別,由于代碼克隆檢測工具Simian對于語句包裹模式候選hunk的識別結(jié)果不理想,提出了基于LCS的語句包裹模式候選hunk識別算法,通過分析代碼變更前后版本文件的抽象語法樹提出了基于候選hunk和抽象語法樹的語句包裹模式識別算法,并提出...
【文章來源】:齊魯工業(yè)大學(xué)山東省
【文章頁數(shù)】:81 頁
【學(xué)位級別】:碩士
【部分圖文】:
語法實體為if的語句包裹模式
第3章語句包裹模式識別方法概述14圖3.1取自開源項目jEdit的Macros.java文件,提交號為16a39f4,在上圖中,原文件的第154行到第158行代碼移動到新版本文件的第155行到第159行的位置,在新版本文件的第153行添加了一個if條件語句,這種代碼變更模式就是代碼移動到if語法實體的語句包裹模式。在圖3.1中,新版本文件的第154行到第160行為新增if語法實體的then部分的行范圍,第162行到第178行為新增if語法實體的else部分的行范圍。在圖3.1中,語句或語句序列移動到了if的then部分,在其他的語句包裹變更模式中,還存在語句或語句序列移動到if的else部分的情況,這也屬于語法實體為if的語句包裹變更模式!2Try語法實體try語句包裹模式指的是語句或語句序列移動到try語法實體中的代碼變更行為,分為移動到body分支、catch分支以及finally分支中,以try為語法實體的語句包裹模式如圖3.2所示。圖3.2try語句包裹模式示意圖圖3.2中的hunk取自開源項目jEdit的jEdit.java文件,提交號為3363129,原文件中的第3820行代碼與新版本文件中第3842行代碼是相同的,在新版本文件中的第3840行添加了try語句,原文件的第3820行代碼在代碼變更后移動到了新版本文件中的try語法結(jié)構(gòu)的body分支中,這種代碼變更模式為Try語句包裹變更模式。在圖3.2中,新版本文件的第3841行到第3843行為body分支的行范圍,第3845到第3850行為catch分支的行范圍,在Try語句包裹模式的分類中還包括語句或語句序列移動到try的catch分支或finally分支的情況!3For語法實體以for語句為語法實體的語句包裹模式如圖3.3所示
齊魯工業(yè)大學(xué)碩士學(xué)位論文15圖3.3語法實體為for的語句包裹模式圖3.3所示的hunk取自開源項目jEdit的IndentFoldHandler.java文件,提交號為f46579b,在上圖中,原文件第56行到第61行代碼移動到了新版本文件中的第61行到第64行的位置。這種代碼變更行為就是語法實體為for的語句包裹變更模式!4Switch語法實體以switch語句為語法實體的語句包裹模式如圖3.4所示。圖3.4語法實體為switch的語句包裹模式圖3.4所示的hunk取自開源項目jEdit的BufferSetManager.java文件,提交號為4083efe,在上圖中,原文件中的第230行到第231行移動到了新版本文件中的第171行到第172行的位置,這種變更行為就是語法實體為switch的語句包裹變更模式。語法實體為switch的語句包裹變更模式還包括語句移動到default分支的變更類型!5Synchronized語法實體以Synchronized語句為語法實體的語句包裹模式如圖3.5所示。
本文編號:2990797
【文章來源】:齊魯工業(yè)大學(xué)山東省
【文章頁數(shù)】:81 頁
【學(xué)位級別】:碩士
【部分圖文】:
語法實體為if的語句包裹模式
第3章語句包裹模式識別方法概述14圖3.1取自開源項目jEdit的Macros.java文件,提交號為16a39f4,在上圖中,原文件的第154行到第158行代碼移動到新版本文件的第155行到第159行的位置,在新版本文件的第153行添加了一個if條件語句,這種代碼變更模式就是代碼移動到if語法實體的語句包裹模式。在圖3.1中,新版本文件的第154行到第160行為新增if語法實體的then部分的行范圍,第162行到第178行為新增if語法實體的else部分的行范圍。在圖3.1中,語句或語句序列移動到了if的then部分,在其他的語句包裹變更模式中,還存在語句或語句序列移動到if的else部分的情況,這也屬于語法實體為if的語句包裹變更模式!2Try語法實體try語句包裹模式指的是語句或語句序列移動到try語法實體中的代碼變更行為,分為移動到body分支、catch分支以及finally分支中,以try為語法實體的語句包裹模式如圖3.2所示。圖3.2try語句包裹模式示意圖圖3.2中的hunk取自開源項目jEdit的jEdit.java文件,提交號為3363129,原文件中的第3820行代碼與新版本文件中第3842行代碼是相同的,在新版本文件中的第3840行添加了try語句,原文件的第3820行代碼在代碼變更后移動到了新版本文件中的try語法結(jié)構(gòu)的body分支中,這種代碼變更模式為Try語句包裹變更模式。在圖3.2中,新版本文件的第3841行到第3843行為body分支的行范圍,第3845到第3850行為catch分支的行范圍,在Try語句包裹模式的分類中還包括語句或語句序列移動到try的catch分支或finally分支的情況!3For語法實體以for語句為語法實體的語句包裹模式如圖3.3所示
齊魯工業(yè)大學(xué)碩士學(xué)位論文15圖3.3語法實體為for的語句包裹模式圖3.3所示的hunk取自開源項目jEdit的IndentFoldHandler.java文件,提交號為f46579b,在上圖中,原文件第56行到第61行代碼移動到了新版本文件中的第61行到第64行的位置。這種代碼變更行為就是語法實體為for的語句包裹變更模式!4Switch語法實體以switch語句為語法實體的語句包裹模式如圖3.4所示。圖3.4語法實體為switch的語句包裹模式圖3.4所示的hunk取自開源項目jEdit的BufferSetManager.java文件,提交號為4083efe,在上圖中,原文件中的第230行到第231行移動到了新版本文件中的第171行到第172行的位置,這種變更行為就是語法實體為switch的語句包裹變更模式。語法實體為switch的語句包裹變更模式還包括語句移動到default分支的變更類型!5Synchronized語法實體以Synchronized語句為語法實體的語句包裹模式如圖3.5所示。
本文編號:2990797
本文鏈接:http://sikaile.net/kejilunwen/ruanjiangongchenglunwen/2990797.html
最近更新
教材專著