Refactoring for Reuse: An Empirical Study
重构是优化软件健康的实际实践。虽然一些研究提出了重构策略,通过应用设计模式和删除设计缺陷来优化软件设计,但很少有人知道开发人员实际上如何重构代码以提高其重用性。因此,我们从1,828个开源项目中提取了一组旨在提高软件可重用性的重构。我们分析了可重用性重构对最先进的可重用性度量的影响,并比较了可重用性重构类型的分布,以及其余主流重构的分布。总的来说,我们发现在可重用性的上下文中应用的重构类型的分布与主流开发中重构类型的分布不同。在为提高可重用性而执行的重构中,源文件受到更多设计级别类型的重构的影响。可重用性重构会显著影响高级代码元素,如包、类和方法,而典型的重构会影响所有代码元素,包括标识符和参数。这些发现提供了实际的见解,目前的重构实践中的代码重用的背景下,涉及重构的行为。
2021-11-13 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
In Search of Metrics to Guide Developer-Based Refactoring Recommendations
本文提出一项实证研究,通过量化产品和过程度量标准来把握开发者执行重构的动机,从而为基于开发者的重构推荐器设计提供度量标准目录。
2024-07-25 cs.SE
An Empirical Study on Refactoring-Inducing Pull Requests
背景资料:基于拉式的开发塑造了现代代码审查(MCR)的实践,其中审查者可以通过拉式请求(PR)中的注释和提交来贡献代码改进,例如重构。过去的MCR研究统一对待所有的PR,不管它们是否引起重构。我们将PR定义为重构诱导,即在初始提交后执行重构编辑,这是审阅者之间讨论的结果,也是PR开发人员自发采取的行动。目的:这项混合研究(定量和定性)探讨了代码审查相关的方面,旨在表征重构诱导PR。方法:我们假设,重构诱导PR有不同的特点比非重构诱导的,因此值得特别关注和治疗的研究人员,从业者和工具建设者。为了研究我们的假设,我们从GitHub中挖掘了1,845个Apache合并PR的样本,挖掘了这些PR中的重构编辑,并对重构诱导PR和非重构诱导PR进行了比较研究。我们还手动检查了2,096条评论,并从228个重构诱导PR中检测到1,891个重构。结果如下:我们在我们的样本中发现了30.2%的重构诱导PR,它们在提交数量、代码流失、文件更改数量、审查评论数量、讨论长度和合并时间方面与非重构诱导PR有显著差异。然而,我们没有发现统计证据表明,评论者的数量与重构诱导有关。我们的定性分析显示,至少有一个重构编辑引起的审查133(58.3%)的重构诱导PR检查。结论:我们的研究结果为研究人员,从业者和工具构建者提供了方向,以改善基于拉式代码审查的实践。
2021-08-24 cs.SE
"Refactoring Runaway": Understanding and Mitigating Tangled Refactorings in Coding Agents for Issue Resolution
School of Computer Software, Tianjin University(天津大学计算机科学与技术学院);Kyushu University(九州大学)
本文研究了编码代理在问题解决中交织重构的现象,通过实证分析发现代理重构的频率和强度低于人类开发者,提出了一种重构感知的精炼方法以提高编译性并解决未解决的问题。
2026-05-21 cs.SE
Fixing Your Own Smells: Adding a Mistake-Based Familiarisation Step When Teaching Code Refactoring
针对传统重构教学用陌生代码导致新手难内化的问题,提出让学生先写带坏味道的代码再重构的教学法,实验证明其能显著提升新手的重构效率与信心。
2024-01-02 cs.SE
Software Testing and Code Refactoring: A Survey with Practitioners
本研究面向软件测试从业者开展调研,探究其代码重构实践的收益与局限,发现重构可助力自动化测试维护、提升团队绩效,但存在管理层重视不足等障碍,为测试人员提升编码能力提供参考。
2023-10-03 cs.SE
How Do I Refactor This? An Empirical Study on Refactoring Trends and Topics in Stack Overflow
作为软件维护和演化的重要组成部分,重构由开发人员执行,无论技术或领域如何,以提高系统的内部质量,并减少其技术债务。然而,选择合适的重构策略并不总是那么简单,这导致开发人员寻求帮助。虽然重构的研究已经很成熟,有几项研究在检测重构机会和建议适当的代码更改之间进行了改变,但对它们在实践中的采用知之甚少。分析开发人员的认知对于更好地理解开发人员认为代码中存在的问题以及他们如何处理这些问题至关重要。此外,需要通过提取更适合开发人员实际情况的常见重构意图,来弥合研究重构与实际应用之间的差距。在这项研究中,我们通过一系列定量和定性的实验,分析重构讨论堆栈溢出。我们的研究结果表明,堆栈溢出是由一组不同的开发人员用于重构援助的各种技术。我们的观察显示了开发人员在重构时通常需要帮助的五个方面--代码优化、工具和IDE、体系结构和设计模式、单元测试和数据库。我们设想我们的研究结果更好地桥接重构的传统(或学术)方面与其现实世界的适用性之间的支持,包括更好的工具支持。
2021-10-23 cs.SE
Assessing the Bug-Proneness of Refactored Code: A Longitudinal Multi-Project Study
本文对12个开源项目开展纵向研究,分析不同重构特征与缺陷的长期关系,发现单一重构和顺手式重构反而可能增加缺陷风险,且相关缺陷难以被现有检测技术发现。
2025-05-12 cs.SE
CodeTaste: Can LLMs Generate Human-Level Code Refactorings?
University of California, Berkeley(加州大学伯克利分校);ETH Zurich(苏黎世联邦理工学院)
研究LLM代理在代码重构中的能力,通过CodeTaste基准测试发现,代理在详细指定重构时表现良好,但难以自主发现人类选择的重构,提出“先提议后实现”分解可改善对齐。
2026-06-08 cs.AI cs.LG cs.SE
Automating Source Code Refactoring in the Classroom
本文探讨了在课堂中使用 Eclipse 插件 JDeodorant 进行反模式检测与代码重构的教学实践,对 171 名学生的实验结果表明该工具有效提升了学生对重构概念的认知与学习满意度。
2023-11-05 cs.CY cs.SE
An Exploratory Study on Refactoring Documentation in Issues Handling
理解重构文档的实践在学术界和工业界都是至关重要的。大多数软件项目都使用问题跟踪系统,使开发人员,质量保证,管理人员和用户能够提交功能请求和其他任务,如错误修复和代码审查。虽然最近的研究探索了如何在提交消息中记录重构,但很少有人知道开发人员如何在问题中描述他们的重构需求。在这项研究中,我们的目标是探索开发人员报告的问题中的重构变化,以更好地了解开发人员认为他们的代码中存在什么问题以及他们如何处理它。我们的方法依赖于文本挖掘45,477个重构相关问题,并通过调查与15,833重构操作和开发者的显式重构意图。我们的研究结果表明:(1)开发人员大多使用与重构相关的术语/短语来解决重构相关的问题;(2)开发人员倾向于明确提到特定质量属性的改进,并专注于重复代码的删除。我们设想我们的研究结果使工具构建者能够支持开发人员自动记录问题中的重构更改。
2022-03-19 cs.SE
Same Same But Different: Preventing Refactoring Attacks on Software Plagiarism Detection
针对编程教育中基于重构的混淆攻击易绕过现有代码抄袭检测系统的问题,本文提出一种结合代码属性图与图变换的可扩展增强框架,经真实学生提交样本评估,显著提升了抄袭代码检测效果。
2025-10-29 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
Behind the Intent of Extract Method Refactoring: A Systematic Literature Review
本文通过系统性文献综述梳理83项提取方法重构研究,构建分类框架,发现该领域多聚焦代码克隆、工具常结合人工决策且基准难以标准化,为后续研究指明方向。
2023-12-19 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
How to Refactor this Code? An Exploratory Study on Developer-ChatGPT Refactoring Conversations
本研究通过挖掘17,913条开发者与ChatGPT的重构对话,揭示开发者常提出通用重构请求,而ChatGPT回应包含明确意图,并识别出多种提示学习设置,为AI辅助重构协作提供洞见。
2024-02-08 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
Why We Refactor? Confessions of GitHub Contributors
重构是一种广泛的实践,可以帮助开发人员提高代码的可维护性和可读性。然而,有一个有限数量的研究经验调查背后的实际动机,具体的重构操作应用的开发人员。为了填补这一空白,我们监控了GitHub上托管的Java项目,以检测最近应用的重构,并要求开发人员解释他们决定重构代码的原因。通过对收集到的回复进行主题分析,我们为12种著名的重构类型编制了一个44种不同动机的目录。我们发现,重构活动主要是由需求的变化驱动的,而很少是由代码气味驱动的。提取方法是最通用的重构操作,有11种不同的用途。最后,我们发现有证据表明开发人员使用的IDE会影响自动化重构工具的采用。
2016-07-08 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
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
How do Agents Refactor: An Empirical Study
University of Alberta(阿尔伯塔大学)
通过对比86个Java项目中智能体与开发者的重构拉取请求,发现智能体重构以注释修改为主,而Cursor是唯一显著增加代码味道的模型。
2026-05-24 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
Industry Experiences with Large-Scale Refactoring
软件重构在软件工程中占有重要地位。当开发人员想要重构软件以提高其质量而不改变其外部行为时,他们通常会转向重构。研究表明,小规模(floss)重构在行业中很常见,通常可以由单个开发人员在短时间内执行,尽管开发人员手动完成大部分工作而不是使用重构工具。然而,一些重构工作的规模要大得多,需要整个团队和数月的努力,而工具在这些工作中的作用还没有得到很好的研究。在本文中,我们报告了我们对开发人员进行的一项调查,以了解大规模重构,其流行程度,以及工具如何支持它。我们来自107个行业开发人员的结果表明,项目通常会经历多次大规模重构,每一次都需要相当大的努力。虽然经常需要重构,但其他业务问题(如开发新功能)通常具有更高的优先级。我们的研究发现,开发人员使用几类工具来支持大规模重构,并且更依赖于IDE等通用工具,而不是专门为支持重构而设计的工具。不同活动的工具支持各不相同,一些特别具有挑战性的活动实际上很少使用工具。我们的研究表明了对更好的大规模重构工具的明确需求,以及重构研究人员在行业中发挥作用的机会。我们在本文中总结的结果是实现这一目标的具体步骤。
2022-02-15 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
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
Testability Refactoring in Pull Requests: Patterns and Trends
要创建单元测试,可能需要重构产品代码,例如通过扩展对特定方法的访问或通过将类分解为更小的单元,这些单元更容易独立测试。我们报告了一项广泛的研究,以了解这种复合重构程序的目的,提高可测试性。我们收集并研究了来自621个GitHub项目的346,841个Java Pull请求。首先,我们比较了两个群体中的原子重构:具有更改的测试对的拉取请求(即,生产和测试代码中的共同更改,因此可能包括可测试性重构)和没有测试对的拉取请求。我们在测试对拉取请求中发现了更多的原子重构,例如更改变量类型操作或更改参数类型。其次,我们手动分析了200个拉取请求的代码更改,其中开发人员明确提到了术语“可测试性”或“重构+测试”。我们确定了10个复合重构过程,以达到可测试性的目的,我们称之为可测试性重构模式。第三,我们手动分析了另外524个测试对拉取请求:都是随机选择的,我们假设在其中找到可测试性重构,例如在关于依赖或并发问题的拉取请求中。在所有分析的拉取请求中,大约有25%实际上包含了可测试性重构模式。最常见的是提取一个方法用于覆盖或调用,扩大对方法的访问以进行调用,以及提取一个类以进行调用。我们还报告了与模式同时发生的频繁原子重构,并讨论了我们的研究结果对研究、实践和教育的影响
2023-03-24 cs.SE
An Empirical Study on the Code Refactoring Capability of Large Language Models
本研究实证评估StarCoder2在30个Java项目中的代码重构能力,发现其比开发者多减少20.1%代码坏味道,结合一次性提示与多重构方案可显著提升性能。
2024-11-04 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
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
Relating Complexity, Explicitness, Effectiveness of Refactorings and Non-Functional Requirements: A Replication Study
本研究通过将项目数翻倍并验证8,408个重构实例复现Soares等人的研究,考察SAR的复杂性、显式性、有效性及其与非功能需求的关系,发现显式重构更复杂但通常更利于内部质量。
2025-05-12 cs.SE
Automated Unit Test Refactoring
针对测试异味导致测试代码质量低、维护难及现有自动化重构方法灵活性不足的问题,提出基于LLM的上下文增强框架UTRefactor,通过思维链模拟手动重构并结合检查点机制,在6个开源Java项目测试中实现89%异味消除率,性能显著优于现有方法。
2025-02-11 cs.SE
Using Automatic Refactoring to Improve Energy Efficiency of Android Apps
移动电话的日益普及给软件开发生命周期带来了额外的挑战。移动应用程序(简称app)应该提供与传统软件相同的功能集,但资源有限:例如有限的处理能力、存储、屏幕以及同样重要的电源。虽然能源效率是一个有价值的要求,但开发人员往往缺乏最佳实践的知识。在本文中,我们研究自动重构是否可以帮助开发人员发布节能应用程序。我们利用一个工具,Leafactor,有五种能源代码气味,往往会被忽视。我们使用Leafactor分析了140个免费和开源应用程序中的代码气味。因此,我们在45个应用程序中检测并修复了代码气味,其中40%已成功将我们的更改合并到官方存储库中。
2018-03-15 cs.SE
Impermanent Identifiers: Enhanced Source Code Comprehension and Refactoring
本文针对当代软件开发挑战提出以临时标识符为核心的创新代码增强方法,通过实证检验评估其在开发者中的采用与接受度,为代码增强开辟新方向并推动软件开发实践改进。
2024-06-14 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
Refactoring with LLMs: Bridging Human Expertise and Machine Understanding
Department of Computer Engineering and Software Engineering(计算机工程与软件工程系)
本研究参考Martin Fowler重构指南设计多种指令策略,提升LLM自动执行61种重构任务的能力,实验验证其可完成所有基准重构并保留语义,聚焦整体目标的指令效果更优。
2025-10-04 cs.AI cs.SE
Closing the Loop for Software Remodularisation -- REARRANGE: An Effort Estimation Approach for Software Clustering-based Remodularisation
通过聚类对软件进行二次开发是提高软件内部质量的一种常用方法。然而,只有开发人员遵循推荐的重构建议,软件集群的真正好处才能实现,这可能是复杂和耗时的。简单地产生聚类结果不足以实现重新建模的好处。为了让推荐的重构操作产生影响,开发人员必须坚持到底。然而,由于某些重构操作的复杂性和耗时性,这通常是一项困难的任务。
2023-03-11 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
Software Cloning in Extreme Programming Environment
随着时间的推移,软件系统通过添加新功能和修改现有功能而不断发展。随着软件的演化,软件的结构变得越来越复杂,软件系统的可理解性和可维护性也日益恶化。这些不仅重要,而且是软件开发中最昂贵的活动之一。重构经常被应用到软件中来改进它们。重构的目标之一是限制代码克隆,因为它阻碍了软件维护并影响其质量。为了应对不断的变化,重构被视为极限编程的重要组成部分。敏捷方法将重构作为重要的关键实践,是开发无克隆代码的首选。本文总结了我对软件克隆分析的概述。首先讨论了代码克隆的概念、类型、产生原因、后果和分析。重点介绍了极限编程环境下的代码克隆,并指出克隆检测是重构的有效工具。
2014-08-21 cs.SE
Agentic Refactoring: An Empirical Study of AI Coding Agents
Nara Institute of Science and Technology(奈良先端科学技术大学院大学);Queen's University(女王大学)
本文基于 AIDev 数据集对真实 Java 项目中 AI 智能体生成的重构进行大规模实证研究,揭示了智能体重构以低层次一致性编辑为主、主要关注可维护性与可读性,并能带来小幅但显著的结构质量改进。
2026-10-28 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
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
Hearing the voice of experts: Unveiling Stack Exchange communities' knowledge of test smells
本研究通过分析Stack Exchange社区的讨论数据,探究开发者对测试坏味道的认知、对应的修正措施及重构挑战,发现开发者更关注他人实操经验,且更常询问测试坏味道的实践优劣而非重构建议。
2023-05-05 cs.SE
Android Code Smells: From Introduction to Refactoring
面向对象代码气味是软件工程中的一个众所周知的概念,它指的是软件系统中常见的糟糕的设计和开发实践。随着移动应用程序的出现,研究社区已经将新的代码气味类别确定为移动特定的代码气味。这些代码气味是重要性能问题或瓶颈的症状。尽管对这些新的代码气味进行了多项实证研究,但它们的扩散和演变仍然不清楚。我们在这篇文章中提出了一个大规模的实证研究,检查Android代码气味的引入,演变和去除。这项研究依赖于从324个应用程序中提取的数据,对561个去除气味的提交的手动分析,以及与25个Android开发人员的讨论。我们的研究结果表明,手机特有的代码气味的高度扩散并不是释放压力的结果。我们还发现,这些代码气味的去除通常是维护活动的副作用,因为开发人员即使意识到它们也不会重构气味实例。
2020-10-14 cs.SE
Teaching Code Refactoring Using LLMs
Department of Computer Science(计算机科学系);North Carolina State University(北卡罗来纳州立大学)
本文探讨在软件工程课程中集成 LLM 辅助代码重构,通过结构化提示提供实时反馈,帮助学生识别并解决代码坏味道,从而弥合理论与实践学习的差距,深化对可维护性原则的理解。
2025-08-12 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
Just-in-Time Code Duplicates Extraction
重构是软件维护中的一项关键任务,通常用于执行更好的设计和编码实践,同时处理设计缺陷。提取方法重构广泛用于将重复的代码片段合并为一个新方法。一些研究尝试推荐使用不同技术的提取方法重构机会,包括程序切片、程序依赖图分析、更改历史分析、结构相似性和特征提取。然而,不管是哪种方法,大多数现有的方法都会干扰开发人员的工作流程:它们要求开发人员停止编码并分析建议的机会,并且还考虑整个项目中的所有重构建议,而不关注开发上下文。为了提高提取方法重构的采用率,在本文中,我们的目标是研究机器学习和深度学习算法在维护开发人员工作流程的同时对其推荐的有效性。所提出的方法依赖于挖掘先前应用的提取方法重构并提取其特征以训练深度学习分类器,该分类器在用户的代码中检测它们。我们将我们的方法实现为IntelliJ IDEA的插件,称为AntiCopyPaster。为了开发我们的方法,我们在来自13个开源Apache项目的18,942个代码片段的数据集上训练和评估了各种流行的模型。结果表明,最佳模型是卷积神经网络(CNN),它推荐了适当的提取方法重构,F度量为0.82。我们还进行了定性研究与72开发人员评估的有用性开发的插件。结果表明,开发人员倾向于欣赏这种方法的想法,并对插件操作的各个方面感到满意。
2023-02-07 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
The Adverse Effects of Code Duplication in Machine Learning Models of Code
Microsoft Research(微软研究院)
大代码领域依赖于挖掘大型代码库来执行一些学习任务。Lopes等人(2017)最近发现了这种方法的一个重大威胁,他在GitHub上发现了大量近乎重复的代码。然而,为源代码设计机器学习模型的研究人员并没有注意到代码重复的影响。在这项工作中,我们探讨了代码重复对机器学习模型的影响,表明在重复代码语料库上进行测试时,与去重复语料库的性能相比,报告的性能指标有时会膨胀高达100%,这更准确地代表了软件工程师如何使用机器学习模型。我们为广泛使用的数据集提供了一个重复索引,列出了收集代码语料库和评估机器学习模型的最佳实践。最后,我们发布工具,以帮助社区在未来的研究中避免这个问题。
2019-08-11 cs.LG 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
AI-Assisted Unit Test Writing and Test-Driven Code Refactoring: A Case Study
Faculty of Electrical Engineering and Computing, University of Zagreb(萨格勒布大学电气工程与计算学院)
本文研究了利用AI生成单元测试并进行安全重构的方法,通过案例展示如何通过迭代测试捕获系统行为,减少重构风险,提升代码维护效率。
2026-04-03 cs.AI cs.SE
On The Gap Between Software Maintenance Theory and Practitioners' Approaches
研究人员对从业人员在实践中执行维护任务的方式知之甚少。反过来,从业人员并不总是与研究界提供的建议保持同步。这项工作调查的研究社区和软件维护实践提出的软件维护技术之间的差距。我们对来自92家公司和12个国家的112名从业人员进行了调查。我们专注于分析从业者是否以及如何理解和应用以下主题:不良气味,重构,软件度量和变更影响分析。这项研究表明,在这些主题的研究方法和行业实践之间存在很大的差距,特别是在变化影响分析和软件度量。
2021-04-08 cs.SE
Evaluating LLMs Effectiveness in Detecting and Correcting Test Smells: An Empirical Study
该实证研究评估GPT-4-Turbo、LLaMA 3 70B和Gemini-1.5 Pro在Python与Java测试套件中的测试坏味检测与重构能力,发现Gemini整体表现最佳。
2025-06-09 cs.SE
Taxonomy of migration scenarios for Qiskit refactoring using LLMs
Universidad Nacional de La Plata, Facultad de Informática Laboratorio de Investigación y Formación en Informática Avanzada (LIFIA), Argentina(拉普拉塔国立大学计算机学院高级信息技术研究与培训实验室,阿根廷)
本研究面向 Qiskit 版本迁移中的量子代码重构问题,比较专家与 LLM 构建的分类体系并整合为统一框架,以支持 AI 辅助迁移和自动化重构评估。
2025-06-08 cs.AI cs.ET cs.SE