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
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
Why Developers Refactor Source Code: A Mining-based Study
重构的目的是在不修改代码外部行为的情况下改进代码的非函数属性。以前的研究通过调查开发人员来调查重构背后的动机。为了概括和补充他们的研究结果,我们提出了一个大规模的研究,定量和定性地调查为什么开发人员在开源项目中执行重构。首先,我们挖掘了150个系统历史上执行的287,813次重构操作。使用这个数据集,我们研究了重构操作和过程之间的相互作用(例如,先前的改变/修复)和产品(例如,质量度量)度量。然后,我们手动分析了551个合并的拉取请求,这些合并的拉取请求实现了重构操作,并对所实现的重构背后的动机进行了分类(例如,删除代码重复)。我们的研究结果导致(i)定量证据的关系存在于某些过程/产品指标和重构操作和(ii)一个详细的分类,概括和补充现有的文献中的动机,推动开发人员重构源代码。
2021-01-05 cs.SE
How Do I Refactor This? An Empirical Study on Refactoring Trends and Topics in Stack Overflow
作为软件维护和演化的重要组成部分,重构由开发人员执行,无论技术或领域如何,以提高系统的内部质量,并减少其技术债务。然而,选择合适的重构策略并不总是那么简单,这导致开发人员寻求帮助。虽然重构的研究已经很成熟,有几项研究在检测重构机会和建议适当的代码更改之间进行了改变,但对它们在实践中的采用知之甚少。分析开发人员的认知对于更好地理解开发人员认为代码中存在的问题以及他们如何处理这些问题至关重要。此外,需要通过提取更适合开发人员实际情况的常见重构意图,来弥合研究重构与实际应用之间的差距。在这项研究中,我们通过一系列定量和定性的实验,分析重构讨论堆栈溢出。我们的研究结果表明,堆栈溢出是由一组不同的开发人员用于重构援助的各种技术。我们的观察显示了开发人员在重构时通常需要帮助的五个方面--代码优化、工具和IDE、体系结构和设计模式、单元测试和数据库。我们设想我们的研究结果更好地桥接重构的传统(或学术)方面与其现实世界的适用性之间的支持,包括更好的工具支持。
2021-10-23 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
ChatGPT for Code Refactoring: Analyzing Topics, Interaction, and Effective Prompts
本文通过文本挖掘 29,778 条 ChatGPT 交互中的 715 条重构相关对话,分析开发者表达重构需求的方式及 ChatGPT 的回应,以理解重构交互并提升提示有效性。
2025-09-09 cs.SE
Industry Experiences with Large-Scale Refactoring
软件重构在软件工程中占有重要地位。当开发人员想要重构软件以提高其质量而不改变其外部行为时,他们通常会转向重构。研究表明,小规模(floss)重构在行业中很常见,通常可以由单个开发人员在短时间内执行,尽管开发人员手动完成大部分工作而不是使用重构工具。然而,一些重构工作的规模要大得多,需要整个团队和数月的努力,而工具在这些工作中的作用还没有得到很好的研究。在本文中,我们报告了我们对开发人员进行的一项调查,以了解大规模重构,其流行程度,以及工具如何支持它。我们来自107个行业开发人员的结果表明,项目通常会经历多次大规模重构,每一次都需要相当大的努力。虽然经常需要重构,但其他业务问题(如开发新功能)通常具有更高的优先级。我们的研究发现,开发人员使用几类工具来支持大规模重构,并且更依赖于IDE等通用工具,而不是专门为支持重构而设计的工具。不同活动的工具支持各不相同,一些特别具有挑战性的活动实际上很少使用工具。我们的研究表明了对更好的大规模重构工具的明确需求,以及重构研究人员在行业中发挥作用的机会。我们在本文中总结的结果是实现这一目标的具体步骤。
2022-02-15 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
An Empirical Study on Refactoring Activity
本文报告了一个实证研究的重构活动在三个Java软件系统。我们调查了重构活动的一些问题,以确认或不同意从以前的实证研究中得出的结论。与以往的实证研究不同,我们的研究发现,并不总是有更多的重构活动之前的主要项目发布日期比之后。相比之下,我们能够确认软件开发人员对测试代码和生产代码执行不同类型的重构操作,特定的开发人员负责项目中的重构,重构编辑没有得到很好的测试。此外,floss重构在开发人员中更受欢迎,重构活动在项目中很频繁,大多数不良气味一旦发生,就会持续到系统的最新版本。通过证实其他研究人员的假设,我们可以更有信心地认为这些研究结论是可推广的。
2014-12-18 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
Why We Refactor? Confessions of GitHub Contributors
重构是一种广泛的实践,可以帮助开发人员提高代码的可维护性和可读性。然而,有一个有限数量的研究经验调查背后的实际动机,具体的重构操作应用的开发人员。为了填补这一空白,我们监控了GitHub上托管的Java项目,以检测最近应用的重构,并要求开发人员解释他们决定重构代码的原因。通过对收集到的回复进行主题分析,我们为12种著名的重构类型编制了一个44种不同动机的目录。我们发现,重构活动主要是由需求的变化驱动的,而很少是由代码气味驱动的。提取方法是最通用的重构操作,有11种不同的用途。最后,我们发现有证据表明开发人员使用的IDE会影响自动化重构工具的采用。
2016-07-08 cs.SE
Code Review Practices for Refactoring Changes: An Empirical Study on OpenStack
现代代码审查是工业和开源项目中广泛使用的技术,用于提高软件质量,共享知识,并确保遵守编码标准和指南。在代码评审期间,开发人员可能会在合并代码库中的代码更改之前讨论重构活动。到目前为止,代码审查已被广泛研究,以探索其一般挑战,最佳实践和结果,以及社会技术方面。然而,很少有人知道重构是如何被审查的,以及开发人员在审查重构代码时关心什么。因此,在这项工作中,我们提出了一个定量和定性的研究,以了解什么是主要的标准,开发人员依靠制定一个决定接受或拒绝提交的重构代码,是什么使这个过程具有挑战性。通过对分布在OpenStack开源项目中的11,010个重构和非重构审查的案例研究,我们发现,就代码审查工作而言,与重构相关的代码审查需要更长的时间才能得到解决。此外,在对重构代码审查讨论的重要样本进行主题分析后,我们建立了一个由28个重构审查标准组成的综合分类法。我们设想我们的研究结果重申了开发准确和有效的工具和技术的必要性,这些工具和技术可以帮助开发人员在重构的情况下进行审查。
2022-03-27 cs.SE
Refactoring Technical Support to Reduce Interrupts of Developers
在本文中,提出了一个技术支持数据的分析,其目标是确定减少中断的过程改进行动。建立技术支持聊天,并用于向使用核心团队开发的软件代码的其他开发团队提供内部开发人员支持。本文展示了6个月支持时间的数据分析如何帮助确定差距和行动项目,以改进技术支持流程,最大限度地减少来自其他开发团队的中断。本文还显示了基于此分析所采取的重构操作的效果(优点和缺点)。
2015-10-16 cs.SE cs.SI
How do Agents Refactor: An Empirical Study
University of Alberta(阿尔伯塔大学)
通过对比86个Java项目中智能体与开发者的重构拉取请求,发现智能体重构以注释修改为主,而Cursor是唯一显著增加代码味道的模型。
2026-05-24 cs.SE
Refactoring for Dockerfile Quality: A Dive into Developer Practices and Automation Potential
本研究利用 358 个开源项目的 600 个 Dockerfile,通过上下文学习与评分演示选择策略,实现自动化重构,平均减少镜像大小 32%、构建时长 6%,并显著提升可理解性与可维护性,为 CI/CD 中 Dockerfile 质量优化奠定基础。
2025-01-23 cs.SE
RTj: a Java framework for detecting and refactoring rotten green test cases
烂绿测试是指至少有一个断言没有执行的测试。这给了开发者一种虚假的信心。在本文中,我们提出,RTJ,一个框架,分析测试用例从Java项目的目标是检测和重构腐烂的测试用例。RTj从GitHub上托管的26个开源Java项目中自动发现了427个烂测试。使用RTj,开发人员可以自动推荐需要修改的测试,以提高测试中应用程序的质量。
2019-12-16 cs.SE
Refactoring Practices in the Context of Modern Code Review: An Industrial Case Study at Xerox
现代代码审查是工业和开源项目中常用的基本实践,用于提高软件质量,共享知识,并确保符合编码标准。在代码审查期间,开发人员可以在合并代码库中的代码更改之前检查和讨论各种更改,包括重构活动。到目前为止,代码审查已被广泛研究,以探索其一般挑战,最佳实践和结果,以及社会技术方面。然而,很少有人知道重构活动是如何被审查,感知和实践的。本研究旨在揭示评审员如何决定接受或拒绝提交的重构请求,以及是什么使这种评审具有挑战性。我们提出了一个工业案例研究与24个专业开发人员在施乐公司。特别是,我们研究的动机,文档的做法,挑战,验证,并在代码审查重构活动的影响。我们的研究提供了几个重要的发现。我们的结果报告了开发人员在记录重构以供审查时缺乏适当的程序。我们对评审人员的调查也揭示了一些与理解重构意图以及对软件功能和非功能方面的影响有关的困难。根据我们的发现,我们推荐了一个程序来正确记录重构活动,作为我们调查反馈的一部分。
2021-02-10 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
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
An Empirical Study on the Code Refactoring Capability of Large Language Models
本研究实证评估StarCoder2在30个Java项目中的代码重构能力,发现其比开发者多减少20.1%代码坏味道,结合一次性提示与多重构方案可显著提升性能。
2024-11-04 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
Empirical Evaluation of a Live Environment for Extract Method Refactoring
针对传统重构工具反馈慢的问题,提出聚焦实时可视化建议与应用的实时重构概念,开发可识别、推荐并应用提取方法重构的实时环境,实证实验显示其能改进多项代码质量指标,效果显著优于无辅助手动重构。
2023-07-20 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 Developers Extract Functions: An Experiment
创建函数是编写计算机程序的核心。但是,关于如何做到这一点以及开发人员使用的考虑因素是什么,几乎没有实证研究。我们设计了一个实验,在这个实验中,我们可以比较多个开发人员在完全相同的条件下做出的决定。该实验基于现有的生产代码,将其“扁平化”为单个单片函数,然后让开发人员承担重构它的任务,以通过提取函数来实现更好的设计。结果表明,开发人员倾向于基于结构线索提取功能,例如“if”或“try”块。虽然不同开发人员执行的重构之间存在显著的相关性,但在重构的程度上也存在显著差异。例如,提取的函数数量在3到10之间,提取到函数中的代码量在37%到95%之间。
2022-09-02 cs.SE
Relating Complexity, Explicitness, Effectiveness of Refactorings and Non-Functional Requirements: A Replication Study
本研究通过将项目数翻倍并验证8,408个重构实例复现Soares等人的研究,考察SAR的复杂性、显式性、有效性及其与非功能需求的关系,发现显式重构更复杂但通常更利于内部质量。
2025-05-12 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
On the Documentation of Refactoring Types
提交消息是软件文档的原子级。它们提供代码更改及其目的的自然语言描述。消息对于软件维护和程序理解是至关重要的。与记录功能更新和错误修复不同,开发人员如何记录他们的重构活动知之甚少。开发人员可以出于各种原因执行多个重构操作,包括移动方法、提取类。然而,没有系统的研究,分析在何种程度上重构的文档准确地描述了重构操作在源代码级别执行。因此,本文挑战重构文档的能力,充分预测重构类型,在提交级别执行。我们的分析依赖于提交消息的文本挖掘来提取更好地代表每个类的相应特征。提取特定于每个重构的文本模式允许设计一个模型,该模型验证这些模式与其相应重构的一致性。这样的验证过程可以通过自动预测所应用的重构的方法级别类型来实现,即提取方法、内联方法、移动方法、上拉方法、下推方法和嵌入方法。我们使用5,004个提交的数据集,比较了各种分类器和基于关键字的基线方法的预测性能。我们的主要发现表明,重构类型预测的复杂性因类型而异。研究发现,重构方法和提取方法是记录最好的重构活动,而上拉方法和下推方法是最难通过文本描述来识别的。这些发现使开发人员注意到更加关注这些类型的文档的必要性。
2021-12-02 cs.SE
Profiling Developers Through the Lens of Technical Debt
内容:技术债需要管理以避免灾难性的后果,调查开发人员关于技术债管理的习惯是软件开发中非常宝贵的信息。目的:本研究旨在描述开发人员如何根据他们诱导的代码气味和他们应用的重构来管理技术债务。方法:我们为选定项目的每个开发人员挖掘了一个公开的技术债务数据集,以获取Git提交信息,代码气味,编码违规和重构活动。结果如下:通过结合这些信息,我们可以对开发人员进行分析,以识别多产的编码人员,突出区分开发人员角色(评审员,领导者,架构师)的活动,并估计编码成熟度和技术债务容忍度。
2020-09-08 cs.SE
How Do Developers Structure Unit Test Cases? An Empirical Study from the "AAA" Perspective
本研究基于435个真实单元测试用例,实证分析了开发者遵循AAA模式的情况,发现了三种反模式和四种设计缺陷,并通过提交18项重构提案获得78%正面反馈,揭示了投资回报率是开发者重构的关键考量。
2025-01-31 cs.SE
Hearing the voice of experts: Unveiling Stack Exchange communities' knowledge of test smells
本研究通过分析Stack Exchange社区的讨论数据,探究开发者对测试坏味道的认知、对应的修正措施及重构挑战,发现开发者更关注他人实操经验,且更常询问测试坏味道的实践优劣而非重构建议。
2023-05-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
Build Code Needs Maintenance Too: A Study on Refactoring and Technical Debt in Build Systems
本文研究了开源项目中构建脚本的重构及其对技术债务的解决情况,提出了首个构建系统重构分类法,并开发了基于GPT-4o的自动化检测工具BuildRefMiner。
2025-04-02 cs.SE
Refactoring Towards Microservices: Preparing the Ground for Service Extraction
针对单体系统向微服务迁移中现有方法忽略代码层面挑战的问题,本文提出含7种聚焦依赖处理的重构方法目录,填补代码层流程系统化空白,简化迁移并为自动化奠基。
2025-10-03 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
On the Relationship Between Coupling and Refactoring: An Empirical Viewpoint
[背景]重构在过去的二十年中已经成熟,成为开发人员工具包的一部分。然而,许多基础研究问题仍然在很大程度上未被探索。[Aim]本文的目标是调查的最高和最低的四分位数的重构为基础的数据使用两个耦合度量-对象之间的耦合度量和最近的概念耦合类之间的度量来回答这个问题。重构的趋势和模式可以根据类耦合的级别来识别吗?[方法]在本文中,我们分析了从三个开源系统的发布中提取的六千多个重构操作,以解决这样一个问题。[结果]结果显示,对于两个指标,在耦合的上四分位数或下四分位数中应用的重构类型没有有意义的差异;在某些情况下,通常与耦合去除相关的重构实际上在下四分位数中更多。还注意到所有系统都缺乏与继承相关的重构。[结论]新出现的消息(也是令人困惑的消息)是,当涉及到重构类型时,开发人员似乎对高耦合的类漠不关心-他们以几乎相同的方式对待相对低耦合的类。
2019-08-05 cs.SE
Recommending More Efficient Workflows to Software Developers
现有的推荐系统可以通过推荐新的编程工具(例如重构工具或程序导航工具)来帮助开发人员提高他们的软件开发能力。然而,仅仅孤立地推荐工具本身并不能让开发人员成功地完成他们的任务。在本文中,我将介绍一个新的推荐系统,它可以向开发人员推荐工作流或工具序列。通过学习更有效的工作流程,该系统可以使软件开发人员更有效率。
2021-02-06 cs.IR cs.SE
On the Use of Refactoring in Security Vulnerability Fixes: An Exploratory Study on Maven Libraries
第三方库依赖在当今的软件开发中是司空见惯的。随着安全漏洞的威胁日益严重,及时应用安全补丁对保护软件系统至关重要。因此,社区开发了一个软件和硬件弱点列表,称为常见弱点枚举(CWE),以评估漏洞。以前的工作已经揭示了维护活动(如重构代码)可能与源代码中与安全相关的方面相关。在这项工作中,我们探讨重构和安全性之间的关系,通过分析在实践中执行的重构动作与漏洞修复。我们进行了一个案例研究,分析了143个maven库,其中351个已知漏洞已被检测和修复。令人惊讶的是,我们的探索性结果显示,开发人员在他们的修复中包含重构操作,其中31.9%(351个中的112个)的漏洞与重构操作配对。我们设想这篇简短的论文开辟潜在的新方向,以激励自动化工具支持,允许开发人员更快地交付修复,同时维护他们的代码。
2022-05-17 cs.SE
Bugs in the Shadows: Static Detection of Faulty Python Refactorings
针对Python动态类型系统导致自动化重构易引入类型错误的问题,本文提出静态分析技术检测重构引入的类型错误,在Rope及主流IDE的重构实现中发现多个已被开发者确认的缺陷,为提升重构工具鲁棒性提供了依据。
2025-07-01 cs.SE
RAID: Tool Support for Refactoring-Aware Code Reviews
代码评审是一种关键的开发实践,有助于提高软件质量和促进开发人员之间的知识共享。然而,代码审查通常需要时间,并且需要对文本差异进行详细而耗时的分析。特别是,在代码审查期间检测重构不是一个简单的任务,因为它们没有显式地表示在差异中。例如,移动函数重构由删除的(-)和添加的(+)行代码表示,这些代码可以位于不同的源代码文件中。为了解决这个问题,我们引入了RAID,一个重构感知和智能比较工具。除了提出RAID架构外,我们还实现了一个支持我们解决方案的Chrome浏览器插件。然后,我们进行了现场实验,8名专业开发人员谁使用RAID三个月。我们的结论是,RAID可以减少检测和审查文本差异中的重构所需的认知努力。除了在差异中记录重构之外,RAID还减少了检查这些操作所需的行数。例如,在移动重构的情况下,要查看的行的中位数从14.5减少到2行,在提取的情况下,从113减少到55行。
2021-03-21 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
Test Code Refactoring Unveiled: Where and How Does It Affect Test Code Quality and Effectiveness?
本文提出通过挖掘 GitHub 开源 Java 项目仓库,统计分析测试重构与质量指标、测试坏味道及覆盖率的关系,以揭示其对测试代码质量和有效性的影响。
2023-08-18 cs.SE
To What Extent Cognitive-Driven Development Improves Code Readability?
认知驱动开发(CDD)是一种编码设计技术,旨在减少开发人员在理解给定代码单元(例如,类)。通过遵循CDD设计实践,预计编码单元将更小,因此更容易维护和发展。然而,到目前为止还不知道这些使用CDD标准编码的较小代码单元是否确实更容易理解。在这项工作中,我们的目标是评估CDD如何提高代码的可读性。为了实现这一目标,我们进行了两个阶段的研究。我们首先邀请专业软件开发人员投票(并证明他们的理由)最可读的代码片段对(从一组10对);其中一对是使用CDD实践编码的。共收到133个回复。在第二阶段,我们将最先进的可读性模型应用于10对CDD指导的重构。我们观察到一些相互矛盾的结果。一方面,开发人员认为(10个中的)7个CDD引导的重构比它们的对应重构更具可读性;对于另外两个CDD引导的重构,开发人员尚未决定,而只有在一个CDD引导的重构中,开发人员更喜欢原始代码片段。另一方面,我们注意到只有一个CDD引导的重构具有更好的性能可读性,由最先进的可读性模型评估。我们的研究结果提供了初步的证据,CDD可能是一个有趣的软件设计方法。
2022-06-21 cs.SE
Do code refactorings influence the merge effort?
本研究通过关联规则挖掘分析40,248次合并提交,发现代码重构会增加合并工作量,且重构越多、并行重构时工作量越大,提示改进合并与重构推荐工具。
2023-05-10 cs.SE
Operation-based Refactoring-aware Merging: An Empirical Evaluation
在版本控制系统中处理合并冲突对于软件开发人员来说是一项具有挑战性的任务。解决合并冲突是一个耗时且容易出错的过程,会分散开发人员对重要任务的注意力。最近的工作表明,重构经常涉及合并冲突,并且与重构相关的冲突往往更大,使它们更难解决。在文献中,有两种重构感知的合并技术声称可以自动解决重构相关的冲突;然而,这两种技术从未进行过实证比较。在本文中,我们提出了RefMerge,一个复兴的基于Java的设计和实现的第一种技术,这是一个基于操作的重构感知合并算法。我们将RefMerge与Git和最先进的基于图形的重构感知合并工具IntelliMerge进行比较,这些工具来自20个开源项目的2,001个合并场景,其中包含与重构相关的冲突。我们发现,RefMerge解决或减少了497(25%)合并方案中的冲突,而增加冲突,只有214(11%)的情况下。另一方面,我们发现IntelliMerge解决或减少了478(24%)合并方案中的冲突,但增加了597(30%)合并方案中的冲突。此外,我们还对三种合并算法之间的差异进行了定性分析,并提供了每个工具的优点和缺点的见解。我们发现,虽然IntelliMerge在排序和格式冲突方面做得很好,但它在类级别的重构和具有几个重构的场景中挣扎。另一方面,RefMerge对合并场景中的重构数量有弹性,但我们发现RefMerge在反转与移动相关的重构时会引入冲突。
2022-08-09 cs.SE
An Empirical Study on the Impact of Refactoring Activities on Evolving Client-Used APIs
背景:重构被认为是维护不断发展的软件系统的有效实践。对于软件库,我们研究了库开发人员如何重构他们的应用程序编程接口(API),特别是当它通过破坏库的API而影响客户端用户时。目标:我们的工作旨在了解使用库API的客户端如何受到重构活动的影响。我们的目标是可能影响更多图书馆客户端用户的流行图书馆。方法:我们根据客户端使用情况(称为客户端使用的API)来区分库API,以了解API损坏与重构的相关程度。我们基于工具的方法允许跨八个图书馆进行大规模研究(即,共有183个连续版本),客户项目约900个。结果:我们发现库维护者不太可能破坏客户端使用的API类。定量地说,我们发现重构活动破坏了不到37%的客户端使用的API。在更定性的分析中,我们展示了两个记录在案的案例,其中非重构API破坏性更改是由其他维护问题引起的(即,bug修复和新特性),并涉及更复杂的重构操作。结论:使用我们的自动化方法,我们发现库开发人员不太可能破坏API,并且在解决这些维护问题时倾向于破坏客户端使用的API。
2017-09-28 cs.SE
Using Automatic Refactoring to Improve Energy Efficiency of Android Apps
移动电话的日益普及给软件开发生命周期带来了额外的挑战。移动应用程序(简称app)应该提供与传统软件相同的功能集,但资源有限:例如有限的处理能力、存储、屏幕以及同样重要的电源。虽然能源效率是一个有价值的要求,但开发人员往往缺乏最佳实践的知识。在本文中,我们研究自动重构是否可以帮助开发人员发布节能应用程序。我们利用一个工具,Leafactor,有五种能源代码气味,往往会被忽视。我们使用Leafactor分析了140个免费和开源应用程序中的代码气味。因此,我们在45个应用程序中检测并修复了代码气味,其中40%已成功将我们的更改合并到官方存储库中。
2018-03-15 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
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
Closing the Loop for Software Remodularisation -- REARRANGE: An Effort Estimation Approach for Software Clustering-based Remodularisation
通过聚类对软件进行二次开发是提高软件内部质量的一种常用方法。然而,只有开发人员遵循推荐的重构建议,软件集群的真正好处才能实现,这可能是复杂和耗时的。简单地产生聚类结果不足以实现重新建模的好处。为了让推荐的重构操作产生影响,开发人员必须坚持到底。然而,由于某些重构操作的复杂性和耗时性,这通常是一项困难的任务。
2023-03-11 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
Refactoring Graphs: Assessing Refactoring over Time
重构是软件演化过程中必不可少的活动。通常,从业者依靠这样的转换来提高源代码的可维护性和质量。因此,这个过程可能会产生新的源代码实体或改变现有实体的结构。有时,转换是原子的,即,在一次提交中执行。在其他情况下,它们生成随时间执行的修改序列。为了研究和推理随着时间的推移重构,在本文中,我们提出了一个新的概念称为重构图,并提供了一个算法来建立这样的图。然后,我们调查了10个流行的基于Java的开源项目的历史。在消除了琐碎的图之后,我们描述了1,150个重构图的大样本,提供了关于它们的大小,提交,年龄,重构组成和开发人员的定量数据。最后,我们讨论重构图的应用和影响,例如,以提高代码的理解,检测重构模式,和支持软件进化研究。
2020-03-10 cs.SE
Impermanent Identifiers: Enhanced Source Code Comprehension and Refactoring
本文针对当代软件开发挑战提出以临时标识符为核心的创新代码增强方法,通过实证检验评估其在开发者中的采用与接受度,为代码增强开辟新方向并推动软件开发实践改进。
2024-06-14 cs.SE
Refactoring for Reuse: An Empirical Study
重构是优化软件健康的实际实践。虽然一些研究提出了重构策略,通过应用设计模式和删除设计缺陷来优化软件设计,但很少有人知道开发人员实际上如何重构代码以提高其重用性。因此,我们从1,828个开源项目中提取了一组旨在提高软件可重用性的重构。我们分析了可重用性重构对最先进的可重用性度量的影响,并比较了可重用性重构类型的分布,以及其余主流重构的分布。总的来说,我们发现在可重用性的上下文中应用的重构类型的分布与主流开发中重构类型的分布不同。在为提高可重用性而执行的重构中,源文件受到更多设计级别类型的重构的影响。可重用性重构会显著影响高级代码元素,如包、类和方法,而典型的重构会影响所有代码元素,包括标识符和参数。这些发现提供了实际的见解,目前的重构实践中的代码重用的背景下,涉及重构的行为。
2021-11-13 cs.SE
ACE: Automated Technical Debt Remediation with Validated Large Language Model Refactorings
本文提出ACE工具,利用经过验证的大语言模型输出自动进行代码重构,在保证程序正确性的同时提升代码可理解性,从而有效缓解开发者极少处理的技术债务。
2025-07-04 cs.SE