【技术实现步骤摘要】
一种基于特征对齐的克隆代码检测方法
[0001]本专利技术属于软件代码分析
技术介绍
[0002]代码克隆检测的目的,是通过度量两个代码片段的相似性来做出决策。在整个软件开发生命周期中,代码克隆检测已经被证明是有价值的。识别文本、语法或功能上相似的代码片段是许多软件工程任务的基础,如代码分类、代码重构、bug检测和恶意代码检测等。近年来,深度学习技术在代码克隆检测中取得了很好的结果,尤其是解决功能相似的代码克隆检测。
[0003]然而,现有的技术仅仅关注如何从源代码中提取更多的区别性特征,而一些问题,如功能相似的代码的结构差异,并没有明确解决。软件开发过程中,当程序员复制一个代码段时,经常添加或删除几个语句,或者使用更灵活的语法结构来实现同样功能,这导致复制前后的代码语句错位,产生结构差异。
[0004]代码片段通常被转换为抽象语法树或程序依赖图,后续采用CNN或RNN学习特征表示,计算特征之间的相似度,来决策是否为相似代码。学习到的特征通常是二维张量,为了生成计算相似度的向量,通常采用全局池化操作 ...
【技术保护点】
【技术特征摘要】
1.一种基于特征对齐的克隆代码检测方法,其特征在于,将目标代码x和代码y输入至训练好的克隆代码检测模型中;所述训练好的克隆代码检测模型输出代码x和代码y的相似度,根据代码x和代码y的相似度判断代码x和代码y是否为相似的代码;所述克隆代码检测模型对输入的代码x和代码y做如下处理:步骤1:利用代码解析工具生成代码x的抽象语法树T
x
和代码y的抽象语法树T
y
;步骤2:根据抽象语法树T
x
的状态节点,将T
x
划分为多个语句树,并将该多个语句树按照先序遍历的顺序组成语句树序列ST
x
;根据抽象语法树T
y
的状态节点,将T
y
划分为多个语句树,并将该多个语句树按照先序遍历的顺序组成语句树序列ST
y
;步骤3:构建语句向量矩阵:对每个语句树序列中每个语句树的节点实体进行词嵌入,采用编码器将词嵌入后的语句树编码成语句向量,根据该语句树序列将与该语句树序列对应的语句向量构成语句向量矩阵;步骤4:采用双向因果卷积网络对代码x的语句向量矩阵X
x
和代码y的语句向量矩阵X
y
分别进行特征提取,从而得到代码x的代码特征F
x
,代码y的代码特征F
y
;步骤5:计算代码特征F
y
对于代码特征F
x
的对齐特征以及代码特征F
x
对于代码特征F
y
的对齐特征步骤6:计算并分别对R
xy
和R
yx
进行最大池化操作得到相似度特征向量V
xy
和V
yx
;步骤7:将V
xy
和V
yx
在特征维度上进行连接,再将连接后的向量输入至全连接层,将全连接层的输出输入至sigmoid函数层,sigmoid函数层输出代码x和代码y的相似度S。2.根据权利要求1所述的一种基于特征对齐的克隆代码检测方法,其特征在于,所述步骤4中双向因果卷积网络包括相互连接的第一双向因果卷积模块和第二双向因果卷积模块,所述第一、二双向因果卷积模块结构相同,均包括1
×
1卷积层,第一双向因果卷积层和第二双向因果卷积层;将1
×
1卷积层、第一双向因果卷积层和第二双向因果卷积层输出的结果相加作为双向因果卷积模块的...
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。