In Search of Metrics to Guide Developer-Based Refactoring Recommendations
本文提出一项实证研究,通过量化产品和过程度量标准来把握开发者执行重构的动机,从而为基于开发者的重构推荐器设计提供度量标准目录。
2024-07-25 cs.SE
An Empirical Study of Refactoring Engine Bugs
本文首次系统分析了Eclipse、IntelliJ IDEA和Netbeans三种重构引擎的缺陷,按类型、症状、原因和触发条件归纳出12项发现,并在最新版本中发现130个新缺陷,为缺陷检测与调试提供指导。
2024-09-22 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
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
Testing Refactoring Engine via Historical Bug Report driven LLM
提出RETESTER框架,利用历史缺陷报告和思维链提示生成重构变体,通过差分测试在Eclipse和IntelliJ IDEA中发现18个新缺陷。
2025-01-22 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
Why Developers Refactor Source Code: A Mining-based Study
重构的目的是在不修改代码外部行为的情况下改进代码的非函数属性。以前的研究通过调查开发人员来调查重构背后的动机。为了概括和补充他们的研究结果,我们提出了一个大规模的研究,定量和定性地调查为什么开发人员在开源项目中执行重构。首先,我们挖掘了150个系统历史上执行的287,813次重构操作。使用这个数据集,我们研究了重构操作和过程之间的相互作用(例如,先前的改变/修复)和产品(例如,质量度量)度量。然后,我们手动分析了551个合并的拉取请求,这些合并的拉取请求实现了重构操作,并对所实现的重构背后的动机进行了分类(例如,删除代码重复)。我们的研究结果导致(i)定量证据的关系存在于某些过程/产品指标和重构操作和(ii)一个详细的分类,概括和补充现有的文献中的动机,推动开发人员重构源代码。
2021-01-05 cs.SE
Leveraging Game-Based Platform to Teach Code Refactoring: An Experience with Refactoria
Stevens Institute of Technology(史蒂文斯理工学院)
本文通过课堂实验评估了基于游戏的工具 Refactoria 在教授代码重构和代码异味识别方面的效果,结果显示其感知有用性高,并能有效促进学生对重构概念的理解。
2026-10-01 cs.SE
From Restructuring to Stabilization: A Large-Scale Experiment on Iterative Code Readability Refactoring with Large Language Models
Saarland University(萨尔兰大学)
本文通过大规模实验研究大语言模型在迭代代码重构中的能力,揭示了重构过程的收敛趋势及可读性提升的机制。
2026-02-25 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
Automated Unit Test Refactoring
针对测试异味导致测试代码质量低、维护难及现有自动化重构方法灵活性不足的问题,提出基于LLM的上下文增强框架UTRefactor,通过思维链模拟手动重构并结合检查点机制,在6个开源Java项目测试中实现89%异味消除率,性能显著优于现有方法。
2025-02-11 cs.SE
Refactoring Software Packages via Community Detection from Stability Point of View
随着软件项目的复杂性和规模在现实环境中的增加,维护和创建可维护性和可靠的代码变得更加困难和昂贵。重构被认为是一种增强代码内部结构的方法,以改善许多软件属性,如可维护性。在这篇论文中,讨论了使用社区发现算法重构软件包的主题,重点是软件包稳定性的概念。该算法首先从Java字节码中提取一个包依赖网络,然后使用一个社区发现算法来发现包结构中可能发生的变化。在这项工作中,考虑依赖方向的重要性,而建模包依赖关系与图形的原因也进行了讨论,并证明包的稳定性和模块化的包依赖图之间的关系,显示模块化是如何有利于包的稳定性。为了评估所提出的算法,实时分析的软件包的工具,实现了两个软件系统进行了测试。结果表明,建模包依赖关系与有向图和应用所提出的重构方法,导致更高的增加包的稳定性比无向图建模方法,已在文献中研究。
2018-11-26 cs.SE
Fixing Your Own Smells: Adding a Mistake-Based Familiarisation Step When Teaching Code Refactoring
针对传统重构教学用陌生代码导致新手难内化的问题,提出让学生先写带坏味道的代码再重构的教学法,实验证明其能显著提升新手的重构效率与信心。
2024-01-02 cs.SE
Resolving code smells in software product line using refactoring and reverse engineering
软件产品线SPL被认为是软件开发中一种成功的复用方法,其目的是降低生产成本。这种方法允许产品在特定的特性和限制方面有所不同,以覆盖不同的市场。软件产品线工程是产品线中的生产过程。它利用软件产品之间的共性,但也保留了这些产品之间的功能变化的能力。有时,在此过程中不适当的SPL实现可能导致代码气味或代码异常。代码气味被认为是源代码中的问题,可能会影响SPL派生产品的质量。由于重用,SPL的许多派生产品中也会出现同样的问题。重构技术可以在不改变源代码外部行为的前提下改善源代码的内部结构,是解决这一问题的一种可能的方法.本文提出了一种从源代码构建SPL的方法,其目的是通过重构源代码来减少SPL中的代码气味.该方法的另一部分是基于逆向工程来设计SPL.
2020-11-29 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
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
Automating Source Code Refactoring in the Classroom
本文探讨了在课堂中使用 Eclipse 插件 JDeodorant 进行反模式检测与代码重构的教学实践,对 171 名学生的实验结果表明该工具有效提升了学生对重构概念的认知与学习满意度。
2023-11-05 cs.CY cs.SE
Toward Refactoring of DMARF and GIPSY Case Studies -- a Team 4 SOEN6471-S14 Project Report
软件质量是软件工程开发中的一个主要关注点,以提高软件的竞争力。这样的质量可以通过一种称为重构的可能技术来实现,其中系统的外部行为不被改变。首先,我们介绍了我们的工作,通过分析正在进行的研究DMARF和GIPSY的案例研究,了解他们的需求和要求,涉及各自的系统中的主要组成部分。随后的章节说明了这些案例研究的概念架构,为此,我们参考了原始架构来绘制系统中呈现的重要候选概念,并分析它们与系统中其他概念的关联,然后将此概念架构与原始架构进行比较。稍后,文档将说明如何识别架构中存在的代码气味,以找到它们并解决,从而最大限度地减少更深层次的问题。JDeodorant,SonarQube是我们用来识别和分析源代码质量的工具,这两个工具都可以作为IDE插件或开源平台使用。接下来是识别架构中存在的设计模式以及它们在各自系统中存在的重要性和需求。最后,这意味着将重构方法引入到已经识别的气味中,并可能通过应用适当的重构方法和展示相应的测试来相应地重构它们,以确保架构中的更改不会对行为造成太大影响。
2014-12-23 cs.SE
URegM: a unified prediction model of resource consumption for refactoring software smells in open source cloud
California State University San Marcos(加州州立大学圣马科斯分校);University at Buffalo(布法罗大学)
提出统一回归建模框架URegM,通过真实云环境实验预测代码异味重构对云资源消耗的影响,帮助云服务提供商更有效地规划资源配置与代码重构。
2023-10-22 cs.LG cs.SE
Investigating Student Reasoning in Method-Level Code Refactoring: A Think-Aloud Study
本研究通过出声思考法调查学生在方法级代码重构中的推理,识别出八种重构理由,并发现经验丰富的学生更关注质量属性,但常忽略多重职责方法等特定问题。
2024-11-05 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
RefactorAssist: Agentic Refinement for Reliable Code Refactoring
Queen's University(女王大学)
该研究针对LLM生成代码重构的错误问题,开发了RefactorAssist智能体,通过静态修复结合测试引导的智能体修复,将重构累计通过率提升至94.2%,提高了LLM重构代码的可靠性。
2026-08-04 cs.AI cs.SE
What Were You Thinking? An LLM-Driven Large-Scale Study of Refactoring Motivations in Open-Source Projects
University of Oulu(奥卢大学);University of Salerno(萨勒诺大学);University of Milano-Bicocca(米兰-布雷塞大学)
本研究利用大型语言模型分析开源项目版本控制数据,识别开发者重构动机,发现LLM与人类判断80%一致但与文献动机仅47%一致,其价值在于提供局部解释,可与软件度量结合形成混合方法以系统化重构优先级。
2025-09-09 cs.AI cs.PL cs.SE
Modern Software Engineering in the LAMMPS Molecular Dynamics Software Package: Development Process, Refactoring, Testing, and Deployment
Institute for Computational Molecular Science, Temple University(天普大学计算分子科学研究所)
本文回顾了LAMMPS软件包近年来的开发流程改进,包括源代码管理、自动化测试、代码重构、现代C++采用等,这些改进提升了代码质量并促进了软件的持续流行。
2026-06-23 cs.SE physics.comp-ph
On the perceived relevance of critical internal quality attributes when evolving software features
本研究通过两项工业在线焦点小组案例,调查开发者对六种类级关键内部质量属性在软件功能演进时的相关性感知,明确了各属性的相关程度、原因及属性间关联,填补了相关认知空白。
2023-05-07 cs.SE
An Event-Driven Tool for Context-Aware Code Smell Detection Using SmellDSL
University of Vale do Rio dos Sinos (Unisinos)(圣瓦莱杜里奥多斯西诺斯大学)
本文提出SmellHunter工具,通过SmellDSL领域特定语言解析脚本,结合静态代码度量和上下文信息(如团队特征、项目阶段和地理元数据)来检测和上下文化代码异味,支持更明智的重构决策。
2026-05-20 cs.SE
How and When to Flatten Java Classes?
提高模块性和可重用性是面向对象编程的两个关键目标。这些目标是通过应用几个关键概念来实现的,例如数据封装和继承。面向对象系统中的类是设计的基本单位。评估一个面向对象类的质量可能需要扁平化这个类,并如实地表示它,包括所有可访问的继承类成员。因此,类扁平化有助于探索继承对提高代码质量的影响。本文解释了如何扁平化Java类,并讨论了类扁平化和一些软件从业者感兴趣的应用程序,如重构和指示外部质量属性之间的关系。
2014-05-08 cs.SE