超越提示:一个用于代码克隆重构的LLM驱动工作流
《Information and Software Technology》:Beyond prompting: An LLM-driven workflow for code clone refactoring
【字体:
大
中
小
】
时间:2026年11月01日
来源:Information and Software Technology 4.6
编辑推荐:
摘要背景:代码克隆会增加维护成本和不一致性风险。提取方法(Extract Method)可以消除重复,但正确的转换必须能够编译、保持行为,并创建一个有意义且共享的抽象。一次性的大语言模型(LLM)生成往往无法同时满足这三个要求。目标:我们评估一个结构化、由LLM驱动的提取方法工作
摘要背景:代码克隆会增加维护成本和不一致性风险。提取方法(Extract Method)可以消除重复,但正确的转换必须能够编译、保持行为,并创建一个有意义且共享的抽象。一次性的大语言模型(LLM)生成往往无法同时满足这三个要求。目标:我们评估一个结构化、由LLM驱动的提取方法工作流的端到端有效性,分析克隆大小的影响,将其与JDeodorant进行比较,并通过消融实验量化其主要组成部分的贡献。方法:该工作流将克隆检测、重构生成、结构检查、编译和行为测试分离开来。多个智能体评估候选输出,同时检索增强生成(RAG)提供示例。一个基于程序结构接口(PSI)的检查器验证输出是否执行了有意义的提取方法转换。结果:我们使用Deckard从ArgoUML项目中收集的真实克隆实例来评估该工作流。在人工确认的克隆对上,该工作流总体实现了93.1%的召回率、90.0%的有用性、80.0%的编译成功率,以及69.2%的测试成功率。结果还表明,克隆大小对重构稳定性有显著影响。没有哪个大小组在所有指标上占优:中等克隆的有用性最高,小克隆的编译成功率最高,小克隆和中等克隆的测试成功率相同,而大克隆在后续验证阶段仍然更具挑战性。为了检验跨项目的泛化能力,我们在Apache Tomcat的120个克隆实例上重复了评估。在480次模型级评估中,66.3%的重构通过了所有测试,并且再次观察到与大小相关的变化,尽管最强组取决于指标和模型。对于DeepSeek v3.2,去除RAG使其测试成功率从70.0%的模型特定基线降至30.8%;其他消融实验产生较小的下降。结论:可靠的基于LLM的克隆重构受益于分阶段验证、结构检查和迭代反馈。引言代码克隆在软件开发中很常见,因为开发者经常通过复制粘贴来重用现有可工作的代码。虽然这种做法可以加快开发速度,但也可能引入错误和维护问题。当同一片段出现在多个位置时,任何更改都应一致地应用于每个副本;遗漏一个副本可能导致不一致,并增加未来的维护成本[1],[2]。为了解决克隆代码可能带来的问题,对这些代码进行重构非常重要。代码重构指的是在不改变内部行为的情况下改进结构的过程[3]。有许多不同的代码重构方法,其中提取方法重构是解决代码克隆问题最常用的技术之一[3],[4],[5]。提取方法重构将克隆代码移动到一个单独的方法中,然后用共享的方法调用替换原始克隆。然而,在应用提取方法重构时,开发者需要确保它保持原始功能并能够无问题编译,这使得重构并不容易。随着近年来大语言模型的快速发展,研究者开始研究LLM是否能够辅助代码克隆检测[6],[7]和重构[8],[9]。来自OpenAI等供应商的最新模型可以生成代码并理解编程模式。最近的一项实证研究[10]评估了GPT-4o在真实项目中分类和重构代码克隆的能力。他们的研究发现,LLM在简单克隆上表现良好。然而,当克隆变得更复杂时,性能显著下降。他们还发现,几个LLM在提取方法重构方面出现了幻觉模式。尽管明确指示,LLM生成的重构并不总是遵循提取方法的定义,因此提取模式并不总是有用。在他们的工作中,他们发现了诸如不完整重构、直接删除克隆、将逻辑分割成多个小方法、或者提取了比必要更多的代码等模式。这些发现表明,使用一次性生成的单个LLM无法可靠地处理代码克隆的完整检测和修正。重构需要多个步骤:检测克隆、规划重构、生成代码、检查编译以及运行测试。多智能体系统[11],[12],[13],[14]为克隆检测和重构提供了一个新方向。与其使用单个LLM处理整个任务,我们可以为专门化的智能体分配不同角色。每个智能体专注于特定任务,并使用工具与开发环境交互。这种设计在其他软件工程任务中已经取得成功。例如,RefAgent[11]使用四个专门化的智能体进行重构,并通过迭代反馈循环实现了90%的单元测试通过率。受这些方法的启发,我们提出了一个专门为代码克隆检测和重构设计的LLM驱动框架。我们的框架在开发者粘贴代码时触发,灵感来自AntiCopyPaster工具[15],[16],[17],[18]。我们的框架通过多种设计解决了之前工作中观察到的局限性。我们不依赖单个LLM同时进行检测和重构,而是采用LLM驱动的工作流。在我们的设置中,我们设计了几个智能体,每个负责一个特定任务。检测智能体使用LLM推理和基于PSI的备用方案来识别克隆候选。重构智能体在检索增强示例的指导下生成提取方法重构。有用性检查器评估生成的重构是否通过有意义的提取方法转换真正消除了重复。编译验证器验证语法正确性,测试验证器使用EvoSuite[19]自动生成的测试检查行为保持。此外,我们在检测、重构和有用性检查阶段使用基于LLM的评审员和策展智能体。评审员提供多个独立判断或候选输出,而策展者汇总这些结果并在工作流进入下一阶段之前选择最可靠的决策。与EM-Assist[20],[21]主要专注于验证和过滤LLM生成的重构候选不同,我们的方法将克隆重构建模为一个从克隆检测开始的端到端工作流。该工作流将克隆检测、评审员共识、基于PSI的备用检测、有用性检查、编译验证、测试验证以及迭代反馈驱动的修复统一到一个多阶段过程中,用于提取方法重构。其次,我们引入了一个有用性检查器,显式过滤掉先前实证研究[10]中发现的有问题的重构模式。除了基于LLM的评审员和策展者外,该检查器还使用基于PSI的结构分析和标记相似性来检测先前工作中观察到的无用的重构结果。只有成功编译、通过所有测试、满足有用性检查并获得人类开发者批准的重构才会应用到代码中。第三,我们采用检索增强生成(RAG)向重构智能体提供正确的提取方法重构的具体示例。这种方法将LLM的生成过程建立在已证实的模式上,而不是仅依赖其训练数据。重要的是,我们工作流中的智能体并非独立完成每个任务。相反,我们包含一个反馈循环。如果后面的组件(如有用性检查器、编译验证器和测试验证器)失败,它们会将错误消息发送回重构智能体,使工作流能够迭代地优化结果。我们使用来自Java项目ArgoUML的120个克隆案例评估我们的方法。在这120个案例中,我们涵盖了类型1、类型2和类型3克隆。我们遵循Roy等人[1]总结的标准类型1、类型2和类型3定义:•类型1:精确副本,除了空白、注释和布局。•类型2:仅在标识符、字面量或数据类型上有所不同。•类型3:大部分相似,但包括添加、删除或修改的语句。我们围绕四个研究问题组织评估:RQ1衡量基于LLM的克隆重构工作流的端到端有效性;RQ2检查克隆大小如何影响检测、有用性、编译和测试;RQ3将基于LLM的工作流与传统的重构工具JDeodorant进行比较;RQ4使用消融实验量化检索、有用性检查、迭代反馈以及评审员-策展者架构的贡献。本文的贡献如下:•我们设计了一个用于代码克隆检测和提取方法重构的LLM驱动框架,该框架结合了基于LLM的评审员、策展者以及基于PSI的备用机制,以提高检测依据和重构可靠性。•我们引入了一个基于PSI分析的有用性检查器,并结合基于LLM的有用性评审员和策展智能体,以检测、验证和过滤先前工作[10]中观察到的无用重构模式。•我们实现了检索增强生成,在检测和重构阶段向LLM提供克隆检测和重构示例。•我们对来自ArgoUML和Apache Tomcat的真实类型1、类型2和类型3克隆进行了实证评估,分析了大小效应,与JDeodorant进行了比较,并进行了受控的消融研究。•我们公开了数据集、提示和脚本[22]。本文的其余部分组织如下:第2节回顾了克隆检测和重构的相关工作。第4节介绍了工作流和评估设计。第5节报告了实验结果。第6节讨论了有效性威胁,第7节总结了论文。章节片段代码克隆检测传统的克隆检测技术使用基于文本、标记、树或语义表示来比较源代码[1]。Deckard将代码表示为从抽象语法树导出的特征向量,并在大规模范围内搜索相似的向量[23]。NiCad则使用解析、灵活的漂亮打印、规范化和文本比较来检测精确和近似克隆[24]。由于检测器的输出取决于其表示、规范化规则和相似性提取方法重构基础提取方法是一种保持行为的重构,它将一个或多个方法中的连贯语句块移动到一个新引入的辅助方法中。原始语句被对该辅助方法的调用所取代,从而减少重复并赋予共享行为一个显式的抽象。清单1提供了一个最小化的前后示例。重构前,验证和持久化操作在两个方法中重复。重构后,两个方法都委托给RQ1:工作流有效性。基于LLM的克隆重构工作流在克隆检测召回率、结构有用性、编译成功率和行为保持方面有多有效?RQ2:克隆大小的影响。克隆大小如何影响基于LLM的克隆重构工作流的每个阶段?RQ3:与常规工具的比较。基于LLM的克隆重构工作流在适用性和验证后的提取方法结果方面与JDeodorant相比如何?RQ4:消融研究。RAG、有用性检查器、迭代反馈和评审员-策展者架构对实验结果部分在本节中,我们讨论实验的结果和发现。内部有效性。一个潜在的威胁来自有用性的评估方式。在这项研究中,有用性通过基于规则的结构检查来操作化,例如克隆相似性降低和PSI级别的提取方法重构证据。这些规则基于我们先前实证研究中确定的失败模式,包括不完整重构、过度重构和逻辑碎片化。然而,由于本研究的作者也参与了先前的失败分类和结论本文研究了一个结构化、由LLM驱动的工作流是否能提高基于LLM的克隆重构的可靠性。我们专注于提取方法重构作为目标操作。结果表明,所提出的工作流在来自ArgoUML的120个真实克隆组上是有效的。在480次模型级评估中,该工作流在确认的克隆对上实现了93.1%的召回率、90.0%的有用性、80.0%的编译成功率和69.2%的测试成功率。这些结果表明,该工作流可以CRediT作者贡献声明Xing Qian:写作——审阅与编辑,写作——原稿,可视化,验证,软件,方法论,调查,正式分析,数据管理,概念化。Amy Arias Ramirez:写作——审阅与编辑,可视化,验证,正式分析。Eman Abdullah AlOmar:写作——审阅与编辑,验证,监督,资源,项目管理,方法论,调查,资金获取,正式分析,概念化。生成式AI和AI辅助技术的声明在写作过程中,第一作者使用ChatGPT来促进研究方向的头脑风暴,提高稿件的语言可读性和流畅度,并协助实现架构,特别是用于有用性检查器,以及修复错误。AI还被用于提示优化和生成编译与测试执行的自动指令。在使用这些工具/服务后,第一作者审查并编辑了利益冲突声明作者声明,他们没有已知的竞争财务利益或个人关系,可能影响本文报告的工作。Xing Qian|Amy Arias Ramirez|Eman Abdullah AlOmar史蒂文斯理工学院,霍博肯,新泽西州,美国
生物通微信公众号
生物通新浪微博
今日动态 |
人才市场 |
新技术专栏 |
中国科学人 |
云展台 |
BioHot |
云讲堂直播 |
会展中心 |
特价专栏 |
技术快讯 |
免费试用
版权所有 生物通
Copyright© eBiotrade.com, All Rights Reserved
联系信箱:
粤ICP备09063491号