GraphClone:基于结构引导的多视图图学习方法,用于代码克隆检测

《Journal of Systems and Software》:GraphClone: Structure-guided multi-view graph learning for code clone detection

【字体: 大 中 小 】 时间:2026年09月12日 来源:Journal of Systems and Software 3.8

编辑推荐:

  摘要代码克隆检测对于各种软件工程任务至关重要,但由于功能等效代码的实现方式多种多样,这一任务仍然具有挑战性。现有研究从不同角度探讨了代码克隆检测,包括基于词汇/令牌的匹配、结构感知分析以及神经表示学习。尽管这些研究方向极大地推动了该领域的发展,但它们在统一且高效地捕获语法、控制流

  

摘要

代码克隆检测对于各种软件工程任务至关重要,但由于功能等效代码的实现方式多种多样,这一任务仍然具有挑战性。现有研究从不同角度探讨了代码克隆检测,包括基于词汇/令牌的匹配、结构感知分析以及神经表示学习。尽管这些研究方向极大地推动了该领域的发展,但它们在统一且高效地捕获语法、控制流和数据依赖性信息方面仍存在局限性。这些局限性可能导致检测准确性不佳,特别是对于在语义上相似但结构上差异较大的代码片段。
我们提出了GraphClone,这是一种新颖的代码克隆检测方法,通过三项关键创新来解决这些局限性:(1)多视图图表示,能够同时捕获语法、控制流和数据依赖性信息;(2)采用自适应拉普拉斯平滑(ALS)过滤器的专用GCN架构,适用于异构代码图;(3)自适应采样策略,在保持准确性的同时加快克隆检测速度。在OJClone和BigCloneBench基准测试中的广泛评估表明,GraphClone在代表性的词汇、结构和神经基线测试中均表现出了竞争性或更优的成绩,并且具有较高的检测准确性、泛化能力和计算效率。

引言

代码克隆检测(Kamiya等人,2002年;Roy等人,2009年)用于识别功能相似的代码片段,是许多软件工程任务的基础,包括重构、错误传播分析、抄袭检测、软件维护、质量保证和代码重用优化。现有研究从多个角度探讨了代码克隆检测。早期方法主要依赖于词汇或令牌级别的相似性,而后续工作则结合了树结构、控制流和程序依赖图等结构信息。最近的研究进一步引入了神经表示学习来提高泛化和语义建模能力(张等人,2025年)。实际上,这些方向并不相互排斥,因为许多现代方法将结构表示与学习到的嵌入相结合。然而,这一进展凸显了一个重要挑战:现有方法仍然难以以统一且计算高效的方式联合建模代码的互补性语法、控制流和数据依赖特性。
基于词汇和令牌的方法将代码视为连续的令牌流(Sajnani等人,2016年),主要捕获表面层次的词汇信息,而忽略了更丰富的程序结构。这种局限性使得它们无法识别结构相似但语义不同的代码对。例如,这类方法可能无法识别int c = a + b和int c = b + a之间的结构相似性。
结构感知方法将代码片段表示为树或图(Jiang等人,2007年;Liu等人,2006年),从而在单纯的令牌序列之外融入了语法或语义结构。这些方法通常使用抽象语法树(ASTs)(Zhang等人,2019b年;Wang等人,2020年)来编码程序结构,尽管仅靠ASTs无法完全捕捉语义含义。为了解决这一问题,研究人员将代码转换为更具表现力的图结构,如控制流图(CFGs)(Y. Wu等人,2020年)和程序依赖图(PDGs),这些结构能更好地表示执行路径和依赖关系。然而,结构感知方法往往依赖于子图匹配技术,而这对于大规模应用来说在计算上是不可行的。
神经表示学习方法利用神经网络学习代码嵌入(Chen和Monperrus,2019年),相较于纯手工构建的相似性度量方法,提供了更好的可扩展性和泛化能力。早期方法如DeepSim(Zhao和Huang,2018年)采用语义特征学习,而ASTNN(Zhang等人,2019b年)则利用语句级别的AST嵌入。最近的基于图卷积网络(GCN)的方法显示出特别的前景(Qiao等人,2024年)。Node2vec(Grover和Leskovec,2016年)使用基于随机游走的矩阵,GraphSAGE(Hamilton等人,2017年)通过邻域采样和聚合引入归纳学习,GAT(Veli?kovi?等人,2018年)结合注意力机制来区分邻居的贡献。FA-AST(Wang等人,2020年)利用带门的图卷积网络(GGCNs)和稀疏结构进行特征生成。预训练模型如CodeBERT(Feng等人,2020年)联合建模自然语言和代码,而GraphCodeBERT(Guo等人,2020年)在预训练阶段进一步融入了代码结构。
尽管这些方法具有潜力,但现有的神经表示学习方法在应用于代码分析时仍存在关键局限性(Z. Wu等人,2020年)。它们未能考虑代码派生图的异构性,这些图中包含不同类型的顶点(如操作符、变量、函数调用)以及不同的属性和重要性级别。此外,它们通常假设图结构是均匀的,而实际上代码图表现出不同的模式——控制流顶点与数据依赖顶点有本质区别,它们之间的交互需要专门的处理方式,而通用框架无法提供这种支持。
在本文中,我们提出了GraphClone,这是一种基于GCN的新架构,通过三项关键创新解决了现有方法的局限性。
首先,我们开发了一种多视图图表示,能够同时捕捉代码语义和结构的不同方面。GraphClone不是依赖单一的图表示,而是构建了包含ASTs的语法关系、CFGs的控制流依赖关系以及PDGs的数据依赖关系的并行视图。每个视图提供互补的信息:AST视图保留了层次化的代码结构,CFG视图捕捉执行路径,PDG视图编码数据和控制依赖关系。我们的专用GCN架构通过特定的拉普拉斯过滤器分别处理这些视图,然后通过可学习的融合机制结合它们的嵌入。
其次,我们引入了自适应拉普拉斯平滑(ALS)过滤器,能够动态适应代码派生图的异构性。与标准GCN方法应用统一转换不同,我们的过滤器根据局部图拓扑和顶点类型调整平滑参数,从而在聚合过程中实现更细致的特征传播。这些过滤器生成专门的权重矩阵,保留了重要的结构差异,同时抑制了无关连接的噪声。
第三,我们实施了自适应采样策略,显著提高了准确性和效率。该策略根据代码复杂性动态调整深度和广度——对于简单代码模式使用浅层网络,而对于复杂片段则使用更深层次的架构。我们的方法在生成小批量数据时优先处理结构上重要的顶点,确保关键代码元素得到充分表示,同时减少计算开销。
我们在两个知名的基准测试OJClone(Mou等人,2016年)和BigCloneBench(Svajlenko等人,2014年)上评估了GraphClone。在代表性的词汇、结构和神经基线测试中,GraphClone表现出强大的检测性能和良好的效率。特别是其多视图表示和自适应过滤策略改善了语义相似但结构多样代码片段的建模。
本文的其余部分安排如下:第2节介绍了背景知识,包括代码克隆的定义、相关工作和现有方法的局限性。第3节详细介绍了我们提出的方法。第4节描述了实验设置和评估结果。最后,第5节总结了本文。

