SCOTT:基于图和文本数据中的语义挖掘的源代码克隆检测方法

《Expert Systems with Applications》:SCOTT: Source Code Clone Detection Based on Semantic Mining from Graph and Text Data

【字体: 时间:2026年03月15日 来源:Expert Systems with Applications 7.5

编辑推荐:

  代码克隆检测现有方法在Type III和Type IV克隆识别上存在局限,本文提出SCOTT框架通过整合图语义与文本语义实现四类克隆的全覆盖检测。实验表明该方法在三大基准数据集上较SOTA方法提升7.8% Hits@k和5.6% MRR@k。

  
高帅|翟天一|王旭|刘泽宇|李哲|狄晓萌
中国电力研究院,北京市海淀区清河小营东路15号

摘要

源代码克隆检测是软件工程中的一个关键研究领域,在代码质量管理和软件维护中发挥着重要作用。多年来,这一领域受到了学术界和工业界的越来越多的关注。现有的克隆检测方法主要分为两类:基于图的方法和基于文本的方法。然而,基于图的技术由于依赖结构相似性,往往难以检测到第三类克隆;而基于文本的方法在识别第四类克隆时存在局限性,因为它们无法捕捉深层的语义关系。为了弥合这一差距,本文提出了一种基于图和文本数据的语义挖掘的源代码克隆检测方法(SCOTT),该方法能够端到端地检测所有类型的代码克隆模式。我们在Big-CloneBench、POJ-104和CF-500等基准数据集上进行了广泛的实验,结果表明,与最先进的方法相比,SCOTT的平均命中率( Hits@k)提高了7.8%,匹配率(MRR@k)提高了5.6%。

引言

