[发明专利]代码相似性检测方法、装置以及存储介质有效
申请号: | 202110198641.2 | 申请日: | 2021-02-23 |
公开(公告)号: | CN112579155B | 公开(公告)日: | 2021-05-18 |
发明(设计)人: | 高庆;李玫;张世琨;马森 | 申请(专利权)人: | 北京北大软件工程股份有限公司 |
主分类号: | G06F8/75 | 分类号: | G06F8/75 |
代理公司: | 北京华创智道知识产权代理事务所(普通合伙) 11888 | 代理人: | 彭随丽 |
地址: | 100080 北京市海淀区北*** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 代码 相似性 检测 方法 装置 以及 存储 介质 | ||
本发明实施例涉及软件检测领域,公开了一种代码相似性检测方法,主要分为三个阶段,预处理阶段对海量源代码文件进行预处理和特征提取工作,输出相似哈希指纹值;指纹索引阶段则根据上一阶段的结果,采用分段索引策略将指纹切分并重组后存入相似哈希指纹库,建立分段索引便于快速匹配;相似匹配阶段则在对待测工程文件进行处理后生成相似哈希值,根据所述待测工程文件的相似哈希值从所述相似哈希指纹库中分段检索出溯源检测的结果;本发明能够从不同语言常见行的消除这一角度出发来降低行覆盖问题对结果的影响。
技术领域
本发明涉及软件检测领域,具体为一种代码相似性检测方法及系统、装置以及存储介质。
背景技术
现如今,随着软件代码开源化的日益普及,开源代码量正以光速增长。无论是在企业还是科研单位,越来越多的开发者选择拷贝粘贴已有代码以提高软件开发效率。然而,随着软件不断更新,软件功能不断增加,这些重复代码和克隆代码对软件质量、可用性和可维护性的负面影响愈发突显。从开源项目引入的代码降低了软件开发人员对软件系统整体的理解和把控,外来代码与软件系统本身代码之间可能会出现冲突,开源代码中的漏洞也可能会随着代码拷贝被引入到项目中,带来安全隐患。针对此问题,研究人员通常使用代码相似性检测技术来检测软件工程中的相似代码。
自20世纪70年代起,学术界涌现了大量的代码相似性检测工具和方法,广泛应用于代码克隆检测、软件许可证违反检测、软件抄袭检测、漏洞缺陷发现等方向。目前常用的代码相似性检测方法包括:基于指标(metrics-based)、基于文本(text-based)、基于词法(token-based)、基于树(tree-based)和基于图(graph-based)五个层次。 随着开源代码量的不断增加,代码相似性检测的大规模化已成为必然趋势。传统的方法在小规模的数据情景下能够获得比较高的精度,但在有限的硬件条件下,若需要对被测代码进行字符串比较或进行基于词法、语法、语义的分析,再与库中大规模数据进行比对,将会消耗过量的时间。
相似哈希最早由Charikar等人提出,是一种局部敏感哈希LSH(local Sensitivehash)算法。对于传统哈希算法来说,其产生的数字签名结果仅仅提供原始输入相等或是不相等的信息,当输入不相等的情况时,无法额外提供其他内容。即便只对输入内容修改一个空格,也极大可能产生截然不同的签名信息。而通过相似哈希算法,两个源代码文件获取的Simhash指纹不仅仅能表达两者是否相等,还能够记录他们的相似程度。
由于Simhash相似检索的高效性,它在很多领域均有广泛应用。谷歌曾将Simhash用于海量相似网页去重,他们移植的算法在谷歌爬虫爬取的数十亿量级的网页数据库中上获得了较好的测试效果,并被谷歌应用到实际产品中。在克隆分析领域,同样也有Simhash的身影。Uddin等人曾结合Simhash和Nicad两种方法提出了SimCad这一代码克隆簇聚类工具,Qiao等人也曾将Simhash用于汇编代码同源检测中。
由于代码中经常会出现重复词,以词粒度来获取代码相似哈希特征容易出现高频的特征把低频的特征覆盖掉的现象,有人提出以代码行为粒度进行特征累加,并且在预处理中筛除了纯符号行和空行,对相似哈希在代码检测方面的应用做了进一步改进,如图1所示,其算法流程大致如下:1)将输入代码文件进行预处理和分行,筛除纯符号行和空行;2)对于每一行,使用传统的哈希方法获得一个指定位数的签名值;3)对于每一个特征的每一位,假如该位为1,则将其置为其权重值,若该位为0则置为其权重的相反数;4)将每一个特征都逐位相加,得到一个结果向量;5)降维,将结果向量的每一位进行置换,正数置换为1,负数置换为0,即可得到最终的指纹值。
经过实验分析和统计,发现现有的相似哈希方法在实际工程上存在高频行特征对低频行特征的覆盖问题,导致结果精确度极低,行覆盖现象主要出现在以下几种情况:
在代码中频繁出现的一些包含关键字的代码行,例如“break”“return;”“try{”。在某些情境下,这些行出现的频率非常高以至于它对结果的影响覆盖了所有其它行的影响。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于北京北大软件工程股份有限公司,未经北京北大软件工程股份有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202110198641.2/2.html,转载请声明来源钻瓜专利网。
- 上一篇:一种建筑墙体整平设备
- 下一篇:一种带有振动捡取功能的输送机