基于靜態(tài)檢測的克隆代碼檢測工具的設計與實現(xiàn)
發(fā)布時間:2021-08-08 10:44
伴隨著移動互聯(lián)網(wǎng)時代的到來,各類型軟件應用滲透至社會的各個領域。作為提升軟件開發(fā)效率的重要手段,代碼復用技術、設計模式理論、軟件開發(fā)框架以及集成開源組件等技術在軟件開發(fā)過程中扮演著越來越重要的角色。上述技術在提升開發(fā)效率的同時,也不可避免地在軟件系統(tǒng)的源代碼中引入了越來越多的克隆代碼。因此,如何對源代碼中的克隆代碼進行有效檢測是軟件工程領域越發(fā)重要的一個問題。軟件系統(tǒng)中克隆代碼的檢測和管理不僅關系到軟件系統(tǒng)的維護與升級,同時也越來越多地與軟件安全、知識產權保護等問題聯(lián)系在一起;谝陨媳尘,本文提出并實現(xiàn)了一個基于靜態(tài)檢測的克隆代碼檢測工具,其以函數(shù)/類作為克隆檢測的基本單位,通過使用TXL語言實現(xiàn)了對源代碼函數(shù)/類的提取與歸一化,并通過粗細粒度結合的克隆檢測機制實現(xiàn)了對于C、C++、Java、Python和PHP源代碼中Type1、Type2、Type3和Type4類型克隆代碼的有效檢測,同時保證了檢測過程的高效性。本文所做的工作分為以下幾部分:1.設計并實現(xiàn)了源代碼函數(shù)提取模塊與源代碼歸一化模塊;赥XL官方提供的編程語言的語法定義文件,使用TXL對函數(shù)定義進行重寫,并定義提取規(guī)...
【文章來源】:電子科技大學四川省 211工程院校 985工程院校 教育部直屬院校
【文章頁數(shù)】:93 頁
【學位級別】:碩士
【部分圖文】:
克隆代碼檢測工具的檢測流程
代碼函數(shù)集/類集中函數(shù)/類的歸一化處理,包括對選擇型語句和循環(huán)型語句的歸一化,使得源代碼中的選擇型語句和循環(huán)型語句分別具有統(tǒng)一形式,這對于實現(xiàn)源代碼中 Type4 類型克隆的檢測具有重要意義。歸一化處理后的源代碼函數(shù)集作為粗粒度檢測模塊的輸入。c) 粗粒度檢測模塊:粗粒度檢測模塊首先提取源代碼函數(shù)集中每個函數(shù)的函數(shù)體量化特征,然后比較函數(shù)對中兩個函數(shù)的函數(shù)體量化特征,將函數(shù)體量化特征差異率高于差異率閾值的函數(shù)對判定為非克隆函數(shù)對,排除在后續(xù)檢測流程之外,將特征差異率低于差異率閾值的函數(shù)對判定為潛在克隆函數(shù)對,并輸入到細粒度檢測模塊進行最終判定。d) 細粒度檢測模塊:細粒度檢測模塊基于 LCS 算法計算函數(shù)對/類對中兩個函數(shù)/類的最長公共子序列長度,并以此計算兩個函數(shù)/類彼此的相似度,彼此相似度均高于相似度閾值的函數(shù)對/類對被判定為克隆函數(shù)對/克隆類對。源代碼中檢測到的克隆函數(shù)對/克隆類對最終會記錄在 XML 文件中,形成克隆代碼報告。細粒度檢測模塊對于 Type1-4 類型的克隆代碼均具有良好的檢測效果。
電子科技大學碩士學位論文各克隆檢測工具對源程序語言的支持情況,測試工作選取.0_141 作為測試對象。為測試工具對于各類型克隆代碼的檢地在 Linux-4.9.10 和 JDK1.8.0_141 源代碼中注入了若干函源代碼中的函數(shù)進行各種類型的修改得到,因此與源代碼ype1-4 類型的克隆函數(shù)對。Linux-4.9.10 和 JDK1.8.0_141 源的信息如表 6-7 所示。.3 節(jié)對克隆檢測模塊的測試結果,測試工作設置粗粒度檢測特征差異率閾值 T1 和功能量化特征差異率閾值 T2 均為 0數(shù)相似度閾值 S 為 0.7,以保證克隆檢測工具具有較好的d 的克隆檢測粒度為函數(shù)級別,并設定檢測模式為 Type3-對 Type1-3 三種類型的克隆進行檢測),設置 SimCad 的克,檢測級別設置為 Type1+Type2+Type3。本工具對 Lin141 的測試結果分別如圖 6-7 和圖 6-8 所示。
本文編號:3329815
【文章來源】:電子科技大學四川省 211工程院校 985工程院校 教育部直屬院校
【文章頁數(shù)】:93 頁
【學位級別】:碩士
【部分圖文】:
克隆代碼檢測工具的檢測流程
代碼函數(shù)集/類集中函數(shù)/類的歸一化處理,包括對選擇型語句和循環(huán)型語句的歸一化,使得源代碼中的選擇型語句和循環(huán)型語句分別具有統(tǒng)一形式,這對于實現(xiàn)源代碼中 Type4 類型克隆的檢測具有重要意義。歸一化處理后的源代碼函數(shù)集作為粗粒度檢測模塊的輸入。c) 粗粒度檢測模塊:粗粒度檢測模塊首先提取源代碼函數(shù)集中每個函數(shù)的函數(shù)體量化特征,然后比較函數(shù)對中兩個函數(shù)的函數(shù)體量化特征,將函數(shù)體量化特征差異率高于差異率閾值的函數(shù)對判定為非克隆函數(shù)對,排除在后續(xù)檢測流程之外,將特征差異率低于差異率閾值的函數(shù)對判定為潛在克隆函數(shù)對,并輸入到細粒度檢測模塊進行最終判定。d) 細粒度檢測模塊:細粒度檢測模塊基于 LCS 算法計算函數(shù)對/類對中兩個函數(shù)/類的最長公共子序列長度,并以此計算兩個函數(shù)/類彼此的相似度,彼此相似度均高于相似度閾值的函數(shù)對/類對被判定為克隆函數(shù)對/克隆類對。源代碼中檢測到的克隆函數(shù)對/克隆類對最終會記錄在 XML 文件中,形成克隆代碼報告。細粒度檢測模塊對于 Type1-4 類型的克隆代碼均具有良好的檢測效果。
電子科技大學碩士學位論文各克隆檢測工具對源程序語言的支持情況,測試工作選取.0_141 作為測試對象。為測試工具對于各類型克隆代碼的檢地在 Linux-4.9.10 和 JDK1.8.0_141 源代碼中注入了若干函源代碼中的函數(shù)進行各種類型的修改得到,因此與源代碼ype1-4 類型的克隆函數(shù)對。Linux-4.9.10 和 JDK1.8.0_141 源的信息如表 6-7 所示。.3 節(jié)對克隆檢測模塊的測試結果,測試工作設置粗粒度檢測特征差異率閾值 T1 和功能量化特征差異率閾值 T2 均為 0數(shù)相似度閾值 S 為 0.7,以保證克隆檢測工具具有較好的d 的克隆檢測粒度為函數(shù)級別,并設定檢測模式為 Type3-對 Type1-3 三種類型的克隆進行檢測),設置 SimCad 的克,檢測級別設置為 Type1+Type2+Type3。本工具對 Lin141 的測試結果分別如圖 6-7 和圖 6-8 所示。
本文編號:3329815
本文鏈接:http://sikaile.net/kejilunwen/ruanjiangongchenglunwen/3329815.html
最近更新
教材專著