一种基于特征元信息的搜索剪枝优化方法技术

技术编号:23049438 阅读:19 留言:0更新日期:2020-01-07 14:40
本发明专利技术属于源代码相似度检测技术领域,具体涉及一种基于特征元信息的搜索剪枝优化方法。其特征在于,包括:代码库过滤步骤,基于待测代码块的代码典型特征过滤代码库中的代码块;特征矩阵匹配步骤,将所述待测代码块的特征矩阵与过滤后代码库中各代码块的特征矩阵一一进行特征匹配。上述技术方案中,基于待测代码块的代码典型特征快速过滤掉代码库中不适合的代码块,减少源代码相似度检测的代码搜索空间。

A search pruning optimization method based on feature element information

【技术实现步骤摘要】
一种基于特征元信息的搜索剪枝优化方法
本专利技术属于源代码相似度检测
,具体涉及一种基于特征元信息的搜索剪枝优化方法。
技术介绍
重复代码(也称为克隆代码)检测是计算机软件开发和维护活动中一项重要的任务,在源代码剽窃检测、软件组件库查询、软件缺陷检测、程序理解等多个领域中都有广泛的应用。例如,申请公布号CN108563952A、申请公布日2018年9月21日公开的文件的病毒检测方法、装置及存储介质,通过获取待测文件的操作代码,将待测文件的操作代码转换为图形文件,并将从图形文件中提取的图片特征组成目标特征矩阵,进而通过将目标特征矩阵与病毒文件的特征矩阵进行匹配,对待测文件进行病毒检测。授权公告号CN103473104B、授权公告日2016年10月05日的专利技术专利公开的一种基于关键词上下文频率矩阵的应用重打包辨别方法,对应用于安卓系统的应用文件进行处理得到smali代码文件,然后对smali代码处理提取操作符序列,统计关键词信息,对每个特定类型的关键词构造上下文相关的特征三元组生产基于上下文频率的特征矩阵,对应用程序的特征矩阵进行两两对比,根据矩阵相似度得到两个应用程序的相似度。上述现有技术中,在进行两个矩阵的匹配时,平方量级的两两比对复杂度太高,不适合海量代码比对的场景。虽然在CN103473104B号专利中通过限制特征矩阵的大小在一定程度上减低了空间的开销,但是特征矩阵匹配的时间复杂度仍然相当高,导致代码特征的匹配效率低。
技术实现思路
本专利技术的设计目的是提供一种基于特征元信息的搜索剪枝优化方法,用于在源代码相似度检测中降低代码块比对空间和特征矩阵匹配的时间复杂度,以提高代码特征的匹配效率。一种基于特征元信息的搜索剪枝优化方法,其特征在于,包括:代码库过滤步骤,基于待测代码块的代码典型特征过滤代码库中的代码块;特征矩阵匹配步骤,将所述待测代码块的特征矩阵与过滤后代码库中各代码块的特征矩阵一一进行特征匹配。上述技术方案中,基于待测代码块的代码典型特征快速过滤掉代码库中不适合的代码块,减少源代码相似度检测的代码搜索空间。作为优选,所述代码典型特征包括代码块的代码行数;所述代码库过滤步骤中基于所述待测代码块的代码行数过滤所述代码库中的代码块。进一步地,基于所述待测代码的代码行数过滤所述代码库中的代码块,包括滤除所述代码库中代码行数与所述待测代码的代码行数之间绝对差大于预设代码行数绝对差的代码块。进一步地,基于所述待测代码行数过滤所述代码库中的代码块,包括滤除所述代码库中代码行数与所述待测代码块的代码行数之间比例差大于预设代码行数比例差的代码块。作为优选,所述代码典型特征包括代码块的变量总数;所述代码库过滤步骤中基于所述待测代码块的变量总数过滤代码库中的代码块。进一步地,基于所述待测代码块的变量总数过滤所述代码库中的代码块,包括滤除所述代码库中变量总数与所述待测代码库的变量总数之间绝对差大于预设变量总数绝对差的代码块。进一步地,基于所述待测代码块的变量总数过滤所述代码库中的代码块,包括滤除所述代码库中变量总数与所述待测代码块的变量总数之间比例差大于预设变量总数比例差的代码块。进一步地,所述特征矩阵匹配步骤中,将所述待测代码块的特征矩阵与某一代码块的特征矩阵进行特征匹配过程中基于所述待测代码块的变量典型特征缩小特征矩阵匹配的对比行范围。进一步地,基于所述待测代码块的变量典型特征缩小特征矩阵匹配的对比行范围,包括根据所述变量典型特征分别对所述待测代码块和所述某一代码块的特征矩阵按行排序,将所述待测代码块的特征矩阵的各行分别与所述某一代码块的特征矩阵中的相同行以及位于该相同行之前和之后特定数量的行进行匹配。基于所述变量典型特征,对于待测代码块的特征矩阵的每行只会与代码库中被比较的代码块的特征矩阵相同行的上下几行进行比较,将特征矩阵匹配的复杂度由O(n2)降为O(kn),缩小了比对行的范围,进一步降低了时间复杂度。进一步地,所述变量典型特征包括代码块中某一变量的被使用次数和出现次数。本专利技术具有下述有益效果:本专利技术在特征矩阵匹配步骤之前根据代码块的代码典型特征,选择与待测代码块接近的代码块,对代码库中的代码块进行过滤,缩小代码块比对空间。然后在特征矩阵匹配阶段,根据变量典型特征对特征矩阵进行按行排序,比对时待测代码块特征矩阵的每行只会与代码库中代码块特征矩阵相同行的上下几行进行比较,缩小比对行范围,进一步降低时间复杂度。附图说明图1实施例一的搜索剪枝优化方法的流程示意图。图2特征矩阵匹配步骤中特征矩阵的匹配示意图。具体实施方式这里使用的术语仅用于描述特定实施例的目的,而不意图限制本专利技术。除非另外定义,否则本文使用的所有术语具有与本专利技术所属领域的普通技术人员通常理解的相同的含义。将进一步理解的是,常用术语应该被解释为具有与其在相关领域和本公开内容中的含义一致的含义。本公开将被认为是本专利技术的示例,并且不旨在将本专利技术限制到特定实施例。本专利技术的一种基于特征元信息的搜索剪枝优化方法,主要应用于源代码相似度检测中,采用本实施例的方法能够降低代码块的比对空间和特征矩阵匹配的时间复杂度,能够提高代码特征的匹配效率。代码克隆有一个特点:如果两段代码是克隆的,它们大部分的典型特征都不会相差太远。因为如果两个代码块在某个特征上非常不同,那么我们就认为它们并不相似。对于每一段代码,我们只需要将其与特征数量比较接近的代码段进行对比。本专利技术基于这个特点设计基于特征元信息的搜索剪枝优化方法,用于快速过滤不适合的代码匹配并减少搜索空间。实施例一一种基于特征元信息的搜索剪枝优化方法,包括:S1代码库过滤步骤,基于待测代码块的代码典型特征过滤代码库中的代码块。S2特征矩阵匹配步骤,将待测代码块的特征矩阵与过滤后代码库中各代码块的特征矩阵一一进行特征匹配。如图1所示,代码库过滤步骤仅选择代码典型特征与待测代码块接近的代码块,用于在特征矩阵匹配步骤之前对代码库中的代码块进行过滤,缩小代码块比对空间。在随后的特征矩阵匹配步骤中,在比对时待测代码块特征矩阵的每行只会与代码库中用于比对的某一代码块的某几行进行比较,缩小比对行范围,从而进一步减低时间复杂度。S1.代码库过滤步骤本专利技术中特征元信息的搜索剪枝优化技术的思想是:如果两个代码块是克隆的,那么它们大部分的典型特征都不会相差太远。例如,它们一共有多少行,一共有多少个变量等。即使有细小的改动,这些特征并不会变化太多,所以是较为稳定的。如果通过步骤S1发现两个代码块在某个代码典型特征上非常不同,那么我们就认为它们并不相似,从而选择跳过之后的S2特征矩阵匹配步骤,以缩小比对空间。本实施例中的代码典型特征包括代码块的代码行数和代码块的变量总数(即代码块中包含的变量总数)。本实施例还为每个代码典型特征设定两个阈值:绝对差和比例差。例如,代码典型特征“代码行数”包括预设代码行数绝对本文档来自技高网...

【技术保护点】
1.一种基于特征元信息的搜索剪枝优化方法,其特征在于,包括:/n代码库过滤步骤,基于待测代码块的代码典型特征过滤代码库中的代码块;/n特征矩阵匹配步骤,将所述待测代码块的特征矩阵与过滤后代码库中各代码块的特征矩阵一一进行特征匹配。/n

【技术特征摘要】
1.一种基于特征元信息的搜索剪枝优化方法,其特征在于,包括:
代码库过滤步骤,基于待测代码块的代码典型特征过滤代码库中的代码块;
特征矩阵匹配步骤,将所述待测代码块的特征矩阵与过滤后代码库中各代码块的特征矩阵一一进行特征匹配。


2.根据权利要求1所述的一种基于特征元信息的搜索剪枝优化方法,其特征在于:
所述代码典型特征包括代码块的代码行数;
所述代码库过滤步骤中基于所述待测代码块的代码行数过滤所述代码库中的代码块。


3.根据权利要求2所述的一种基于特征元信息的搜索剪枝优化方法,其特征在于:
基于所述待测代码的代码行数过滤所述代码库中的代码块,包括滤除所述代码库中代码行数与所述待测代码的代码行数之间绝对差大于预设代码行数绝对差的代码块。


4.根据权利要求2所述的一种基于特征元信息的搜索剪枝优化方法,其特征在于:
基于所述待测代码行数过滤所述代码库中的代码块,包括滤除所述代码库中代码行数与所述待测代码块的代码行数之间比例差大于预设代码行数比例差的代码块。


5.根据权利要求1所述的一种基于特征元信息的搜索剪枝优化方法,其特征在于:
所述代码典型特征包括代码块的变量总数;
所述代码库过滤步骤中基于所述待测代码块的变量总数过滤代码库中的代码块。


6.根据权利要求5所述的一种基于特征...

【专利技术属性】
技术研发人员:程华马良
申请(专利权)人:无锡江南计算技术研究所程华
类型:发明
国别省市:江苏;32

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

1