CN110659064B - 一种基于特征元信息的搜索剪枝优化方法 - Google Patents
一种基于特征元信息的搜索剪枝优化方法 Download PDFInfo
- Publication number
- CN110659064B CN110659064B CN201910857079.2A CN201910857079A CN110659064B CN 110659064 B CN110659064 B CN 110659064B CN 201910857079 A CN201910857079 A CN 201910857079A CN 110659064 B CN110659064 B CN 110659064B
- Authority
- CN
- China
- Prior art keywords
- code
- detected
- blocks
- filtering
- feature
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/75—Structural analysis for program understanding
- G06F8/751—Code clone detection
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Image Analysis (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明属于源代码相似度检测技术领域,具体涉及一种基于特征元信息的搜索剪枝优化方法。其特征在于,包括:代码库过滤步骤,基于待测代码块的代码典型特征过滤代码库中的代码块;特征矩阵匹配步骤,将所述待测代码块的特征矩阵与过滤后代码库中各代码块的特征矩阵一一进行特征匹配。上述技术方案中,基于待测代码块的代码典型特征快速过滤掉代码库中不适合的代码块,减少源代码相似度检测的代码搜索空间。
Description
技术领域
本发明属于源代码相似度检测技术领域,具体涉及一种基于特征元信息的搜索剪枝优化方法。
背景技术
重复代码(也称为克隆代码)检测是计算机软件开发和维护活动中一项重要的任务,在源代码剽窃检测、软件组件库查询、软件缺陷检测、程序理解等多个领域中都有广泛的应用。
例如,申请公布号CN 108563952 A、申请公布日2018年9月21日公开的文件的病毒检测方法、装置及存储介质,通过获取待测文件的操作代码,将待测文件的操作代码转换为图形文件,并将从图形文件中提取的图片特征组成目标特征矩阵,进而通过将目标特征矩阵与病毒文件的特征矩阵进行匹配,对待测文件进行病毒检测。
授权公告号CN 103473104 B、授权公告日2016年10月05日的发明专利公开的一种基于关键词上下文频率矩阵的应用重打包辨别方法,对应用于安卓系统的应用文件进行处理得到smali代码文件,然后对smali代码处理提取操作符序列,统计关键词信息,对每个特定类型的关键词构造上下文相关的特征三元组生产基于上下文频率的特征矩阵,对应用程序的特征矩阵进行两两对比,根据矩阵相似度得到两个应用程序的相似度。
上述现有技术中,在进行两个矩阵的匹配时,平方量级的两两比对复杂度太高,不适合海量代码比对的场景。虽然在CN103473104B号专利中通过限制特征矩阵的大小在一定程度上减低了空间的开销,但是特征矩阵匹配的时间复杂度仍然相当高,导致代码特征的匹配效率低。
发明内容
本发明的设计目的是提供一种基于特征元信息的搜索剪枝优化方法,用于在源代码相似度检测中降低代码块比对空间和特征矩阵匹配的时间复杂度,以提高代码特征的匹配效率。
一种基于特征元信息的搜索剪枝优化方法,其特征在于,包括:代码库过滤步骤,基于待测代码块的代码典型特征过滤代码库中的代码块;特征矩阵匹配步骤,将所述待测代码块的特征矩阵与过滤后代码库中各代码块的特征矩阵一一进行特征匹配。
上述技术方案中,基于待测代码块的代码典型特征快速过滤掉代码库中不适合的代码块,减少源代码相似度检测的代码搜索空间。
作为优选,所述代码典型特征包括代码块的代码行数;所述代码库过滤步骤中基于所述待测代码块的代码行数过滤所述代码库中的代码块。
进一步地,基于所述待测代码的代码行数过滤所述代码库中的代码块,包括滤除所述代码库中代码行数与所述待测代码的代码行数之间绝对差大于预设代码行数绝对差的代码块。
进一步地,基于所述待测代码行数过滤所述代码库中的代码块,包括滤除所述代码库中代码行数与所述待测代码块的代码行数之间比例差大于预设代码行数比例差的代码块。
作为优选,所述代码典型特征包括代码块的变量总数;所述代码库过滤步骤中基于所述待测代码块的变量总数过滤代码库中的代码块。
进一步地,基于所述待测代码块的变量总数过滤所述代码库中的代码块,包括滤除所述代码库中变量总数与所述待测代码库的变量总数之间绝对差大于预设变量总数绝对差的代码块。
进一步地,基于所述待测代码块的变量总数过滤所述代码库中的代码块,包括滤除所述代码库中变量总数与所述待测代码块的变量总数之间比例差大于预设变量总数比例差的代码块。
进一步地,所述特征矩阵匹配步骤中,将所述待测代码块的特征矩阵与某一代码块的特征矩阵进行特征匹配过程中基于所述待测代码块的变量典型特征缩小特征矩阵匹配的对比行范围。
进一步地,基于所述待测代码块的变量典型特征缩小特征矩阵匹配的对比行范围,包括根据所述变量典型特征分别对所述待测代码块和所述某一代码块的特征矩阵按行排序,将所述待测代码块的特征矩阵的各行分别与所述某一代码块的特征矩阵中的相同行以及位于该相同行之前和之后特定数量的行进行匹配。基于所述变量典型特征,对于待测代码块的特征矩阵的每行只会与代码库中被比较的代码块的特征矩阵相同行的上下几行进行比较,将特征矩阵匹配的复杂度由O(n2)降为O(kn),缩小了比对行的范围,进一步降低了时间复杂度。
进一步地,所述变量典型特征包括代码块中某一变量的被使用次数和出现次数。
本发明具有下述有益效果:
本发明在特征矩阵匹配步骤之前根据代码块的代码典型特征,选择与待测代码块接近的代码块,对代码库中的代码块进行过滤,缩小代码块比对空间。然后在特征矩阵匹配阶段,根据变量典型特征对特征矩阵进行按行排序,比对时待测代码块特征矩阵的每行只会与代码库中代码块特征矩阵相同行的上下几行进行比较,缩小比对行范围,进一步降低时间复杂度。
附图说明
图1 实施例一的搜索剪枝优化方法的流程示意图。
图2 特征矩阵匹配步骤中特征矩阵的匹配示意图。
具体实施方式
这里使用的术语仅用于描述特定实施例的目的,而不意图限制本发明。 除非另外定义,否则本文使用的所有术语具有与本发明所属领域的普通技术人员通常理解的相同的含义。 将进一步理解的是,常用术语应该被解释为具有与其在相关领域和本公开内容中的含义一致的含义。本公开将被认为是本发明的示例,并且不旨在将本发明限制到特定实施例。
本发明的一种基于特征元信息的搜索剪枝优化方法,主要应用于源代码相似度检测中,采用本实施例的方法能够降低代码块的比对空间和特征矩阵匹配的时间复杂度,能够提高代码特征的匹配效率。
代码克隆有一个特点:如果两段代码是克隆的,它们大部分的典型特征都不会相差太远。因为如果两个代码块在某个特征上非常不同,那么我们就认为它们并不相似。对于每一段代码,我们只需要将其与特征数量比较接近的代码段进行对比。本发明基于这个特点设计基于特征元信息的搜索剪枝优化方法,用于快速过滤不适合的代码匹配并减少搜索空间。
实施例一
一种基于特征元信息的搜索剪枝优化方法,包括:
S1代码库过滤步骤,基于待测代码块的代码典型特征过滤代码库中的代码块。
S2特征矩阵匹配步骤,将待测代码块的特征矩阵与过滤后代码库中各代码块的特征矩阵一一进行特征匹配。
如图1所示,代码库过滤步骤仅选择代码典型特征与待测代码块接近的代码块,用于在特征矩阵匹配步骤之前对代码库中的代码块进行过滤,缩小代码块比对空间。在随后的特征矩阵匹配步骤中,在比对时待测代码块特征矩阵的每行只会与代码库中用于比对的某一代码块的某几行进行比较,缩小比对行范围,从而进一步减低时间复杂度。
S1. 代码库过滤步骤
本发明中特征元信息的搜索剪枝优化技术的思想是:如果两个代码块是克隆的,那么它们大部分的典型特征都不会相差太远。例如,它们一共有多少行,一共有多少个变量等。即使有细小的改动,这些特征并不会变化太多,所以是较为稳定的。如果通过步骤S1发现两个代码块在某个代码典型特征上非常不同,那么我们就认为它们并不相似,从而选择跳过之后的S2特征矩阵匹配步骤,以缩小比对空间。
本实施例中的代码典型特征包括代码块的代码行数和代码块的变量总数(即代码块中包含的变量总数)。本实施例还为每个代码典型特征设定两个阈值:绝对差和比例差。例如,代码典型特征“代码行数”包括预设代码行数绝对差和预设代码行数比例差两个阈值,代码典型特征“变量总数”包括预设变量总数绝对差和预设变量总数比例差两个阈值。某一实施例中,可以仅仅基于某一项代码典型特征对代码库中的代码块进行过滤,例如,仅仅基于待测代码块的代码行数或者仅仅基于代码块的变量总数对代码库中的代码块进行过滤。在另一实施例中,也可以基于某几个代码典型特征(例如代码行数和变量总数)对代码库中代码块进行过滤。或者,在另一实施例中,还可以基于所有代码典型特征对代码库中代码块进行过滤。当基于多个代码典型特征对代码库中的代码进行过滤时,可以按照一定的先后基于不同的代码典型特征过滤,也可以同时基于不同的代码典型特征分别过滤后在对各过滤后的代码块集合的求交集。
基于待测代码的代码行数过滤代码库中的代码块时,一方面按照预设代码行数绝对差定义的过滤范围滤除代码库中代码行数与待测代码的代码行数之间绝对差大于预设代码行数绝对差的代码块,其中,预设代码行数绝对差由用户根据待测代码块的检测要求设置。例如,预设代码行数绝对差设置为500时,如果待测代码块的代码行数为3000行,则在该环节中会将代码库中代码行数小于2500行的代码块以及代码行数大于3500行的代码块滤除。另一方面,按照预设代码行数比例差滤除代码库中代码行数与待测代码块的代码行数之间比例差大于预设代码行数比例差的代码块,其中,预设比例绝对差设置为0.7时,如果待测代码块的代码行数为3000行,则在该环节中会将代码库中代码行数小于2100(即3000*0.7)行的代码块以及代码行数大于4285(即3000/0.7)行的代码块滤除。如果两个代码块是克隆的,那么它们大部分的代码典型特征都不会相差太远。当我们说两个数并非“非常不同”时,其实有两层含义。首先,它们数值上不应该相差太大(例如小于15),所以我们认为35和20就可以认为是“非常不同”的。其次,它们不应该相差太大的倍数(例如小于1.5倍),所以我们认为8和4可以认为是“非常不同”的。因此,本实施例的S1代码库过滤步骤中基于典型代码特征从绝对差和比例差两方面一起对代码库的代码块进行过滤,即对于预设代码行数绝对差设置为500,预设代码行数比例差设置为0.7时,在S1代码库过滤步骤中会将代码库中带代码行数小于2500的代码块以及代码行数大于3500的代码块滤除。在S1代码库过滤步骤中被滤除的代码将不会参加S2特征矩阵匹配步骤,即不会用于与待测代码的特征矩阵进行特征匹配。如此,对于每一个待测代码块,我们只需将其与代码库中典型代码特征比较接近的代码块进行比较。将时间复杂度变成了O(tn),其中t与所设定的典型代码特征的绝对差阈值和比例差阈值相关。
S2.特征矩阵匹配步骤
代码块之间的比较是通过对比代码块的特征矩阵来实现的。特征矩阵匹配步骤中,将待测代码块的特征矩阵与过滤后代码库中各代码块的特征矩阵一一进行特征匹配。现有技术在进行两个特征矩阵的匹配时,需要将待测代码块特征矩阵中的每一行均与代码库中用于比对的某一代码块特征矩阵的每一行进行比对来进行特征匹配,平方量级的两两比较时间复杂度太高,不适合海量代码比对的场景。本实施例在将待测代码块与某一代码块的特征矩阵进行特征匹配过程中基于待测代码块的变量典型特征缩小特征矩阵匹配的对比行范围。
本实施例的S2特征矩阵匹配步骤包括:
S2-1,计算待测代码块的特征矩阵。本实施例中代码块的特征矩阵是对于代码块中的变量而言的,变量典型特征包括代码块中某一变量的被使用次数和出现次数。变量的被使用次数和变量的出现次数为变量的两个不同的特征,有些变量可能只是定义或声明了,但并不一定会被使用(这些变量相当于只出现了,但没有被使用),所以变量的出现次数应该是大于或等于变量的被使用次数。代码块中某一变量的计数向量是对于该变量在不同的上下文中出现的次数的一个组合。由于每个计数向量都代表了代码块中的一个变量在不同上下文中出现的次数,把所有变量的计数向量的组合到一起即可构建一个计数矩阵,用于对代码块进行一个全面综合的描述。特征矩阵中的每一行对应于代码块中的一个变量,该行中的每一个元素代表该变量在不同上下文中的词频。
S2-2,将待测代码块的特征矩阵与过滤后代码库中代码块的特征矩阵一一进行匹配。在该步骤之前还需要计算用于与待测代码块进行比对的代码块的特征矩阵,该计算操作可以在建立代码库时将所有代码块的特征矩阵计算出来并存储,也可以放在步骤S2-1中统一将过滤后代码库中所有代码块的特征矩阵计算出来,也可以在每次进行比对之前临时将用于比对的代码块特征矩阵计算出来。在将待测代码块与某一代码块的特征矩阵进行特征匹配过程中基于待测代码块的变量典型特征缩小特征矩阵匹配的对比行范围。其中,基于待测代码块的变量典型特征缩小特征矩阵匹配的对比行范围是指:根据变量典型特征分别对待测代码块和某一代码块的特征矩阵按行排序,将待测代码块的特征矩阵的各行分别与某一代码块的特征矩阵中的相同行以及位于该相同行之前和之后特定数量的行进行匹配。具体地,将待测代码块的特征矩阵的每一行均与该某一代码块特征矩阵中特定数量范围内的某几行进行比对。其中特定数量由用户指定或者系统预设。假设预设的特定数量k,则对于待测代码块的特征矩阵的第i行,选择对应某一代码块特征矩阵中的第i-k行至第i+k行进行比对。如图2所示,为k=1时的比对示意图。这样使得待测代码块特征矩阵的每行只会与代码库中代码块特征矩阵相同行的上下几行进行比较,将矩阵匹配的时间复杂度由O(n2)降为O(kn)。某一实施例中,可以仅仅基于某一项变量典型特征缩小特征矩阵匹配的对比行范围,例如,仅仅基于变量的出现次数或者仅仅基于变量的被引用次数缩小特征矩阵匹配的对比行范围。在另一实施例中,也可以基于某几个变量典型特征(例如变量的出现次数和变量的被引用次数)缩小特征矩阵匹配的对比行范围。或者,在另一实施例中,还可以基于所有变量典型特征缩小特征矩阵匹配的对比行范围。当基于多个变量典型特征缩小特征矩阵匹配的对比行范围时,按照一定的先后基于不同的变量典型特征过滤。
虽然描述了本发明的实施方式,但是本领域普通技术人员可以在所附权利要求的范围内做出各种变形或修改。
Claims (3)
1.一种基于特征元信息的搜索剪枝优化方法,其特征在于,包括:
代码库过滤步骤,基于待测代码块的代码典型特征过滤代码库中的代码块;
特征矩阵匹配步骤,将所述待测代码块的特征矩阵与过滤后代码库中各代码块的特征矩阵一一进行特征匹配;
所述代码典型特征包括代码块的代码行数;
所述代码库过滤步骤中基于所述待测代码块的代码行数过滤所述代码库中的代码块;
基于所述待测代码块的代码行数过滤所述代码库中的代码块,包括滤除所述代码库中代码行数与所述待测代码块的代码行数之间比例差大于预设代码行数比例差的代码块;
所述代码典型特征包括代码块的变量总数;
所述代码库过滤步骤中基于所述待测代码块的变量总数过滤代码库中的代码块;
所述特征矩阵匹配步骤中,将所述待测代码块的特征矩阵与某一代码块的特征矩阵进行特征匹配过程中基于所述待测代码块的变量典型特征缩小特征矩阵匹配的对比行范围;
基于所述待测代码块的变量典型特征缩小特征矩阵匹配的对比行范围,包括根据所述变量典型特征分别对所述待测代码块和所述某一代码块的特征矩阵按行排序,将所述待测代码块的特征矩阵的各行分别与所述某一代码块的特征矩阵中的相同行以及位于该相同行之前和之后特定数量的行进行匹配;
所述变量典型特征包括代码块中某一变量的被使用次数和出现次数。
2.根据权利要求1所述的一种基于特征元信息的搜索剪枝优化方法,其特征在于:
基于所述待测代码块的变量总数过滤所述代码库中的代码块,包括滤除所述代码库中变量总数与所述待测代码块 的变量总数之间绝对差大于预设变量总数绝对差的代码块。
3.根据权利要求1所述的一种基于特征元信息的搜索剪枝优化方法,其特征在于:
基于所述待测代码块的变量总数过滤所述代码库中的代码块,包括滤除所述代码库中变量总数与所述待测代码块的变量总数之间比例差大于预设变量总数比例差的代码块。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910857079.2A CN110659064B (zh) | 2019-09-11 | 2019-09-11 | 一种基于特征元信息的搜索剪枝优化方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910857079.2A CN110659064B (zh) | 2019-09-11 | 2019-09-11 | 一种基于特征元信息的搜索剪枝优化方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110659064A CN110659064A (zh) | 2020-01-07 |
CN110659064B true CN110659064B (zh) | 2022-09-13 |
Family
ID=69038169
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910857079.2A Active CN110659064B (zh) | 2019-09-11 | 2019-09-11 | 一种基于特征元信息的搜索剪枝优化方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110659064B (zh) |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101398758A (zh) * | 2008-10-30 | 2009-04-01 | 北京航空航天大学 | 一种代码抄袭的检测方法 |
CN103473104A (zh) * | 2013-09-24 | 2013-12-25 | 北京大学 | 一种基于关键词上下文频率矩阵的应用重打包辨别方法 |
CN105426711A (zh) * | 2015-11-18 | 2016-03-23 | 北京理工大学 | 一种计算机软件源代码相似度检测方法 |
CN109445844A (zh) * | 2018-11-05 | 2019-03-08 | 浙江网新恒天软件有限公司 | 基于哈希值的代码克隆检测方法、电子设备、存储介质 |
-
2019
- 2019-09-11 CN CN201910857079.2A patent/CN110659064B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101398758A (zh) * | 2008-10-30 | 2009-04-01 | 北京航空航天大学 | 一种代码抄袭的检测方法 |
CN103473104A (zh) * | 2013-09-24 | 2013-12-25 | 北京大学 | 一种基于关键词上下文频率矩阵的应用重打包辨别方法 |
CN105426711A (zh) * | 2015-11-18 | 2016-03-23 | 北京理工大学 | 一种计算机软件源代码相似度检测方法 |
CN109445844A (zh) * | 2018-11-05 | 2019-03-08 | 浙江网新恒天软件有限公司 | 基于哈希值的代码克隆检测方法、电子设备、存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN110659064A (zh) | 2020-01-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106990956A (zh) | 基于后缀树的代码文件克隆检测方法 | |
US20200342023A1 (en) | Hash-based media search | |
CN104036187A (zh) | 计算机病毒类型确定方法及其系统 | |
CN114915478A (zh) | 基于多Agent的分布式关联分析的智慧园区工控系统网络攻击场景识别方法 | |
CN116522403B (zh) | 聚焦大数据隐私安全的互动信息脱敏方法及服务器 | |
CN109214904A (zh) | 财务造假线索的获取方法、装置、计算机设备和存储介质 | |
CN103839270A (zh) | 一种图像匹配方法及装置 | |
CN110659064B (zh) | 一种基于特征元信息的搜索剪枝优化方法 | |
CN115828011A (zh) | 基于大数据的数据分析方法和平台 | |
CN113743443A (zh) | 一种图像证据分类和识别方法及装置 | |
CN112132589A (zh) | 一种基于多次融合构建欺诈识别模型的方法 | |
US20030065477A1 (en) | Two-sample permutation tests | |
CN113297185A (zh) | 一种特征衍生方法及装置 | |
CN112527573A (zh) | 一种接口测试方法、装置及存储介质 | |
CN109828996A (zh) | 一种不完备数据集快速属性约简方法 | |
CN115829925A (zh) | 外观缺陷检测方法、装置、计算机设备及存储介质 | |
CN114511330A (zh) | 一种基于改进的cnn-rf的以太坊庞氏骗局检测方法及系统 | |
US10636636B2 (en) | Systems and methods for sample comparison and classification | |
Janiszewska et al. | Block matrix approximation via entropy loss function | |
CN113792800B (zh) | 特征生成方法及装置、电子设备、存储介质 | |
CN108563950B (zh) | 基于SVM的Android恶意软件检测方法 | |
CN111105433A (zh) | 一种基于团块的运动目标轨迹提取方法 | |
Holland | Detrended correspondence analysis (DCA) | |
CN112329589B (zh) | 一种基于高维特征算法的人脸识别方法 | |
CN117312350B (zh) | 钢铁行业碳排放数据管理方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |