一种代码克隆检测方法技术

技术编号:39819690 阅读:9 留言:0更新日期:2023-12-22 19:39
本申请公开一种代码克隆检测方法

【技术实现步骤摘要】
一种代码克隆检测方法、装置及电子设备


[0001]本申请涉及网络安全
,特别是涉及一种代码克隆检测方法

装置及电子设备


技术介绍

[0002]代码克隆检测技术在软件演化,软件复用等许多软件维护工作中起到了重要的作用,其目的是去检测两个代码片段之间的相似性

[0003]目前的代码克隆检测方法大都是基于抽象语法树
(Abstract Syntax Tree

AST)
和程度依赖图
(Program Dependence Graph

PDG)
来进行的,如图1所示

图1为一种目前代码克隆检测的流程示意图,包括:首先,基于待检测代码生成第一
AST
和第一
PDG
,分别对第一
AST
和第一
PDG
进行特征提取,得到第一
AST
特征向量和第一
PDG
特征向量,并对第一
AST
特征向量和第一
PDG
特征向量进行特征融合,得到第一特征向量

同时,基于样本代码生成第二
AST
和第二
PDG
,分别对第二
AST
和第二
PDG
进行特征提取,得到第二
AST
特征向量和第二
PDG
特征向量,并对第二
AST
特征向量和第二
PDG
特征向量进行特征融合,第二特征向量

进一步,将第一特征向量和第二特征向量进行匹配计算,得到克隆的代码块

[0004]上述方法由于仅基于第一
AST、
第一
PDG、
第二
AST
和第二
PDG
进行代码克隆检测,在面对多个方法合并成一个方法或一个方法分解成多个方法的克隆场景时,比如,待检测代码为
A+C
,样本代码
A、B、C
,检测代码的第一
AST、
第一
PDG
与样本代码的第二
AST、
第二
PDG
相比,差异性较大,导致无法精准的检测出克隆代码


技术实现思路

[0005]本申请提供了一种代码克隆检测方法

装置及电子设备,可以解决目前代码克隆检测方法精准性低的问题

[0006]第一方面,本申请提供了一种代码克隆检测方法,所述方法包括:
[0007]基于待检测代码,生成所述待检测代码的待检测代码属性图
CPG

[0008]在样本代码的样本
CPG
与所述待检测
CPG
之间满足第一相似度要求时,基于所述待检测
CPG
中的方法节点,生成待检测向量集合和待检测节点集合,其中,所述待检测向量集合中包括多个向量子集,一个向量子集表征一个方法节点中各个代码节点的执行顺序关系,所述待检测节点集合中包括多个节点子集,一个节点子集表征一个方法节点中各个无执行顺序关系的代码节点;
[0009]基于所述待检测向量集合

所述待检测节点集合

所述样本代码的样本向量集合和所述样本代码的样本节点集合,确定所述样本代码中的被克隆数据和所述待检测代码中的克隆数据

[0010]通过上述方法,将有执行顺序关系的代码节点作为向量集合,无执行顺序关系的代码节点作为节点集合,从而在代码克隆检测时,通过同时匹配这两个集合,可以检测出将样本代码顺序修改的克隆情况,减少克隆检测的漏报,提高克隆检测的精准性

[0011]在一种可能的设计中,所述满足第一相似度要求,包括:
[0012]在所述样本
CPG
与所述待检测
CPG
之间不存在图像重合部分时,确定所述样本
CPG
与所述待检测
CPG
之间满足第一相似度要求;或
[0013]在存在所述图像重合部分,且所述样本
CPG
在所述图像重合部分对应的第一方法与所述待检测
CPG
在所述图像重合部分对应的第二方法之间的相似度小于预设相似度时,确定所述样本
CPG
与所述待检测
CPG
之间满足第一相似度要求

[0014]在一种可能的设计中,所述方法还包括:
[0015]在存在所述图像重合部分,且所述第一方法与所述第二方法之间的相似度大于或等于预设相似度时,确定所述第一方法为所述被克隆数据,以及所述第二方法为所述克隆数据

