[發明專利]一種基于索引的Java軟件代碼克隆檢測方法有效
| 申請號: | 201510043006.1 | 申請日: | 2015-01-28 |
| 公開(公告)號: | CN104572471B | 公開(公告)日: | 2017-10-03 |
| 發明(設計)人: | 俞東進;舒翔;陳真理;王杰 | 申請(專利權)人: | 杭州電子科技大學 |
| 主分類號: | G06F11/36 | 分類號: | G06F11/36;G06F21/12 |
| 代理公司: | 浙江杭州金通專利事務所有限公司33100 | 代理人: | 王佳健 |
| 地址: | 310018 浙*** | 國省代碼: | 浙江;33 |
| 權利要求書: | 查看更多 | 說明書: | 查看更多 |
| 摘要: | |||
| 搜索關鍵詞: | 一種 基于 索引 java 軟件 代碼 克隆 檢測 方法 | ||
1.一種基于索引的Java軟件代碼克隆檢測方法,其特征在于該方法的具體步驟是:
步驟(1).在通用計算機上設置單獨的鍵值數據庫,用于存放全局代碼段物理索引GI1和全局相似代碼段物理索引GI2,以及全局輔助物理索引SI,以上三個索引均為鍵值對結構;
步驟(2).以可用內存為限,依次讀入Java軟件中的每個源文件f的源代碼至通用計算機內存,通過詞法分析將源代碼中的每行語句解析為詞項序列,再通過歸一化操作將詞項序列轉換為字符序列表示,得到每個文件f對應的“語句行號→字符序列”鍵值對集合Mapf,讀入文件f的源代碼的同時將“文件路徑FNf→文件最新時間戳”鍵值對加入SI,其中文件路徑FNf為文件f的全路徑,包括文件名和擴展名;
步驟(3).遍歷Mapf,將其中每隔L行的字符序列作為一個代碼段并計算該字符序列的代碼段信息摘要sh,建立“文件路徑FNf→代碼段起始行,代碼段終止行,代碼段信息摘要sh”鍵值對并加入GI1,建立“代碼段信息摘要sh→文件路徑FNf,代碼段起始行,代碼段終止行”鍵值對并加入GI2,重復步驟(2)和(3)至軟件中的所有源文件都已處理完畢;
步驟(4).在需要檢測克隆代碼的時候,從待檢測的源文件集合中讀入每個源文件f的源代碼至通用計算機內存,通過詞法分析將源代碼中的每行語句解析為詞項序列,再通過歸一化操作將詞項序列轉換為字符序列表示,得到每個文件f對應的“語句行號→字符序列”鍵值對集合Mapf,讀入f的同時建立“文件路徑FNf→文件最新時間戳TS1”鍵值對;
步驟(5).從SI中取出與源文件f對應的文件時間戳TS2,若TS1=TS2,即源文件f未被修改,則從GI1中取得源文件f的文件路徑FNf對應的值集合記為S,轉入步驟(8);否則,在SI中更新源文件f對應的文件時間戳為TS1,并遍歷Mapf,將其中每隔L行的字符序列作為一個代碼段并計算該字符序列的代碼段信息摘要sh,建立“文件路徑FNf→代碼段起始行,代碼段終止行,代碼段信息摘要sh”鍵值對集合Setf,并將鍵值對集合Setf中該文件路徑FNf對應的值部分加入臨時值集合value1;
步驟(6).取出GI1中與FNf對應的值集合并記為value2,將value1和value2做差集運算得到新增的值集合valuea;遍歷valuea,取出其中每個元素的代碼段信息摘要sh,建立“代碼段信息摘要sh→文件路徑FNf,代碼段起始行,代碼段終止行”鍵值對并將其加入GI2;
步驟(7).將value2和value1做差集運算得到過期的值集合valued,遍歷valued,取出其中每個元素的代碼段信息摘要sh,并在GI2中找到對應的“代碼段信息摘要→文件路徑FNf,代碼段起始行,代碼段終止行”鍵值對將其刪除,在GI1中刪除與文件路徑FNf對應的鍵值對,并將鍵值對集合Setf合并至GI1,記value1為S;
步驟(8).遍歷集合S中的每個元素獲取該元素的代碼段信息摘要sh,在GI2中查找和代碼段信息摘要sh匹配的鍵,并獲得該鍵對應的值集合C,從C中的每一個元素中可以獲得源文件f克隆代碼段所在文件名、代碼段起始行號和終止行號;
步驟(9).重復步驟(4)、(5)、(6)、(7)、(8),至待檢測的源文件集合中的所有源文件都已處理完畢。
該專利技術資料僅供研究查看技術是否侵權等信息,商用須獲得專利權人授權。該專利全部權利屬于杭州電子科技大學,未經杭州電子科技大學許可,擅自商用是侵權行為。如果您想購買此專利、獲得商業授權和技術合作,請聯系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/201510043006.1/1.html,轉載請聲明來源鉆瓜專利網。
- 上一篇:一種微小差分電容測量電路
- 下一篇:一種高頻水冷變壓器





