[发明专利]一种基于子块过滤的分布式代码克隆检测与搜索方法、系统及介质有效
申请号: | 202011078655.2 | 申请日: | 2020-10-10 |
公开(公告)号: | CN112148359B | 公开(公告)日: | 2022-07-05 |
发明(设计)人: | 任怡;杨立明;谭郁松;汪哲;李宝;阳国贵;黄辰林;魏旭鹏;周洁;陈梓榕;王瑞;董攀;张建锋;王晓川;丁滟;谭霜;蹇松雷 | 申请(专利权)人: | 中国人民解放军国防科技大学 |
主分类号: | G06F8/75 | 分类号: | G06F8/75;G06F16/31;G06F16/33 |
代理公司: | 湖南兆弘专利事务所(普通合伙) 43008 | 代理人: | 谭武艺 |
地址: | 410073 湖南*** | 国省代码: | 湖南;43 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 基于 过滤 分布式 代码 克隆 检测 搜索 方法 系统 介质 | ||
本发明公开了一种基于子块过滤的分布式代码克隆检测与搜索方法、系统及介质,本发明方法包括对用户代码和代码库源代码分别分组并行进行预处理得到包含Token及其频率信息的中间文件;根据所有中间文件建立全局Token频率表;将代码库源代码的代码块利用全局Token频率表分组并行处理,建立索引得到索引库;利用子块过滤机制,从用户代码中提取出关键字查询索引库,得到用户代码的代码块所对应的候选集;针对用户代码中的每一个代码块,计算该代码块与其对应的候选集中的每一个候选代码块之间的相似度,若相似度超过预设则判定为克隆对。本发明具有检测语言无关的特性,检测和搜索效率高,适用于大规模代码的克隆检测及搜索,支持用户查询代码。
技术领域
本发明涉及分布式计算、以及代码克隆检测与搜索技术领域,具体涉及一种基于子块过滤的分布式代码克隆检测与搜索方法、系统及介质。
背景技术
代码克隆是指将一个软件中的一段代码,直接复制或进行少量修改后,使用到其他软件中,作为后者代码的组成部分。代码克隆产生的原因有很多,主要的来源是开发人员为了降低工作量而进行的克隆,包括对已有的代码片段进行复制和修改,使用现成的开发框架设计模式等。代码克隆非常普遍,现今的代码片段中有5%到20%都包含复制或经过少量修改的克隆代码。高质量开源软件中的代码复用情况更为普遍,超过50%的代码被复用过。各种软件中使用开源组件的情况也很常见。2020年,Synopsys网络安全研究中心对17个行业中超过 1250个商业代码库中的匿名数据进行了开源组件的复用分析和审计,涵盖大数据、企业软件、航空航天、生命科学、医疗保健、金融服务和金融科技、互联网和移动应用等行业。审计结果显示,被审计的代码库中,99%的被扫描代码存在开源组件,有9个在行业的代码库100%包含开源组件。大型软件的代码组成代码复用的现象也十分明显。
代码克隆检测作为一个重要的软件工程领域,旨在自动化地检测一个或多个代码库中功能上等效的代码块或者代码段集合。正是因为存在如此高比例的代码复用,使得代码克隆检测在软件度量、剽窃检测、关注点挖掘、版权侵权检测、软件版本追踪、代码压缩、病毒检测等领域具有广泛而重要的用途。这其中,对于大规模代码的克隆检测应用领域较多,包括剽窃检测、在大型软件库中搜索相似代码段、软件脆弱性分析、新型API的挖掘、API推荐、开源社区软件的克隆关系等。
代码克隆类型众多,目前Bellon等人提出的分类方法被广泛采用。该方法基于代码块之间相似性,按照克隆代码与原代码在词法、语法及语义层面上的区别,将代码克隆分成了以下4个级别:Type-1,克隆代码与原代码之间除了注释与空白之外,没有任何差异;Type-2,克隆代码与原代码之间除了注释与空白之外,只有变量名,变量类型和函数名等存在差别;Type-3,克隆代码与原代码之间的差别在Type-2的基础上,还包括少量语句的增删和修改;Type-4,克隆代码与原代码在词法和语法上不相似,但具有相同的功能,仅在语义上相似。从Type-1到Type-4,克隆代码检测的难度越来越高。
目前,国内外学者提出了多种克隆检测方法,并基于此开发了众多的克隆检测工具。对于克隆检测来说,选取的代码特征将影响克隆检测的类型和性能。根据对源代码信息的利用层次及选取的对应特征的不同,上述方法可分为基于文本、基于标记(Token)、基于语法和基于语义四个类型。随着软件规模的迅速膨胀,针对大规模代码的克隆检测得到了广泛关注。已有的多种克隆检测工具,在大规模代码克隆检测效率等效果上存在不足。此外,相关研究表明,在软件开发过程中,开发人员会进行高频率的代码搜索操作。当前的代码搜索工具,如Google Code Search等,所能提供的检测等级较低,无法处理相似代码的检索及推荐。因此,提供一种快速的代码搜索功能是很有必要的。
发明内容
本发明要解决的技术问题:针对现有技术的上述问题,提供一种基于子块过滤的分布式代码克隆检测与搜索方法、系统及介质,本发明具有检测语言无关的特性,检测和搜索效率高,适用于大规模代码的克隆检测及搜索,支持用户查询代码。
为了解决上述技术问题,本发明采用的技术方案为:
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于中国人民解放军国防科技大学,未经中国人民解放军国防科技大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202011078655.2/2.html,转载请声明来源钻瓜专利网。