[0016]在一种可能的设计中,所述基于所述待检测
CPG
中的方法节点,生成待检测向量集合和待检测节点集合,包括:
[0017]基于所述待检测
CPG
,确定所述待检测代码中的无用数据,其中,所述无用数据至少包括未使用字段

未使用变量和日志打印代码节点;
[0018]基于所述无用数据和所述待检测
CPG
中的方法节点生成所述待检测向量集合和所述待检测节点集合

[0019]通过上述方法,将无用数据从向量集合和节点集合中删除,得到待检测向量集合和待检测节点集合,从而在基于待检测向量集合和待检测节点集合进行代码克隆检测时,可以降低无关数据对检测带来的干扰,提高克隆检测的精准性

[0020]在一种可能的设计中,所述基于所述待检测向量集合

所述待检测节点集合

所述样本代码的样本向量集合和所述样本代码的样本节点集合,确定所述样本代码中的被克隆数据和所述待检测代码中的克隆数据,包括:
[0021]分别将所述待检测向量集合与所述样本向量集合

所述待检测节点集合与所述样本节点集合进行比对,得到所述待检测向量集合与所述样本向量集合之间的第一交集部分,以及所述待检测节点集合与所述样本节点集合之间的第二交集部分;
[0022]确定所述样本代码在所述第一交集部分和所述第二交集部分对应的第三方法为所述被克隆数据,以及所述待检测代码在所述第一交集部分和所述第二交集部分对应的第四方法为所述克隆数据

[0023]通过上述方法,基于比对待检测向量集合与所述样本向量集合

所述待检测节点集合与所述样本节点集合之间的交集部分来确定被克隆数据和克隆数据,可以提高克隆检测的精准性

[0024]在一种可能的设计中,所述基于所述待检测向量集合

所述待检测节点集合

所述样本代码的样本向量集合和所述样本代码的样本本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.
一种代码克隆检测方法,其特征在于,所述方法包括:基于待检测代码,生成所述待检测代码的待检测代码属性图
CPG
;在样本代码的样本
CPG
与所述待检测
CPG
之间满足第一相似度要求时,基于所述待检测
CPG
中的方法节点,生成待检测向量集合和待检测节点集合,其中,所述待检测向量集合中包括多个向量子集,一个向量子集表征一个方法节点中各个代码节点的执行顺序关系,所述待检测节点集合中包括多个节点子集,一个节点子集表征一个方法节点中各个无执行顺序关系的代码节点;基于所述待检测向量集合

所述待检测节点集合

所述样本代码的样本向量集合和所述样本代码的样本节点集合,确定所述样本代码中的被克隆数据和所述待检测代码中的克隆数据
。2.
如权利要求1所述的方法,其特征在于,所述满足第一相似度要求,包括:在所述样本
CPG
与所述待检测
CPG
之间不存在图像重合部分时,确定所述样本
CPG
与所述待检测
CPG
之间满足第一相似度要求;或在存在所述图像重合部分,且所述样本
CPG
在所述图像重合部分对应的第一方法与所述待检测
CPG
在所述图像重合部分对应的第二方法之间的相似度小于预设相似度时,确定所述样本
CPG
与所述待检测
CPG
之间满足第一相似度要求
。3.
如权利要求2所述的方法,其特征在于,所述方法还包括:在存在所述图像重合部分,且所述第一方法与所述第二方法之间的相似度大于或等于预设相似度时,确定所述第一方法为所述被克隆数据,以及所述第二方法为所述克隆数据
。4.
如权利要求1所述的方法,其特征在于,所述基于所述待检测
CPG
中的方法节点,生成待检测向量集合和待检测节点集合,包括:基于所述待检测
CPG
,确定所述待检测代码中的无用数据,其中,所述无用数据至少包括未使用字段

