Automatic Clone Recommendation for Refactoring Based on the Present and the Past
当在软件程序中检测到许多克隆时,并非所有克隆对开发人员都同样重要。为了帮助开发人员重构代码并提高软件质量,人们构建了各种工具来根据过去和现在的信息(例如单个克隆的内聚度或克隆对等体的协同进化关系)推荐克隆移除重构。这些工具的存在启发我们建立一种方法,考虑尽可能多的因素,以更准确地推荐克隆。本文介绍了CREC,一种基于学习的方法,通过从软件项目的当前状态和过去的历史中提取特征来推荐克隆。给定一组软件存储库,CREC首先自动提取历史重构的克隆组(R克隆)和未重构的克隆组(NR克隆)来构建训练集。CREC提取了34个特征来表征单个克隆的内容和进化行为,以及克隆对等体的空间、句法和共变关系。有了这些功能,CREC训练了一个分类器,推荐克隆进行重构。我们设计了迄今为止最大的克隆推荐功能集,并对六个大型项目进行了评估。结果表明,我们的方法建议在项目内和跨项目设置中进行重构,F分数分别为83%和76%。CREC在我们的数据集上的表现明显优于最先进的类似方法,后者的F分数分别达到70%和50%。我们还比较了不同因素和不同学习算法的有效性。
2018-07-30 cs.SE
RMove: Recommending Move Method Refactoring Opportunities using Structural and Semantic Representations of Code
方法在类中的不正确放置是一种典型的代码气味,称为特性嫉妒,这会在演化过程中导致额外的维护和成本。为了消除这个设计缺陷,已经提出了几个MoveMethod重构工具。据我们所知,最先进的相关技术可以大致分为两类:第一类是基于软件度量的非机器学习方法,而软件度量的选择和阈值严重依赖于专家知识。第二行是基于机器学习的方法,它建议通过学习从代码信息中提取特征来重构Move Method。然而,这一行中的大多数方法都以相同的方式处理不同形式的代码信息,而忽略了它们在数据分析中的显著差异。本文提出了一种推荐Move方法重构的方法RMove,该方法通过自动学习代码片段的结构和语义表示来推荐Move方法重构。我们将这些表示连接在一起,并进一步训练机器学习分类器,以引导方法移动到合适的类。我们在两个公开的数据集上评估了我们的方法。结果表明,我们的方法优于三个国家的最先进的重构工具,包括PathMove,JDeodorant和JMove的有效性和实用性。研究结果还揭示了有用的发现,并提供了新的见解,有利于其他类型的功能羡慕重构技术。
2022-12-23 cs.SE
Formalizing and Automating Fine-Grained Move Refactorings Across Methods
本文将五种Move语句重构形式化,结合现有技术实现更细粒度移动,经十个项目评估,93.3%-97.0%适用案例可生成可编译代码,行为变化源于副作用重排,验证了方法的有效性。
2026-08-25 cs.SE
DCLfix: A Recommendation System for Repairing Architectural Violations
架构侵蚀是软件演化中经常出现的问题。尽管如此,这个过程通常是以特别的方式处理的,在架构级别没有足够的工具支持。为了解决这个缺点,本文提出了一个推荐系统--称为DCLfix --在解决架构侵蚀时为维护人员提供重构指南。简而言之,DCLfix建议在使用DCL(一种架构约束语言)进行架构一致性过程后,对检测到的违规行为进行重构
2015-06-25 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
Using Modularity Metrics to assist Move Method Refactoring of Large System
对于大型软件系统,重构活动可能是一项具有挑战性的任务,因为为了控制组件的复杂性,必须考虑整个体系结构以及每个组件的许多细节。因此,产品度量通常用于量化与软件系统模块化相关的几个参数。本文设计了一种自动建议重构大型软件系统的机会的方法。我们表明,通过评估所有组件的指标,移动方法重构可以建议以这样一种方式来提高几个组件的模块化,而不会阻碍任何其他。然而,当在单个CPU上执行时,包括数千个类或更多的大型软件系统的计算度量可能是耗时的任务。为此,我们提出了一种解决方案,通过诉诸GPU计算度量,从而大大缩短计算时间。由于我们的方法,在系统发展的同时,可以不断收集关于系统的几个属性的精确知识,从而帮助开发人员快速评估减少模块化问题的几个解决方案。
2013-08-19 cs.DC cs.SE
Impact of Change Granularity in Refactoring Detection
检测提交历史中的重构对于提高代码评审中代码更改的理解以及为软件演化的实证研究提供有价值的信息至关重要。已经提出了几种技术来在单个提交的粒度级别上准确地检测重构。然而,由于代码复杂性或其他实际开发问题,重构可能会在多个提交上执行,这就是为什么试图在单次提交粒度下检测重构是不够的。我们观察到,一些重构只能在较粗的粒度上被检测到,也就是说,更改分布在多个提交中。在这里,这种类型的重构被称为粗粒度重构(CGR)。我们比较了在19个开源仓库中不同粒度的提交中检测到的重构。结果表明,CGR是常见的,其频率随着粒度变粗而增加。此外,我们发现与移动相关的重构往往是最常见的CGR。分析了CGR产生的原因,并指出CGR在重构研究中的应用价值。
2022-04-24 cs.SE
An Exploratory Study on Refactoring Documentation in Issues Handling
理解重构文档的实践在学术界和工业界都是至关重要的。大多数软件项目都使用问题跟踪系统,使开发人员,质量保证,管理人员和用户能够提交功能请求和其他任务,如错误修复和代码审查。虽然最近的研究探索了如何在提交消息中记录重构,但很少有人知道开发人员如何在问题中描述他们的重构需求。在这项研究中,我们的目标是探索开发人员报告的问题中的重构变化,以更好地了解开发人员认为他们的代码中存在什么问题以及他们如何处理它。我们的方法依赖于文本挖掘45,477个重构相关问题,并通过调查与15,833重构操作和开发者的显式重构意图。我们的研究结果表明:(1)开发人员大多使用与重构相关的术语/短语来解决重构相关的问题;(2)开发人员倾向于明确提到特定质量属性的改进,并专注于重复代码的删除。我们设想我们的研究结果使工具构建者能够支持开发人员自动记录问题中的重构更改。
2022-03-19 cs.SE
How Do I Refactor This? An Empirical Study on Refactoring Trends and Topics in Stack Overflow
作为软件维护和演化的重要组成部分,重构由开发人员执行,无论技术或领域如何,以提高系统的内部质量,并减少其技术债务。然而,选择合适的重构策略并不总是那么简单,这导致开发人员寻求帮助。虽然重构的研究已经很成熟,有几项研究在检测重构机会和建议适当的代码更改之间进行了改变,但对它们在实践中的采用知之甚少。分析开发人员的认知对于更好地理解开发人员认为代码中存在的问题以及他们如何处理这些问题至关重要。此外,需要通过提取更适合开发人员实际情况的常见重构意图,来弥合研究重构与实际应用之间的差距。在这项研究中,我们通过一系列定量和定性的实验,分析重构讨论堆栈溢出。我们的研究结果表明,堆栈溢出是由一组不同的开发人员用于重构援助的各种技术。我们的观察显示了开发人员在重构时通常需要帮助的五个方面--代码优化、工具和IDE、体系结构和设计模式、单元测试和数据库。我们设想我们的研究结果更好地桥接重构的传统(或学术)方面与其现实世界的适用性之间的支持,包括更好的工具支持。
2021-10-23 cs.SE
Exploring Variational Graph Auto-Encoders for Extract Class Refactoring Recommendation
University of Illinois at Urbana-Champaign(伊利诺伊大学厄巴纳-香槟分校)
代码气味是软件系统中设计和开发缺陷的标志,它会降低系统的可重用性和可维护性。重构是一种持续的实践,以消除程序代码中的代码气味。在不同的代码气味中,God类或Blob是最常见的代码气味之一。一个god类包含太多的责任,违反了面向对象编程设计的低耦合和高内聚原则。本文提出了一种自动的方法来提取一个上帝类到多个更小的类更具体的责任。为此,我们首先为相关的god类构建一个方法图(作为节点)。任何两种方法之间的边缘由它们的结构相似性确定,并且使用不同的语义表示方法初始化每个方法的特征。然后,使用变分图自动编码器来学习每种方法的向量表示。最后,学习的向量用于将方法聚类到不同的组中,以推荐为重构类。我们使用三种不同的类内聚度量对从两个著名的开源系统中收集的16个实际的上帝类进行了评估。我们还对我们的方法与类似的现有方法进行了比较研究,发现所提出的方法对实验中使用的几乎所有上帝类都产生了更好的结果。
2023-03-19 cs.AI cs.SE
A Survey of Deep Learning Based Software Refactoring
本文综述了基于深度学习的软件重构研究,将其分为五类并分析关键方面,揭示了技术采用不平衡、方法级重构占主导及质量保证研究缺失等问题,并提出未来研究方向。
2024-04-30 cs.SE
Leveraging LLMs, IDEs, and Semantic Embeddings for Automated Move Method Refactoring
University of Colorado(科罗拉多大学);Tulane University(路易斯安那州立大学);Amazon Web Services(亚马逊网络服务);JetBrains Research(JetBrains研究);NEC Corporation(日本电报电话公司);NEC Laboratories America(日本电报电话美洲实验室);University of Texas at Dallas(德克萨斯大学达拉斯分校);Concordia University(康科迪亚大学);University of Colorado, JetBrains Research(科罗拉多大学,JetBrains研究)
针对Move Method重构,提出MM-assist助手,结合LLM、IDE静态分析和语义嵌入,通过RAG和自一致性过滤幻觉,显著提升推荐准确率并获用户好评。
2025-10-16 cs.AI cs.SE
Automated Refactoring of Non-Idiomatic Python Code: A Differentiated Replication with LLMs
本文研究了GPT-4在推荐地道Python代码重构方面的有效性,发现其不仅能有效识别地道构造,还能在现有基线失败时提出正确的重构操作,突显了LLM替代复杂代码分析推荐器的潜力。
2025-01-28 cs.SE
EM-Assist: Safe Automated ExtractMethod Refactoring with LLMs
University of Colorado Boulder(科罗拉多大学博尔德分校);JetBrains Research(JetBrains研究院)
针对长方法重构推荐与真实开发者实践不符的问题,提出基于LLM的IntelliJ插件EM-Assist,通过生成、验证、增强和排名重构建议实现安全自动化,在召回率与可用性上超越现有工具。
2024-05-31 cs.HC cs.LG cs.PL
ActRef: Enhancing the Understanding of Python Code Refactoring with Action-Based Analysis
ActRef 提出基于代码变更操作的重构分析框架,覆盖变量到模块多粒度并支持多种重构类型,在 1,914 个实例上取得 0.80 精确率和 0.92 召回率,优于多个基线。
2025-05-10 cs.SE
Hearing the voice of experts: Unveiling Stack Exchange communities' knowledge of test smells
本研究通过分析Stack Exchange社区的讨论数据,探究开发者对测试坏味道的认知、对应的修正措施及重构挑战,发现开发者更关注他人实操经验,且更常询问测试坏味道的实践优劣而非重构建议。
2023-05-05 cs.SE
AntiCopyPaster 2.0: Whitebox just-in-time code duplicates extraction
该论文介绍AntiCopyPaster 2.0,一个IntelliJ IDEA插件,用于在重复代码出现时即时检测并重构,支持自定义检测规则,并已开源。
2024-02-08 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
Recommending More Efficient Workflows to Software Developers
现有的推荐系统可以通过推荐新的编程工具(例如重构工具或程序导航工具)来帮助开发人员提高他们的软件开发能力。然而,仅仅孤立地推荐工具本身并不能让开发人员成功地完成他们的任务。在本文中,我将介绍一个新的推荐系统,它可以向开发人员推荐工作流或工具序列。通过学习更有效的工作流程,该系统可以使软件开发人员更有效率。
2021-02-06 cs.IR cs.SE
More Accurate Recommendations for Method-Level Changes
在大型软件项目的生命周期中,开发人员经常将相同的代码更改应用到不同的代码位置,但略有不同。由于将这些更改应用于所有位置是耗时且容易出错的,因此存在从输入示例学习更改模式、搜索可能的模式应用并生成相应建议的工具。在许多情况下,由于输入示例中的代码移动,生成的建议在语法或语义上是错误的。因此,它们的准确性很低,开发人员无法直接将它们复制到他们的项目中而不进行调整。我们提出了准确的推荐系统(ARES),它比其他工具实现了更高的准确性,因为它的算法在创建模式和建议时会考虑代码移动。平均而言,ARES的建议对于开发人员在源代码归档提交中手动执行的代码更改具有96%的准确性。与此同时,ARES实现了与其他工具相当的精确度和召回率。
2017-08-10 cs.SE
Spaghetti Architect: A Contamination-Resistant, By-Construction-Labelled, Multi-Language Code Dataset Generator
Sunway College(双威学院)
研究针对挖掘代码语料库的问题,提出意大利面架构师工具,通过反优化转译器生成多语言代码数据集,能抵抗污染、自带标签并沿难度轴标记,给出结构效度证据及基线,表明其在代码数据集生成上的有效性和优势。
2026-09-01 cs.LG cs.SE
Evaluation of Contrastive Learning with Various Code Representations for Code Clone Detection
Swiss Federal Institute of Technology (EPFL)(瑞士联邦理工学院(EPFL));JetBrains Research(JetBrains研究院)
代码克隆是实现类似功能的代码段对。克隆检测是源代码自动理解的一个基本分支,在重构推荐、剽窃检测和代码摘要等方面有着广泛的应用。克隆检测的一个特别有趣的情况是语义克隆的检测,即,具有相同功能但在实现上显著不同的代码片段。检测语义克隆的一种有前途的方法是对比学习(CL),这是计算机视觉中流行的机器学习范例,但尚未普遍用于代码处理。我们的工作旨在评估最流行的CL算法结合三个源代码表示两个任务。第一个任务是代码克隆检测,我们在包含104个算法实现的POJ-104数据集上进行评估。第二个任务是剽窃检测。为了评估这个任务的模型,我们引入了CodeTransformator,一个转换源代码的工具。我们使用它来创建一个数据集,该数据集模仿基于竞争性编程解决方案的剽窃代码。我们为这两项任务训练了九个模型,并将它们与六种现有方法进行了比较,包括传统工具和现代预训练神经模型。我们的评估结果表明,提出的模型在每个任务中执行diligence,但基于图的模型的性能通常高于其他模型。在CL算法中,Simplified和SwAV导致更好的结果,而Moco是最鲁棒的方法。我们的代码和训练模型可以在https://doi.org/10.5281/zenodo.6360627,https://doi.org/10.5281/zenodo.5596345上找到。
2022-06-17 cs.LG cs.SE
Don't Trust the Label: License Laundering in AI Supply Chains
Queen’s University(女王大学)
研究人工智能供应链中许可证洗钱问题,通过追踪大量数据集到模型再到应用程序的链,量化两种洗钱形式,发现多数链有无声明许可证工件,各负有义务许可证类别生存率低,为相关方提供了建议。
2026-07-23 cs.AI cs.SE