【技术实现步骤摘要】
一种基于子块过滤的分布式代码克隆检测与搜索方法、系统及介质
本专利技术涉及分布式计算、以及代码克隆检测与搜索
,具体涉及一种基于子块过滤的分布式代码克隆检测与搜索方法、系统及介质。
技术介绍
代码克隆是指将一个软件中的一段代码,直接复制或进行少量修改后,使用到其他软件中,作为后者代码的组成部分。代码克隆产生的原因有很多,主要的来源是开发人员为了降低工作量而进行的克隆,包括对已有的代码片段进行复制和修改,使用现成的开发框架设计模式等。代码克隆非常普遍,现今的代码片段中有5%到20%都包含复制或经过少量修改的克隆代码。高质量开源软件中的代码复用情况更为普遍,超过50%的代码被复用过。各种软件中使用开源组件的情况也很常见。2020年,Synopsys网络安全研究中心对17个行业中超过1250个商业代码库中的匿名数据进行了开源组件的复用分析和审计,涵盖大数据、企业软件、航空航天、生命科学、医疗保健、金融服务和金融科技、互联网和移动应用等行业。审计结果显示,被审计的代码库中,99%的被扫描代码存在开源组件,有9个在行业的代码库100%包含开源组件。大型软件的代码组成代码复用的现象也十分明显。代码克隆检测作为一个重要的软件工程领域,旨在自动化地检测一个或多个代码库中功能上等效的代码块或者代码段集合。正是因为存在如此高比例的代码复用,使得代码克隆检测在软件度量、剽窃检测、关注点挖掘、版权侵权检测、软件版本追踪、代码压缩、病毒检测等领域具有广泛而重要的用途。这其中,对于大规模代码的克隆检测应用领域较多,包括剽窃
【技术保护点】
1.一种基于子块过滤的分布式代码克隆检测与搜索方法,其特征在于,包括:/n1)对用户代码和代码库源代码分别分组并行进行预加工、分块为代码块转换Token并统计Token的频率,得到包含Token及其频率信息的中间文件;/n2)根据所有中间文件中的Token及其频率信息并行统计汇总建立全局Token频率表;/n3)将代码库源代码的代码块利用全局Token频率表分组并行处理,建立索引得到索引库;/n4)利用子块过滤机制,从用户代码中提取出关键字查询索引库,得到用户代码的代码块所对应的候选集;/n5)针对用户代码中的每一个代码块,计算该代码块与其对应的候选集中的每一个候选代码块之间的相似度,若相似度超过预设则判定该代码块、候选代码块对为克隆对。/n
【技术特征摘要】
1.一种基于子块过滤的分布式代码克隆检测与搜索方法,其特征在于,包括:
1)对用户代码和代码库源代码分别分组并行进行预加工、分块为代码块转换Token并统计Token的频率,得到包含Token及其频率信息的中间文件;
2)根据所有中间文件中的Token及其频率信息并行统计汇总建立全局Token频率表;
3)将代码库源代码的代码块利用全局Token频率表分组并行处理,建立索引得到索引库;
4)利用子块过滤机制,从用户代码中提取出关键字查询索引库,得到用户代码的代码块所对应的候选集;
5)针对用户代码中的每一个代码块,计算该代码块与其对应的候选集中的每一个候选代码块之间的相似度,若相似度超过预设则判定该代码块、候选代码块对为克隆对。
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及其总频率。
5.根据权利要求1所述的基于子块过滤的分布式代码克隆检测与搜索方法,其特征在于,步骤3)的步骤包括:
3.1)将代码库源代码的代码块进行分组得到代码块分组,分别将每个代码块分组输入到一个映射器Mapper中;
3.2)通过映射器Mapper对输入的代码块分组依次进行下述处理:首先根据全局Token频率表对输入该映射器...
【专利技术属性】
技术研发人员:任怡,杨立明,谭郁松,汪哲,李宝,阳国贵,黄辰林,魏旭鹏,周洁,陈梓榕,王瑞,董攀,张建锋,王晓川,丁滟,谭霜,蹇松雷,
申请(专利权)人:中国人民解放军国防科技大学,
类型:发明
国别省市:湖南;43
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。