System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind() 融合深度子树交互的代码克隆检测方法、装置及电子设备制造方法及图纸_技高网
当前位置: 首页 > 专利查询>清华大学专利>正文

融合深度子树交互的代码克隆检测方法、装置及电子设备制造方法及图纸

技术编号:41391376 阅读:6 留言:0更新日期:2024-05-20 19:13
本发明专利技术提供一种融合深度子树交互的代码克隆检测方法、装置及电子设备,其中的方法包括:获取基准代码块对应的第一抽象语法树,以及待检测代码块对应的第二抽象语法树;将第一抽象语法树划分为多棵第一子树,并将第二抽象语法树划分为多棵第二子树;计算第一子树与第二子树的子树相似度,以及第一抽象语法树与第二抽象语法树的语法树相似度;根据子树相似度和语法树相似度,获取待检测代码块的代码克隆检测结果。该方法通过以代码块为检测粒度,在比较抽象语法树级别的相似度的基础上,将子树级别的相似度也纳入代码克隆检测范畴,极大地提升了代码克隆检测的精确度和召回度,具有广泛的应用价值。

【技术实现步骤摘要】

本专利技术涉及代码克隆检测,尤其涉及一种融合深度子树交互的代码克隆检测方法、装置及电子设备


技术介绍

1、在软件的开发和演化过程中,开发人员常常通过复制和粘贴代码段,或者使用开源框架、复用设计模式等方式来提高软件的开发效率,但容易导致缺陷传播,降低软件系统的可靠性,增加代码维护成本。

2、代码克隆检测在软件代码管理、预防缺陷传播以及解决代码剽窃问题上发挥着重要的作用,其目的在于检测软件系统中克隆的代码,帮助开发人员和管理者及时发现代码克隆造成的缺陷,从而更好地保证软件质量。

3、根据代码片段之间的相似情况,代码克隆常被分成四种类型,即完全相同的代码片段(type-1)、重命名的代码片段(type-2)、几乎相同的代码片段(type-3)以及语义相似的代码片段(type-4),对这四种代码克隆类型进行检测的难度依次递增。

4、随着深度学习的兴起,许多神经网络模型也被应用到代码克隆检测领域。目前,根据代码表征方式的不同,基于深度学习的代码克隆检测方法可以分为基于文本、令牌、抽象语法树和程序流程图或程序依赖图等方法。

5、然而,这些检测方法的检测粒度过于粗糙,导致原本可能判断为相似的两个代码片段在粗粒度上直接判断为不相似,从而导致检测准确率不高,容易出现漏报误报现象。

6、因此,如何解决现有代码克隆检测方法的检测粒度过于粗糙,导致检测精确度和召回度均不高的问题,是代码克隆检测
亟待解决的重要课题。


技术实现思路

1、本专利技术提供一种融合深度子树交互的代码克隆检测方法、装置、电子设备及可读存储介质,用以克服现有代码克隆检测方法的检测粒度过于粗糙,导致检测精确度和召回度均不高的缺陷,极大地提升代码克隆检测的精确度和召回度。

2、一方面,本专利技术提供一种融合深度子树交互的代码克隆检测方法,包括:获取基准代码块对应的第一抽象语法树,以及待检测代码块对应的第二抽象语法树;将所述第一抽象语法树划分为多棵第一子树,并将所述第二抽象语法树划分为多棵第二子树;计算所述第一子树与所述第二子树的子树相似度,以及所述第一抽象语法树与所述第二抽象语法树的语法树相似度;根据所述子树相似度和所述语法树相似度,获取所述待检测代码块的代码克隆检测结果。

3、进一步地,所述将所述第一抽象语法树划分为多棵第一子树,包括:确定所述基准代码块的第一子树定界符;根据所述第一子树定界符,按照预设顺序遍历所述第一抽象语法树,得到多棵所述第一子树;其中,所述第一子树以所述第一子树定界符为根节点;相应地,所述将所述第二抽象语法树法划分为多棵第二子树,包括:确定所述待检测代码块的第二子树定界符;根据所述第二子树定界符,按照预设顺序遍历所述第二抽象语法树,得到多棵所述第二子树;其中,所述第二子树以所述第二定界符为根节点。

4、进一步地,所述计算所述第一子树与所述第二子树的子树相似度,包括:获取每棵所述第一子树的第一子树向量表示,以及每棵所述第二子树的第二子树向量表示;对所述第一子树向量表示和所述第二子树向量表示进行两两元素乘积计算,并将计算结果输入至全连接网络层中,得到所述子树相似度。

5、进一步地,所述获取每棵所述第一子树的第一子树向量表示,包括:对所述第一子树进行编码,得到第一初始向量表示;将所述第一初始向量表示依次经过循环神经网络层、最大池化网络层以及门控循环单元,得到所述第一子树向量表示;相应地,所述获取每棵所述第二子树的第二子树向量表示,包括:对所述第二子树进行编码,得到第二初始向量表示;将所述第二初始向量表示依次经过循环神经网络层、最大池化网络层以及门控循环单元,得到所述第二子树向量表示。

