[發明專利]云環境下基于Java字節碼的多粒度代碼克隆檢測方法有效
| 申請號: | 201710156441.4 | 申請日: | 2017-03-16 |
| 公開(公告)號: | CN106919403B | 公開(公告)日: | 2019-12-13 |
| 發明(設計)人: | 俞東進;陳耀旺 | 申請(專利權)人: | 杭州鹿徑科技有限公司 |
| 主分類號: | G06F8/75 | 分類號: | G06F8/75 |
| 代理公司: | 33272 杭州奧創知識產權代理有限公司 | 代理人: | 王佳健 |
| 地址: | 310051 浙江省杭州市濱江*** | 國省代碼: | 浙江;33 |
| 權利要求書: | 查看更多 | 說明書: | 查看更多 |
| 摘要: | |||
| 搜索關鍵詞: | 環境 基于 java 字節 粒度 代碼 克隆 檢測 方法 | ||
1.云環境下基于Java字節碼的多粒度代碼克隆檢測方法,其特征在于包括如下步驟:
步驟(1)獲取云環境下分布于不同地點的Java源代碼,編譯得到它們的字節碼文件即.class文件,并通過javap命令將.class文件轉換為txt格式文件;
步驟(2)提取步驟(1)中所得到的txt格式文件中的方法與代碼塊,其中,通過直接讀取每個方法所對應的字節碼指令提取方法,形成方法粒度;通過控制轉移指令分析提取代碼塊,形成代碼塊粒度;
步驟(3)根據Java字節碼指令的分類構建字節碼指令的分類層次架構并進行編碼,該架構主要分為三層:第一層是Java字節碼指令中除Type之外的其余九個大類,第二層是對每個大類進行的詳細子類劃分,第三層則是對應的字節碼指令;
步驟(4)對步驟(2)所提取出的兩種粒度的代碼段進行特征提取,主要提取的特征包括指令序列IS=(I1,I2,I3,...,Ii,...,Ik)與方法調用序列MCS={M1,M2,M3,...,Mi,...,Mr},其中i、k、r為自然數;
在特征提取之后使用字節碼分類層次架構對指令序列進行歸一化處理,將指令序列轉化為一級指令序列與二級指令序列,其中一級指令序列對應分類層次架構中的第一層Java字節碼指令大類,二級指令序列對應分類層次架構中的第二層Java字節碼指令子類;
步驟(5)對于方法或代碼塊,利用步驟(4)得到的指令序列與方法調用序列,分別進行Type-1、Type-2克隆檢測與Type-3克隆檢測。
2.根據權利要求1所述的云環境下基于Java字節碼的多粒度代碼克隆檢測方法,其特征在于:步驟(1)中每個txt格式文件包含一個或多個Java方法,每個方法都由一系列字節碼指令以及相關的方法調用構成。
3.根據權利要求1所述的云環境下基于Java字節碼的多粒度代碼克隆檢測方法,其特征在于:步驟(5)在Type-1、Type-2克隆檢測中,首先計算兩個代碼段的二級指令序列的哈希值,如果哈希值相等,再比較兩個代碼段的方法調用序列,如果方法調用序列中的方法個數相同并且每個方法的參數個數也相同,則這兩個代碼段為代碼克隆實例。
4.根據權利要求1所述的云環境下基于Java字節碼的多粒度代碼克隆檢測方法,其特征在于:步驟(5)在Type-3克隆檢測中,分別計算兩個代碼段的一級指令序列相似度、二級指令序列相似度與方法調用序列相似度,然后對一級指令序列相似度、二級指令序列相似度賦予不同的權值并累計確定指令序列相似度,再將指令序列相似度與方法調用序列相似度賦予不同的權值并累計來確定最終的代碼段相似度值,如果最終的相似度值超過預先設定的閾值,則它們為代碼克隆實例。
5.根據權利要求4所述的云環境下基于Java字節碼的多粒度代碼克隆檢測方法,其特征在于:使用編輯距離計算一級指令序列相似度、二級指令序列相似度。
6.根據權利要求4所述的云環境下基于Java字節碼的多粒度代碼克隆檢測方法,其特征在于:在計算兩個方法調用序列相似度時,采用遞歸的方式將兩個方法調用序列的相似度計算轉換成這兩個方法調用序列中每個方法所對應的代碼段的相似度的計算。
該專利技術資料僅供研究查看技術是否侵權等信息,商用須獲得專利權人授權。該專利全部權利屬于杭州鹿徑科技有限公司,未經杭州鹿徑科技有限公司許可,擅自商用是侵權行為。如果您想購買此專利、獲得商業授權和技術合作,請聯系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/201710156441.4/1.html,轉載請聲明來源鉆瓜專利網。





