An Exploratory Study on Refactoring Documentation in Issues Handling
理解重构文档的实践在学术界和工业界都是至关重要的。大多数软件项目都使用问题跟踪系统,使开发人员,质量保证,管理人员和用户能够提交功能请求和其他任务,如错误修复和代码审查。虽然最近的研究探索了如何在提交消息中记录重构,但很少有人知道开发人员如何在问题中描述他们的重构需求。在这项研究中,我们的目标是探索开发人员报告的问题中的重构变化,以更好地了解开发人员认为他们的代码中存在什么问题以及他们如何处理它。我们的方法依赖于文本挖掘45,477个重构相关问题,并通过调查与15,833重构操作和开发者的显式重构意图。我们的研究结果表明:(1)开发人员大多使用与重构相关的术语/短语来解决重构相关的问题;(2)开发人员倾向于明确提到特定质量属性的改进,并专注于重复代码的删除。我们设想我们的研究结果使工具构建者能够支持开发人员自动记录问题中的重构更改。
2022-03-19 cs.SE
Assessing the Bug-Proneness of Refactored Code: A Longitudinal Multi-Project Study
本文对12个开源项目开展纵向研究,分析不同重构特征与缺陷的长期关系,发现单一重构和顺手式重构反而可能增加缺陷风险,且相关缺陷难以被现有检测技术发现。
2025-05-12 cs.SE
Impact of Change Granularity in Refactoring Detection
检测提交历史中的重构对于提高代码评审中代码更改的理解以及为软件演化的实证研究提供有价值的信息至关重要。已经提出了几种技术来在单个提交的粒度级别上准确地检测重构。然而,由于代码复杂性或其他实际开发问题,重构可能会在多个提交上执行,这就是为什么试图在单次提交粒度下检测重构是不够的。我们观察到,一些重构只能在较粗的粒度上被检测到,也就是说,更改分布在多个提交中。在这里,这种类型的重构被称为粗粒度重构(CGR)。我们比较了在19个开源仓库中不同粒度的提交中检测到的重构。结果表明,CGR是常见的,其频率随着粒度变粗而增加。此外,我们发现与移动相关的重构往往是最常见的CGR。分析了CGR产生的原因,并指出CGR在重构研究中的应用价值。
2022-04-24 cs.SE
An Empirical Study on the Potential of LLMs in Automated Software Refactoring
Beijing Institute of Technology(北京理工大学);Peking University(北京大学);University of Cincinnati(辛辛那提大学);National Innovation Institute of Defense Technology(国防科技大学创新研究院)
本研究通过实证分析发现LLM在重构机会识别上表现有限,但通过提示优化可大幅提升;同时提出RefactoringMirror策略以规避不安全重构,兼顾LLM智能与代码安全。
2024-11-07 cs.SE
One Thousand and One Stories: A Large-Scale Survey of Software Refactoring
尽管在流行的IDE中重构是一个可用的功能,但最近的研究表明,开发人员不愿意使用它们,仍然更喜欢手动重构代码。在JetBrains,我们的目标是完全支持基于IntelliJ的IDE中的重构功能,并提高它们在实践中的采用率。因此,我们首先提出以下主要问题。人们到底是如何重构代码的?什么样的重构最受欢迎?为什么有些开发人员倾向于不使用方便的IDE重构工具?在本文中,我们通过设计和实施一项针对1,183名基于IntelliJ的IDE用户的调查来调查所提出的问题。我们对调查结果的定量和定性分析表明,几乎三分之二的开发人员在一次会话中花费超过一个小时的时间重构他们的代码;重构类型在流行程度上差异很大;许多开发人员希望了解更多关于IDE重构功能的信息,但缺乏这样做的方法。这些结果在内部为我们提供了支持下一代重构功能的支持,也可以帮助我们的研究社区在重构可用性研究中建立新的方向。
2021-07-16 cs.SE
SWE-Refactor: A Repository-Level Benchmark for Real-World LLM-Based Code Refactoring
Concordia University(康考迪亚大学)
SWE-Refactor是一个面向真实世界的基于大语言模型的代码重构仓库级基准,通过1099个Java项目中的重构实例评估九种LLMs,揭示复杂重构的失败率较高。
2026-02-03 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
An Empirical Study on Refactoring Activity
本文报告了一个实证研究的重构活动在三个Java软件系统。我们调查了重构活动的一些问题,以确认或不同意从以前的实证研究中得出的结论。与以往的实证研究不同,我们的研究发现,并不总是有更多的重构活动之前的主要项目发布日期比之后。相比之下,我们能够确认软件开发人员对测试代码和生产代码执行不同类型的重构操作,特定的开发人员负责项目中的重构,重构编辑没有得到很好的测试。此外,floss重构在开发人员中更受欢迎,重构活动在项目中很频繁,大多数不良气味一旦发生,就会持续到系统的最新版本。通过证实其他研究人员的假设,我们可以更有信心地认为这些研究结论是可推广的。
2014-12-18 cs.SE
In Search of Metrics to Guide Developer-Based Refactoring Recommendations
本文提出一项实证研究,通过量化产品和过程度量标准来把握开发者执行重构的动机,从而为基于开发者的重构推荐器设计提供度量标准目录。
2024-07-25 cs.SE
The Effectiveness of Supervised Machine Learning Algorithms in Predicting Software Refactoring
重构是在不改变软件外部行为的情况下改变软件内部结构以提高其质量的过程。经验研究一再表明,重构对软件系统的可理解性和可维护性有积极的影响。然而,在执行重构活动之前,开发人员需要识别重构机会。目前,重构机会识别严重依赖于开发人员的专业知识和直觉。在本文中,我们调查的有效性机器学习算法在预测软件重构。更具体地说,我们训练了六种不同的机器学习算法(即,逻辑回归,朴素贝叶斯,支持向量机,决策树,随机森林和神经网络),数据集包含来自Apache,F-Droid和GitHub生态系统的11,149个真实项目的超过200万次重构。结果模型预测了类、方法和变量级别的20种不同重构,准确率通常高于90%。我们的研究结果表明,(i)随机森林是预测软件重构的最佳模型,(ii)过程和所有权度量似乎在创建更好的模型中发挥了至关重要的作用,(iii)模型在不同的环境中推广良好。
2020-09-11 cs.SE
Refactoring Composite to Visitor and Inverse Transformation in Java
我们描述了如何使用重构工具将符合Composite设计模式的Java程序转换为符合Visitor设计模式且具有相同外部行为的程序。我们还描述了逆变换。我们使用IntelliJ IDEA提供的重构工具。
2013-07-01 cs.SE
A Survey of Refactoring Detection Techniques Based on Change History Analysis
重构是改变软件系统的过程,它不会改变代码的外部行为,但会改善其内部结构。不仅研究人员,而且实践者,需要了解过去在软件开发项目中执行的重构实例。到目前为止,已经提出了一些技术来自动检测重构实例。这些技术已经在各种国际会议和期刊上提出,然而,研究人员和从业人员很难掌握重构检测技术的研究现状。在这篇综述文章中,我们回顾了各种重构检测技术,特别是基于更改历史分析的技术。本文首先给出了重构检测方法的定义和分类,然后介绍了基于变更历史分析的重构检测技术。最后,我们讨论了重构检测未来可能的研究方向。
2018-08-07 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
How Do I Refactor This? An Empirical Study on Refactoring Trends and Topics in Stack Overflow
作为软件维护和演化的重要组成部分,重构由开发人员执行,无论技术或领域如何,以提高系统的内部质量,并减少其技术债务。然而,选择合适的重构策略并不总是那么简单,这导致开发人员寻求帮助。虽然重构的研究已经很成熟,有几项研究在检测重构机会和建议适当的代码更改之间进行了改变,但对它们在实践中的采用知之甚少。分析开发人员的认知对于更好地理解开发人员认为代码中存在的问题以及他们如何处理这些问题至关重要。此外,需要通过提取更适合开发人员实际情况的常见重构意图,来弥合研究重构与实际应用之间的差距。在这项研究中,我们通过一系列定量和定性的实验,分析重构讨论堆栈溢出。我们的研究结果表明,堆栈溢出是由一组不同的开发人员用于重构援助的各种技术。我们的观察显示了开发人员在重构时通常需要帮助的五个方面--代码优化、工具和IDE、体系结构和设计模式、单元测试和数据库。我们设想我们的研究结果更好地桥接重构的传统(或学术)方面与其现实世界的适用性之间的支持,包括更好的工具支持。
2021-10-23 cs.SE
Refactoring Debt: Myth or Reality? An Exploratory Study on the Relationship Between Technical Debt and Refactoring
为了满足项目时间表或预算限制,开发人员故意偏离编写最佳代码的可行性代码,这被称为招致技术债务(TD)。此外,作为计划纠正的一部分,开发人员将这些缺陷记录为代码中的注释(即,自我承认的技术债务或SATD)。作为提高源代码质量的一种手段,开发人员经常对代码库应用一系列重构操作。在这项研究中,我们探讨开发人员偿还这种债务,通过重构操作,检查发生的SATD删除76个开源Java系统的代码。我们的研究结果表明,TD支付通常发生在重构活动中,开发人员出于特定原因重构代码以删除TD。我们设想我们的研究结果支持供应商提供工具,以更好地支持开发人员自动偿还技术债务。
2022-03-10 cs.SE
Industry Experiences with Large-Scale Refactoring
软件重构在软件工程中占有重要地位。当开发人员想要重构软件以提高其质量而不改变其外部行为时,他们通常会转向重构。研究表明,小规模(floss)重构在行业中很常见,通常可以由单个开发人员在短时间内执行,尽管开发人员手动完成大部分工作而不是使用重构工具。然而,一些重构工作的规模要大得多,需要整个团队和数月的努力,而工具在这些工作中的作用还没有得到很好的研究。在本文中,我们报告了我们对开发人员进行的一项调查,以了解大规模重构,其流行程度,以及工具如何支持它。我们来自107个行业开发人员的结果表明,项目通常会经历多次大规模重构,每一次都需要相当大的努力。虽然经常需要重构,但其他业务问题(如开发新功能)通常具有更高的优先级。我们的研究发现,开发人员使用几类工具来支持大规模重构,并且更依赖于IDE等通用工具,而不是专门为支持重构而设计的工具。不同活动的工具支持各不相同,一些特别具有挑战性的活动实际上很少使用工具。我们的研究表明了对更好的大规模重构工具的明确需求,以及重构研究人员在行业中发挥作用的机会。我们在本文中总结的结果是实现这一目标的具体步骤。
2022-02-15 cs.SE
Refactoring Assertion Roulette and Duplicate Assert test smells: a controlled experiment
测试气味会降低开发人员与测试代码交互的能力。重构测试代码提供了一种安全的策略来处理测试气味。然而,手动重构活动并不是一个简单的过程,它通常是乏味的并且容易出错。本研究旨在评估RAIDE,一个自动识别和重构测试气味的工具。我们提出了RAIDE的实证评估,在其中,我们分析了它在重构断言轮盘赌和重复断言测试气味的能力,并将结果与手动重构和最先进的方法进行了比较。结果表明,RAIDE提供了一个更快,更直观的方法来处理测试气味比使用自动化的气味检测工具结合手动重构。
2022-07-12 cs.SE
Empirical Evaluation of a Live Environment for Extract Method Refactoring
针对传统重构工具反馈慢的问题,提出聚焦实时可视化建议与应用的实时重构概念,开发可识别、推荐并应用提取方法重构的实时环境,实证实验显示其能改进多项代码质量指标,效果显著优于无辅助手动重构。
2023-07-20 cs.SE
Understanding the Energy Impact of Software Refactoring: A Workload-Aware Study of Controlled Examples and Real-World Commits
Concordia University(康考迪亚大学);Polytechnique Montréal(蒙特利尔高等理工学院)
该研究通过微基准与真实世界基准的大规模实证分析,发现重构的能源影响受工作负载显著影响,现有方法无法可靠识别重构引发的能源回归,需开发更准确的预测技术。
2026-08-10 cs.SE
A Survey of Deep Learning Based Software Refactoring
本文综述了基于深度学习的软件重构研究,将其分为五类并分析关键方面,揭示了技术采用不平衡、方法级重构占主导及质量保证研究缺失等问题,并提出未来研究方向。
2024-04-30 cs.SE
30 Years of Software Refactoring Research:A Systematic Literature Review
由于软件系统的复杂性不断增加,在过去的十年里,软件重构工具和技术的需求急剧增加,传统上被定义为一组旨在改进系统设计同时保留行为的程序转换。重构研究已经扩展到代码级重构之外,应用于不同级别(架构、模型、需求等),在面向对象范式之外的许多领域(云计算、移动、Web等)中采用,在工业环境中使用,并且考虑的目标超出了改进设计以包括其他非功能性要求(例如,改进性能、安全性等)。因此,重构工作所要解决的挑战现在已经超出了代码转换,包括但不限于安排进行重构的适当时间、推荐特定重构活动、检测重构机会以及测试所应用重构的正确性。因此,重构的研究工作分散在几个研究团体,不同的领域和目标。为了构建该领域和现有的研究成果,本文提供了一个系统的文献综述,并分析了3183篇关于重构的研究论文,涵盖了过去三十年的结果,提供了最具可扩展性和最全面的文献综述现有的重构研究。基于这项调查,我们创建了一个分类法来分类现有的研究,确定了研究趋势,并强调了文献中的差距和进一步研究的途径。
2020-07-04 cs.SE
On the Relationship between Refactoring Actions and Bugs: A Differentiated Replication
软件重构的目标是在保持系统外部行为的同时提高代码质量。虽然原则上重构是一种行为保留活动,但Bavota等人在2012年提出的一项研究报告了一些重构行为的倾向性(例如,上拉法)诱发故障。这项研究是通过挖掘三个系统的重构活动和错误来进行的。利用采矿软件库领域取得的进步(例如,更好的工具,以检测重构行动在提交级别的粒度),我们提出了一个有区别的复制的工作,由Bavota等人。其中我们(i)克服了一些弱点,影响他们的实验设计,(ii)回答相同的研究问题,原来的研究对一个更大的数据集(3对103个系统),以及(iii)用定性分析补充重构和bug之间关系的定量分析,手动检查提交,旨在验证重构操作触发bug修复活动的程度。我们的定量分析的结果证实了重复研究的结果,而定性分析部分揭开了重构动作在错误引入中所扮演的角色。
2020-09-24 cs.SE
Relating Complexity, Explicitness, Effectiveness of Refactorings and Non-Functional Requirements: A Replication Study
本研究通过将项目数翻倍并验证8,408个重构实例复现Soares等人的研究,考察SAR的复杂性、显式性、有效性及其与非功能需求的关系,发现显式重构更复杂但通常更利于内部质量。
2025-05-12 cs.SE
Refactoring Deep Learning Code: A Study of Practices and Unsatisfied Tool Needs
本研究通过分析5个深度学习项目的4921项重构实践、调研159名从业者,揭示了深度学习代码重构的分布特点及现有工具的不足,为重构工具发展和开发实践提供了建议。
2025-08-04 cs.SE
An Empirical Study of Refactoring Engine Bugs
本文首次系统分析了Eclipse、IntelliJ IDEA和Netbeans三种重构引擎的缺陷,按类型、症状、原因和触发条件归纳出12项发现,并在最新版本中发现130个新缺陷,为缺陷检测与调试提供指导。
2024-09-22 cs.SE
Code Review Practices for Refactoring Changes: An Empirical Study on OpenStack
现代代码审查是工业和开源项目中广泛使用的技术,用于提高软件质量,共享知识,并确保遵守编码标准和指南。在代码评审期间,开发人员可能会在合并代码库中的代码更改之前讨论重构活动。到目前为止,代码审查已被广泛研究,以探索其一般挑战,最佳实践和结果,以及社会技术方面。然而,很少有人知道重构是如何被审查的,以及开发人员在审查重构代码时关心什么。因此,在这项工作中,我们提出了一个定量和定性的研究,以了解什么是主要的标准,开发人员依靠制定一个决定接受或拒绝提交的重构代码,是什么使这个过程具有挑战性。通过对分布在OpenStack开源项目中的11,010个重构和非重构审查的案例研究,我们发现,就代码审查工作而言,与重构相关的代码审查需要更长的时间才能得到解决。此外,在对重构代码审查讨论的重要样本进行主题分析后,我们建立了一个由28个重构审查标准组成的综合分类法。我们设想我们的研究结果重申了开发准确和有效的工具和技术的必要性,这些工具和技术可以帮助开发人员在重构的情况下进行审查。
2022-03-27 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
On the Relationship Between Coupling and Refactoring: An Empirical Viewpoint
[背景]重构在过去的二十年中已经成熟,成为开发人员工具包的一部分。然而,许多基础研究问题仍然在很大程度上未被探索。[Aim]本文的目标是调查的最高和最低的四分位数的重构为基础的数据使用两个耦合度量-对象之间的耦合度量和最近的概念耦合类之间的度量来回答这个问题。重构的趋势和模式可以根据类耦合的级别来识别吗?[方法]在本文中,我们分析了从三个开源系统的发布中提取的六千多个重构操作,以解决这样一个问题。[结果]结果显示,对于两个指标,在耦合的上四分位数或下四分位数中应用的重构类型没有有意义的差异;在某些情况下,通常与耦合去除相关的重构实际上在下四分位数中更多。还注意到所有系统都缺乏与继承相关的重构。[结论]新出现的消息(也是令人困惑的消息)是,当涉及到重构类型时,开发人员似乎对高耦合的类漠不关心-他们以几乎相同的方式对待相对低耦合的类。
2019-08-05 cs.SE
Spreadsheet Refactoring
重构是对软件内部结构的改变,使其更容易理解,修改成本更低,而不改变其可观察的行为。数据库重构是对数据库模式的一个小的改变,它在不改变语义的情况下改进了数据库的设计。本文介绍了一个“电子表格重构”的例子,它是从上面推导出来的,并考虑到了电子表格公式和电子表格代码的独特特性。这些技术受到电子表格中紧密耦合的数据和代码的限制。
2010-09-07 cs.SE
Leveraging Game-Based Platform to Teach Code Refactoring: An Experience with Refactoria
Stevens Institute of Technology(史蒂文斯理工学院)
本文通过课堂实验评估了基于游戏的工具 Refactoria 在教授代码重构和代码异味识别方面的效果,结果显示其感知有用性高,并能有效促进学生对重构概念的理解。
2026-10-01 cs.SE
How do Agents Refactor: An Empirical Study
University of Alberta(阿尔伯塔大学)
通过对比86个Java项目中智能体与开发者的重构拉取请求,发现智能体重构以注释修改为主,而Cursor是唯一显著增加代码味道的模型。
2026-05-24 cs.SE
An Empirical Evaluation of Impact of Refactoring On Internal and External Measures of Code Quality
重构是通过改变现有代码的内部结构而不影响其外部行为来改进其设计的过程,其主要目的是提高软件产品的质量。因此,人们相信重构可以提高质量因素,如可理解性、灵活性和可重用性。然而,支持这种假设的经验证据有限。本研究的目的是验证/无效的索赔,重构提高软件质量。选择重构技术的影响进行了评估,使用外部和内部的措施。通过实验评估了10种重构技术,以评估ISO外部质量因素的外部度量:资源利用率,时间行为,可更改性和可分析性,以及5种内部度量:可维护性指数,圈复杂性,继承深度,类耦合和代码行。外部测量的结果没有显示重构处理后代码质量的任何改进。然而,从内部测量,可维护性指数表明重构代码的代码质量比未重构代码的代码质量有所改善,而其他内部测量没有表明重构代码有任何积极的影响
2015-02-12 cs.SE
Code Smells and Refactoring: A Tertiary Systematic Review of Challenges and Observations
在本文中,我们提出了一个三级系统的文献综述,以前的调查,二级系统的文献综述,和系统的映射。我们确定了关于代码气味和重构的主要观察结果(我们知道的)和挑战(我们不知道的)。我们发现代码气味和重构与质量属性有很强的关系,即,具有可理解性、可维护性、可测试性、复杂性、功能性和可重用性。我们认为,代码气味和重构可以被认为是一个硬币的两面。此外,我们还确定了重构如何影响质量属性,而不是代码气味。我们还讨论了这项工作的从业人员,研究人员和教师的影响。我们确定了13个开放的问题,可以指导未来的研究工作。因此,我们想强调在当前软件工程研究中代码气味和重构之间的差距。我们希望这项工作能够帮助软件工程研究社区在未来的代码气味和重构工作中进行合作。
2020-04-22 cs.SE
On the Documentation of Refactoring Types
提交消息是软件文档的原子级。它们提供代码更改及其目的的自然语言描述。消息对于软件维护和程序理解是至关重要的。与记录功能更新和错误修复不同,开发人员如何记录他们的重构活动知之甚少。开发人员可以出于各种原因执行多个重构操作,包括移动方法、提取类。然而,没有系统的研究,分析在何种程度上重构的文档准确地描述了重构操作在源代码级别执行。因此,本文挑战重构文档的能力,充分预测重构类型,在提交级别执行。我们的分析依赖于提交消息的文本挖掘来提取更好地代表每个类的相应特征。提取特定于每个重构的文本模式允许设计一个模型,该模型验证这些模式与其相应重构的一致性。这样的验证过程可以通过自动预测所应用的重构的方法级别类型来实现,即提取方法、内联方法、移动方法、上拉方法、下推方法和嵌入方法。我们使用5,004个提交的数据集,比较了各种分类器和基于关键字的基线方法的预测性能。我们的主要发现表明,重构类型预测的复杂性因类型而异。研究发现,重构方法和提取方法是记录最好的重构活动,而上拉方法和下推方法是最难通过文本描述来识别的。这些发现使开发人员注意到更加关注这些类型的文档的必要性。
2021-12-02 cs.SE
Towards Refactoring FRETish Requirements
与软件一样,需求在开发过程中也会不断发展和变化。重构是在不改变其行为的情况下重新组织软件的过程,以使其更容易理解和修改。我们建议重构正式的要求,以减少重复的要求,使他们更容易维护系统和要求的发展。这个工作在进行中的文件描述了我们的动机和初步的方法来重构NASA的正式需求获取工具(FRET)的要求。这项工作是由我们在工业飞机发动机软件控制器用例方面的经验直接触发的。在本文中,我们反映了所获得的要求,并鉴于其可维护性,提出和概述的功能,重构FRETISH要求。
2022-01-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
RefDiff: Detecting Refactorings in Version Histories
重构是一种众所周知的技术,被软件工程师广泛采用,以改进设计并使系统能够进化。了解在代码更改中应用了哪些重构操作对于理解软件演化、调整软件组件、合并代码更改和其他应用程序是有价值的信息。在本文中,我们提出了RefDiff,这是一种自动化方法,可以识别git存储库中两个代码修订之间执行的重构。RefDiff采用了基于静态分析和代码相似性的方法来检测13种常见的重构类型。在使用分布在7个Java项目中的448个已知重构操作的Oracle进行的评估中,我们的方法实现了100%的精确度和88%的召回率。此外,我们的评估表明,RefDiff比现有的最先进的方法具有更高的精度和召回率。
2017-04-05 cs.SE
Why Developers Refactor Source Code: A Mining-based Study
重构的目的是在不修改代码外部行为的情况下改进代码的非函数属性。以前的研究通过调查开发人员来调查重构背后的动机。为了概括和补充他们的研究结果,我们提出了一个大规模的研究,定量和定性地调查为什么开发人员在开源项目中执行重构。首先,我们挖掘了150个系统历史上执行的287,813次重构操作。使用这个数据集,我们研究了重构操作和过程之间的相互作用(例如,先前的改变/修复)和产品(例如,质量度量)度量。然后,我们手动分析了551个合并的拉取请求,这些合并的拉取请求实现了重构操作,并对所实现的重构背后的动机进行了分类(例如,删除代码重复)。我们的研究结果导致(i)定量证据的关系存在于某些过程/产品指标和重构操作和(ii)一个详细的分类,概括和补充现有的文献中的动机,推动开发人员重构源代码。
2021-01-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
ChatGPT for Code Refactoring: Analyzing Topics, Interaction, and Effective Prompts
本文通过文本挖掘 29,778 条 ChatGPT 交互中的 715 条重构相关对话,分析开发者表达重构需求的方式及 ChatGPT 的回应,以理解重构交互并提升提示有效性。
2025-09-09 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
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
MORCoRA: Multi-Objective Refactoring Recommendation Considering Review Availability
School of Computing, Tokyo Institute of Technology(东京工业大学理工学院)
MORCoRA通过多目标搜索推荐高代码质量和高审查可用性的重构序列及合适审查者。
2026-03-08 cs.SE
Testing Refactoring Engine via Historical Bug Report driven LLM
提出RETESTER框架,利用历史缺陷报告和思维链提示生成重构变体,通过差分测试在Eclipse和IntelliJ IDEA中发现18个新缺陷。
2025-01-22 cs.SE
How does Object-Oriented Code Refactoring Influence Software Quality? Research Landscape and Challenges
软件重构旨在提高软件质量和开发人员的生产力。在过去的二十年里,已经进行了大量的实证研究,调查重构活动对软件质量的影响。目的:本研究旨在对现有的面向对象代码重构活动对软件质量属性影响的实证研究进行全面系统的映射研究。方法:我们遵循多阶段审查过程,选择了截至2017年12月发表的142项主要研究。根据几个方面对选定的初步研究进行进一步分类,以回答为这项工作定义的研究问题。此外,本研究亦利用投票统计法,将实证结果与原始研究的分析结果结合起来。结果如下:研究结果表明,在学术环境中进行的研究发现,重构对软件质量的积极影响比在行业中进行的研究。一般来说,重构活动导致所有质量属性的改善或降低,除了内聚性,复杂性,继承性,故障倾向和功耗属性。此外,个别的重构活动对主要研究中探索的大多数质量属性有不同的影响,这表明重构并不总是改善所有的质量属性。结论:本研究指出了几个需要进一步调查的开放问题,例如,缺乏工业验证,重构活动覆盖面较小,工具支持有限等。
2019-08-15 cs.SE
Bugs in the Shadows: Static Detection of Faulty Python Refactorings
Federal University of Campina Grande(坎皮纳格兰德联邦大学);Federal University of Alagoas(阿拉戈阿斯联邦大学);Pontifical Catholic University of Rio de Janeiro(里约热内卢天主教 Pontifical 大学)
针对Python动态类型系统导致自动化重构易引入类型错误的问题,本文提出静态分析技术检测重构引入的类型错误,在Rope及主流IDE的重构实现中发现多个已被开发者确认的缺陷,为提升重构工具鲁棒性提供了依据。
2025-07-01 cs.SE
From Human to Machine Refactoring: Assessing GPT-4's Impact on Python Class Quality and Readability
University of Catania(卡塔尼亚大学);University of Sannio(桑尼奥大学)
本文评估GPT-4在Python类重构中的效果,发现其能提升代码质量和减少异味,但可能降低可读性。
2026-01-19 cs.SE
RefactorInsight: Enhancing IDE Representation of Changes in Git with Refactorings Information
检查代码更改是一项耗时的任务,是软件工程师日常工作的重要组成部分。现有的IDE提供的关于文件编辑器视图中代码更改的语义的信息很少。因此,开发人员必须跨多个文件跟踪更改,这对于大型代码库来说是一项艰巨的任务。在本文中,我们介绍了RefactorInsight,一个用于IntelliJ IDEA的插件,它为Java和Kotlin中的代码更改引入了一个智能差异,其中重构是自动折叠的,并提供了它们的描述,从而允许用户专注于修改代码行为的更改,如bug修复和新功能。RefactorInsight支持三种使用场景:使用自动折叠的重构和提示查看智能差异,检查拉请求和项目更改历史中的任何特定提交中的重构,以及探索方法和类的重构历史。评估表明提交处理时间是可以接受的:中位数小于0.2秒,该延迟不会中断开发人员的IDE工作流。RefactorInsight可在https://github.com/JetBrains-Research/RefactorInsight上获得。演示视频可在https://youtu.be/-6L2AKQ66nA上获得。
2021-08-25 cs.SE
Why We Refactor? Confessions of GitHub Contributors
重构是一种广泛的实践,可以帮助开发人员提高代码的可维护性和可读性。然而,有一个有限数量的研究经验调查背后的实际动机,具体的重构操作应用的开发人员。为了填补这一空白,我们监控了GitHub上托管的Java项目,以检测最近应用的重构,并要求开发人员解释他们决定重构代码的原因。通过对收集到的回复进行主题分析,我们为12种著名的重构类型编制了一个44种不同动机的目录。我们发现,重构活动主要是由需求的变化驱动的,而很少是由代码气味驱动的。提取方法是最通用的重构操作,有11种不同的用途。最后,我们发现有证据表明开发人员使用的IDE会影响自动化重构工具的采用。
2016-07-08 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
Injection testing backed refactoring
重构时基于注入的测试是一种模式,它在改变代码库的行为时最大限度地减少了手动编辑的需要。它既不依赖于编译或链接过程,也不对代码的结构做出假设。因此,它对于重构用脚本语言编写的代码特别有用,并且专门针对研究和工程环境。我们描述的模式,并提出了一套功能,其应用程序。代码注入重构的适用性通过派生单元和集成测试的具体示例突出显示。最后,我们对该模式的定制进行了评论,并对其实施提出了切实可行的建议。
2022-03-28 cs.SE
Recommendation of Move Method Refactoring Using Path-Based Representation of Code
软件重构在提高代码质量方面起着重要的作用。最流行的重构类型之一是移动方法重构。当一个方法依赖于其他类的成员多于依赖于它自己的原始类时,通常会应用它。已经提出了几种方法来自动推荐Move Method重构。它们中的大多数是基于几何学的,并且具有某些限制(例如,它们取决于度量的选择和手动定义的阈值)。在本文中,我们提出了一种方法,建议移动方法重构的基础上,基于路径的代码表示称为code2vec,能够捕获代码片段的语法结构和语义信息。我们使用这种代码表示训练一个机器学习分类器,建议将方法移动到更合适的类。我们在两个公开的数据集上评估了该方法:一个是知名开源项目的手动编译数据集,另一个是自动注入代码气味实例的合成数据集。结果表明,我们的方法是能够推荐准确的重构机会,并优于JDeodorant和JMove,这是最先进的工具,在这个领域。
2020-02-15 cs.SE
Automated Unit Test Refactoring
针对测试异味导致测试代码质量低、维护难及现有自动化重构方法灵活性不足的问题,提出基于LLM的上下文增强框架UTRefactor,通过思维链模拟手动重构并结合检查点机制,在6个开源Java项目测试中实现89%异味消除率,性能显著优于现有方法。
2025-02-11 cs.SE
Refactoring Practices in the Context of Modern Code Review: An Industrial Case Study at Xerox
现代代码审查是工业和开源项目中常用的基本实践,用于提高软件质量,共享知识,并确保符合编码标准。在代码审查期间,开发人员可以在合并代码库中的代码更改之前检查和讨论各种更改,包括重构活动。到目前为止,代码审查已被广泛研究,以探索其一般挑战,最佳实践和结果,以及社会技术方面。然而,很少有人知道重构活动是如何被审查,感知和实践的。本研究旨在揭示评审员如何决定接受或拒绝提交的重构请求,以及是什么使这种评审具有挑战性。我们提出了一个工业案例研究与24个专业开发人员在施乐公司。特别是,我们研究的动机,文档的做法,挑战,验证,并在代码审查重构活动的影响。我们的研究提供了几个重要的发现。我们的结果报告了开发人员在记录重构以供审查时缺乏适当的程序。我们对评审人员的调查也揭示了一些与理解重构意图以及对软件功能和非功能方面的影响有关的困难。根据我们的发现,我们推荐了一个程序来正确记录重构活动,作为我们调查反馈的一部分。
2021-02-10 cs.SE