[发明专利]一种基于子块过滤的分布式代码克隆检测与搜索方法、系统及介质有效
申请号: | 202011078655.2 | 申请日: | 2020-10-10 |
公开(公告)号: | CN112148359B | 公开(公告)日: | 2022-07-05 |
发明(设计)人: | 任怡;杨立明;谭郁松;汪哲;李宝;阳国贵;黄辰林;魏旭鹏;周洁;陈梓榕;王瑞;董攀;张建锋;王晓川;丁滟;谭霜;蹇松雷 | 申请(专利权)人: | 中国人民解放军国防科技大学 |
主分类号: | G06F8/75 | 分类号: | G06F8/75;G06F16/31;G06F16/33 |
代理公司: | 湖南兆弘专利事务所(普通合伙) 43008 | 代理人: | 谭武艺 |
地址: | 410073 湖南*** | 国省代码: | 湖南;43 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 基于 过滤 分布式 代码 克隆 检测 搜索 方法 系统 介质 | ||
1.一种基于子块过滤的分布式代码克隆检测与搜索方法,其特征在于,包括:
1)对用户代码和代码库源代码分别分组并行进行预加工、分块为代码块转换Token并统计Token的频率,得到包含Token及其频率信息的中间文件;
2)根据所有中间文件中的Token及其频率信息并行统计汇总建立全局Token频率表;
3)将代码库源代码的代码块利用全局Token频率表分组并行处理,建立索引得到索引库;
4)利用子块过滤机制,从用户代码中提取出关键字查询索引库,得到用户代码的代码块所对应的候选集;
5)针对用户代码中的每一个代码块,计算该代码块与其对应的候选集中的每一个候选代码块之间的相似度,若相似度超过预设则判定该代码块、候选代码块对为克隆对;
步骤4)的步骤包括:
4.1)读取索引库中的索引并划分建立m个索引子库I0, I1, ..., Im-1;
4.2)加载用户代码,计算用户代码中各代码块Token序列长度L与相似性阈值s的乘积L*s,选取使用频率较低的L*s个Token作为查询关键字,提取出关键字中的每个Token;
4.3)采用查询关键字中的每个Token进行用户查询,并行地查询各个索引子库,得到用户代码的代码块所对应的候选集,所述候选集包括一个或多个候选代码块。
2.根据权利要求1所述的基于子块过滤的分布式代码克隆检测与搜索方法,其特征在于,步骤1)中分组进行预加工、分块为代码块转换Token并统计Token的频率的步骤包括:
1.1)将源文件进行分组得到多个源文件分组,分别将每个源文件分组输入到一个映射器Mapper中;
1.2)通过映射器Mapper对输入的源文件分组依次进行下述处理:扫描预加工,所述扫描预加工包括去除注释、删除空格、制表符、换行符、标识符、变量重命名、字符串常量和函数调用替换中的至少一种操作;按照指定的函数级或文件级等分块粒度对源代码进行分块为代码块,并对代码块进行编号;利用词法分析工具对完成分块的源文件分组进行词法分析,并转换成Token序列;统计该源文件分组中各个Token的频率并表示为频率二元组Token,频率,将该源文件分组中所有Token的频率二元组输出到中间文件。
3.根据权利要求2所述的基于子块过滤的分布式代码克隆检测与搜索方法,其特征在于,步骤1.1)的步骤包括将所有源文件的文件路径写入一个路径文件,再对路径文件进行划分得到多个分组,分别将每个分组输入到一个映射器Mapper中,使得每一个映射器Mapper根据路径读取多个源文件。
4.根据权利要求1所述的基于子块过滤的分布式代码克隆检测与搜索方法,其特征在于,步骤2)的步骤包括:
2.1)将用户代码和代码库源代码得到的所有中间文件进行分片得到中间文件分片,分别将每个中间文件分片输入到一个映射器Mapper中;
2.2)通过映射器Mapper对输入的中间文件分片依次进行下述处理:首先统计该中间文件分片中各个Token的频率得到Token,频率键值对;然后按照对Token进行排序和汇总,相同的Token会被合并到一个新的键值对Token,频率中;
2.3)读取合并后的键值对Token,频率,求和得出每个Token的总频率形成全局Token频率表,所述全局Token频率表包括每个Token及其总频率。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于中国人民解放军国防科技大学,未经中国人民解放军国防科技大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202011078655.2/1.html,转载请声明来源钻瓜专利网。