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
The Impact of Auto-Refactoring Code Smells on the Resource Utilization of Cloud Software
基于云的软件即服务(SaaS)由于其低成本和弹性而受到欢迎。然而,与其他软件一样,SaaS应用程序也会受到代码气味的影响,这会严重影响功能和资源使用。代码气味是指源代码中任何表明存在更深层次问题的设计。软件社区部署了自动化重构来消除气味,这可以提高性能并减少关键资源的使用。然而,分析SaaS中自动重构气味对CPU和内存等资源的影响的研究在一定程度上是有限的。在这里,我们的目标是填补这一空白,并研究SaaS应用程序的资源使用的影响,由于自动重构的七个经典的代码气味:上帝类,功能嫉妒,类型检查,循环依赖,鸟枪手术,上帝的方法,和意大利面条代码。我们从Github中指定了六个实际的SaaS应用程序,分别是Zimbra,OneDataShare,GraphHopper,Hadoop,JENA和JAMES,它们在Openstack云上运行。结果表明,JDeodrant和JSparrow等工具重构气味对基于气味重构类型的测试应用程序的CPU和内存消耗有着广泛不同的影响。我们提出了每种气味对资源利用的影响,并讨论了导致这种影响的潜在原因。
2020-08-14 cs.SE
A Survey of Refactoring Detection Techniques Based on Change History Analysis
重构是改变软件系统的过程,它不会改变代码的外部行为,但会改善其内部结构。不仅研究人员,而且实践者,需要了解过去在软件开发项目中执行的重构实例。到目前为止,已经提出了一些技术来自动检测重构实例。这些技术已经在各种国际会议和期刊上提出,然而,研究人员和从业人员很难掌握重构检测技术的研究现状。在这篇综述文章中,我们回顾了各种重构检测技术,特别是基于更改历史分析的技术。本文首先给出了重构检测方法的定义和分类,然后介绍了基于变更历史分析的重构检测技术。最后,我们讨论了重构检测未来可能的研究方向。
2018-08-07 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
RefAgent: A Multi-agent LLM-based Framework for Automatic Software Refactoring
Polytechnique Montreal(蒙特利尔大学)
RefAgent是一种基于多智能体的LLM框架,用于自动化软件重构,通过自我反思和工具调用能力提升重构效率和代码质量。
2026-03-04 cs.AI cs.SE
Towards Enabling Architectural Refactorings through Source Code Annotations
众所周知,软件需要改变以满足新的需求。软件体系结构模型和实现的同步对于保持体系结构文档的有用性和软件演化过程的可管理性是非常重要的。在本文中,我们实现了两个步骤的过程中的同步。首先,我们用架构信息扩充源代码。第二,这个“轻量级架构模型”可以更容易地对照完整的架构描述进行检查。基于这种方法,任何一方(代码或架构)的重构都可以自动检测,并且可以进行一致性检查。
2014-09-22 cs.SE
SOAR: A Synthesis Approach for Data Science API Refactoring
随着开源源数据科学界的发展,数据科学库的数量和同一库的版本数量都在迅速增加。为了与这些库中不断发展的API相匹配,开源组织通常必须手动重构代码库中使用的API。此外,由于类似的开源库非常丰富,从事某个应用程序的数据科学家可能有大量的库可供选择、维护和迁移。API之间的手动重构是一项繁琐且容易出错的任务。尽管最近的研究工作是在不同语言之间执行自动API重构,但以前的工作依赖于使用收集的成对训练数据进行统计学习以进行API匹配和迁移。使用大型统计数据进行重构并不理想,因为这样的训练数据将不可用于新的库或相同库的新版本。我们介绍了一种新的技术,不需要训练数据就可以实现API的迁移和重构。SOAR仅依赖于库发布时随时可用的文档来学习API表示和库之间的映射。使用程序合成,SOAR自动计算API参数的正确配置以及调用这些API所需的任何粘合代码。在运行重构代码时,SOAR还使用解释器的错误消息来生成逻辑约束,这些约束可用于修剪搜索空间。我们的实证评估表明,SOAR可以成功重构80%的基准测试,对应于多达44层的深度学习模型,平均运行时间为97.23秒,90%的数据争用基准测试,平均运行时间为17.31秒。
2021-02-12 cs.SE
On Preserving the Behavior in Software Refactoring: A Systematic Mapping Study
重构是一种在不改变系统行为的情况下修改系统设计的艺术。这个想法是重新组织变量,类和方法,以促进它们未来的适应和理解。由于行为保持的概念是重构的基础,一些研究,使用形式化验证,语言转换和动态分析,已被提出来监控重构操作的执行和它们对程序语义的影响。然而,没有现有的研究,检查每个重构操作的可用行为保存策略。目的:本文识别研究文献中的行为保存方法。方法:我们进行,在本文中,一个系统的映射研究,以捕获所有现有的行为保存方法,我们分类的基础上,包括他们的方法,适用性和自动化程度的几个标准。结果:结果表明,在文献中已经提出了几种行为保存方法。这些方法在使用形式主义和技术、开发自动重构安全工具以及对源代码执行手动分析之间有所不同。结论:我们的分类法揭示了存在一些类型的重构操作,其行为保持研究不足。我们的分类还表明,几种可能的策略可以结合起来,以更好地检测任何违反程序语义。
2021-07-21 cs.SE
Multi-objective Software Architecture Refactoring driven by Quality Attributes
针对架构优化任务难度高、耗时长且资源消耗大的问题,提出了一种质量属性驱动的多目标软件架构重构优化框架,测试了多种遗传算法的性能,并通过两个不同特征的案例研究完成了框架验证。
2023-01-18 cs.SE
Automatic Qiskit Code Refactoring Using Large Language Models
LIFIA UNLP(UNLP LIFIA学院)
针对量子软件框架API快速迭代带来的代码兼容难题,提出基于大语言模型的Qiskit代码自动重构方法,通过提取官方文档迁移场景分类引导模型识别重构,验证了其有效性并提供相关工具与评估方法。
2025-06-17 cs.AI cs.ET cs.SE
Why just FRET when you can Refactor? Retuning FRETISH Requirements
软件系统的形式化验证依赖于形式化它应该遵守的需求,这可能是具有挑战性的。在从自然语言形式化需求时,我们有依赖关系,导致许多需求之间的信息重复,这意味着对一个需求的更改会导致多个地方的更新。我们建议适应美国宇航局的正式需求获取工具(FRET),我们的工具的选择代码重构。重构是重组软件以改善其内部结构而不改变其外部行为的过程;它也可以应用于需求,通过减少重复使其更易于管理。FRET自动将需求(用其输入语言Fretish编写)转换为时态逻辑,这使我们能够正式验证重构是否保留了需求的潜在含义。在本文中,我们提出了四个重构Fretish要求,并解释其效用。我们描述了应用这些重构的民用飞机发动机软件控制器的要求,解耦的依赖性的重复,并分析这是如何改变的要求的数量和重复的数量。我们评估我们的方法,使用现场,一个工具,检查等价的时序逻辑规范。
2022-02-11 cs.SE
User Interface Design Smell: Automatic Detection and Refactoring of Blob Listeners
用户界面(UI)高度依赖于事件驱动的编程:小部件将UI事件(捕获用户的交互)发送给称为控制器的专用对象。控制器使用多个UI侦听器来处理这些事件以生成UI命令。首先,我们揭示了设计气味在描述和控制UI的代码中的存在。其次,我们证明了特定的代码分析是分析和重构UI代码所必需的,因为它与代码的其余部分耦合。我们对四个大型Java Swing和SWT开源软件系统进行了实证研究。我们研究在何种程度上的UI命令的数量,一个UI监听器可以产生的变化和故障倾向的UI监听器代码的影响。我们开发了一个静态代码分析,用于检测代码中的UI命令。我们发现了一种新的设计气味,称为Blob气味,它描述了可以产生两个以上UI命令的UI侦听器。我们提出了一个系统的静态代码分析过程,搜索我们在InspectorGuidget中实现的Blob Listeners。我们在四个软件系统上进行了实验,我们手动识别了53个Blob实例。InspectorGuidget成功检测到53个Blob侦听器中的52个。实验结果表明,该方法的准确率为81.25%,召回率为98.11%。然后,我们开发了一个半自动和行为保留的重构过程来删除Blob Listeners。在53个Blob Listener中,49.06%被自动重构。JabRef和FreeCol的修补程序已被接受并合并。与四个软件系统的开发人员的讨论评估了Blob的相关性。这项工…
2018-05-25 cs.HC cs.SE
Using Modularity Metrics to assist Move Method Refactoring of Large System
对于大型软件系统,重构活动可能是一项具有挑战性的任务,因为为了控制组件的复杂性,必须考虑整个体系结构以及每个组件的许多细节。因此,产品度量通常用于量化与软件系统模块化相关的几个参数。本文设计了一种自动建议重构大型软件系统的机会的方法。我们表明,通过评估所有组件的指标,移动方法重构可以建议以这样一种方式来提高几个组件的模块化,而不会阻碍任何其他。然而,当在单个CPU上执行时,包括数千个类或更多的大型软件系统的计算度量可能是耗时的任务。为此,我们提出了一种解决方案,通过诉诸GPU计算度量,从而大大缩短计算时间。由于我们的方法,在系统发展的同时,可以不断收集关于系统的几个属性的精确知识,从而帮助开发人员快速评估减少模块化问题的几个解决方案。
2013-08-19 cs.DC cs.SE
On the Role of Search Budgets in Model-Based Software Refactoring Optimization
本研究探讨了在软件模型优化中实施搜索预算以限制设计替代方案搜索的影响,分析了时间预算对Pareto前沿质量及生成方案结构特征的作用,并为设计者在时间约束下选择算法提供了建议。
2025-11-03 cs.PF cs.SE
Search Budget in Multi-Objective Refactoring Optimization: a Model-Based Empirical Study
该研究针对多目标软件模型重构优化中搜索预算(时间限制)的影响展开实证,通过两个不同案例测试三种遗传算法,发现预算限制会降低解质量,且算法选择对结果有关键作用。
2022-12-16 cs.SE
Perception and Acceptance of an Autonomous Refactoring Bot
University of Stuttgart(斯图加特大学);University of Gothenburg(哥德堡大学)
在软件开发任务中使用自主机器人进行自动支持的情况正在增加。然而,在过去,它们并不总是被积极地看待,有时与人类相比会经历负面的偏见。我们进行了一项定性研究,其中我们在一个学生软件开发项目中部署了一个自主重构机器人41天。在此期间和结束时,我们进行了半结构化访谈,以了解开发人员如何看待机器人,以及与人类贡献相比,他们在审查机器人的贡献时是否更重要或更少。我们的研究结果表明,机器人被认为是一个有用和不引人注目的贡献者,开发人员对它的批评并不比他们对人类同事的批评更多,但只有少数团队成员对机器人负责。
2020-01-08 cs.AI cs.HC cs.SE
Towards Automatic Generation of Amplified Regression Test Oracles
针对回归测试中测试放大面临的测试预言问题,提出一种利用SUT执行时的对象状态数据放大回归测试预言的方法,初步评估表明该方法能大幅增强行为变化检测能力。
2023-07-28 cs.SE
A Source-level Energy Optimization Framework for Mobile Applications
能源效率可以对诸如智能手机和平板电脑的移动设备的用户体验具有显著影响。虽然能源是由硬件消耗的,但软件优化在节能方面起着重要作用,因此软件开发人员必须参与优化过程。源代码是开发人员和硬件资源之间的接口。在本文中,我们提出了一个能源优化框架指导下的源代码能源模型,使开发人员能够意识到能源使用引起的代码和应用非常有针对性的源代码级重构策略。该框架也为自动化工具进行代码优化奠定了基础。据我们所知,我们的工作是第一个实现这一点的高级语言,如Java。在一个案例研究中,实验评估表明,我们的方法是能够节省从6.4%到50.2%的CPU能耗在各种应用场景。
2016-08-18 cs.SE
Multi-objective Integer Linear Programming approach for Automatic Software Cognitive Complexity Reduction
University of Málaga(马拉加大学);Ayesa Advanced Digital Services Limited (ASDA)(阿耶萨高级数字服务有限公司)
本文提出多目标整数线性规划方法,用于自动降低软件的认知复杂度,通过平衡代码行数与复杂度来提升代码可维护性。
2026-01-29 cs.CL cs.SE