How do Agents Refactor: An Empirical Study
University of Alberta(阿尔伯塔大学)
通过对比86个Java项目中智能体与开发者的重构拉取请求,发现智能体重构以注释修改为主,而Cursor是唯一显著增加代码味道的模型。
2026-05-24 cs.SE
Making Python Code Idiomatic by Automatic Refactoring Non-Idiomatic Python Code with Pythonic Idioms
与其他程序设计语言(例如,Java),Python有更多的习惯用法,使Python代码简洁高效。虽然Python语言习惯用法在Python社区中被广泛接受,但Python程序员在使用它们时经常面临许多挑战,例如,不知道某些Python语言习惯用法或不知道如何正确使用它们。基于对GitHub上7,638个Python存储库的分析,我们发现可以使用Python习语实现的非惯用Python代码频繁且广泛地出现。不幸的是,没有工具可以自动将这种非惯用代码重构为惯用代码。在本文中,我们设计并实现了一个自动重构工具,使Python代码的地道。通过系统地对比Python和Java的抽象语法,我们确定了九个Python习惯用法。然后,我们定义的语法模式,用于检测非惯用代码的每一个Python的习惯用法。最后,我们设计了原子AST重写操作和重构步骤,将非惯用代码重构为惯用代码。我们测试和审查了来自GitHub的1,065个Python项目的4,115个重构,并向84个项目提交了90个随机采样重构的90个pull请求。这些评估证实了我们的重构工具在真实Python代码上的高准确性,实用性和实用性。我们的重构工具可以通过47.242.131.128:5000访问。
2022-07-12 cs.SE
Refactoring for Novices in Java: An Eye Tracking Study on the Extract vs. Inline Methods
State University of Paraíba (UEPB)(帕拉伊巴州立大学);Federal University of Campina Grande (UFCG)(坎皮纳格兰德联邦大学);Federal University of Alagoas (UFAL)(阿拉戈阿斯联邦大学);University of Brasília (UnB)(巴西利亚大学);Pontifical Catholic University of Rio de Janeiro(里约热内卢天主教大学)
本研究通过眼动追踪分析,发现方法提取对初学者在复杂任务中提升性能有效,但对简单任务反而降低效率,强调了眼动追踪在软件重构评估中的重要性。
2026-03-05 cs.SE
On the Detection of High-Impact Refactoring Opportunities in Programs
我们提出了一种新的方法来检测重构的机会,通过测量的参与模式代表设计缺陷的实例类型之间的引用。这种技术的验证使用一个实验,我们分析了一组95个开源的Java程序的实例,代表模块化问题的四种模式。事实证明,我们的算法可以检测到高影响重构的机会-少量的引用,这样删除这些引用就可以从程序中删除大部分模式。
2011-03-16 cs.SE
IntelliTC: Automating Type Changes in IntelliJ IDEA
开发人员经常更改程序元素的类型。这种重构通常不仅涉及更新元素本身的类型,还涉及更新代码中所有依赖于类型的引用的API,因此它是乏味和耗时的。尽管类型更改比重命名更频繁,但目前只有少数IDE工具仅为一小部分硬编码类型提供部分自动化支持。研究人员最近提出了一种数据驱动的方法,使用代码提交历史来推断Java中类型更改模式的API重写规则。在本文中,我们建立在这些最新的进展,并介绍IntelliTC -一个工具来执行Java类型更改重构。我们将其实现为IntelliJ IDEA的插件,这是JetBrains开发的流行Java IDE。从用户体验的角度来看,我们提出了3种不同的方法来支持这种重构:经典模式、建议重构和检查模式。为了评估这些使用IntelliTC的方式,我们调查了22位经验丰富的软件开发人员。他们对该工具的有用性给予了积极评价。该插件的源代码和分发可在GitHub上获得:https://github.com/JetBrains-Research/data-driven-type-migration。演示视频在YouTube上:https://youtu.be/pdcfvADA1PY。
2022-05-07 cs.SE
Refactoring Graphs: Assessing Refactoring over Time
重构是软件演化过程中必不可少的活动。通常,从业者依靠这样的转换来提高源代码的可维护性和质量。因此,这个过程可能会产生新的源代码实体或改变现有实体的结构。有时,转换是原子的,即,在一次提交中执行。在其他情况下,它们生成随时间执行的修改序列。为了研究和推理随着时间的推移重构,在本文中,我们提出了一个新的概念称为重构图,并提供了一个算法来建立这样的图。然后,我们调查了10个流行的基于Java的开源项目的历史。在消除了琐碎的图之后,我们描述了1,150个重构图的大样本,提供了关于它们的大小,提交,年龄,重构组成和开发人员的定量数据。最后,我们讨论重构图的应用和影响,例如,以提高代码的理解,检测重构模式,和支持软件进化研究。
2020-03-10 cs.SE
ScarfBench: A Benchmark for Cross-Framework Application Migration in Enterprise Java
Rensselaer Polytechnic Institute(伦斯勒理工学院);IBM Software Innovation Labs(IBM软件创新实验室);Columbia University(哥伦比亚大学)
本文提出ScarfBench,一个用于评估企业Java应用跨框架迁移行为保持性的基准测试,通过专家编写实现三元组,涵盖Spring、Jakarta EE和Quarkus框架,生成102个变体和204个定向重构任务,评估了五种最先进的编码代理,并揭示了不同框架方向和架构层的难度差异。
2026-05-18 cs.SE
An Exploratory Study on Refactoring Documentation in Issues Handling
理解重构文档的实践在学术界和工业界都是至关重要的。大多数软件项目都使用问题跟踪系统,使开发人员,质量保证,管理人员和用户能够提交功能请求和其他任务,如错误修复和代码审查。虽然最近的研究探索了如何在提交消息中记录重构,但很少有人知道开发人员如何在问题中描述他们的重构需求。在这项研究中,我们的目标是探索开发人员报告的问题中的重构变化,以更好地了解开发人员认为他们的代码中存在什么问题以及他们如何处理它。我们的方法依赖于文本挖掘45,477个重构相关问题,并通过调查与15,833重构操作和开发者的显式重构意图。我们的研究结果表明:(1)开发人员大多使用与重构相关的术语/短语来解决重构相关的问题;(2)开发人员倾向于明确提到特定质量属性的改进,并专注于重复代码的删除。我们设想我们的研究结果使工具构建者能够支持开发人员自动记录问题中的重构更改。
2022-03-19 cs.SE
Evaluating the Effectiveness of Small Language Models in Detecting Refactoring Bugs
本研究评估小型语言模型在检测Java和Python重构缺陷中的有效性,发现o3-mini-high和Phi-4 14B表现最佳,SLMs能高效检测行为变化缺陷并跨类型泛化。
2025-03-28 cs.SE
Foundation Models as Oracles for Refactoring Correctness Detection
Federal University of Campina Grande(坎皮纳格兰德联邦大学);Federal University of Alagoas(阿拉戈阿斯联邦大学)
研究评估基础模型在Java程序重构错误检测中的有效性,通过零样本提示测试226个真实重构错误,GPT-5.4达到93.8%准确率,模型可提供解释并跨重构类型工作。
2026-08-14 cs.SE
Proactive Empirical Assessment of New Language Feature Adoption via Automated Refactoring: The Case of Java 8 Default Methods
随着时间的推移,程序设计语言和平台不断改进,有时会产生新的语言功能,提供许多好处。然而,尽管有这些好处,开发人员可能并不总是愿意在他们的项目中采用它们。在本文中,我们描述了一个实证研究,我们评估通过一个特定的新的语言功能。研究开发人员如何使用(或不使用)新的语言功能在程序设计语言研究和工程中很重要,因为它使设计人员了解语言的可用性,从而用该语言创建有意义的程序。反过来,这些知识可以推动该领域未来的创新。在这里,我们探索Java 8默认方法,它允许接口包含(实例)方法实现。默认方法可以简化接口的演化,使某些普遍存在的设计模式变得多余,并提高模块性和可维护性。这项工作的重点是通过科学的方法和新的技术,发现开发人员发现这些构造有用的情况,以及它们没有的原因。虽然有几项研究围绕着评估新的语言特征,但据我们所知,这种结构以前没有被考虑过。尽管有这些好处,但我们发现开发人员并不是在所有情况下都采用默认方法。我们的研究包括提交pull request,将语言特性引入19个真实世界的开源Java项目,而不改变原始程序语义。这种新颖的评估技术是主动的,因为采用是由自动重构方法驱动的,而不是等待开发人员自己发现和集成功能。通过这种方式,我们提出了更早而不是更晚有效使用语言功能的最佳实践和模式,并且能够指导(不久的)未来的语言发展。我们预见这种技术在评估其他新的语言特性、设计模式和其他编程习惯方面是有用…
2018-03-27 cs.PL cs.SE
How and When to Flatten Java Classes?
提高模块性和可重用性是面向对象编程的两个关键目标。这些目标是通过应用几个关键概念来实现的,例如数据封装和继承。面向对象系统中的类是设计的基本单位。评估一个面向对象类的质量可能需要扁平化这个类,并如实地表示它,包括所有可访问的继承类成员。因此,类扁平化有助于探索继承对提高代码质量的影响。本文解释了如何扁平化Java类,并讨论了类扁平化和一些软件从业者感兴趣的应用程序,如重构和指示外部质量属性之间的关系。
2014-05-08 cs.SE
Test Code Refactoring Unveiled: Where and How Does It Affect Test Code Quality and Effectiveness?
本文提出通过挖掘 GitHub 开源 Java 项目仓库,统计分析测试重构与质量指标、测试坏味道及覆盖率的关系,以揭示其对测试代码质量和有效性的影响。
2023-08-18 cs.SE
Testability Refactoring in Pull Requests: Patterns and Trends
要创建单元测试,可能需要重构产品代码,例如通过扩展对特定方法的访问或通过将类分解为更小的单元,这些单元更容易独立测试。我们报告了一项广泛的研究,以了解这种复合重构程序的目的,提高可测试性。我们收集并研究了来自621个GitHub项目的346,841个Java Pull请求。首先,我们比较了两个群体中的原子重构:具有更改的测试对的拉取请求(即,生产和测试代码中的共同更改,因此可能包括可测试性重构)和没有测试对的拉取请求。我们在测试对拉取请求中发现了更多的原子重构,例如更改变量类型操作或更改参数类型。其次,我们手动分析了200个拉取请求的代码更改,其中开发人员明确提到了术语“可测试性”或“重构+测试”。我们确定了10个复合重构过程,以达到可测试性的目的,我们称之为可测试性重构模式。第三,我们手动分析了另外524个测试对拉取请求:都是随机选择的,我们假设在其中找到可测试性重构,例如在关于依赖或并发问题的拉取请求中。在所有分析的拉取请求中,大约有25%实际上包含了可测试性重构模式。最常见的是提取一个方法用于覆盖或调用,扩大对方法的访问以进行调用,以及提取一个类以进行调用。我们还报告了与模式同时发生的频繁原子重构,并讨论了我们的研究结果对研究、实践和教育的影响
2023-03-24 cs.SE
Refactoring Delta-Oriented Product Lines to achieve Monotonicity
面向增量的编程(DOP)是一种灵活的转换方法来实现软件产品线。在面向增量的产品线中,变体是通过将包含在增量模块中的操作应用于(可能是空的)基本程序来生成的。这些操作可以添加、移除或修改程序中的命名元素(例如,Java程序中的类、方法和字段)。本文提出了将面向增量的生产线重构为单调形式的算法,即,或者仅包含添加和修改操作(单调递增),或者仅包含删除和修改操作(单调递减)。由于其结构简单,单调增量导向的产品线更容易分析。通过Java程序产品线DOP的核心演算形式化了这些算法,并给出了它们的正确性和复杂性。
2016-04-01 cs.LO cs.PL cs.SE
RefModel: Detecting Refactorings using Foundation Models
Federal University of Campina Grande(坎皮纳格兰德联邦大学);Federal University of Alagoas(阿拉戈阿斯联邦大学);North Carolina State University(北卡罗来纳州立大学)
针对现有静态重构检测工具扩展性、泛化性不足的问题,提出基于基础模型的重构检测工具RefModel,实验证明其性能媲美甚至优于传统工具,跨语言泛化性良好。
2025-07-15 cs.SE
Refactoring Deep Learning Code: A Study of Practices and Unsatisfied Tool Needs
本研究通过分析5个深度学习项目的4921项重构实践、调研159名从业者,揭示了深度学习代码重构的分布特点及现有工具的不足,为重构工具发展和开发实践提供了建议。
2025-08-04 cs.SE
From Custom Logic to APIs: Understanding and Recommending API Replacement Refactorings
School of Computer Science and Technology, Beijing Institute of Technology(北京理工大学计算机科学与技术学院);School of Computer Software, Tianjin University(天津大学计算机学院)
通过实证研究挖掘API替换重构的模式,提出混合框架AKIRA,结合模式确定性启发式与重构感知知识库,在推荐API替换重构上达到90%召回率和88%精确率。
2026-06-05 cs.SE
Detecting Refactoring Commits in Machine Learning Python Projects: A Machine Learning-Based Approach
本文提出 MLRefScanner,利用机器学习检测 Python ML 项目中的通用与 ML 特有重构提交,在 199 个项目上显著优于现有工具。
2024-04-09 cs.SE
AST-Based Automated Elimination of break and continue Statements in Java Code
University of Málaga(马拉加大学)
该研究开发了一个基于Eclipse JDT API的Java自动重构工具,通过引入辅助布尔变量重写抽象语法树,消除循环中的break和continue语句,保持语义等价,并经测试和开源项目验证,支持后续提取方法等重构。
2026-09-24 cs.SE
Towards Refactoring of DMARF and GIPSY Case Studies -- A Team 5 SOEN6471-S14 Project Report
本文分析了两个用Java开发的分布式开源系统(OSS)的体系结构设计:分布式模块化音频识别框架(DMARF)和通用内涵编程系统(GIPSY)。该研究从这些框架的背景研究开始,以确定其整体架构。然后,我们确定参与者和利益相关者,并为每个框架起草一个领域模型。接下来,我们评估并提出了一个融合DMARF在GIPSY运行时架构(DoGRTA)作为一个域的概念。后来,团队提取并研究了实际的类图,并确定了感兴趣的类。接下来,我们确定了每个框架的代码中存在的设计模式。最后,使用流行的工具检测源代码中的代码气味,并使用已建立的技术重构选定数量的已识别气味,并在最终的源代码中实现。在重构之前和之后编写并运行测试,以检查任何行为更改。
2014-12-23 cs.SE
Toward Refactoring of DMARF and GIPSY Case Studies a Team 7 SOEN6471-S14 Project Report
软件体系结构被定义为一个结构良好的解决方案的过程,它满足所有的技术和操作要求,并提高系统的质量属性,如可读性,可靠性,可维护性和性能。它涉及一系列设计决策,这些决策可能对系统质量属性和应用程序的整体成功产生相当大的影响。在这项工作中,我们首先分析和调查两个开源软件(OSS)平台DMARF和GIPSY,主要是在Java中实现的。许多研究论文已经被研究,以获得更多的见解和清晰的背景,他们的架构,增强,演变,挑战和功能。随后,我们提取并找到他们的需求,高层次的要求,和架构结构,导致重要的设计决策,从而影响他们的质量属性。首先,我们逆向工程每个系统的源代码,以重建其领域模型和类图模型。我们试图实现需求和其他设计工件之间的可追溯性,以保持一致。此外,我们进行了手动和自动重构技术,以摆脱一些现有的代码气味,最终获得更可读和更易于理解的代码,而不会影响其可观察的行为。
2014-12-18 cs.SE
Toward the Automatic Classification of Self-Affirmed Refactoring
Rochester Institute of Technology(罗切斯特理工学院);ETS Montreal, University of Quebec(魁北克大学蒙特利尔工程技术学院)
自我确认重构(SAR)的概念被引入来探索开发人员如何在提交消息中记录他们的重构活动,即,开发人员在代码更改期间有意引入的重构操作的显式文档。在我们之前的研究中,我们已经手动识别了重构模式,并定义了三个主要的常见质量改进类别,包括内部质量属性,外部质量属性和代码气味,只考虑重构相关的提交。然而,这种方法严重依赖于提交消息的手动检查。在本文中,我们提出了一个两步的方法,首先确定一个提交是否描述了开发人员相关的重构事件,然后根据重构常见的质量改进类别进行分类。具体来说,我们结合了N-Gram TF-IDF特征选择与二进制和多类分类器,建立一个新的模型来自动分类的重构的基础上,他们的质量改进类别。我们使用从精心设计的开源Java项目中提取的总共2,867条提交消息来挑战我们的模型。我们的研究结果表明,(1)我们的模型能够准确地分类SAR提交,优于基于模式和随机分类器的方法,并允许发现40个更相关的SAR模式,(2)即使使用相对较小的训练数据集,我们的模型也达到了高达90%的F-测量。
2020-09-19 cs.LG cs.SE
How We Refactor and How We Document it? On the Use of Supervised Machine Learning Algorithms to Classify Refactoring Documentation
Rochester Institute of Technology(罗切斯特理工学院);ETS Montreal, University of Quebec(魁北克大学蒙特利尔分校);University of Michigan(密歇根大学)
重构是一种在不改变系统外部行为的情况下改进系统设计的艺术。重构已经成为一个完善的和有纪律的软件工程实践,已经吸引了大量的研究假设重构的主要动机是需要改善系统结构。然而,最近的研究表明,开发人员可能会将重构纳入其他开发活动中,而不仅仅是改进设计。不幸的是,这些研究仅限于开发人员访谈和一组减少的项目。为了克服上述限制,我们的目标是通过挖掘和分类从800个Java项目中提取的111,884个包含重构的提交来更好地理解是什么促使开发人员应用重构。我们训练了一个多类分类器,将这些提交分为3个类别,即内部QA,外部QA和代码验证解决方案,以及传统的BugFix和Functional类别。这种分类挑战了重构的原始定义,它专门用于改进设计和修复代码气味。此外,为了更好地理解我们的分类结果,我们分析了提交消息,以提取开发人员经常用来描述其重构的文本模式。结果表明:(1)修复代码气味不是开发人员重构代码库的主要驱动力。请求重构的原因有很多,超出了它的传统定义;(2)重构的分布在生产和测试文件之间不同;(3)开发人员使用几种模式来有目的地针对重构;(4)从提交消息中提取的文本模式为开发人员如何记录他们的重构提供了更好的覆盖。
2020-10-26 cs.LG cs.SE
Object-oriented Programming Laws for Annotated Java Programs
面向对象的编程法则已经在不与行为接口规约语言(BISL)相结合的语言的上下文中提出。源代码和接口规范之间的强依赖性可能会在转换程序时造成许多困难。在本文中,我们介绍了一套面向对象的语言,如Java结合Java建模语言(JML)的编程法则。这套法律处理面向对象的功能,同时考虑到他们的规格。有些法律只涉及规约语言的特征。这些定律构成了一组小的转换,用于开发更精细的转换,如重构。
2010-03-25 cs.LO cs.PL cs.SE
Leveraging LLMs for Automated Translation of Legacy Code: A Case Study on PL/SQL to Java Transformation
本文以约250万行PL/SQL的VT系统为案例,研究利用大语言模型将PL/SQL自动翻译为Java,并提出结合引导链推理与n-shot提示的策略,验证了其在语法和功能正确性上的有效性,为遗留系统现代化提供了可扩展的自动化基础。
2025-08-27 cs.SE
RefAgent: A Multi-agent LLM-based Framework for Automatic Software Refactoring
Polytechnique Montreal(蒙特利尔大学)
RefAgent是一种基于多智能体的LLM框架,用于自动化软件重构,通过自我反思和工具调用能力提升重构效率和代码质量。
2026-03-04 cs.AI cs.SE
Do Design Metrics Capture Developers Perception of Quality? An Empirical Study on Self-Affirmed Refactoring Activities
背景重构是软件维护中的一项关键任务,通常用于执行最佳设计和实现实践或处理设计缺陷。一些研究试图通过挖掘软件存储库来检测重构活动,从而收集、分析和获得有关软件项目中重构实践的可操作数据驱动见解。瞄准我们的目标是确定,在文献中提出的各种质量模型,更符合开发人员的质量优化的愿景,当他们明确提到,他们正在重构,以改善他们。法我们从3,795个策划的开源Java项目中提取了大量与设计相关的重构活动,这些活动由开发人员在日常更改中应用和记录。特别是,我们提取了一个大规模的语料库的结构度量和反模式增强的变化,从中我们确定了1,245质量改进提交与其相应的重构操作,由软件工程师认为。此后,我们实证分析这些重构操作对一组常见的最先进的设计质量指标的影响。结果对所得结果的统计分析表明:(i)一些最先进的指标比其他指标更受欢迎;(ii)一些指标比其他指标更受重视。结论.我们验证了有各种各样的结构度量,可以代表不同程度的改进和软件质量的退化的内部质量属性。映射到主要质量属性的大多数度量确实捕获了提交消息中报告的开发人员质量改进的意图。
2019-07-10 cs.IR cs.SE
Automatic Build Repair for Test Cases using Incompatible Java Versions
本文提出一种在源代码层面进行依赖最小化的方法,通过移除测试用例执行所不需要的类和方法来修复因 Java 版本不兼容导致的构建失败,并在 Defects4J 上验证了其有效性和低开销。
2024-05-03 cs.SE
User Interface Design Smell: Automatic Detection and Refactoring of Blob Listeners
用户界面(UI)高度依赖于事件驱动的编程:小部件将UI事件(捕获用户的交互)发送给称为控制器的专用对象。控制器使用多个UI侦听器来处理这些事件以生成UI命令。首先,我们揭示了设计气味在描述和控制UI的代码中的存在。其次,我们证明了特定的代码分析是分析和重构UI代码所必需的,因为它与代码的其余部分耦合。我们对四个大型Java Swing和SWT开源软件系统进行了实证研究。我们研究在何种程度上的UI命令的数量,一个UI监听器可以产生的变化和故障倾向的UI监听器代码的影响。我们开发了一个静态代码分析,用于检测代码中的UI命令。我们发现了一种新的设计气味,称为Blob气味,它描述了可以产生两个以上UI命令的UI侦听器。我们提出了一个系统的静态代码分析过程,搜索我们在InspectorGuidget中实现的Blob Listeners。我们在四个软件系统上进行了实验,我们手动识别了53个Blob实例。InspectorGuidget成功检测到53个Blob侦听器中的52个。实验结果表明,该方法的准确率为81.25%,召回率为98.11%。然后,我们开发了一个半自动和行为保留的重构过程来删除Blob Listeners。在53个Blob Listener中,49.06%被自动重构。JabRef和FreeCol的修补程序已被接受并合并。与四个软件系统的开发人员的讨论评估了Blob的相关性。这项工…
2018-05-25 cs.HC cs.SE