An Empirical Study on the Impact of Code Duplication-aware Refactoring Practices on Quality Metrics
本文通过分析128个开源Java项目中332个重构提交,实证研究了代码重复消除重构操作对设计质量指标的影响,发现多数指标能捕捉开发者去重意图,但部分指标未能完全反映。
2025-02-06 cs.SE
Potential Technical Debt and Its Resolution in Code Reviews: An Exploratory Study of the OpenStack and Qt Communities
技术债务(TD)是指开发人员为了实现短期目标而牺牲长期代码质量的情况,这可能对软件系统的质量产生负面影响。在代码评审的上下文中,这种次优实现有机会在代码合并之前的评审过程中及时解决。因此,我们可以将其视为潜在技术债务(PTD),因为当PTD被注入软件系统而没有得到解决时,它将演变为TD。到目前为止,对PTD在代码评审中被识别的程度知之甚少。为此,我们进行了一项探索性研究,试图了解代码审查中PTD的性质,并在识别后追踪PTD的解决方案。我们从OpenStack的Nova项目和Qt的Qt Base项目中随机收集了2,030条评论。然后,我们手动检查这些审查意见,并获得163个PTD相关的审查意见,以供进一步分析。我们的研究结果表明:(1)PTD可以在代码评审中识别,但并不普遍。(2)设计、缺陷、文档、需求、测试和代码PTD在代码评审中确定,其中代码和文档PTD占主导地位。(3)在代码评审中发现的PTD中,有81.0%已被开发人员解决,78.0%已解决的TD在一周内被开发人员解决。(4)代码重构是开发人员用来解决代码评审中识别的PTD的主要实践。我们的研究结果表明:(1)基于审查的PTD检测被视为开发中值得信赖的机制之一,(2)当注入软件系统时,仍有相当大比例的PTD(19.0%)仍未解决。实践者和研究者应该建立有效的策略来管理和解决发展中的PTD。
2022-09-24 cs.SE
Code Smells Detection via Modern Code Review: A Study of the OpenStack and Qt Communities
代码评审在软件质量控制中起着重要的作用,它可以检测和定位缺陷和其他质量问题。可能影响软件质量的一种问题是代码气味。然而,我们对现代代码审查中代码气味的识别程度知之甚少。为了研究现代代码审查中识别出的代码气味背后的概念,以及审查者建议和开发人员采取什么行动来响应识别出的气味,我们通过分析来自OpenStack(Nova和Neutron)和Qt(Qt Base和Qt Creator)社区的四个大型开源项目的审查,对代码审查中的代码气味进行了研究。我们手动检查了通过关键字搜索和随机选择获得的总共25,415条代码审查评论,并确定了1,539条与气味相关的评论。我们的分析发现:1)代码气味在代码评审中通常不会被识别出来,2)气味通常是由违反编码约定引起的,3)评审人员通常会提供建设性的反馈,包括修复(重构)建议,以帮助开发人员消除气味,4)开发人员通常遵循这些建议并采取行动的变化,5)一旦确定由审查,开发人员通常花费不到一周的时间来修复气味,以及6)开发人员选择忽略所识别的气味的主要原因是不值得修复气味。我们的研究结果表明:1)开发人员应该在他们的项目中严格遵循编码惯例,以避免引入代码气味,2)基于审查的代码气味检测被开发人员认为是一种值得信赖的方法,主要是因为审查是上下文敏感的(由于评审人员是项目开发团队的一部分,因此他们更了解代码的上下文),以及3)需要充分考虑程序上下文以便做出是否立…
2022-05-16 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
Understanding Code Snippets in Code Reviews: A Preliminary Study of the OpenStack Community
代码评审是软件开发中一种成熟的软件质量保证实践,评审员通过评审员检查开发人员提交的代码,并验证代码的质量。在代码评审讨论期间,评审者和开发人员可能会使用代码片段来提供必要的信息(例如,建议或解释)。然而,很少有人知道的意图和影响的代码片段在代码审查。为此,我们进行了一项初步研究,以调查代码片段的性质及其在代码审查中的用途。我们手动收集并检查了来自OpenStack社区的Nova和Neutron项目的10,790条评论,最终获得了626条包含代码片段的评论,以供进一步分析。结果表明:(1)代码片段在代码评审中的使用并不普遍,大多数代码片段都是由评审者提供的。(2)我们确定了审阅者提供的代码片段的两个高级目的(即,建议和引用),其中,改进代码实现是最常见的目的。(3)在以建议为目的的代码评审中,大约68.1%的代码片段被开发人员接受。结果突出了在代码审查中使用代码片段的有前途的研究方向。
2022-03-30 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
Demystifying Code Snippets in Code Reviews: A Study of the OpenStack and Qt Communities and A Practitioner Survey
本文通过挖掘 OpenStack 与 Qt 社区代码评审数据并结合从业者调查,研究代码片段在评审评论中的使用场景与作用。
2024-04-04 cs.SE
Security Defect Detection via Code Review: A Study of the OpenStack and Qt Communities
本文通过分析 OpenStack 和 Qt 社区四个项目的代码审查评论,实证研究了安全缺陷检测的现状与效果,发现安全缺陷讨论较少但审查者建议多被采纳,并提出人工审查与自动化工具结合以及行为标准化的建议。
2023-07-05 cs.SE
Same Same But Different: Preventing Refactoring Attacks on Software Plagiarism Detection
针对编程教育中基于重构的混淆攻击易绕过现有代码抄袭检测系统的问题,本文提出一种结合代码属性图与图变换的可扩展增强框架,经真实学生提交样本评估,显著提升了抄袭代码检测效果。
2025-10-29 cs.SE
Code Reviews with Divergent Review Scores: An Empirical Study of the OpenStack and Qt Communities
代码评审是一种被广泛采用的软件质量实践,开发人员在其中相互批评对方的补丁。除了提供建设性的反馈外,评审者还可以提供分数以指示补丁是否应该被集成。由于审阅者的意见可能会有所不同,因此补丁可以获得正面和负面的分数。如果不仔细解决分数不同的复习,可能会导致紧张的复习文化,并可能减缓整合。在本文中,我们研究了补丁不同的审查分数在OPENSTACK和QT社区。定量分析表明,具有不同评审分数的补丁:(1)占获得多个评审分数的补丁的15%-37%;(2)被整合的频率高于被放弃的频率;(3)在70%的情况下,在正面评分之后获得负面评分。此外,定性分析表明,具有强烈分歧分数的补丁:(4)被放弃更经常遭受外部问题(例如,集成规划,内容复制)比具有弱发散分数的补丁和没有发散分数的补丁更好;以及(5)被集成通常间接地解决评论者关注的问题(即,而不改变补丁)。我们的研究结果表明,审查工具应集成与发布时间表,并检测并发开发的类似补丁,以优化审查讨论与分歧的分数。此外,补丁作者应该注意到,即使是最分裂的补丁也经常通过讨论、整合时间和仔细的修订来整合。
2021-04-04 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
Dynamic Analysis can be Improved with Automatic Test Suite Refactoring
上下文:开发人员设计测试套件来自动验证软件是否满足其预期行为。许多动态分析技术都是利用测试用例中的执行痕迹进行分析的。然而,在实践中,只有一个跟踪是由一个手动编写的测试用例的执行产生的。目的:本文提出了一种新的测试用例重构技术,称为B-重构。B-重构背后的思想是将测试用例分割成小的测试片段,这些测试片段覆盖控制流的更简单部分,以便为动态分析提供更好的支持。方法:对于一个给定的动态分析技术,我们的测试套件重构方法监测测试用例的执行,并确定小的测试用例,而不损失的测试能力。我们应用B-重构,以协助两个现有的分析任务:自动修复的if语句错误和自动分析的异常合同。结果:实验结果表明,测试集重构可以有效地简化测试集的执行痕迹。三个现实世界的错误,以前不能修复与原始测试套件后,应用B-重构修复;同时,异常合同更好地验证通过应用B-重构到原始测试套件。结论:应用B-重构可以有效地提高测试用例的纯度。现有的动态分析任务可以通过测试套件重构来增强。
2015-06-05 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
针对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
RefBERT: A Two-Stage Pre-trained Framework for Automatic Rename Refactoring
本文提出两阶段预训练框架RefBERT,通过先预测子词元数量再生成子词元,并结合受限掩码语言建模、对比学习与词元袋损失,实现更准确的变量名自动重命名重构。
2023-05-28 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
Repeated Builds During Code Review: An Empirical Study of the OpenStack Community
本文实证分析 OpenStack 社区 66,932 次代码评审,量化 recheck 重复构建的频率、结果改变率及资源浪费。
2023-08-19 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
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
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
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
CloudScent: a model for code smell analysis in open-source cloud
针对开源云代码质量受重视不足、缺乏针对性代码坏味检测工具的问题,本文提出开源检测模型CloudScent,经OpenStack环境实验验证可准确检测8种云环境代码坏味,助力云服务商及时重构以提升代码质量。
2023-07-22 cs.DC cs.SE
Teaching Code Refactoring Using LLMs
Department of Computer Science(计算机科学系);North Carolina State University(北卡罗来纳州立大学)
本文探讨在软件工程课程中集成 LLM 辅助代码重构,通过结构化提示提供实时反馈,帮助学生识别并解决代码坏味道,从而弥合理论与实践学习的差距,深化对可维护性原则的理解。
2025-08-12 cs.LG cs.SE