代码相似性检测方法、装置以及存储介质制造方法及图纸

技术编号:27876633 阅读:32 留言:0更新日期:2021-03-31 00:53
本发明专利技术实施例涉及软件检测领域,公开了一种代码相似性检测方法,主要分为三个阶段,预处理阶段对海量源代码文件进行预处理和特征提取工作,输出相似哈希指纹值;指纹索引阶段则根据上一阶段的结果,采用分段索引策略将指纹切分并重组后存入相似哈希指纹库,建立分段索引便于快速匹配;相似匹配阶段则在对待测工程文件进行处理后生成相似哈希值,根据所述待测工程文件的相似哈希值从所述相似哈希指纹库中分段检索出溯源检测的结果;本发明专利技术能够从不同语言常见行的消除这一角度出发来降低行覆盖问题对结果的影响。

【技术实现步骤摘要】
代码相似性检测方法、装置以及存储介质
本专利技术涉及软件检测领域,具体为一种代码相似性检测方法及系统、装置以及存储介质。
技术介绍
现如今,随着软件代码开源化的日益普及,开源代码量正以光速增长。无论是在企业还是科研单位,越来越多的开发者选择拷贝粘贴已有代码以提高软件开发效率。然而,随着软件不断更新,软件功能不断增加,这些重复代码和克隆代码对软件质量、可用性和可维护性的负面影响愈发突显。从开源项目引入的代码降低了软件开发人员对软件系统整体的理解和把控,外来代码与软件系统本身代码之间可能会出现冲突,开源代码中的漏洞也可能会随着代码拷贝被引入到项目中,带来安全隐患。针对此问题,研究人员通常使用代码相似性检测技术来检测软件工程中的相似代码。自20世纪70年代起,学术界涌现了大量的代码相似性检测工具和方法,广泛应用于代码克隆检测、软件许可证违反检测、软件抄袭检测、漏洞缺陷发现等方向。目前常用的代码相似性检测方法包括:基于指标(metrics-based)、基于文本(text-based)、基于词法(token-based)、基于树(tree-ba本文档来自技高网...

【技术保护点】
1.一种代码相似性检测方法,其特征在于,包括如下步骤:/nS101:预处理阶段,对海量源代码文件进行预处理和特征提取工作,输出相似哈希指纹值;/nS102:指纹索引阶段,根据所述预处理阶段的结果,采用分段索引策略将指纹切分并重组后存入相似哈希指纹库,建立分段索引便于快速匹配;/nS103:相似匹配阶段,对待测工程文件进行处理后生成相似哈希值,根据所述待测工程文件的相似哈希值从所述相似哈希指纹库中分段检索出溯源检测的结果。/n

【技术特征摘要】
1.一种代码相似性检测方法,其特征在于,包括如下步骤:
S101:预处理阶段,对海量源代码文件进行预处理和特征提取工作,输出相似哈希指纹值;
S102:指纹索引阶段,根据所述预处理阶段的结果,采用分段索引策略将指纹切分并重组后存入相似哈希指纹库,建立分段索引便于快速匹配;
S103:相似匹配阶段,对待测工程文件进行处理后生成相似哈希值,根据所述待测工程文件的相似哈希值从所述相似哈希指纹库中分段检索出溯源检测的结果。


2.根据权利要求1所述的一种代码相似性检测方法,其特征在于,步骤S101包括如下子步骤:
S1011,代码预处理:所述源代码文件的代码中包括无关因素,所述无关因素包括空行、空格、注释,将代码进行统一的格式化处理,去除所述无关因素;
S1012,特征提取:预先通过对多种常用语言的开源项目文件进行常用行统计,并以每种语言按频次排序的前N行作为常见行列表,N为预先设定的阈值,根据所述源代码文件的后缀名判断所属语言,从常见行列表中选取对应语言的常见行筛选器,并将所述源代码文件中包含在筛选器中的对应行全部筛除,剩下的每一行作为所述源代码文件的特征;
S1013,散列处理:使用散列算法,将源代码文件的每一个特征计算出一个对应的散列值,所述散列值为64位的二进制数串;
S1014,加权求和:以每个特征出现的频次作为特征的权重进行加权求和,散列值每一位的0或者1决定了其与权重值是正相乘还是负相乘,将加权后的每一个散列值逐位相加即可得到结果序列串;
S1015,降维:对加权求和获得的结果序列串进行变换,对每一位若为正数则变换为1,否则变换为0,得到最终的相似哈希指纹值。


3.根据权利要求1所述的一种代码相似性检测方法,其特征在于,步骤S102中,将每个指纹分成5段,并通过排列组合将其重组作为索引分别记录在相似哈希指纹库的字段中。


4.根据权利要求1所述的一种代码相似性检测方法,其特征在于,步骤S103中,首先,与预处理阶段对应,对待测工程文件进行标准化、特征提取以及相似哈希指纹生成的操作;然后,与指纹索引阶段对应,将待查询的相似哈希指纹值分成5段,两两排列组合后得到10个索引片段,分别与数据库中其对应的字段中进行精确匹配,匹配上的文件即为可能与待测文件相似的文件;最后,对所有候选序列中的哈希值作进一步的海明距离计算,并汇总最终计算出来的结果。


5.一种基于相似哈希算法的代码相似性检测系统,其特征在于,包括如下模块:
预处理模块,用于对海量源代码文件进行预处理和特征提取工作,输出相似哈希指纹值;
指纹索引模块,用于根据所述预处理模块的结果,采用分段索引策略将指纹切分并重组后存入相似哈希...

【专利技术属性】
技术研发人员:高庆李玫张世琨马森
申请(专利权)人:北京北大软件工程股份有限公司
类型:发明
国别省市:北京;11

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1