Refactoring Legacy JavaScript Code to Use Classes: The Good, The Bad and The Ugly
JavaScript系统正变得越来越复杂和庞大。为了解决实现这些系统所涉及的挑战,该语言正在发展,以包括几个用于大型编程的结构。例如,尽管语言是基于原型的,但最新的JavaScript标准,名为ECMAScript 6(ES6),提供了对实现类的本机支持。尽管大多数现代Web浏览器都支持ES6,但只有极少数应用程序使用类语法。在本文中,我们分析了迁移结构的过程,这些结构模拟遗留JavaScript代码中的类,以采用ES6引入的类的新语法。我们在八个遗留JavaScript系统上应用一组迁移规则。在我们的研究中,我们记录了:(a)迁移简单的情况(好的部分);(b)需要手动和临时迁移的情况(坏的部分);以及(c)由于ES6的限制和约束而无法迁移的情况(丑陋的部分)。八分之六的系统(75%)包含坏的和/或丑陋的情况。我们还收集了JavaScript开发人员对迁移代码以使用新的类语法的看法。
2017-03-05 cs.PL cs.SE
Refactoring for Novices in Java: An Eye Tracking Study on the Extract vs. Inline Methods
State University of Paraíba (UEPB)(帕拉伊巴州立大学);Federal University of Campina Grande (UFCG)(坎皮纳格兰德联邦大学);Federal University of Alagoas (UFAL)(阿拉戈阿斯联邦大学);University of Brasília (UnB)(巴西利亚大学);Pontifical Catholic University of Rio de Janeiro(里约热内卢天主教大学)
本研究通过眼动追踪分析,发现方法提取对初学者在复杂任务中提升性能有效,但对简单任务反而降低效率,强调了眼动追踪在软件重构评估中的重要性。
2026-03-05 cs.SE
IntelliTC: Automating Type Changes in IntelliJ IDEA
开发人员经常更改程序元素的类型。这种重构通常不仅涉及更新元素本身的类型,还涉及更新代码中所有依赖于类型的引用的API,因此它是乏味和耗时的。尽管类型更改比重命名更频繁,但目前只有少数IDE工具仅为一小部分硬编码类型提供部分自动化支持。研究人员最近提出了一种数据驱动的方法,使用代码提交历史来推断Java中类型更改模式的API重写规则。在本文中,我们建立在这些最新的进展,并介绍IntelliTC -一个工具来执行Java类型更改重构。我们将其实现为IntelliJ IDEA的插件,这是JetBrains开发的流行Java IDE。从用户体验的角度来看,我们提出了3种不同的方法来支持这种重构:经典模式、建议重构和检查模式。为了评估这些使用IntelliTC的方式,我们调查了22位经验丰富的软件开发人员。他们对该工具的有用性给予了积极评价。该插件的源代码和分发可在GitHub上获得:https://github.com/JetBrains-Research/data-driven-type-migration。演示视频在YouTube上:https://youtu.be/pdcfvADA1PY。
2022-05-07 cs.SE
An Empirical Study on Refactoring Activity
本文报告了一个实证研究的重构活动在三个Java软件系统。我们调查了重构活动的一些问题,以确认或不同意从以前的实证研究中得出的结论。与以往的实证研究不同,我们的研究发现,并不总是有更多的重构活动之前的主要项目发布日期比之后。相比之下,我们能够确认软件开发人员对测试代码和生产代码执行不同类型的重构操作,特定的开发人员负责项目中的重构,重构编辑没有得到很好的测试。此外,floss重构在开发人员中更受欢迎,重构活动在项目中很频繁,大多数不良气味一旦发生,就会持续到系统的最新版本。通过证实其他研究人员的假设,我们可以更有信心地认为这些研究结论是可推广的。
2014-12-18 cs.SE
ScarfBench: A Benchmark for Cross-Framework Application Migration in Enterprise Java
Rensselaer Polytechnic Institute(伦斯勒理工学院);IBM Software Innovation Labs(IBM软件创新实验室);Columbia University(哥伦比亚大学)
本文提出ScarfBench,一个用于评估企业Java应用跨框架迁移行为保持性的基准测试,通过专家编写实现三元组,涵盖Spring、Jakarta EE和Quarkus框架,生成102个变体和204个定向重构任务,评估了五种最先进的编码代理,并揭示了不同框架方向和架构层的难度差异。
2026-05-18 cs.SE
Transformations between Composite and Visitor implementations in Java
基本的自动化重构操作可以被链接以执行复杂的结构转换。这对于恢复源代码的初始架构是有用的,该源代码在其维护生命周期期间已经随着连续的演进而退化。这对于改变程序的结构也很有用,以便手头的维护任务在最初横切时变成模块化的。我们专注于程序结构根据复合和游客的设计模式,具有双重属性的模块化。我们认为这两个结构之间的基于重构的往返转换,我们研究如何转换的影响,这些模式的实现中的四个变化。我们通过计算所得到的转换的最小前提条件来验证这项研究。我们还自动化转换并将其应用于JHotDraw,在那里发生了研究的变化。
2013-09-12 cs.SE
How and When to Flatten Java Classes?
提高模块性和可重用性是面向对象编程的两个关键目标。这些目标是通过应用几个关键概念来实现的,例如数据封装和继承。面向对象系统中的类是设计的基本单位。评估一个面向对象类的质量可能需要扁平化这个类,并如实地表示它,包括所有可访问的继承类成员。因此,类扁平化有助于探索继承对提高代码质量的影响。本文解释了如何扁平化Java类,并讨论了类扁平化和一些软件从业者感兴趣的应用程序,如重构和指示外部质量属性之间的关系。
2014-05-08 cs.SE
Proactive Empirical Assessment of New Language Feature Adoption via Automated Refactoring: The Case of Java 8 Default Methods
随着时间的推移,程序设计语言和平台不断改进,有时会产生新的语言功能,提供许多好处。然而,尽管有这些好处,开发人员可能并不总是愿意在他们的项目中采用它们。在本文中,我们描述了一个实证研究,我们评估通过一个特定的新的语言功能。研究开发人员如何使用(或不使用)新的语言功能在程序设计语言研究和工程中很重要,因为它使设计人员了解语言的可用性,从而用该语言创建有意义的程序。反过来,这些知识可以推动该领域未来的创新。在这里,我们探索Java 8默认方法,它允许接口包含(实例)方法实现。默认方法可以简化接口的演化,使某些普遍存在的设计模式变得多余,并提高模块性和可维护性。这项工作的重点是通过科学的方法和新的技术,发现开发人员发现这些构造有用的情况,以及它们没有的原因。虽然有几项研究围绕着评估新的语言特征,但据我们所知,这种结构以前没有被考虑过。尽管有这些好处,但我们发现开发人员并不是在所有情况下都采用默认方法。我们的研究包括提交pull request,将语言特性引入19个真实世界的开源Java项目,而不改变原始程序语义。这种新颖的评估技术是主动的,因为采用是由自动重构方法驱动的,而不是等待开发人员自己发现和集成功能。通过这种方式,我们提出了更早而不是更晚有效使用语言功能的最佳实践和模式,并且能够指导(不久的)未来的语言发展。我们预见这种技术在评估其他新的语言特性、设计模式和其他编程习惯方面是有用…
2018-03-27 cs.PL cs.SE
An Empirical Study on the Code Refactoring Capability of Large Language Models
本研究实证评估StarCoder2在30个Java项目中的代码重构能力,发现其比开发者多减少20.1%代码坏味道,结合一次性提示与多重构方案可显著提升性能。
2024-11-04 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
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
From Custom Logic to APIs: Understanding and Recommending API Replacement Refactorings
School of Computer Science and Technology, Beijing Institute of Technology(北京理工大学计算机科学与技术学院);School of Computer Software, Tianjin University(天津大学计算机学院)
通过实证研究挖掘API替换重构的模式,提出混合框架AKIRA,结合模式确定性启发式与重构感知知识库,在推荐API替换重构上达到90%召回率和88%精确率。
2026-06-05 cs.SE
An Empirical Study on the Potential of LLMs in Automated Software Refactoring
Beijing Institute of Technology(北京理工大学);Peking University(北京大学);University of Cincinnati(辛辛那提大学);National Innovation Institute of Defense Technology(国防科技大学创新研究院)
本研究通过实证分析发现LLM在重构机会识别上表现有限,但通过提示优化可大幅提升;同时提出RefactoringMirror策略以规避不安全重构,兼顾LLM智能与代码安全。
2024-11-07 cs.SE
AST-Based Automated Elimination of break and continue Statements in Java Code
University of Málaga(马拉加大学)
该研究开发了一个基于Eclipse JDT API的Java自动重构工具,通过引入辅助布尔变量重写抽象语法树,消除循环中的break和continue语句,保持语义等价,并经测试和开源项目验证,支持后续提取方法等重构。
2026-09-24 cs.SE
An Empirical Study on the Impact of Change Granularity in Refactoring Detection
School of Computing, Institute of Science Tokyo(东京科学大学计算学院)
通过实证研究32个Java项目,发现跨提交的粗粒度重构和短暂重构普遍存在,并分析了其特征、成因及提交消息关联,建议扩展检测器以识别粗粒度重构。
2026-09-09 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
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
An Empirical Study on the Impact of Code Duplication-aware Refactoring Practices on Quality Metrics
本文通过分析128个开源Java项目中332个重构提交,实证研究了代码重复消除重构操作对设计质量指标的影响,发现多数指标能捕捉开发者去重意图,但部分指标未能完全反映。
2025-02-06 cs.SE
Toward Refactoring of DMARF and GIPSY Case Studies a Team 7 SOEN6471-S14 Project Report
软件体系结构被定义为一个结构良好的解决方案的过程,它满足所有的技术和操作要求,并提高系统的质量属性,如可读性,可靠性,可维护性和性能。它涉及一系列设计决策,这些决策可能对系统质量属性和应用程序的整体成功产生相当大的影响。在这项工作中,我们首先分析和调查两个开源软件(OSS)平台DMARF和GIPSY,主要是在Java中实现的。许多研究论文已经被研究,以获得更多的见解和清晰的背景,他们的架构,增强,演变,挑战和功能。随后,我们提取并找到他们的需求,高层次的要求,和架构结构,导致重要的设计决策,从而影响他们的质量属性。首先,我们逆向工程每个系统的源代码,以重建其领域模型和类图模型。我们试图实现需求和其他设计工件之间的可追溯性,以保持一致。此外,我们进行了手动和自动重构技术,以摆脱一些现有的代码气味,最终获得更可读和更易于理解的代码,而不会影响其可观察的行为。
2014-12-18 cs.SE
Evolution analysis of software quality metrics in an open-source java project: A case study on TestNG
本研究使用Understand工具提取并分析了开源Java框架TestNG连续五个版本的11个面向对象质量度量,揭示了其结构演化趋势,表明其通过持续重构已变得更稳定易维护,为类似项目提供了代码质量维护建议。
2025-05-28 cs.CE 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
DMARF AND GIPSY High Level Architecture and Requirements Analysis
在目前的情况下,许多组织投资于开源系统,这些系统越来越受欢迎,并导致快速增长,其中许多系统尚未达到质量标准,因此需要评估质量。首先,我们通过分析两个开源案例研究来描述我们的工作,这两个案例是:(1)分布式模块化音频识别框架(DMARF)是一个开源框架,它由使用Java实现的自然语言处理(NLP)组成,通过添加新算法来促进可扩展性,(2)一般内涵方案编制系统是一个被设计为支持内涵程序设计语言的平台,该语言是使用内涵逻辑及其用于内涵执行模型的命令式对应部分构建的。在这个背景研究中,我们确定了一些度量标准,用于评估由ISO标准定义的软件产品的质量特征。在这些指标中,我们确定了使用SonarQube的Java类和方法的数量。接下来,对参与者和涉众进行了分类,并将重点放在了完整用例的演变上。此外,我们分析了需求,并编制了概念UML领域模型图的职责和关系的基础上的功能,从而导致创建类图。随后,使用度量工具对结果进行分析和解释,以验证已实现的结果,并相应地识别代码气味。最后,其含义是通过应用适当的重构方法来执行系统级重构,以提高开源系统的质量和性能。此外,描述了相应的测试用例,以确保现有架构没有太多的行为变化。
2014-12-23 cs.SE
Static Metrics Are Insufficient: Predicting Java Method Energy Usage with Execution Time
University of L’Aquila(拉奎拉大学);Vrije Universiteit Amsterdam(阿姆斯特丹自由大学)
研究Java中方法级能源预测局限,通过对2786个Java方法提取静态特征、测量执行时间和能耗,训练比较11个回归模型,发现仅静态指标预测差,加入执行时间可显著提高准确性,执行时间等是能耗的强预测因素。
2026-07-08 cs.AI cs.LG cs.SE
An ensemble meta-estimator to predict source code testability
Iran University of Science and Technology(伊朗科技大学)
与大多数其他软件质量属性不同,可测试性不能仅仅基于源代码的特性进行评估。测试套件的有效性和分配给测试的预算极大地影响了被测代码的可测试性。测试集的大小决定了测试工作量和成本,而覆盖度量则表明了测试的有效性。因此,考虑到测试预算,可测试性可以根据测试套件提供的测试用例的覆盖率和数量来衡量。本文提供了一个新的方程来估计一个给定的测试套件的大小和覆盖率的可测性。该公式已被用于标记属于110个Java项目的23,000个类及其可测试性度量。使用262个度量对标记的类进行向量化。标记的向量被送入一系列有监督的机器学习算法,回归,以预测源代码度量的可测试性。回归模型预测的R2为0.68,均方误差为0.03,适用于实践的可测试性。15个软件度量高度影响可测试性预测确定使用的学习模型上的特征重要性分析技术。与预测分支覆盖率作为测试标准的相关研究相比,由于采用了新的标准、度量和数据,所提出的模型将平均绝对误差提高了38%。作为可测试性预测的一个应用,它表明,42个臭Java类的自动重构,旨在提高15个有影响力的软件度量,可以提高其可测试性的平均86.87%。
2022-08-24 cs.LG cs.SE