6、进一步地,所述计算所述第一抽象语法树与所述第二抽象语法树的语法树相似度,包括:根据所述第一子树向量表示,获取所述第一抽象语法树的第一语法树向量表示;根据第二子树向量表示,获取所述第二抽象语法树的第二语法树向量表示;对所述第一语法树向量表示和所述第二语法树向量表示进行内积运算,得到所述语法树相似度。

7、进一步地,所述根据所述子树相似度和所述语法树相似度,获取所述待检测代码块的代码克隆检测结果,包括:将所述子树相似度与所述语法相似度之和作为相似度比较结果;在所述相似度比较结果满足预设条件的情况下,所述待检测代码块与所述基准代码块之间存在克隆关系;在所述相似度比较结果不满足预设条件的情况下,所述带检车代码块与所述基准代码块之间不存在克隆关系。

8、第二方面,本专利技术还提供一种融合深度子树交互的代码克隆检测装置,包括:抽象语法树获取模块,用于获取基准代码块对应的第一抽象语法树,以及待检测代码块对应的第二抽象语法树;抽象语法树子树划分模块,用于将所述第一抽象语法树划分为多棵第一子树,并将所述第二抽象语法树划分为多棵第二子树;多级别相似度计算模块,用于计算所述第一子树与所述第二子树的子树相似度,以及所述第一抽象语法树与所述第二抽象语法树的语法树相似度;代码克隆检测结果获取模块,用于根据所述子树相似度和所述语法树相似度,获取所述待检测代码块的代码克隆检测结果。

9、第三方面,本专利技术还提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如上述任一种所述的融合深度子树交互的代码克隆检测方法。

10、第四方面,本专利技术还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现如上述任一种所述的融合深度子树交互的代码克隆检测方法。

11、第五方面,本专利技术还提供一种计算机程序产品,包括计算机程序,所述计算机程序被处理器执行时实现如上述任一种所述的融合深度子树交互的代码克隆检测方法。

12、本专利技术提供的一种融合深度子树交互的代码克隆检测方法,通过获取基准代码块对应的第一抽象语法树,以及待检测代码块对应的第二抽象语法树,并将第一抽象语法树划分为多棵第一子树,以及,将第二抽象语法树划分为多棵第二子树,进而计算第一子树与第二子树的子树相似度,以及第一抽象语法树与第二抽象语法树的语法树相似度,从而,根据子树相似度和语法树相似度,获取待检测代码的代码克隆检测结果。该方法通过以代码块为检测粒度,在比较抽象语法树级别的相似度的基础上,将子树级别的相似度也纳入代码克隆检测范畴,极大地提升了代码克隆检测的精确度和召回度,具有广泛的应用价值。

本文档来自技高网...

【技术保护点】

1.一种融合深度子树交互的代码克隆检测方法,其特征在于,包括:

2.根据权利要求1所述的融合深度子树交互的代码克隆检测方法,其特征在于,所述将所述第一抽象语法树划分为多棵第一子树,包括:

3.根据权利要求1所述的融合深度子树交互的代码克隆检测方法,其特征在于,所述计算所述第一子树与所述第二子树的子树相似度,包括:

4.根据权利要求3所述的融合深度子树交互的代码克隆检测方法,其特征在于,所述获取每棵所述第一子树的第一子树向量表示,包括:

5.根据权利要求3所述的融合深度子树交互的代码克隆检测方法,其特征在于,所述计算所述第一抽象语法树与所述第二抽象语法树的语法树相似度,包括:

6.根据权利要求1-5中任一项所述的融合深度子树交互的代码克隆检测方法,其特征在于,所述根据所述子树相似度和所述语法树相似度,获取所述待检测代码块的代码克隆检测结果,包括:

7.一种融合深度子树交互的代码克隆检测装置,其特征在于,包括:

8.一种电子设备,包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现如权利要求1至6中任一项所述的融合深度子树交互的代码克隆检测方法。

9.一种非暂态计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1至6中任一项所述的融合深度子树交互的代码克隆检测方法。

10.一种计算机程序产品,包括计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1至6中任一项所述的融合深度子树交互的代码克隆检测方法。

...

【技术特征摘要】

1.一种融合深度子树交互的代码克隆检测方法,其特征在于,包括:

2.根据权利要求1所述的融合深度子树交互的代码克隆检测方法,其特征在于,所述将所述第一抽象语法树划分为多棵第一子树,包括:

3.根据权利要求1所述的融合深度子树交互的代码克隆检测方法,其特征在于,所述计算所述第一子树与所述第二子树的子树相似度,包括:

4.根据权利要求3所述的融合深度子树交互的代码克隆检测方法,其特征在于,所述获取每棵所述第一子树的第一子树向量表示,包括:

5.根据权利要求3所述的融合深度子树交互的代码克隆检测方法,其特征在于,所述计算所述第一抽象语法树与所述第二抽象语法树的语法树相似度,包括:

6.根据权利要求1-5中任一项所述的融合深度子树交互的代码克隆检测方法,其特征在于...

【专利技术属性】
技术研发人员:许智威宋鼎宏强少华周旻罗平
申请(专利权)人:清华大学
类型:发明
国别省市:

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

1