基于代碼克隆檢測的重構模式識別
發(fā)布時間:2021-08-26 06:16
代碼重構技術是指使用一系列重構手法,改進優(yōu)化軟件的內(nèi)部結構,降低其修改成本,增加它的可拓展性、可理解性和可維護性,同時保持軟件的功能不發(fā)生改變,這是一種在結構層次上的代碼整理技術。重構模式識別指的是對比變更前原代碼和變更后代碼以尋找符合某種重構模式的代碼段。在代碼變更中,往往包含著對老版本代碼的bug的修復、功能的添加以及重構的變更代碼,這幾種種類各異的變更代碼的混合增加了閱讀其代碼理解其內(nèi)容的難度,若能對變更代碼中重構相關的變更代碼進行自動識別,則可使重構與其他種類的變更行為相互分離,利于代碼的閱讀和理解,同時有助于研究人員了解代碼變更中的重構行為,增加研究者代碼修改經(jīng)驗,獲取諸如重構的方式、重構的動機以及重構對代碼質(zhì)量的影響等知識,有利于研究者理解軟件演化的歷程。在幾種常用的重構模式之中,有一部分在重構的過程中包含搬移代碼行這種操作,在重構實踐中,重構前后代碼行的搬移并不是簡單的一字不改的粘貼和復制,在很多情況下需要按照需求對所搬移的代碼行進行一定程度的調(diào)整,比如調(diào)整搬移代碼行中的變量名、常量名、花括號、修飾符、標識符、字符大小寫、數(shù)字、字符串,或者是添加或刪除其中的部分代碼。由于...
【文章來源】:齊魯工業(yè)大學山東省
【文章頁數(shù)】:80 頁
【學位級別】:碩士
【文章目錄】:
摘要
ABSTRACT
第1章 緒論
1.1 研究背景和意義
1.2 本文的研究內(nèi)容
1.3 文章結構
第2章 國內(nèi)外研究現(xiàn)狀
2.1 重構和重構模式
2.1.1 什么是重構以及重構的研究現(xiàn)狀
2.1.2 重構的作用和缺陷
2.1.3 什么是重構模式
2.2 重構模式識別
2.3 克隆代碼和代碼克隆檢測技術
2.3.1 克隆代碼
2.3.2 代碼克隆檢測
2.4 本章小結
第3章 基于代碼克隆檢測的重構模式識別方法
3.1 識別方法概述
3.2 代碼變更塊(hunk)的獲取和拆分
3.2.1 代碼變更塊的獲取(hunk識別模塊)
3.2.2 代碼變更塊的分割(split模塊)
3.3 基于代碼克隆檢測技術獲取候選hunk集(克隆檢測模塊)
3.4 基于抽象語法樹的重構模式識別(模式識別模塊)
3.4.1 使用抽象語法樹解析源代碼
3.4.2 Java模型
3.4.3 尋找抽象語法樹節(jié)點的方法
3.4.4 從AST節(jié)點中獲取信息
3.4.5 本文如何使用抽象語法樹完成語法分析
3.5 與常見的重構模式識別方法的對比
3.6 本章小結
第4章 抽取函數(shù)和內(nèi)聯(lián)函數(shù)重構模式的識別
4.1 抽取函數(shù)(Extract Method)模式
4.2 抽取函數(shù)模式的識別
4.2.1 基于克隆檢測對方法的代碼搬移進行判斷
4.2.2 對新增方法調(diào)用的判斷
4.2.3 抽取函數(shù)算法
4.3 數(shù)據(jù)來源
4.4 simian參數(shù)與閾值設定
4.5 抽取函數(shù)實驗結果和分析
4.6 內(nèi)聯(lián)函數(shù)(Inline Method)模式
4.6.1 基于克隆代碼檢測對函數(shù)級代碼搬移進行判斷
4.6.2 基于抽象語法樹對函數(shù)引用情況進行判斷
4.6.3 內(nèi)聯(lián)函數(shù)重構模式識別算法
4.7 內(nèi)聯(lián)函數(shù)實驗結果和分析
4.8 本章小結
第5章 替換算法重構模式的識別
5.1 替換算法(Substitute Algorithm)模式
5.2 替換算法模式的識別
5.3 替換算法模式算法
5.4 替換算法實驗結果和分析
5.5 本章小結
第6章 函數(shù)改名、添加參數(shù)以及移除參數(shù)重構模式的識別
6.1 函數(shù)改名(Rename Method)模式
6.2 函數(shù)改名模式的識別
6.2.1 基于代碼克隆檢測對行變更進行判斷
6.2.2 使用基于文本的語法分析判定函數(shù)頭
6.2.3 判斷原函數(shù)和修改后函數(shù)是否存在函數(shù)改名情況
6.2.4 函數(shù)改名算法
6.3 函數(shù)改名實驗結果
6.4 添加參數(shù)(Add Parameter)和移除參數(shù)(Remove Parameter)模式
6.4.1 添加參數(shù)(Add Parameter)模式
6.4.2 移除參數(shù)(Remove Parameter)重構模式
6.5 對添加參數(shù)和移除參數(shù)重構模式的識別
6.6 添加參數(shù)和移除參數(shù)算法
6.7 添加參數(shù)和移除參數(shù)實驗結果
6.8 本章小結
第7章 抽取類重構模式的識別
7.1 抽取類(Extract Classs)重構模式
7.2 抽取類重構模式識別
7.2.1 基于克隆檢測技術對部分代碼搬移進行判斷
7.2.2 基于抽象語法樹對被轉移代碼中是否有函數(shù)進行判斷
7.2.3 對變更后文件是否調(diào)用了轉移代碼行中的函數(shù)進行判斷
7.2.4 抽取類識別算法
7.3 抽取類實驗結果
7.4 本章小結
第8章 結論
參考文獻
致謝
在學期間主要科研成果
一、發(fā)表學術論文
【參考文獻】:
期刊論文
[1]面向Java多線程機制的軟件重構方法[J]. 張楊,柳晨光,張冬雯,鄭琨,鄭雅潔. 北京理工大學學報. 2018(11)
[2]基于版本的多重軟件重構自動檢測技術研究[J]. 鐘林輝,黃小明,薛良波,葉海濤. 江西師范大學學報(自然科學版). 2018(05)
[3]代碼審查在軟件工程實施中的重要性[J]. 井濤. 電子技術與軟件工程. 2017(21)
[4]分支語句重構算法的研究與應用[J]. 趙會群,孫雨. 計算機工程與應用. 2018(06)
[5]基于后綴樹的相似代碼檢測方法的研究[J]. 禤靜. 信息通信. 2016(10)
[6]基于JavaCC的抽象語法樹的構建與實現(xiàn)[J]. 黃松,黃玉,惠戰(zhàn)偉. 計算機工程與設計. 2016(04)
[7]函數(shù)抽取重構的自動檢測方法[J]. 劉陽,劉秋榮,劉輝. 計算機科學. 2015(12)
[8]大規(guī)模軟件系統(tǒng)日志研究綜述[J]. 廖湘科,李姍姍,董威,賈周陽,劉曉東,周書林. 軟件學報. 2016(08)
[9]長方法壞味重構選擇策略[J]. 馬飛飛,吳海濤. 計算機應用. 2014(S1)
[10]基于程序依賴圖的克隆檢測及改進[J]. 郭婧,吳軍華. 計算機工程與設計. 2012(02)
博士論文
[1]面向軟件重構的推薦方法研究[D]. 高原.北京理工大學 2015
本文編號:3363713
【文章來源】:齊魯工業(yè)大學山東省
【文章頁數(shù)】:80 頁
【學位級別】:碩士
【文章目錄】:
摘要
ABSTRACT
第1章 緒論
1.1 研究背景和意義
1.2 本文的研究內(nèi)容
1.3 文章結構
第2章 國內(nèi)外研究現(xiàn)狀
2.1 重構和重構模式
2.1.1 什么是重構以及重構的研究現(xiàn)狀
2.1.2 重構的作用和缺陷
2.1.3 什么是重構模式
2.2 重構模式識別
2.3 克隆代碼和代碼克隆檢測技術
2.3.1 克隆代碼
2.3.2 代碼克隆檢測
2.4 本章小結
第3章 基于代碼克隆檢測的重構模式識別方法
3.1 識別方法概述
3.2 代碼變更塊(hunk)的獲取和拆分
3.2.1 代碼變更塊的獲取(hunk識別模塊)
3.2.2 代碼變更塊的分割(split模塊)
3.3 基于代碼克隆檢測技術獲取候選hunk集(克隆檢測模塊)
3.4 基于抽象語法樹的重構模式識別(模式識別模塊)
3.4.1 使用抽象語法樹解析源代碼
3.4.2 Java模型
3.4.3 尋找抽象語法樹節(jié)點的方法
3.4.4 從AST節(jié)點中獲取信息
3.4.5 本文如何使用抽象語法樹完成語法分析
3.5 與常見的重構模式識別方法的對比
3.6 本章小結
第4章 抽取函數(shù)和內(nèi)聯(lián)函數(shù)重構模式的識別
4.1 抽取函數(shù)(Extract Method)模式
4.2 抽取函數(shù)模式的識別
4.2.1 基于克隆檢測對方法的代碼搬移進行判斷
4.2.2 對新增方法調(diào)用的判斷
4.2.3 抽取函數(shù)算法
4.3 數(shù)據(jù)來源
4.4 simian參數(shù)與閾值設定
4.5 抽取函數(shù)實驗結果和分析
4.6 內(nèi)聯(lián)函數(shù)(Inline Method)模式
4.6.1 基于克隆代碼檢測對函數(shù)級代碼搬移進行判斷
4.6.2 基于抽象語法樹對函數(shù)引用情況進行判斷
4.6.3 內(nèi)聯(lián)函數(shù)重構模式識別算法
4.7 內(nèi)聯(lián)函數(shù)實驗結果和分析
4.8 本章小結
第5章 替換算法重構模式的識別
5.1 替換算法(Substitute Algorithm)模式
5.2 替換算法模式的識別
5.3 替換算法模式算法
5.4 替換算法實驗結果和分析
5.5 本章小結
第6章 函數(shù)改名、添加參數(shù)以及移除參數(shù)重構模式的識別
6.1 函數(shù)改名(Rename Method)模式
6.2 函數(shù)改名模式的識別
6.2.1 基于代碼克隆檢測對行變更進行判斷
6.2.2 使用基于文本的語法分析判定函數(shù)頭
6.2.3 判斷原函數(shù)和修改后函數(shù)是否存在函數(shù)改名情況
6.2.4 函數(shù)改名算法
6.3 函數(shù)改名實驗結果
6.4 添加參數(shù)(Add Parameter)和移除參數(shù)(Remove Parameter)模式
6.4.1 添加參數(shù)(Add Parameter)模式
6.4.2 移除參數(shù)(Remove Parameter)重構模式
6.5 對添加參數(shù)和移除參數(shù)重構模式的識別
6.6 添加參數(shù)和移除參數(shù)算法
6.7 添加參數(shù)和移除參數(shù)實驗結果
6.8 本章小結
第7章 抽取類重構模式的識別
7.1 抽取類(Extract Classs)重構模式
7.2 抽取類重構模式識別
7.2.1 基于克隆檢測技術對部分代碼搬移進行判斷
7.2.2 基于抽象語法樹對被轉移代碼中是否有函數(shù)進行判斷
7.2.3 對變更后文件是否調(diào)用了轉移代碼行中的函數(shù)進行判斷
7.2.4 抽取類識別算法
7.3 抽取類實驗結果
7.4 本章小結
第8章 結論
參考文獻
致謝
在學期間主要科研成果
一、發(fā)表學術論文
【參考文獻】:
期刊論文
[1]面向Java多線程機制的軟件重構方法[J]. 張楊,柳晨光,張冬雯,鄭琨,鄭雅潔. 北京理工大學學報. 2018(11)
[2]基于版本的多重軟件重構自動檢測技術研究[J]. 鐘林輝,黃小明,薛良波,葉海濤. 江西師范大學學報(自然科學版). 2018(05)
[3]代碼審查在軟件工程實施中的重要性[J]. 井濤. 電子技術與軟件工程. 2017(21)
[4]分支語句重構算法的研究與應用[J]. 趙會群,孫雨. 計算機工程與應用. 2018(06)
[5]基于后綴樹的相似代碼檢測方法的研究[J]. 禤靜. 信息通信. 2016(10)
[6]基于JavaCC的抽象語法樹的構建與實現(xiàn)[J]. 黃松,黃玉,惠戰(zhàn)偉. 計算機工程與設計. 2016(04)
[7]函數(shù)抽取重構的自動檢測方法[J]. 劉陽,劉秋榮,劉輝. 計算機科學. 2015(12)
[8]大規(guī)模軟件系統(tǒng)日志研究綜述[J]. 廖湘科,李姍姍,董威,賈周陽,劉曉東,周書林. 軟件學報. 2016(08)
[9]長方法壞味重構選擇策略[J]. 馬飛飛,吳海濤. 計算機應用. 2014(S1)
[10]基于程序依賴圖的克隆檢測及改進[J]. 郭婧,吳軍華. 計算機工程與設計. 2012(02)
博士論文
[1]面向軟件重構的推薦方法研究[D]. 高原.北京理工大學 2015
本文編號:3363713
本文鏈接:http://sikaile.net/kejilunwen/ruanjiangongchenglunwen/3363713.html
最近更新
教材專著