Refactoring for Reuse: An Empirical Study
重构是优化软件健康的实际实践。虽然一些研究提出了重构策略,通过应用设计模式和删除设计缺陷来优化软件设计,但很少有人知道开发人员实际上如何重构代码以提高其重用性。因此,我们从1,828个开源项目中提取了一组旨在提高软件可重用性的重构。我们分析了可重用性重构对最先进的可重用性度量的影响,并比较了可重用性重构类型的分布,以及其余主流重构的分布。总的来说,我们发现在可重用性的上下文中应用的重构类型的分布与主流开发中重构类型的分布不同。在为提高可重用性而执行的重构中,源文件受到更多设计级别类型的重构的影响。可重用性重构会显著影响高级代码元素,如包、类和方法,而典型的重构会影响所有代码元素,包括标识符和参数。这些发现提供了实际的见解,目前的重构实践中的代码重用的背景下,涉及重构的行为。
2021-11-13 cs.SE
RePOR: Mimicking humans on refactoring tasks. Are we there yet?
重构是一种维护活动,旨在提高设计质量,同时保持系统的行为。已经提出了几种(半)自动化的方法,以支持开发人员在此维护活动的基础上,纠正反模式,这是“穷人”的解决方案,经常性的设计问题。然而,很少有定量的证据存在的影响,自动重构的代码对程序的理解,在这种情况下,自动重构可以有效的手动重构。利用RePOR,一种基于偏序约简技术的自动重构方法,我们进行了一项实证研究,以调查自动重构代码结构是否会影响系统在理解任务中的可理解性。(1)我们调查了80名开发人员,要求他们从一组20个重构更改中识别出它们是由开发人员还是由工具生成的,并根据它们的设计质量对重构更改进行评级;(2)我们要求30名开发人员在10个由自由职业者或自动重构工具重构的系统上完成代码理解任务。为了使比较公平,对于引入新代码实体的重构操作子集,只向从业者提供合成标识符。我们使用NASA任务负荷指数来衡量开发人员的表现,包括他们的努力、他们执行任务所花费的时间以及他们正确答案的百分比。我们的研究结果表明,尽管目前的技术限制,这是合理的期望重构工具,以匹配开发人员的代码。
2019-05-17 cs.SE
Making refactoring decisions in large-scale Java systems: an empirical stance
决定重构哪些类充满了困难。识别候选类的问题变得尖锐时,面对大型系统,包括数百或数千类。在本文中,我们描述了一个度量的关键类,因此重构的候选人,可以确定。从三个大型Java系统的源代码中提取了量化两种形式的耦合,继承和聚合,以及其他两个类的功能(方法和属性的数量)的使用的措施。我们的研究表明,从其他研究领域的度量可以适应软件工程过程。每个系统在所确定的关键类别方面存在很大差异,因此这些系统之间重构这些类别的机会也各不相同。
2003-06-16 cs.SE
Together We Go Further: LLMs and IDE Static Analysis for Extract Method Refactoring
本文提出结合LLM与IDE静态分析的Extract Method重构方法EM-Assist,通过消除LLM幻觉并利用程序切片排序建议,在1752个场景中召回率达53.4%,获81.3%工业开发者认可。
2024-04-24 cs.SE
Testing Refactoring Engine via Historical Bug Report driven LLM
提出RETESTER框架,利用历史缺陷报告和思维链提示生成重构变体,通过差分测试在Eclipse和IntelliJ IDEA中发现18个新缺陷。
2025-01-22 cs.SE
An Exploratory Study on Refactoring Documentation in Issues Handling
理解重构文档的实践在学术界和工业界都是至关重要的。大多数软件项目都使用问题跟踪系统,使开发人员,质量保证,管理人员和用户能够提交功能请求和其他任务,如错误修复和代码审查。虽然最近的研究探索了如何在提交消息中记录重构,但很少有人知道开发人员如何在问题中描述他们的重构需求。在这项研究中,我们的目标是探索开发人员报告的问题中的重构变化,以更好地了解开发人员认为他们的代码中存在什么问题以及他们如何处理它。我们的方法依赖于文本挖掘45,477个重构相关问题,并通过调查与15,833重构操作和开发者的显式重构意图。我们的研究结果表明:(1)开发人员大多使用与重构相关的术语/短语来解决重构相关的问题;(2)开发人员倾向于明确提到特定质量属性的改进,并专注于重复代码的删除。我们设想我们的研究结果使工具构建者能够支持开发人员自动记录问题中的重构更改。
2022-03-19 cs.SE
State of Refactoring Adoption: Better Understanding Developer Perception of Refactoring
本研究提出自我确认重构(SAR)概念与分类识别方法,结合评审调查和工业案例,揭示重构评审难点,给出文档化流程建议,为重构相关研究与实践提供支持。
2023-06-09 cs.SE
Refactoring Assertion Roulette and Duplicate Assert test smells: a controlled experiment
测试气味会降低开发人员与测试代码交互的能力。重构测试代码提供了一种安全的策略来处理测试气味。然而,手动重构活动并不是一个简单的过程,它通常是乏味的并且容易出错。本研究旨在评估RAIDE,一个自动识别和重构测试气味的工具。我们提出了RAIDE的实证评估,在其中,我们分析了它在重构断言轮盘赌和重复断言测试气味的能力,并将结果与手动重构和最先进的方法进行了比较。结果表明,RAIDE提供了一个更快,更直观的方法来处理测试气味比使用自动化的气味检测工具结合手动重构。
2022-07-12 cs.SE
ActRef: Enhancing the Understanding of Python Code Refactoring with Action-Based Analysis
ActRef 提出基于代码变更操作的重构分析框架,覆盖变量到模块多粒度并支持多种重构类型,在 1,914 个实例上取得 0.80 精确率和 0.92 召回率,优于多个基线。
2025-05-10 cs.SE
Empirical Evaluation of a Live Environment for Extract Method Refactoring
针对传统重构工具反馈慢的问题,提出聚焦实时可视化建议与应用的实时重构概念,开发可识别、推荐并应用提取方法重构的实时环境,实证实验显示其能改进多项代码质量指标,效果显著优于无辅助手动重构。
2023-07-20 cs.SE
Build Code Needs Maintenance Too: A Study on Refactoring and Technical Debt in Build Systems
本文研究了开源项目中构建脚本的重构及其对技术债务的解决情况,提出了首个构建系统重构分类法,并开发了基于GPT-4o的自动化检测工具BuildRefMiner。
2025-04-02 cs.SE
Leveraging Game-Based Platform to Teach Code Refactoring: An Experience with Refactoria
Stevens Institute of Technology(史蒂文斯理工学院)
本文通过课堂实验评估了基于游戏的工具 Refactoria 在教授代码重构和代码异味识别方面的效果,结果显示其感知有用性高,并能有效促进学生对重构概念的理解。
2026-10-01 cs.SE
Do Developers Refactor Data Access Code? An Empirical Study
开发人员经常重构代码以提高软件的可维护性和可理解性。对于传统软件系统中的重构活动有很多研究。然而,数据密集型系统中的重构还没有得到很好的探索。了解开发人员的重构实践是很重要的开发有效的工具support.We进行了一项纵向研究的重构活动的数据访问类使用12个数据密集型主题系统。我们调查了重构的流行和演变,以及重构与数据访问气味的关联。我们还对超过378个数据访问重构实例的样本进行了手动分析,以确定这些重构所针对的代码功能。我们的研究结果表明:(1)数据访问重构是普遍存在的,并在类型上有所不同。\textit{Rename variable}是最流行的数据访问重构。(2)重构的流行程度和类型随着系统的发展而变化。(3)大多数数据访问重构的目标代码实现数据获取和插入。(4)数据访问重构通常不涉及SQL查询。总体而言,结果表明,数据访问重构专注于提高代码质量,而不是底层的数据访问操作。因此,研究社区需要做更多的工作,为从业者提供意识和支持,了解通过重构解决数据访问气味的好处。
2022-02-07 cs.SE
RefDiff: Detecting Refactorings in Version Histories
重构是一种众所周知的技术,被软件工程师广泛采用,以改进设计并使系统能够进化。了解在代码更改中应用了哪些重构操作对于理解软件演化、调整软件组件、合并代码更改和其他应用程序是有价值的信息。在本文中,我们提出了RefDiff,这是一种自动化方法,可以识别git存储库中两个代码修订之间执行的重构。RefDiff采用了基于静态分析和代码相似性的方法来检测13种常见的重构类型。在使用分布在7个Java项目中的448个已知重构操作的Oracle进行的评估中,我们的方法实现了100%的精确度和88%的召回率。此外,我们的评估表明,RefDiff比现有的最先进的方法具有更高的精度和召回率。
2017-04-05 cs.SE
Diagnosing Refactoring Dangers
本文提出了一种检测重构风险的概念模型及Eclipse插件ReFD,通过微步骤划分和判定机制识别实际风险并减少误报,为开发者提供可操作的重构风险解决方案。
2024-11-13 cs.SE
Behind the Scenes: On the Relationship Between Developer Experience and Refactoring
重构被广泛认为是通过实施最佳设计实践或处理设计缺陷来管理技术债务和维护健康软件项目的有效技术之一。以前的重构调查表明,代码重构活动主要是由开发人员执行的,他们对系统的设计有足够的了解,并在开发团队中担任领导角色。然而,这些调查主要限于具体的项目和公司。在本文中,我们通过分析800个开源项目来探索以前结果的普遍性。我们挖掘他们的重构活动,并确定他们相应的贡献者。然后,我们将经验得分与每个贡献者相关联,以测试与得分较高的开发人员是否倾向于1)执行更多的重构操作2)在重构背后表现出不同的动机3)更好地记录他们的重构活动有关的各种假设。我们发现:(1)尽管重构并不局限于一部分开发人员,但那些贡献分数较高的开发人员往往比其他人执行更多的重构;(2)虽然重构背后的经验和动机之间没有相关性,但顶级贡献的开发人员被发现执行更广泛的重构操作,而不管其复杂性如何;以及(3)贡献最大的开发人员倾向于较少地记录他们的重构活动。我们对三个随机抽样项目的定性分析表明,负责大多数重构活动的开发人员通常在他们的开发团队中处于高级位置,这表明他们对系统设计的广泛了解。
2021-09-23 cs.SE
ChatGPT for Code Refactoring: Analyzing Topics, Interaction, and Effective Prompts
本文通过文本挖掘 29,778 条 ChatGPT 交互中的 715 条重构相关对话,分析开发者表达重构需求的方式及 ChatGPT 的回应,以理解重构交互并提升提示有效性。
2025-09-09 cs.SE
How to Refactor this Code? An Exploratory Study on Developer-ChatGPT Refactoring Conversations
本研究通过挖掘17,913条开发者与ChatGPT的重构对话,揭示开发者常提出通用重构请求,而ChatGPT回应包含明确意图,并识别出多种提示学习设置,为AI辅助重构协作提供洞见。
2024-02-08 cs.SE
On the Relationship Between Coupling and Refactoring: An Empirical Viewpoint
[背景]重构在过去的二十年中已经成熟,成为开发人员工具包的一部分。然而,许多基础研究问题仍然在很大程度上未被探索。[Aim]本文的目标是调查的最高和最低的四分位数的重构为基础的数据使用两个耦合度量-对象之间的耦合度量和最近的概念耦合类之间的度量来回答这个问题。重构的趋势和模式可以根据类耦合的级别来识别吗?[方法]在本文中,我们分析了从三个开源系统的发布中提取的六千多个重构操作,以解决这样一个问题。[结果]结果显示,对于两个指标,在耦合的上四分位数或下四分位数中应用的重构类型没有有意义的差异;在某些情况下,通常与耦合去除相关的重构实际上在下四分位数中更多。还注意到所有系统都缺乏与继承相关的重构。[结论]新出现的消息(也是令人困惑的消息)是,当涉及到重构类型时,开发人员似乎对高耦合的类漠不关心-他们以几乎相同的方式对待相对低耦合的类。
2019-08-05 cs.SE
Deciphering Refactoring Branch Dynamics in Modern Code Review: An Empirical Study on Qt
本研究通过定量与定性分析 Qt 项目中 2,154 次审查,揭示了 Refactor 分支中重构代码审查的流程、开发者关注点及面临的挑战,并构建了包含 12 项审查标准的分类体系。
2025-01-30 cs.SE
Industry Experiences with Large-Scale Refactoring
软件重构在软件工程中占有重要地位。当开发人员想要重构软件以提高其质量而不改变其外部行为时,他们通常会转向重构。研究表明,小规模(floss)重构在行业中很常见,通常可以由单个开发人员在短时间内执行,尽管开发人员手动完成大部分工作而不是使用重构工具。然而,一些重构工作的规模要大得多,需要整个团队和数月的努力,而工具在这些工作中的作用还没有得到很好的研究。在本文中,我们报告了我们对开发人员进行的一项调查,以了解大规模重构,其流行程度,以及工具如何支持它。我们来自107个行业开发人员的结果表明,项目通常会经历多次大规模重构,每一次都需要相当大的努力。虽然经常需要重构,但其他业务问题(如开发新功能)通常具有更高的优先级。我们的研究发现,开发人员使用几类工具来支持大规模重构,并且更依赖于IDE等通用工具,而不是专门为支持重构而设计的工具。不同活动的工具支持各不相同,一些特别具有挑战性的活动实际上很少使用工具。我们的研究表明了对更好的大规模重构工具的明确需求,以及重构研究人员在行业中发挥作用的机会。我们在本文中总结的结果是实现这一目标的具体步骤。
2022-02-15 cs.SE
Mutation Testing as a Safety Net for Test Code Refactoring
重构是一种改进代码内部结构而不改变其外部行为的活动。当在生产代码上执行时,测试可以用于验证生产代码的外部行为是否被保留。然而,当对测试代码执行重构时,没有安全网来确保测试代码的外部行为得到保留。在本文中,我们建议采用突变测试作为一种手段,以验证测试代码的行为被重构后保留。此外,我们还展示了如何使用这种方法来识别部分的测试代码是不正确的重构。
2015-06-24 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
Bugs in the Shadows: Static Detection of Faulty Python Refactorings
针对Python动态类型系统导致自动化重构易引入类型错误的问题,本文提出静态分析技术检测重构引入的类型错误,在Rope及主流IDE的重构实现中发现多个已被开发者确认的缺陷,为提升重构工具鲁棒性提供了依据。
2025-07-01 cs.SE
How Do I Refactor This? An Empirical Study on Refactoring Trends and Topics in Stack Overflow
作为软件维护和演化的重要组成部分,重构由开发人员执行,无论技术或领域如何,以提高系统的内部质量,并减少其技术债务。然而,选择合适的重构策略并不总是那么简单,这导致开发人员寻求帮助。虽然重构的研究已经很成熟,有几项研究在检测重构机会和建议适当的代码更改之间进行了改变,但对它们在实践中的采用知之甚少。分析开发人员的认知对于更好地理解开发人员认为代码中存在的问题以及他们如何处理这些问题至关重要。此外,需要通过提取更适合开发人员实际情况的常见重构意图,来弥合研究重构与实际应用之间的差距。在这项研究中,我们通过一系列定量和定性的实验,分析重构讨论堆栈溢出。我们的研究结果表明,堆栈溢出是由一组不同的开发人员用于重构援助的各种技术。我们的观察显示了开发人员在重构时通常需要帮助的五个方面--代码优化、工具和IDE、体系结构和设计模式、单元测试和数据库。我们设想我们的研究结果更好地桥接重构的传统(或学术)方面与其现实世界的适用性之间的支持,包括更好的工具支持。
2021-10-23 cs.SE
Detecting Behavioral Changes in Python Refactoring Implementations with Foundation Models
Federal University of Campina Grande(坎皮纳格兰德联邦大学);Federal University of Alagoas(阿拉戈阿斯联邦大学);Pontifical Catholic University of Rio de Janeiro(里约热内卢天主教大学)
本研究提出基于基础模型Oracle的方法,通过分析git风格差异检测Python重构的行为变化,在Rope上评估发现13个bug,12个被接受,凸显需提升Python重构工具鲁棒性。
2026-08-11 cs.SE
Toward Refactoring of DMARF and GIPSY Case Studies -- a Team 9 SOEN6471-S14 Project Report
软件体系结构由一系列决策组成,这些决策是为了提供满足所有技术和操作需求的结构化解决方案而做出的。本文涉及代码重构。代码重构是一个在不改变代码外部行为的情况下改变代码内部结构的过程。本文重点介绍了开源系统DMARF和GIPSY的实验研究。我们查阅了各种研究论文并分析了它们的架构。重构提高了代码的可理解性、可维护性和可扩展性。代码气味是通过各种工具识别的,如JDeodorant、Logiscope和CodePro。为了更好地理解系统,对DMARF和GIPSY进行了逆向工程。用于此的工具是Object Aid UML。为了更好地理解用例,建立了领域模型、设计类图。
2014-12-23 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
Assessing the Impact of Refactoring Energy-Inefficient Code Patterns on Software Sustainability: An Industry Case Study
本文通过大型应用行业案例研究,评估自动化工具识别并重构能源低效代码模式的效果,发现重构后每用户每月能耗降低29%。
2025-06-11 cs.SE
How do Agents Refactor: An Empirical Study
University of Alberta(阿尔伯塔大学)
通过对比86个Java项目中智能体与开发者的重构拉取请求,发现智能体重构以注释修改为主,而Cursor是唯一显著增加代码味道的模型。
2026-05-24 cs.SE
On the Documentation of Refactoring Types
提交消息是软件文档的原子级。它们提供代码更改及其目的的自然语言描述。消息对于软件维护和程序理解是至关重要的。与记录功能更新和错误修复不同,开发人员如何记录他们的重构活动知之甚少。开发人员可以出于各种原因执行多个重构操作,包括移动方法、提取类。然而,没有系统的研究,分析在何种程度上重构的文档准确地描述了重构操作在源代码级别执行。因此,本文挑战重构文档的能力,充分预测重构类型,在提交级别执行。我们的分析依赖于提交消息的文本挖掘来提取更好地代表每个类的相应特征。提取特定于每个重构的文本模式允许设计一个模型,该模型验证这些模式与其相应重构的一致性。这样的验证过程可以通过自动预测所应用的重构的方法级别类型来实现,即提取方法、内联方法、移动方法、上拉方法、下推方法和嵌入方法。我们使用5,004个提交的数据集,比较了各种分类器和基于关键字的基线方法的预测性能。我们的主要发现表明,重构类型预测的复杂性因类型而异。研究发现,重构方法和提取方法是记录最好的重构活动,而上拉方法和下推方法是最难通过文本描述来识别的。这些发现使开发人员注意到更加关注这些类型的文档的必要性。
2021-12-02 cs.SE
Continuous Autonomous Refactoring: A Research Roadmap for AI-Driven Code Quality Maintenance
Linköping University(林雪平大学)
该研究提出将LLM驱动的代码重构作为软件维护的持续环节,围绕五个维度构建路线图,明确跨领域关注点,以推动自主重构向系统级质量维护发展。
2026-09-02 cs.SE
Software refactoring and rewriting: from the perspective of code transformations
本文从代码变换视角研究软件重构,借鉴 micropass/nanopass 编译器思想,通过组合并自动化压缩代码变换,使重构过程足够简短以便人工验证正确性,并在两个项目中实现了 10-100 倍的简化。
2023-08-12 cs.SE
Automated Refactoring of Non-Idiomatic Python Code: A Differentiated Replication with LLMs
本文研究了GPT-4在推荐地道Python代码重构方面的有效性,发现其不仅能有效识别地道构造,还能在现有基线失败时提出正确的重构操作,突显了LLM替代复杂代码分析推荐器的潜力。
2025-01-28 cs.SE
Investigating Student Reasoning in Method-Level Code Refactoring: A Think-Aloud Study
本研究通过出声思考法调查学生在方法级代码重构中的推理,识别出八种重构理由,并发现经验丰富的学生更关注质量属性,但常忽略多重职责方法等特定问题。
2024-11-05 cs.SE
Why We Refactor? Confessions of GitHub Contributors
重构是一种广泛的实践,可以帮助开发人员提高代码的可维护性和可读性。然而,有一个有限数量的研究经验调查背后的实际动机,具体的重构操作应用的开发人员。为了填补这一空白,我们监控了GitHub上托管的Java项目,以检测最近应用的重构,并要求开发人员解释他们决定重构代码的原因。通过对收集到的回复进行主题分析,我们为12种著名的重构类型编制了一个44种不同动机的目录。我们发现,重构活动主要是由需求的变化驱动的,而很少是由代码气味驱动的。提取方法是最通用的重构操作,有11种不同的用途。最后,我们发现有证据表明开发人员使用的IDE会影响自动化重构工具的采用。
2016-07-08 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
Towards Refactoring of DMARF and GIPSY Case Studies -- a Team 8 SOEN6471-S14 Project Report
决定软件系统质量的因素之一是它的设计和体系结构。拥有良好且清晰的设计和体系结构,可以使系统不断发展(计划和添加新功能),更容易理解、更容易开发、更容易维护;总之,可以延长的使用寿命,并在市场上更具竞争力。在下面的文章中,我们研究了两个不同的系统的体系结构:GIPSY和DMARF。本文对这两个系统进行了概述。这两个系统、目的、架构及其设计模式是什么?还确定了具有弱体系结构和设计以及代码气味的类,并建议和实现了一些重构。在整个文件中使用了几个工具,用于几个目的。LOGICSCOPE、JDeodoant、McCabe被用来识别设计和代码味道较弱的类。其他工具和插件也被用来识别类设计和类之间的关系,如ObjectAid(Eclipse插件)。
2014-12-23 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
An Empirical Study on the Impact of Change Granularity in Refactoring Detection
School of Computing, Institute of Science Tokyo(东京科学大学计算学院)
通过实证研究32个Java项目,发现跨提交的粗粒度重构和短暂重构普遍存在,并分析了其特征、成因及提交消息关联,建议扩展检测器以识别粗粒度重构。
2026-09-09 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
An Empirical Study on the Impact of Code Duplication-aware Refactoring Practices on Quality Metrics
本文通过分析128个开源Java项目中332个重构提交,实证研究了代码重复消除重构操作对设计质量指标的影响,发现多数指标能捕捉开发者去重意图,但部分指标未能完全反映。
2025-02-06 cs.SE
Improving Code Comprehension through Cognitive-Load Aware Automated Refactoring for Novice Programmers
Jahangirnagar University(贾汉吉尔纳加尔大学);Case Western Reserve University(凯斯西储大学);Missouri University of Science and Technology(密苏里科技大学)
本文提出基于认知驱动开发的自动化重构方法CDDRefactorER,通过减少控制流复杂度提升初学者代码理解,实验显示其在减少重构失败和降低复杂度方面效果显著。
2026-04-16 cs.SE
Impermanent Identifiers: Enhanced Source Code Comprehension and Refactoring
本文针对当代软件开发挑战提出以临时标识符为核心的创新代码增强方法,通过实证检验评估其在开发者中的采用与接受度,为代码增强开辟新方向并推动软件开发实践改进。
2024-06-14 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
Fixing Your Own Smells: Adding a Mistake-Based Familiarisation Step When Teaching Code Refactoring
针对传统重构教学用陌生代码导致新手难内化的问题,提出让学生先写带坏味道的代码再重构的教学法,实验证明其能显著提升新手的重构效率与信心。
2024-01-02 cs.SE
Behind the Intent of Extract Method Refactoring: A Systematic Literature Review
本文通过系统性文献综述梳理83项提取方法重构研究,构建分类框架,发现该领域多聚焦代码克隆、工具常结合人工决策且基准难以标准化,为后续研究指明方向。
2023-12-19 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
Toward Refactoring of DMARF and GIPSY Case Studies -- A Team XI SOEN6471-S14 Project Report
本报告的重点是改进分布式模块化音频识别框架(DMARF)和通用内涵编程系统(GIPSY)案例研究的内部结构,而不影响它们的原始行为。首先,通过查看它们的框架并在Eclipse环境中运行它们,主要强调系统的体系结构来理解DMARF和GIPSY的一般原理和工作。为了提高代码结构的质量,进一步理解案例研究的体系结构,这是通过分析代码中存在的设计模式来实现的。通过识别和去除案例研究代码中的代码气味来实现改进。通过使用Logiscope和JDeodorant分析源代码来识别代码气味。一些重构技术的建议,其中最适合的实施,以改善代码。最后,执行测试用例来检查代码的行为是否发生了变化。
2014-12-23 cs.SE
Refactoring Towards Microservices: Preparing the Ground for Service Extraction
针对单体系统向微服务迁移中现有方法忽略代码层面挑战的问题,本文提出含7种聚焦依赖处理的重构方法目录,填补代码层流程系统化空白,简化迁移并为自动化奠基。
2025-10-03 cs.SE
AntiCopyPaster: Extracting Code Duplicates As Soon As They Are Introduced in the IDE
我们为IntelliJ IDEA开发了一个名为AntiCopyPaster的插件,它可以跟踪IDE内代码片段的粘贴,并建议适当的提取方法重构以防止重复的传播。与现有的方法不同,我们的工具与开发人员的工作流程集成在一起,并主动推荐重构。由于不是所有的代码片段都需要提取,我们开发了一个分类模型来做出这个决定。当开发人员复制并粘贴代码片段时,插件会在当前打开的文件中搜索重复的代码,等待一小段时间以允许开发人员编辑代码,最后根据许多功能推断重构决策。我们对从13个Apache项目中挖掘的18,942个代码片段的大型数据集进行了实验研究,结果表明AntiCopyPaster正确地推荐了F-score为0.82的Extract Method重构。此外,我们对59名开发人员的调查反映了他们对开发的插件的操作的满意度。该插件及其源代码可在GitHub上公开获取,网址为https://github.com/JetBrains-Research/anti-copy-paster。演示视频可以在YouTube上找到:https://youtu.be/_wwHg-qFjJY。
2022-09-02 cs.SE
RMove: Recommending Move Method Refactoring Opportunities using Structural and Semantic Representations of Code
方法在类中的不正确放置是一种典型的代码气味,称为特性嫉妒,这会在演化过程中导致额外的维护和成本。为了消除这个设计缺陷,已经提出了几个MoveMethod重构工具。据我们所知,最先进的相关技术可以大致分为两类:第一类是基于软件度量的非机器学习方法,而软件度量的选择和阈值严重依赖于专家知识。第二行是基于机器学习的方法,它建议通过学习从代码信息中提取特征来重构Move Method。然而,这一行中的大多数方法都以相同的方式处理不同形式的代码信息,而忽略了它们在数据分析中的显著差异。本文提出了一种推荐Move方法重构的方法RMove,该方法通过自动学习代码片段的结构和语义表示来推荐Move方法重构。我们将这些表示连接在一起,并进一步训练机器学习分类器,以引导方法移动到合适的类。我们在两个公开的数据集上评估了我们的方法。结果表明,我们的方法优于三个国家的最先进的重构工具,包括PathMove,JDeodorant和JMove的有效性和实用性。研究结果还揭示了有用的发现,并提供了新的见解,有利于其他类型的功能羡慕重构技术。
2022-12-23 cs.SE
Just-in-Time Code Duplicates Extraction
重构是软件维护中的一项关键任务,通常用于执行更好的设计和编码实践,同时处理设计缺陷。提取方法重构广泛用于将重复的代码片段合并为一个新方法。一些研究尝试推荐使用不同技术的提取方法重构机会,包括程序切片、程序依赖图分析、更改历史分析、结构相似性和特征提取。然而,不管是哪种方法,大多数现有的方法都会干扰开发人员的工作流程:它们要求开发人员停止编码并分析建议的机会,并且还考虑整个项目中的所有重构建议,而不关注开发上下文。为了提高提取方法重构的采用率,在本文中,我们的目标是研究机器学习和深度学习算法在维护开发人员工作流程的同时对其推荐的有效性。所提出的方法依赖于挖掘先前应用的提取方法重构并提取其特征以训练深度学习分类器,该分类器在用户的代码中检测它们。我们将我们的方法实现为IntelliJ IDEA的插件,称为AntiCopyPaster。为了开发我们的方法,我们在来自13个开源Apache项目的18,942个代码片段的数据集上训练和评估了各种流行的模型。结果表明,最佳模型是卷积神经网络(CNN),它推荐了适当的提取方法重构,F度量为0.82。我们还进行了定性研究与72开发人员评估的有用性开发的插件。结果表明,开发人员倾向于欣赏这种方法的想法,并对插件操作的各个方面感到满意。
2023-02-07 cs.SE
Multi-Agent Coordinated Rename Refactoring
University of Colorado(科罗拉多大学);Tulane University(路易斯安那大学);University of Texas at Dallas(德克萨斯大学达拉斯分校);NEC Corporation(日本电气通信事业株式会社);NEC Laboratories America(NEC美国实验室);JetBrains Research(JetBrains研究)
本文提出了一种多智能体框架,通过协同重命名重构自动化减少开发者负担,提升重构效率。
2026-01-01 cs.AI cs.SE