未使用变量和日志打印代码节点;基于所述无用数据和所述待检测
CPG
中的方法节点生成所述待检测向量集合和所述待检测节点集合
。5.
如权利要求1所述的方法,其特征在于,所述基于所述待检测向量集合

所述待检测节点集合

所述样本代码的样本向量集合和所述样本代码的样本节点集合,确定所述样本代码中的被克隆数据和所述待检测代码中的克隆数据,包括:分别将所述待检测向量集合与所述样本向量集合

所述待检测节点集合与所述样本节点集合进行比对,得到所述待检测向量集合与所述样本向量集合之间的第一交集部分,以及所述待检测节点集合与所述样本节点集合之间的第二交集部分;确定所述样本代码在所述第一交集部分和所述第二交集部分对应的第三方法为所述被克隆数据,以及所述待检测代码在所述第一交集部分和所述第二交集部分对应的第四方法为所述克隆数据
。6.
如权利要求1所述的方法,其特征在于,所述基于所述待检测向量集合

所述待检测节点集合

所述样本代码的样本向量集合和所述样本代码的样本节点集合,确定所述样本代码中的被克隆数据和所述待检测代码中的克隆数据,包括:在基于所述待检测向量集合

所述待检测节点集合

所述样本向量集合和所述样本节点集合,确定出所述样本代码中存在
N
个样本方法与所述待检测代码中的第一待检测方法
之间满足第二相似度要求时,基于所述
N
个样本方法的关联性,确定所述被克隆数据和所述克隆数据,其中,所述
N
为大于1的整数,所述第一待检测方法为所述待检测代码中的任一待检测方法
。7.
如权利要求6所述的方法,其特征在于,所述方法还包括:在基于所述待检测向量集合

所述待检测节点集合

所述样本向量集合和所述样本节点集合,确定出所述样本代码中不存在所述
N
个样本方法时,确定所述样本代码中是否存在第一样本方法与所述待检测代码中
M
个待检测方法之间满足第三相似度要求,其中,所述
M
为大于1的整数;若是,则基于所述
M
个待检测方法的关联性,确定所述被克隆数据和所述克隆数据;若否,则在所述待检测代码中确定出与所述第一样本方法满足第四相似度要求的第一目标待检测方法,并在所述第一目标待检测方法与所述第一样本方法之间的相似代码行数大于预设阈值时,确定所述被克隆数据为所述第一样本方法,以及所述克隆数据为所述第一目标待检测方法
。8.
如权利要求6所述的方法,其特征在于,所述基于所述
N
个样本方法的关联性,确定所述样本代码中的被克隆数据和所述待检测代码中的克隆数据,包括:基于所述样本
CPG
,确定所述
N
个样本方法之间是否存在关联;若是,则确定所述被克隆数据为所述
N
个样本方法,以及所述克隆数据为所述第一待检测方法;若否,则在所述
N
个样本方法中确定出与所述第一待检测方法满足第五相似度要求的目标样本方法,并确定所述被克隆数据为所述目标样本方法,以及所述克隆数据为所述第一待检测方法
。9.
如权利要求7所述的方法,其特征在于,所述基于所述
M
个待检测方法的关联性,确定所述被克隆数据和所述克隆数据,包括:基于所述待检测
CPG
,确定所述
M
个待检测方法之间是否存在关联;若是,则确定所述被克隆数据为所述第一样本方法,以及所述克隆数据为所述
M
个待检测方法;若否,则在所述
M
个待检测方法中确定出与所述第一样本方法满足第六相似度要求的第二目标待检测方法,并在所述第二目标待检测方法与所述第一样本方法之间的相似代码行数大于所述预设阈值时,确定所述被克隆数据为所述第一样本方法,以及所述克隆数据为所述第二目标待检测方法
。10.
一种代码克隆检测装置,其特征在于,所述装置包括:第一生成模块,用于基于待检测代码,生成所述待检测代码的待检测代码属性图
CPG
;第二生...

【专利技术属性】
技术研发人员:胡建强
申请(专利权)人:中国电信股份有限公司
类型:发明
国别省市:

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

1