源代码克隆检测作为软件工程和代码质量管理中的一个关键研究方向,近年来逐渐引起了学术界和工业界的广泛关注(Kartal, Akdeniz, & ?zkan (2024); Mushtaq, Rasool, & Shehzad (2017); Zakeri-Nasrabadi, Parsa, Ramezani, Roy, & Ekhtiarzadeh (2023))。它在多个应用领域具有广泛的应用,如漏洞检测(Bilgin et al. (2020); Li et al. (2016); Tao et al. (2025))、代码重用识别(Kawamitsu et al. (2014); Novak, Joy, & Kermek (2019); Pirapuraj & Perera (2017)以及代码推荐(Erfani, Keivanloo, & Rilling (2013)),为软件开发和维护提供了智能支持。
从形式上讲,代码克隆可以根据两个视角进行评估和量化:文本相似性功能相似性(Roy & Cordy (2007)),并可以进一步分为以下四种类型。图1展示了第一类到第四类克隆的示例。
文本和功能相似:
  • 第一类:代码片段仅在空白字符、注释和格式上有所不同。
  • 第二类:涉及标识符或常量的重命名,同时保持相同的代码结构。
文本相似:
  • 第三类:尽管具有相似的核心逻辑,但代码片段被修改、添加或删除。
功能相似:
  • 第四类:关注语义等价性,代码片段具有相同的功能,但在实现上有所不同。
现有的代码克隆检测方法主要分为两类:基于图的方法和基于文本的方法(Pinku, Mondal, & Roy (2024)),前者侧重于检测功能相似性,后者侧重于检测文本相似性。具体来说,基于图的方法为每个代码片段创建一个图表示,以封装操作符和API调用之间的基于功能行为的关系,然后比较这些图来识别相似性(Mehrotra et al. (2021); Simko (2019); Xue et al. (2022); Zou, Ban, Xue, & Xu (2020)。基于文本的方法将源代码视为字符串序列,比较代码片段以找到最长的公共字符串序列,并将匹配的部分报告为克隆实例(Hummel, Juergens, Heinemann, & Conradt (2010); Murakami, Hotta, Higo, Igaki, & Kusumoto (2013); Patel & Sinha (2021); Yu et al. (2019)。最近,随着大型语言模型(LLMs)的发展,基于文本的方法在捕获代码片段的潜在语义信息方面显示出显著的优势,从而能够更准确地识别代码克隆(Feng et al. (2020); Khajezade, Wu, Fard, Rodríguez-Pérez, & Shehata (2024); Roziere et al. (2023); Saieva, Chakraborty, & Kaiser (2024)。对于第一类和第二类克隆,与原始代码相比,克隆代码具有相同的功能和相似的文本表示,基于图和基于文本的方法都能取得良好的性能。对于第三类克隆,由于代码可能被删除或更新,克隆代码和原始代码的功能不同,这限制了基于图的方法的性能。对于第四类克隆,基于文本的方法的性能也受到限制,因为代码可以以完全不同的方式编写或实现。在本文中,我们旨在弥合基于图的方法和基于文本的方法之间的差距,并开发一种同时检测第一类到第四类克隆的综合性方法。然而,这面临三个挑战:
  • 如何从图数据中学习代码片段的复杂功能行为?
    不同的代码片段表示反映了不同的功能方面,从多个方面捕捉功能行为是困难的。
  • 如何从文本数据中学习代码片段的固有语义?
    LLMs在文本生成任务中取得了显著进展,展示了捕捉上下文和语义信息的强大能力(Feng et al. (2020); Roziere et al. (2023); Tao et al. (2024)。然而,直接使用LLMs作为编码器来捕捉代码片段的语义仍然具有挑战性。
  • 如何稳健地整合图和文本数据来检测源代码克隆?
    将图信息整合到基于文本的LLMs中而不进行重新训练,并设计一个端到端的代码克隆检测框架仍然具有挑战性。
  • 为了解决上述挑战,我们首先设计了Code Graph Transformer(CG-Transformer),它通过融合粗粒度的FCGs和细粒度的PDGs有效地捕捉代码片段的复杂功能行为。然后,我们提出重新设计LLMs的架构并进行微调,以将仅解码器的LLMs转换为适合代码文本嵌入任务的有效编码器。最后,我们提出了SCOTT框架,它通过将图表示(来自CG-Transformer)注入修改后的LLM编码器中,有效地整合了图和文本信息,无需对LLM进行完全重新训练,从而实现了高效且稳健的代码克隆检测。
    我们的主要贡献总结如下:
  • 我们解决了源代码克隆检测的问题,能够有效识别从第一类到第四类的所有克隆类型,这是大多数现有方法无法实现的。
  • 我们提出了一种基于图和文本数据的语义挖掘的源代码克隆检测方法(SCOTT),这是一个统一的框架,能够同时利用图和文本信息端到端地检测第一类到第四类的克隆。
  • 我们在Big-CloneBench、POJ-104和CF-500等代表性数据集上进行了广泛的比较实验。结果表明,SCOTT的性能优于最先进的基线方法,命中率(Hits@k)提高了7.8%,匹配率(MRR@k)提高了5.6%。
  • 相关工作

    相关研究

    源代码克隆检测在软件工程中已被广泛研究,提出了多种方法来识别相似或重复的代码片段(Zakeri-Nasrabadi et al. (2023)。现有的方法主要可以分为基于图的方法(侧重于检测功能相似性)和基于文本的方法(侧重于检测文本相似性)(Pinku et al. (2024)。

    代码片段的图表示

    功能调用图(FCG)和程序依赖图(PDG)是两种重要的基于图的表示方法,用于描述代码片段的功能行为(Zakeri-Nasrabadi et al. (2023)。FCG表示程序中函数之间的调用关系,以粗粒度描述代码的功能行为。PDG描述程序中语句之间的控制和数据依赖关系,以细粒度描述代码的功能行为。
    FCG定义为Gf={V, E}

    提出的方法

    在本节中,我们介绍了SCOTT,这是一种新颖的源代码检测框架,包括两个关键的语义建模模块:1)代码图Transformer(CG-Transformer)用于图语义建模,2)LLMs用于文本语义建模。最终,SCOTT作为一个统一的框架,同时整合了图和文本语义。

    实验

    本节介绍了我们的实验方法和全面的结果分析。通过与最先进基线的系统基准测试,我们证明了SCOTT的优越性。

    有效性的威胁

    这项工作面临两个关键的有效性威胁。首先,在适用性方面,SCOTT是为静态代码克隆检测设计的,而现实世界的代码库是动态变化的(例如,频繁的修订、功能更新、重构),需要反复进行完整重新训练以适应这些变化,这限制了其实用性。其次,在外部泛化能力方面,我们的实验仅限于来自三个基准数据集的Java和C代码片段。

    结论

    在本文中,我们探讨并解决了源代码克隆检测问题,旨在克服现有方法在识别第三类和第四类克隆方面的局限性。我们提出了一种新颖的端到端方法,称为基于图和文本数据的语义挖掘的源代码克隆检测(SCOTT),该方法整合了图和文本语义信息,以全面检测代码克隆模式。我们在Big-CloneBench等基准数据集上进行了广泛的实验。

    CRediT作者贡献声明

    高帅:概念化、方法论、软件、写作——原始草稿。翟天一:方法论、写作——原始草稿、软件。王旭:调查、方法论。刘泽宇:软件、验证。李哲:调查、监督。狄晓萌:软件、验证。

    利益冲突声明

    作者声明他们没有已知的竞争性财务利益或个人关系可能影响本文报告的工作。
    相关新闻
    生物通微信公众号
    微信
    新浪微博
    • 搜索
    • 国际
    • 国内
    • 人物
    • 产业
    • 热点
    • 科普

    知名企业招聘

    热点排行

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

      版权所有 生物通

      Copyright© eBiotrade.com, All Rights Reserved

      联系信箱:

      粤ICP备09063491号