Program Repair: Automated vs. Manual
在过去的十年中,已经提出了各种自动程序修复(APR)技术来自动修复错误。虽然最近的研究在有效性和效率方面取得了重大进展,但在真实的调试场景中,APR技术在人工干预下的表现仍然不清楚。为了弥补这一差距,我们进行了广泛的研究,比较三个国家的最先进的APR工具与手动程序修复,并进一步调查是否协助APR工具(即,修复报告)可以改进手动程序修复。为此,我们招募了20名参与者进行对照实验,共产生了160个手动修复任务和问卷调查。实验结果表明:(1)人工修复程序有时会受到修复操作频率的影响;(2)APR工具在调试时间方面更有效,而人工修复程序往往会以更少的尝试生成正确的补丁;(3)APR工具可以进一步提高手工修复程序的错误修复率,但对补丁的正确性有负面影响;(4)参与者习惯于花费更多的时间来识别错误的补丁,但仍然容易被误导;(5)参与者对工具的修复性能持肯定态度,但对实际使用中的可用性普遍缺乏信心。此外,我们还提供了一些提高APR工具可用性的指南(例如,报告中的误导性信息和对反馈意见的观察)。
2022-03-10 cs.SE
Astor: Exploring the Design Space of Generate-and-Validate Program Repair beyond GenProg
在过去的几年中,研究人员提出了新的修复方法,自动生成补丁修复软件错误。修复方法可以按照主要设计理念(例如生成并验证或基于合成)进行松散描述。这些修复方法中的每一种都是程序修复的设计空间中的一个点。我们的目标是通过提供一个框架来促进修复方法的设计,开发和评估:a)包含方法实现中常见的组件,因此可以在它们之上构建新的方法,b)提供现有修复方法的内置实现。本文提出了一个名为Astor的框架,它包含了生成和验证修复方法的设计空间。Astor提供了扩展点,形成了程序修复的显式决策空间。通过这些扩展点,研究人员可以重用现有组件或实现新组件。Astor包含6种Java实现的修复方法,其中包括先驱之一:GenProg。研究人员已经在Astor上定义了新的方法,通过使用扩展点对这些内置方法进行了改进,并在评估中执行了Astor的方法实现。在Astor上构建的修复方法的实现能够修复来自5个大型Java程序的总共98个真正的错误。
2019-01-23 cs.SE
On the Efficiency of Test Suite based Program Repair: A Systematic Assessment of 16 Automated Repair Systems for Java Programs
基于测试的自动程序修复是近十年来软件工程领域的一个研究热点。确实已经提出了许多方法,这些方法利用测试套件作为对程序规范的弱但可负担的近似。尽管文献经常在可以修复的基准测试错误的数量上创造新的记录,但一些研究越来越多地提出了对最先进方法的局限性和偏见的担忧。例如,生成的补丁的正确性已在一些研究中受到质疑,而其他研究人员指出,评估方案可能会误导故障定位结果的处理。然而,有很少的工作解决补丁生成的效率,关于程序修复的实用性。在本文中,我们填补了这一空白,在文献中,通过提供一个广泛的审查测试套件的程序修复的效率。我们的目标是评估生成的补丁候选者的数量,因为这些信息与(1)有效地遍历搜索空间以选择有意义的修复尝试的策略相关,(2)最小化识别合理补丁的测试工作的策略,(3)以及优先生成正确补丁的策略。为此,我们进行了大规模的实证研究的效率,在数量上产生的补丁候选人的16个开源修复工具的Java程序。在相同的故障定位配置下仔细地进行实验以限制偏差。
2020-08-03 cs.SE
Neural Program Repair with Execution-based Backpropagation
神经机器翻译(NMT)架构在自动程序修复方面取得了可喜的成果。然而,它们具有生成低质量补丁的限制(例如,不可编译的补丁)。这是因为现有的工作仅优化基于字符和标记的纯语法损失函数,而没有在神经网络权重优化期间并入程序特定的信息。在本文中,我们提出了一种新的程序修复模型称为奖励修复。RewardRepair的核心新颖性是通过基于程序编译和测试执行信息的损失函数来改进基于NMT的程序修复,奖励网络生成可编译且不会过拟合的补丁。我们进行了几个实验来评估RewardRepair,表明使用编译和测试执行结果来优化底层神经修复模型是可行和有效的。RewardRepair在四个基准测试中正确修复了207个错误。我们报告修复成功的121个错误是固定的第一次在文献中。此外,RewardRepair生成高达45.3%的可编译补丁,比最先进的39%有所提高。
2022-04-10 cs.SE
Repairnator patches programs automatically
修理工是个机器人。它不断监控在持续集成开源软件过程中发现的软件错误,并尝试自动修复这些错误。如果它成功地合成了一个有效的补丁,Repairnator会向人类开发人员推荐这个补丁,并伪装成一个假的人类身份。到目前为止,Repairnator已经能够生成被人类开发人员接受并永久合并到代码库中的补丁。这是软件工程中程序自动修复研究中人类竞争力的一个里程碑。
2022-05-04 cs.SE
RESTORE: Retrospective Fault Localization Enhancing Automated Program Repair
本文提出回顾式故障定位技术,通过复用失败补丁验证结果进行基于变异的动态分析,并在RESTORE工具中实现,在Defects4J基准上以更高效率修复了41个缺陷,显著优于现有Java自动修复工具。
2020-03-31 cs.SE
Towards More Reliable Automated Program Repair by Integrating Static Analysis Techniques
自动程序修复的一个长期存在的公开挑战是过拟合问题,这是由于没有足够或不完整的规范来验证生成的补丁是否正确而引起的。大多数可用的修复系统依赖于弱规范(即,从测试用例合成的规范),这限制了生成的修复的质量。为了加强规范和提高修复的质量,我们建议更紧密地结合静态错误检测技术与自动程序修复。该集成将自动程序修复与静态分析技术相结合,使得错误检测模式可以合成为修复系统可以使用的规范。我们探索这种集成使用两种类型的错误的可行性:算术错误,如整数溢出,和逻辑错误,如终止错误。作为我们分析的一部分,我们提出了一些意见,有助于提高这些类别的错误补丁生成。此外,这些观察有助于缩小候选块搜索空间,并推断有效的搜索顺序。
2021-11-10 cs.SE
A study on Prompt Design, Advantages and Limitations of ChatGPT for Deep Learning Program Repair
本文通过三个研究问题系统探索ChatGPT在深度学习程序修复中的能力,提出提示设计分类与多种提示模板,并总结其在代码异味检测、重构及API误用检测方面的优势与局限。
2023-04-17 cs.SE
A Comprehensive Study of Automatic Program Repair on the QuixBugs Benchmark
自动程序修复论文倾向于重复使用相同的基准。这对程序修复研究团体的研究结果的外部有效性构成了威胁。在本文中,我们进行了一个实证研究的自动修复的基准称为菜的错误,这是很少研究。本文首先分析了菜bug的特点;其次研究了10种程序修复工具对菜bug的修复效果;最后采用三种补丁正确性评估技术对菜bug中过拟合补丁的存在进行了综合研究。我们的主要成果是:1)菜Bugs中有16/40的bug程序可以用至少一个测试集足够的补丁来修复; 2)所考虑的工具在菜Bugs上总共生成了338个合理的补丁,其中53.3%的补丁根据我们的人工评估是过拟合的; 3)RGT_Evosuite、RGT_InputSampling和GT_Invariants三种自动补丁正确性评估技术的准确率达到98.2%,过拟合检测率分别为80.8%和58.3%。据我们所知,这是最大的菜虫自动修复的实证研究,结合了定量和定性的见解。我们所有的实验结果都可以在GitHub上公开获得,以促进未来对自动程序修复的研究。
2020-09-28 cs.SE
Elixir: Effective object-oriented program repair
这项工作的动机是普遍使用的方法调用面向对象(OO)的程序,实际上他们的流行补丁的OO程序错误。我们提出了一种生成和验证修复技术,称为ELIXIR旨在能够生成这样的补丁。ELIXIR积极地使用方法调用,与局部变量、字段或常量一样,来构造更具表达力的修复表达式,这些表达式用于合成补丁。随后扩大的修复空间,由于更广泛地使用的方法调用,有效地解决了使用机器学习模型排名具体的维修。机器学习模型依赖于从程序上下文导出的四个特征,即,潜在修复位置周围的代码以及错误报告。我们实现了ELIXIR,并在两个数据集上进行了评估,这两个数据集是流行的Defects 4J数据集和我们创建的新数据集Bugs.jar,并针对我们技术的2个基线版本以及代表程序修复最先进水平的5种其他技术。我们的评估表明,ELIXIR能够将Defects 4J中正确修复的错误数量增加85%(从14增加到26),将Bugs.jar中的错误数量增加57%(从14增加到22),同时还显著优于其他最先进的修复技术,包括ACS,HD-Repair,NOPOL,PAR和jGenProg。
2021-12-21 cs.SE
Automated Patch Assessment for Program Repair at Scale
在本文中,我们做的程序修复系统生成的补丁的自动正确性评估。我们将人类书写的补丁视为地面真实预言,并基于它随机生成测试,这是Shamshiri等人提出的一种技术,随机地面真值测试(RGT)。我们建立了一个由14个最先进的修复系统生成的638个Defects 4J补丁的策展数据集,我们在这个数据集上评估了自动补丁评估。本研究的结果是新颖的和有意义的:第一,我们提高了最先进的性能与RGT的自动补丁评估的190%,通过改进的预言;第二,我们表明,RGT是足够可靠的,以帮助科学家做过拟合分析,当他们评估程序修复系统;第三,我们提高了程序修复知识的外部效度与最大的研究。
2021-05-07 cs.SE
Towards Extending the Range of Bugs That Automated Program Repair Can Handle
现代自动程序修复(APR)被很好地调整为发现和修复将可观察到的错误行为引入程序的错误。然而,一类重要的错误不会导致这种可观察到的行为(例如,活跃/终止错误、非功能性错误和信息流错误)。这样的错误通常不能用当前的APR方法来处理,因此,作为一个社区,我们需要开发补充技术。为了刺激替代APR方法和混合APR组合的系统研究,我们设计了一种新的错误分类系统,使他们的错误检测能力和错误修复能力的有条不紊的分析。为了证明的好处,我们分析了顺序和并发程序中的终止错误的修复。研究表明,将动态APR与形式化分析技术(如终止证明器和软件模型检查器)相结合,降低了复杂性,提高了这些修复的整体可靠性。
2022-11-07 cs.SE
Empirical Review of Java Program Repair Tools: A Large-Scale Experiment on 2,141 Bugs and 23,551 Repair Attempts
在过去的十年中,基于测试套件的自动程序修复的研究有了显着增长。每年,新的方法和实现都会出现在主要的软件工程场所。然而,大多数这些方法都是在单一的bug基准上进行评估的,其他研究人员也很少复制这些bug。在本文中,我们提出了一个大规模的实验,使用11个Java测试套件为基础的修复工具和5个基准的错误。我们的目标是更好地了解自动程序修复工具在大量基准测试中的现状。我们的调查是指导的假设,修复工具的可修复性可能不会在不同的基准程序错误的一般化。我们发现,这11个工具1)能够为5个基准测试中21%的bug生成补丁,2)与其他基准测试相比,在Defects 4J上具有更好的性能,通过为Defects 4J中47%的bug生成补丁,而其他基准测试中的bug只有10-30%。我们的实验总共包括23,551次修复尝试,我们用来找到非补丁生成的原因。本文对这些原因进行了分析,有助于维修工具设计人员改进技术和工具。
2019-05-28 cs.SE
ASAP-Repair: API-Specific Automated Program Repair Based on API Usage Graphs
本文提出 ASAP-Repair 技术,利用最先进检测器的 API 使用模板,基于 API 使用图 (AUGs) 自动修复 API 误用,并验证了其在成熟数据集上的适用性及未来挑战。
2024-02-12 cs.SE
E-APR: Mapping the Effectiveness of Automated Program Repair
自动程序修复(APR)是一个快速发展的领域,许多新技术正在开发,以解决最具挑战性的软件工程问题之一。APR技术已经显示出有希望的结果,给了我们希望,有一天软件可以自我修复。本文主要研究APR技术的客观性能评估问题。我们介绍了一种新的方法,解释自动程序修复(E-APR),它确定的缺陷程序,解释为什么一个特定的实例是很难的APR技术的功能。E-APR用于检查大多数研究人员使用的错误程序的多样性和质量,并分析现有APR技术的优点和缺点。E-APR可视化了有缺陷程序的实例空间,每个有缺陷的程序都表示为空间中的一个点。实例空间的构造,以揭示领域的困难和容易的bug程序,并使APR技术的优点和缺点被确定。
2021-06-08 cs.SE
Estimating the Potential of Program Repair Search Spaces with Commit Analysis
评估程序修复系统最自然的方法是在缺陷数据集上运行它们,比如Defects4J。然而,在任意的真实世界的程序中使用这种评估技术需要大量的配置。在本文中,我们提出了一个纯静态的方法来评估潜在的搜索空间的修复方法。这种新方法使研究人员和从业人员能够对修复方法的搜索空间进行编码,并选择潜在有用的方法,而无需在工具配置和执行方面进行斗争。我们编码的搜索空间指定的修复策略,他们采用。接下来,我们使用规范来检查过去的提交是否位于修复搜索空间中。对于修复方法,在其搜索空间中包括许多人类编写的过去提交表明其生成有用补丁的潜力。我们在LighteR中实现了我们的评估方法。LighteR获取一个Git仓库,并输出一个提交列表,这些提交的源代码更改位于修复搜索空间中。我们在72个Github仓库的55,309个提交上运行了LighteR,并显示LighteR的准确率和召回率分别为77%和92%。总体而言,我们的实验表明,我们的新方法是轻量级的和有效的研究程序修复方法的搜索空间。
2022-02-03 cs.SE
Trust Enhancement Issues in Program Repair
自动程序修复是一种新兴的技术,它试图使用学习、搜索和语义分析来自动纠正错误和漏洞。信任自动生成的补丁是实现程序修复的更大采用所必需的。为了实现这一目标,我们调查了100多名软件从业者,以了解增强对自动生成的补丁的信任所需的工件和设置。基于对开发人员偏好的调查反馈,我们定量评估现有的基于测试套件的程序修复工具。我们发现,他们不能产生高质量的补丁在前10名的排名和可接受的时间段为1小时。我们的定性研究中的开发人员反馈以及我们对现有修复工具的定量检查中的观察结果指出了推动程序修复研究的可操作见解。具体来说,我们注意到,在可接受的时间范围内产生修复非常依赖于利用足够丰富的搜索空间的抽象搜索空间表示。此外,虽然额外的开发人员输入对于生成或排名补丁是有价值的,但开发人员似乎对重要的人在环交互不感兴趣。
2022-02-11 cs.SE
Stryker: Scaling Specification-Based Program Repair by Pruning Infeasible Mutants with SAT
用于自动程序修复的许多技术涉及语法程序转换。将这些变换的组合应用于错误代码会产生修正候选,其正确性必须确定。探索这些组合会导致产生的修复候选者的数量爆炸,这严重限制了这种故障修复技术的适用性。大多数情况下,通过不彻底考虑候选修复,以及禁用语句内修改,可以抑制这种爆炸。在这篇文章中,我们提出了一种程序修复技术,认为一个充足的语句内的语法操作,并探讨修复候选人详尽到一个提供的界限。该技术的适用性,在我们的工具Stryker中实现,支持一种新的机制来检测和修剪不可行的修复候选人。这使得Stryker能够修复具有多个错误的程序,这些错误的修复需要多次修改。我们评估我们的技术基准故障的Java容器类,Stryker能够修复,修剪显着部分的空间生成的候选人时,一个以上的错误存在于代码中。
2019-10-30 cs.SE
Test Case Generation for Program Repair: A Study of Feasibility and Effectiveness
在许多不同种类的程序修复技术中,一个被广泛研究的技术家族被称为基于测试集的修复。测试套件本质上是输入输出规范,因此通常不足以完全指定修复中程序的预期行为。因此,基于测试套件的程序修复技术生成的补丁通过测试套件,但可能是不正确的。过于特定于所使用的测试套件而不能推广到其他测试用例的补丁被称为过拟合补丁。在本文中,我们研究的可行性和有效性的测试用例生成在缓解过拟合问题。我们提出了两种方法,使用测试用例生成,以提高测试套件为基础的修复,并进行了广泛的评估所提出的方法的有效性,使更好的测试套件为基础的修复缺陷4J存储库的224个错误。结果表明,测试用例生成可以改变产生的补丁,但不是有效地把不正确的补丁到正确的。我们确定的无效性相关的问题,并预计我们的研究结果和发现将导致未来的研究,以建立测试用例生成技术,量身定制的自动修复系统。
2017-03-01 cs.SE
Partitioning Patches into Test-equivalence Classes for Scaling Program Repair
自动程序修复是一个寻找给定错误程序的转换(称为补丁)以消除可观察到的故障的问题。它具有重要的应用,例如提供调试辅助,自动分级作业和修补安全漏洞。所有现有修复技术面临的共同挑战是可扩展性大补丁空间,因为有许多候选补丁,这些技术显式或隐式考虑。程序修复的正确性标准通常是作为一套测试给出的,因为可能无法获得预期程序行为的正式规范。由于底层搜索算法执行的大量测试执行,当前的修复技术不能扩展。我们解决这个问题,通过引入一种方法,补丁生成的基础上的测试等价关系(如果两个程序是“测试等价”的一个给定的测试,他们在这个测试上产生难以区分的结果)。我们提出了两个测试等价关系的运行时值和依赖关系的基础上,分别提出了一个算法,执行上的飞行分区的补丁到测试等价类。我们对真实世界的程序的实验表明,所提出的方法大大减少了测试执行的数量,因此提供了一个数量级的效率提高现有的修复技术,而不牺牲补丁的质量。
2017-07-15 cs.SE
Can Automated Program Repair Refine Fault Localization?
软件缺陷在现代软件系统中普遍存在,并且众所周知难以手动调试。因此,大量的研究工作一直致力于自动化软件调试,包括自动故障定位和程序修复。然而,现有的故障定位技术通常是无效的,即使是最先进的程序修复技术,也只能修复一小部分真实世界的错误。虽然故障定位和程序修复是内在联系的,但我们观察到,在文献中,它们唯一的联系是程序修复技术通常使用现成的故障定位技术(例如,Ochiai)来确定用于修补的潜在候选语句/元素。在这项工作中,我们探索他们在另一个方向的联系,即,程序修复是否反过来有助于故障定位?通过这种方式,我们不仅为更强大的故障定位开辟了一个新的维度,而且将程序修复的应用范围扩展到所有可能的错误(而不仅仅是可以直接自动修复的错误)。我们设计了ProFL,一种简单的方法,使用补丁执行结果(来自程序修复)作为故障定位的反馈信息。在广泛使用的Defects 4J基准上的实验结果表明,基本的ProFL已经可以在Top-1内定位395个研究错误中的161个,而最先进的基于频谱和突变的故障定位技术最多在Top-1内定位117个。我们还证明了ProFL在不同设置下的有效性。最后,我们表明,ProFL可以通过无监督和监督学习进一步提高最先进的故障定位。
2019-10-03 cs.SE
The Remarkable Role of Similarity in Redundancy-based Program Repair
最近,有原始的尝试,使用“代码相似性”的概念在程序修复,这表明相似性分析在修复过程中有一个重要的作用。然而,有没有专门的工作来表征和量化的作用相似性的冗余程序修复,补丁是从源代码取自别处。这是我们的论文作出了重大贡献:我们进行了深入和系统的分析代码相似性的修复搜索空间的探索过程中的作用。我们定义并建立了一个大规模的实验,基于四个代码相似性度量,捕捉不同的相似性:字符,令牌,语义和结构相似性。总的来说,我们已经在1500万个源代码组件上计算了5600万个相似性得分。我们表明,通过相似性分析,至少90%的搜索空间可以被忽略以找到正确的补丁。代码相似性能够在4 - 33%的考虑案例中将正确的修复成分排在第一位。
2019-05-16 cs.SE
Execution-free Program Repair
针对自动程序修复依赖测试导致成本高且无法保证正确性的问题,本文提出 Proof2Fix 方法与工具,利用程序证明器在不运行程序或测试的情况下发现并修复历史缺陷。
2024-05-09 cs.SE
Mining Software Repair Models for Reasoning on the Search Space of Automated Program Fixing
本文通过分析软件仓库中数以千计的错误修复事务来理解错误修复的本质。然后,它将这些学习到的知识放在自动程序修复的上下文中。我们给出了大量的经验结果,在大规模和细粒度的抽象语法树差异的性质,人类的错误修复。我们建立了数学推理的搜索空间的自动修复和时间,通过应用我们的方法对14个存储库的Java软件和89,993版本事务,我们表明,并非所有的概率修复模型是等价的。
2013-11-14 cs.SE
Towards Practical and Useful Automated Program Repair for Debugging
针对现有自动化程序修复(APR)依赖测试用例、需重跑程序、修复复杂缺陷能力弱等实用性不足问题,提出交互式IDE修复系统PracAPR,通过无测试缺陷定位、结合大模型与策略的补丁生成、模拟轨迹验证实现无需测试和程序重跑的修复,推动APR实用化。
2024-07-12 cs.SE
Code Summaries as Diagnostic Context for LLM-Based Program Repair
King’s College London(伦敦国王学院)
本研究提出基于摘要的程序修复方法,利用代码摘要作为中间步骤,通过提升修复效果来改进大语言模型在程序修复中的表现。
2026-08-28 cs.SE
Leveraging Mutation Analysis for LLM-based Repair of Quantum Programs
The University of Osaka(大阪大学);Kyushu University(九州大学)
本文提出利用突变分析提升基于大语言模型的量子程序修复效果,通过设计不同提示配置实验,发现突变分析能显著提高修复成功率和解释质量。
2026-01-18 cs.SE
Invariant-based Program Repair
本文提出一种基于程序不变量的形式化通用自动化程序修复框架,通过动态推断正确与可疑不变量并结合严格程序分析生成和验证补丁,且在性能错误修复中验证了其有效性。
2024-01-26 cs.SE
Energy Consumption of Automated Program Repair
本文首次结合自动化程序修复与绿色软件研究,测算10款传统Java修复工具及10个微调大语言模型在Defects4J数据集上的修复能耗,发现能耗与修复准确率间存在权衡关系。
2024-02-05 cs.SE
Repair Ingredients Are All You Need: Improving Large Language Model-Based Program Repair via Repair Ingredients Search
提出ReinFix框架,使LLM在推理和解决阶段自主搜索修复要素,在Defects4J基准上显著超越SOTA基线,提升程序修复准确率。
2025-06-29 cs.SE
A Comprehensive Study of Code-removal Patches in Automated Program Repair
自动程序修复(APR)技术有望帮助降低调试成本。许多相关的APR技术遵循生成和验证的方法,即错误的程序迭代地修改不同的更改操作符,然后验证测试套件,直到一个合理的补丁生成。特别是,Kali是一种生成和验证技术,用于研究仅通过删除代码生成合理补丁的可能性。以前的研究表明,卡利确实成功地解决了几个错误。本文讨论了在自动程序修复中代码删除补丁的情况,调查的原因和场景,使他们的创建成为可能,以及与补丁的关系,由开发人员实现。我们的研究表明,代码删除补丁往往不足以修复错误,并提出了一个全面的分类代码删除补丁,提供的问题,可能会影响测试套件的证据,打开新的机会,研究人员在自动程序修复领域。
2021-12-15 cs.SE
PRF: A Framework for Building Automatic Program Repair Prototypes for JVM-Based Languages
PRF是一个基于Java的框架,允许研究人员通过简单地使用补丁生成插件扩展它来构建JVM语言的基于测试的生成和验证自动程序修复技术的原型。该框架还提供了用于构造自动程序修复工具的其他有用组件,例如,一个故障定位组件,提供不同粒度级别的基于频谱的故障定位信息;一个可配置且安全的补丁验证组件,比普通测试快11倍以上;以及一个可定制的后处理组件,用于生成修复报告。PRF的演示视频可在https://bit.ly/3ehduSS上获得。
2020-09-15 cs.SE
Rule-based Graph Repair
模型修复是模型驱动工程中的一个重要课题。由于模型被适当地形式化为图状结构,我们考虑基于规则的图修复问题:给定一个规则集和一个图约束,尝试基于给定的规则集构造一个图程序,使得应用于任何图都会产生一个满足图约束的图。我们展示了特定约束的修复程序的存在,并展示了与规则集兼容的特定约束的基于规则的修复程序的存在。
2019-12-20 cs.SE
Multi-Location Program Repair Strategies Learned from Past Successful Experience
自动程序修复(Automated program repair,APR)在减少软件维护工作量和时间消耗方面具有巨大的潜力,近年来成为软件工程的研究热点,提出了许多方法。多位置程序修复由于其逻辑和结构的复杂性一直是该领域的一个挑战。虽然一些方法并不声称具有解决多位置错误的功能,但它们在实践中为这些缺陷生成正确的补丁。在本文中,我们首先对Defects4J中的多位置错误进行了观察,并将其分为两类(即,相似的和相关的多位置错误)基于其补丁中的修复动作。然后,我们总结了当前工具修复Defects4J中多位置错误的情况。我们分析了当前工具生成的22个补丁,并提出了两个可行的策略来修复多位置错误,通过两个详细的案例研究来说明它们。最后,通过修复两个从未修复过的漏洞,验证了该方法的可行性。通过借鉴以往的成功经验,指出了多位置程序修复的可能途径。
2019-01-07 cs.SE
SelfAPR: Self-supervised Program Repair with Test Execution Diagnostics
SelfAPR提出自监督程序修复方法,通过扰动项目历史版本生成训练样本并编码测试执行诊断,在Defects4J上修复110个缺陷,优于监督学习方法。
2022-09-03 cs.SE
Neural Program Repair with Program Dependence Analysis and Effective Filter Mechanism
提出一种结合程序切片与过滤机制的神经程序修复框架,利用预训练语言模型修复单行Java错误,在五个基准上优于现有方法。
2023-05-16 cs.SE
TransRepair: Context-aware Program Repair for Compilation Errors
自动修复编译错误可以通过指导新手或AI程序员编写和调试代码来大大提高软件开发的生产率。近年来,基于学习的程序修复得到了广泛的关注,并成为实践中的前沿。但仍有很大的改进空间。在本文中,我们提出了一个端到端的解决方案TransRepair定位错误行,并创建正确的替代一个C程序的同时。优于同行,我们的方法考虑到错误代码和诊断编译反馈的上下文。然后,我们设计了一个基于transformer的神经网络来学习修复的方式,从错误的代码,以及它的上下文和诊断反馈。为了提高TransRepair的有效性,我们从两个真实世界的程序数据集和互联网上总结了5种类型和74个细粒度子类型的编译错误。然后,开发了一种程序损坏技术,以合成一个包含1,821,275个错误C程序的大型数据集。通过大量的实验,我们证明了TransRepair优于国家的最先进的单次修复精度和完整的修复精度。进一步的分析揭示了当代解决方案的优点和缺点,以供未来改进。
2022-10-08 cs.SE
Verifix: Verified Repair of Programming Assignments
介绍性编程作业的自动反馈生成对编程教育很有用。大多数作品试图通过在选定的测试中将学生程序的行为与教师的参考程序进行比较来生成反馈以纠正学生程序。在这项工作中,我们的目标是生成可验证的正确的程序修复作为学生的反馈。学生作业在控制流方面与参考解决方案对齐和组合,数据变量的差异通过谓词自动汇总以关联变量名称。两个程序的等价性的失败验证尝试被利用来获得maxSMT查询的集合,其解决方案指向学生作业的修复。我们已经进行了实验,从一个广泛部署的智能辅导系统策划的学生作业。我们的研究结果表明,我们可以在高达58%的任务中生成经过验证的反馈。更重要的是,我们的系统会指示何时能够生成经过验证的反馈,然后新手学生可以高度自信地使用。
2021-06-30 cs.SE
Reinforcement Learning for Mutation Operator Selection in Automated Program Repair
本文研究在基于启发式的程序修复中使用强化学习选择变异算子,通过在Defects4J基准上的大规模实验表明,该方法能生成更多通过测试的变体,但相比随机选择基线并未显著提升缺陷修复数量。
2024-05-06 cs.SE
MintHint: Automated Synthesis of Repair Hints
能够自动修复程序是一项极具挑战性的任务。在本文中,我们提出了MintHint,一种新的技术,程序修复,是从今天的大多数方法出发。MintHint没有尝试完全自动化程序修复,这通常是一个无法实现的目标,而是执行统计相关性分析,以识别修复代码中可能出现的表达式,并使用基于模式匹配的合成,从这些表达式中生成修复提示。直觉上,这些提示建议如何纠正错误的语句,并帮助开发人员找到完整的实际修复。MintHint可以解决各种常见的错误,包括不正确的,虚假的和丢失的表达式。我们提出了一个用户的研究表明,开发人员的生产力可以提高许多倍的使用MintHint生成的修复提示-相比,只有传统的故障定位信息。我们还将MintHint应用于一个广泛使用的Unix实用程序的几个故障,以进一步评估该方法的有效性。我们的研究结果表明,即使在以下情况下,MintHint也表现良好:(1)搜索的修复空间不包含精确的修复,以及(2)从修复测试用例中获得的操作规范不完整甚至不精确。
2013-09-16 cs.SE
ARJA: Automated Repair of Java Programs via Multi-Objective Genetic Programming
最近的实证研究表明,GenProg的性能并不令人满意,特别是对于Java。在本文中,我们提出了ARJA,一个新的GP为基础的修复方法自动修复的Java程序。具体来说,我们提出了一种新的低粒度补丁表示,适当的搜索子空间的可能错误的位置,操作类型和潜在的修复成分,使GP探索搜索空间更有效。基于这种新的表示,我们制定自动程序修复作为一个多目标的搜索问题,并使用NSGA-II寻找更简单的修复。为了减少计算量和搜索空间,我们引入了一个测试过滤过程,可以加快适应度评估的GP和三种类型的规则,可以应用到避免不必要的操作的代码。此外,我们还提出了一种类型匹配策略,可以通过利用现有语句的语法模式来创建新的潜在修复成分。我们进行了一个大规模的实证评估ARJA及其变种的种子错误和现实世界的错误相比,几个国家的最先进的修复方法。我们的研究结果验证了ARJA中所采用的搜索机制的有效性和效率,也显示了其优于其他方法。特别是,与jGenProg(GenProg for Java的实现)相比,完全遵循冗余假设的ARJA版本可以为两倍以上的bug数量(从27到59)生成测试套件足够的补丁,并为近四倍的数量(从5到18)生成正确的补丁,在Defects 4J中考虑了224个真实世界的bug。此外,ARJA是能够正确地修复几个真正的多位置的错误,很难被修复的大多数现有的修复方法。
2017-12-21 cs.SE
Better Automatic Program Repair by Using Bug Reports and Tests Together
自动程序修复已经在工业中部署,但对修复质量的担忧仍然存在。最近的研究表明,修复工具产生不正确的(但似乎是正确的)补丁的主要原因之一是不完善的故障定位(FL)。本文表明,结合自然语言的错误报告和测试执行时,本地化故障的信息可以有显着的积极影响修复质量。例如,具有这种FL的现有修复工具能够正确地修复Defects 4J基准中的7个缺陷,而现有工具没有正确地修复这些缺陷。我们开发,蓝调,第一个信息检索为基础的,语句级FL技术,不需要训练数据。我们进一步开发RAFL,第一个无监督的方法结合多种FL技术,它优于监督的方法。使用RAFL,我们通过将蓝光与基于频谱(SBFL)的技术相结合来创建SBIR。在对815个真实缺陷进行评估后,SBIR始终将错误语句的排名高于其底层技术。然后,我们修改三个国家的最先进的修复工具,Arja,SequenceR,和SimFix,使用SBIR,SBFL,和蓝调作为其内部FL。我们评估了689个真实世界的缺陷所产生的补丁的质量。Arja和SequenceR显著受益于SBIR:使用SBIR的Arja正确修复了28个缺陷,但使用SBFL时只有21个,使用Blues时只有15个;使用SBIR的SequenceR正确修复了12个缺陷,但使用SBFL时只有10个,使用Blues时只有4个。SimFix(具有克服不良FL的内部机制)使用SBIR和SBFL正确修复了30个缺陷,…
2023-02-06 cs.SE
From Historical Patches to Repair Plans: Outcome-Conditioned Reasoning for Repository-Level Program Repair
Concordia University(康科迪亚大学)
提出条件推理蒸馏(ConRAD),通过从已验证补丁反向重构修复推理并蒸馏出结果一致的阶段性修复计划,在推理时引导故障定位和补丁生成,无需微调或搜索,在SWE-Bench Lite上显著提升Pass@1。
2026-05-27 cs.SE
Specification Vibing for Automated Program Repair
The University of Manchester(曼彻斯特大学);Mohamed bin Zayed University of Artificial Intelligence(穆罕默德·本·扎耶德人工智能大学)
VibeRepair通过行为规范修复替代传统代码编辑,提升自动化程序修复的准确性和泛化能力。
2026-02-09 cs.SE
Automatic Program Repair with OpenAI's Codex: Evaluating QuixBugs
OpenAI的Codex是一个在大型代码语料库上训练的类似GPT-3的模型,已经成为学术界内外的头条新闻。给定用户提供的简短描述,它能够合成在大多数情况下语法和语义上有效的代码段。在这项工作中,我们要调查法典是否能够本地化和修复错误,在自动程序修复领域的中心感兴趣的任务。我们的初始评估使用多语言菜Bugs基准测试(Python和Java中有40个bug)。我们发现,尽管没有接受过APR培训,Codex是令人惊讶的有效,并与最近的最先进的技术竞争。我们的研究结果还表明,Codex在修复Python方面比Java稍微成功一些。
2021-11-06 cs.SE
Hybrid Automated Program Repair by Combining Large Language Models and Program Analysis
本文提出GIANTREPAIR方法,通过结合LLM生成补丁骨架与程序分析技术进行上下文感知的补丁实例化,有效提升了自动化程序修复在真实场景下的缺陷修复数量与性能。
2024-06-04 cs.SE
Experimental Settings in LLM-Based Program Repair: A Study of Inputs, Tool Access, Feedback, and Validation
Pennsylvania State University(宾夕法尼亚州立大学)
本研究针对基于LLM的程序修复实验设置不明确的问题,提出显式规范框架和机器可读模式,以提升可复现性和跨系统比较的清晰度。
2026-09-17 cs.SE
Unlocking LLM Repair Capabilities Through Cross-Language Translation and Multi-Agent Refinement
City University of Hong Kong(香港城市大学);Beijing JudaoYouda Network Technology Co. Ltd.(北京极道有道网络科技有限公司);SnT, University of Luxembourg(卢森堡大学科学与技术学院);Aalto University(阿尔托大学);University of Melbourne(墨尔本大学)
本文提出LANTERN方法,通过跨语言翻译和多代理迭代修复,提升LLM在多语言程序修复中的能力,尤其在Rust等较少使用语言上表现突出。
2026-03-30 cs.SE
Critical Review of BugSwarm for Fault Localization and Program Repair
基准测试在评估解决方案的效率和有效性以自动化软件开发生命周期的几个阶段方面发挥着重要作用。此外,如果设计得好,它们也可以作为一个重要的人工制品来比较不同的方法。BugSwarm是最近发布的一个基准测试,其中包含3,091对失败和通过的持续集成构建。根据作者的说法,基准测试的设计考虑到了自动程序修复和故障定位社区。鉴于针对这些社区的基准应该具有几个特征(例如,一个错误的声明需要存在),我们已经剖析了基准,以充分了解基准是否适合这些社区。我们的批判性分析发现,在基准测试中有几个限制:只有112/3,091(3.6%)适合评估自动故障定位或程序修复技术。
2019-05-22 cs.SE
HEJ-Robust: A Robustness Benchmark for LLM-Based Automated Program Repair
Concordia University(康科迪亚大学)
本文提出HEJ-Robust基准,通过八种语义保持的代码转换生成1450个实例,评估五种微调LLM,在多种转换下模型性能下降超50%,揭示当前LLM修复模型缺乏对细微语法变化的鲁棒性。
2026-05-08 cs.SE
Semantic Evolution over Populations for LLM-Guided Automated Program Repair
University of Texas at Dallas(达拉斯德州大学);FPT Software AI Center(FPT软件人工智能中心);Hanoi University of Science and Technology(河内科技大学)
本文提出EvolRepair框架,通过语义进化算法提升LLM引导的自动程序修复效果,解决修复假设多样性、语义相关修复家族识别等挑战。
2026-04-02 cs.SE
Patch Quality and Diversity of Invariant-Guided Search-Based Program Repair
大多数自动程序修复技术依赖于测试用例来指定正确的程序行为。然而,由于测试用例经常不完全覆盖期望的行为,补丁经常过拟合,并且不能推广到更广泛的需求。此外,在没有完全正确的输出的情况下,确保更高的补丁质量的方法,例如将几个补丁合并在一起或人类评估补丁推荐,受益于访问不同的补丁集合,使补丁多样性成为潜在有用的特征。我们评估的正确性和多样性的补丁生成的GenProg和不变量为基础的多样性增强扩展在我们以前的工作。我们没有发现任何证据表明,促进多样性改变补丁的正确性在积极或消极的方向。使用不变和测试用例生成驱动的度量来测量语义多样性,我们发现大多数错误的补丁之间没有观察到的语义差异,无论使用的修复技术。
2020-03-25 cs.SE
Applying CodeBERT for Automated Program Repair of Java Simple Bugs
软件调试和程序修复是软件工程中最耗时和劳动密集型的任务之一,自动化将使其受益匪浅。在本文中,我们提出了一种基于CodeBERT的新型自动程序修复方法,CodeBERT是一种基于变换器的神经架构,在大型源代码语料库上进行了预训练。我们在ManySStuBs 4J小型和大型数据集上微调我们的模型,以自动生成修复代码。结果表明,我们的技术在19-72%的情况下准确地预测了开发人员实现的固定代码,具体取决于数据集的类型,每个错误不到一秒。我们还观察到,我们的方法可以生成不同长度的修复(短和长),并可以修复不同类型的错误,即使在训练数据集中只存在这些类型的错误的几个实例。
2021-03-30 cs.SE
Automated Repair of C Programs Using Large Language Models
本研究提出整合基于频谱的故障定位、运行时反馈与思维链提示的C程序自动修复框架,结合统计程序分析与LLM推理,在Codeflaws基准上实现44.93%修复准确率,优于现有先进APR基线。
2025-09-02 cs.SE