章节片段

代码克隆类型的定义

根据相似性和差异性,代码克隆被分为四种类型。如图1所示,Type-1克隆是仅在格式(如空格或注释)上有所不同的完全副本,可以通过文本规范化和字符串匹配轻松检测到。Type-2克隆保持相同的结构,但标识符(如变量或函数)被重命名,需要标识符规范化和结构比较。Type-3克隆涉及语句级别的变化,例如添加或

概述

GraphClone是一个多视图图卷积网络框架,它利用语法、控制流和数据依赖表示的互补性来实现准确的代码克隆检测。该框架通过系统集成抽象语法树(ASTs)、控制流图(CFGs)和数据依赖图(DDGs),解决了在语法上不同的代码实现中捕捉语义等价性的基本挑战。

数据集描述和统计

本研究在两个广泛使用的代码克隆检测数据集上评估了GraphClone。OJClone数据集包含52,000个C语言程序,涵盖104个不同的编程任务,每个任务有500个功能等效的实现。该数据集具有显著的多样性,代码长度从几行到几百行不等,为代码分类和克隆检测提供了丰富的测试环境。BigCloneBench数据集是一个大规模的Java代码克隆检测基准测试,包含数百万

结论

GraphClone提出了一种基于多视图图卷积网络的代码克隆检测方法。通过系统地构建和集成AST、CFG和DDG表示,该框架捕捉了单视图方法所遗漏的代码语义的互补方面。结构感知的图卷积架构在光谱分析和连接性指标的指导下,学习了有效的嵌入,能够有效识别各种类型的代码克隆。

CRediT作者贡献声明

Tiancheng Lu:撰写——原始草稿、可视化、验证、软件实现、方法论、研究、形式分析、数据整理、概念化。Lingling Zhang:撰写——审阅与编辑、监督、资源管理、研究、概念化。Jinming Ma:撰写——审阅与编辑。Ziyu Zhou:撰写——审阅与编辑。Yuandong Wang:撰写——审阅与编辑。Pengpeng Qiao:撰写——审阅与编辑。

手稿准备过程中生成式AI和AI辅助技术的声明

在准备这项工作时,作者使用DeepL翻译了手稿的部分内容,ChatGPT改进了英文表达的清晰度,Claude协助优化了特定的代码片段。使用这些工具/服务后,作者根据需要审阅和编辑了内容,并对发布的文章内容负全责。

利益冲突声明

作者声明他们没有已知的可能会影响本文工作的竞争性财务利益或个人关系。

致谢

本工作得到了国家自然科学基金(资助编号:62302043)和首都师范大学跨学科项目(资助编号:2026JCZD02)的支持。此外,本工作还得到了日本学术振兴会(KAKENHI)(资助编号:26K21227)的支持。
Tiancheng Lu|Lingling Zhang|Jinming Ma|Ziyu Zhou|Yuandong Wang|Pengpeng Qiao
首都师范大学,北京,中国
相关新闻
生物通微信公众号
微信
新浪微博
  • 搜索
  • 国际
  • 国内
  • 人物
  • 产业
  • 热点
  • 科普

热点排行

    今日动态 | 人才市场 | 新技术专栏 | 中国科学人 | 云展台 | BioHot | 云讲堂直播 | 会展中心 | 特价专栏 | 技术快讯 | 免费试用

    版权所有 生物通

    Copyright© eBiotrade.com, All Rights Reserved

    联系信箱:

    粤ICP备09063491号