[发明专利]一种基于索引的Java软件代码克隆检测方法有效
申请号: | 201510043006.1 | 申请日: | 2015-01-28 |
公开(公告)号: | CN104572471B | 公开(公告)日: | 2017-10-03 |
发明(设计)人: | 俞东进;舒翔;陈真理;王杰 | 申请(专利权)人: | 杭州电子科技大学 |
主分类号: | G06F11/36 | 分类号: | G06F11/36;G06F21/12 |
代理公司: | 浙江杭州金通专利事务所有限公司33100 | 代理人: | 王佳健 |
地址: | 310018 浙*** | 国省代码: | 浙江;33 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | 本发明公开了一种基于索引的Java软件代码克隆检测方法。本发明采用缓存代码段信息和内存索引比较相结合的策略,在克隆检测方法初启动时,预先将每个源文件的代码段信息存储在内存索引和中,之后利用时间复杂度为的索引查找方法进行内存比较。该方法通过缓存代码段信息解决了传统方法每次运行克隆检测时都需要重建数据结构造成的低效率的问题,通过基于内存索引比较的方式有效解决了传统方法由于两两比较所带来的时间开销较大的问题。 | ||
搜索关键词: | 一种 基于 索引 java 软件 代码 克隆 检测 方法 | ||
【主权项】:
一种基于索引的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),至待检测的源文件集合中的所有源文件都已处理完毕。
下载完整专利技术内容需要扣除积分,VIP会员可以免费下载。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于杭州电子科技大学,未经杭州电子科技大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/patent/201510043006.1/,转载请声明来源钻瓜专利网。
- 上一篇:一种微小差分电容测量电路
- 下一篇:一种高频水冷变压器