Leveraging LLMs, IDEs, and Semantic Embeddings for Automated Move Method Refactoring

📄 arXiv: 2503.20934v2 📥 PDF

作者: Abhiram Bellur, Fraol Batole, Mohammed Raihan Ullah, Malinda Dilhara, Yaroslav Zharov, Timofey Bryksin, Kai Ishikawa, Haifeng Chen, Masaharu Morimoto, Shota Motoura, Takeo Hosomi, Tien N. Nguyen, Hridesh Rajan, Nikolaos Tsantalis, Danny Dig

分类: cs.SE, cs.AI

发布日期: 2025-03-26 (更新: 2025-10-16)

备注: Published at the International Conference on Software Maintenance and Evolution (ICSME'25)


💡 一句话要点

提出MM-assist,利用LLM、IDE和语义嵌入自动化Move Method重构,显著提升推荐准确率。

🎯 匹配领域: 支柱九:具身大模型 (Embodied Foundation Models)

关键词: 代码重构 MOVEMETHOD 大型语言模型 静态分析 检索增强生成

📋 核心要点

  1. 现有MOVEMETHOD重构工具推荐与专家开发者习惯不符,且缺乏对项目全局的理解。
  2. MM-assist结合LLM、IDE静态分析和RAG,过滤幻觉,实现端到端自动化重构。
  3. 实验表明,MM-assist在Recall@1和Recall@3上提升1.7倍,用户满意度高达82.8%。

📝 摘要(中文)

MOVEMETHOD是一种重要的重构方法。尽管现有研究工具可以推荐移动哪些方法以及移动到哪里,但这些推荐与专家开发人员执行MOVEMETHOD的方式并不一致。鉴于大型语言模型(LLM)的广泛训练及其对代码自然性的依赖,它们应该能够专业地推荐给定类中哪些方法错位以及哪些类是更好的宿主。我们对2016年LLM推荐的初步研究表明,LLM给出了专业的建议,但它们是不可靠的:高达80%的建议是幻觉。我们推出了第一个完全由LLM驱动的MOVEMETHOD重构助手,它可以自动化其整个端到端生命周期,从推荐到执行。我们设计了新颖的解决方案,使用IDE中的静态分析自动过滤LLM幻觉,并设计了一种新颖的工作流程,要求LLM具有自我一致性、批判性和对重构建议进行排序。由于MOVEMETHOD重构需要全局的、项目级别的推理,我们通过采用重构感知的检索增强生成(RAG)解决了LLM的有限上下文大小问题。我们的方法MM-assist协同结合了LLM、IDE、静态分析和语义相关性的优势。在我们彻底的、多方法学的实证评估中,我们将MM-assist与先前的最先进方法进行了比较。MM-assist显著优于它们:(i)在其他研究人员广泛使用的基准测试中,我们的Recall@1和Recall@3显示出1.7倍的改进;(ii)在来自开源软件的210个最新重构的语料库中,我们的Recall率提高了至少2.4倍。最后,我们对30名经验丰富的参与者进行了一项用户研究,他们使用MM-assist来重构他们自己的代码一周。他们对MM-assist推荐的82.8%给予了积极评价。这表明MM-assist既有效又实用。

🔬 方法详解

问题定义:MOVEMETHOD重构旨在将类中不属于它的方法移动到更合适的类中。现有工具的推荐结果与专家开发者的直觉不符,且缺乏对项目全局上下文的理解,导致推荐质量不高。此外,直接使用LLM进行推荐容易产生幻觉,导致不可靠的建议。

核心思路:利用LLM的代码理解能力,结合IDE的静态分析能力,以及RAG技术来扩展LLM的上下文窗口,从而实现更准确、更可靠的MOVEMETHOD重构推荐。通过设计自洽性检查和批判排序机制,进一步提升LLM推荐的质量。

技术框架:MM-assist的整体框架包含以下几个主要阶段:1) LLM推荐:利用LLM生成潜在的MOVEMETHOD重构建议。2) 幻觉过滤:使用IDE的静态分析工具过滤掉不合法的重构建议。3) RAG上下文增强:利用RAG技术,从项目中检索与重构相关的代码片段,扩展LLM的上下文窗口。4) 自洽性检查与批判排序:要求LLM对自身的推荐进行评估和排序,选择最合适的重构方案。5) 自动化执行:自动执行最终选择的MOVEMETHOD重构。

关键创新:该方法的核心创新在于:1) 结合LLM、IDE和RAG,实现端到端的自动化MOVEMETHOD重构。2) 设计了新颖的幻觉过滤机制,有效降低了LLM推荐的错误率。3) 引入自洽性检查和批判排序机制,提升了LLM推荐的质量和可靠性。4) 利用RAG技术解决了LLM上下文窗口有限的问题,使其能够进行项目级别的全局推理。

关键设计:RAG模块使用基于代码语义的嵌入向量进行检索,选择与目标方法最相关的代码片段。LLM使用特定的prompt进行指令,包括生成重构建议、评估建议的合理性、以及对建议进行排序。自洽性检查通过要求LLM给出多个独立的重构建议,并比较这些建议的一致性来实现。

🖼️ 关键图片

fig_0
fig_1

📊 实验亮点

实验结果表明,MM-assist在MOVEMETHOD重构推荐任务上显著优于现有方法。在常用基准测试中,Recall@1和Recall@3指标提升了1.7倍。在开源软件的真实重构数据集上,Recall率提升了至少2.4倍。用户研究表明,82.8%的MM-assist推荐被用户评价为积极。

🎯 应用场景

MM-assist可应用于软件开发过程中的代码重构环节,帮助开发者更高效、更准确地进行MOVEMETHOD重构,提升代码质量和可维护性。该工具能够减少人工分析和决策的时间,降低重构成本,并有望推广到其他类型的代码重构任务中。

📄 摘要(原文)

MOVEMETHOD is a hallmark refactoring. Despite a plethora of research tools that recommend which methods to move and where, these recommendations do not align with how expert developers perform MOVEMETHOD. Given the extensive training of Large Language Models and their reliance upon naturalness of code, they should expertly recommend which methods are misplaced in a given class and which classes are better hosts. Our formative study of 2016 LLM recommendations revealed that LLMs give expert suggestions, yet they are unreliable: up to 80% of the suggestions are hallucinations. We introduce the first LLM fully powered assistant for MOVEMETHOD refactoring that automates its whole end-to-end lifecycle, from recommendation to execution. We designed novel solutions that automatically filter LLM hallucinations using static analysis from IDEs and a novel workflow that requires LLMs to be self-consistent, critique, and rank refactoring suggestions. As MOVEMETHOD refactoring requires global, projectlevel reasoning, we solved the limited context size of LLMs by employing refactoring-aware retrieval augment generation (RAG). Our approach, MM-assist, synergistically combines the strengths of the LLM, IDE, static analysis, and semantic relevance. In our thorough, multi-methodology empirical evaluation, we compare MM-assist with the previous state-of-the-art approaches. MM-assist significantly outperforms them: (i) on a benchmark widely used by other researchers, our Recall@1 and Recall@3 show a 1.7x improvement; (ii) on a corpus of 210 recent refactorings from Open-source software, our Recall rates improve by at least 2.4x. Lastly, we conducted a user study with 30 experienced participants who used MM-assist to refactor their own code for one week. They rated 82.8% of MM-assist recommendations positively. This shows that MM-assist is both effective and useful.