A large-scale study on human-cloned changes for automated program repair
对自动程序修复的研究表明,真正的错误可以自动修复。然而,这一任务涉及的若干挑战尚未得到充分解决。作为一个例子,考虑一个基于测试套件的修复工具在程序中执行一个更改,以修复一个失败的测试用例发现的错误,但是随后同一个或另一个测试用例失败了。这可能意味着更改是对错误的部分修复,或者另一个错误已经显现。但是,修复工具会放弃更改并可能执行其他修复尝试。人们可能会想,应用的更改是否也应该应用于程序中的其他位置,以便完全修复bug。在本文中,我们感兴趣的是调查开发人员在补丁中克隆的错误修复更改的程度。我们的目标是通过在相同或相似的背景下使用相同或相似的变化来调查多位置修复的需要。为此,我们分析了来自ManySStuBs4J数据集的3,049个多块补丁,ManySStuBs4J数据集是一个单语句错误修复更改的大型数据集。我们发现,68%的多块补丁包含至少一个更改克隆组。此外,这些补丁中的大多数(70%)是严格克隆的补丁,这些补丁完全由属于一个单一的更改克隆组的更改组成。最后,大多数严格克隆的补丁(89%)包含具有相同更改的更改克隆,独立于其上下文。我们的结论是,自动化的解决方案,用于创建由相同或相似的变化组成的补丁可以修复错误是有用的。
2021-04-06 cs.SE
Can defects be fixed with weak test suites? An analysis of 50 defects from Defects4J
自动程序修复技术,其目标是自动生成正确的补丁,为现实世界的缺陷,在过去的十年中,得到了很多的关注。已经提出和开发了许多不同的技术和工具。然而,即使是最复杂的程序修复技术也只能修复一小部分缺陷,同时产生大量不正确的补丁。这种低性能的一个可能原因是,真实世界程序的测试套件通常太弱,无法保证程序的行为。为了了解弱测试套件可以在多大程度上修复缺陷,我们分析了来自Defects4J的50个真实世界的缺陷,其中我们发现高达84%的缺陷可以被正确修复。这一结果表明,目前的自动程序修复技术有很大的改进空间。此外,我们总结了七个故障定位策略和七个补丁生成策略,是有用的定位和修复这些缺陷,并比较这些策略与当前的修复技术。研究结果表明,在未来的研究中,提高自动程序修复的潜在方向。
2017-05-12 cs.SE
Execution-free Program Repair
针对自动程序修复依赖测试导致成本高且无法保证正确性的问题,本文提出 Proof2Fix 方法与工具,利用程序证明器在不运行程序或测试的情况下发现并修复历史缺陷。
2024-05-09 cs.SE
Applying CodeBERT for Automated Program Repair of Java Simple Bugs
软件调试和程序修复是软件工程中最耗时和劳动密集型的任务之一,自动化将使其受益匪浅。在本文中,我们提出了一种基于CodeBERT的新型自动程序修复方法,CodeBERT是一种基于变换器的神经架构,在大型源代码语料库上进行了预训练。我们在ManySStuBs 4J小型和大型数据集上微调我们的模型,以自动生成修复代码。结果表明,我们的技术在19-72%的情况下准确地预测了开发人员实现的固定代码,具体取决于数据集的类型,每个错误不到一秒。我们还观察到,我们的方法可以生成不同长度的修复(短和长),并可以修复不同类型的错误,即使在训练数据集中只存在这些类型的错误的几个实例。
2021-03-30 cs.SE
DevReplay: Automatic Repair with Editable Fix Pattern
静态分析工具或链接器检测源代码约定的违反,以保持项目的可读性。这些工具在开发人员编辑源代码时自动修复特定的违规。然而,现有的工具是针对程序设计语言的一般约定而设计的。这些工具不检查项目/API特定的约定。我们提出了一种新的静态分析工具DevReplay,它通过挖掘代码更改历史来生成代码更改模式,并使用匹配的模式推荐更改。使用DevReplay,开发人员可以在代码编辑器和代码审查中自动检测和修复特定于项目/API的问题。此外,我们使用自动程序修复工具基准测试和实际软件的DevReplay的准确性进行评估。我们发现DevReplay比最先进的APR工具解决了更多的错误。最后,我们向最流行的开源项目提交了由不同语言实现的补丁,项目评审员接受了80%(10个中的8个)的补丁。DevReplay可在https://devreplay.github.io上获得。
2020-05-22 cs.SE
Tortoise: Interactive System Configuration Repair
系统配置语言提供了强大的抽象,简化了管理大型网络系统。成千上万的组织现在使用配置语言,如Puppet。然而,用配置语言编写的规范可能会有bug,而shell仍然是调试配置错误的系统的最简单方法。不幸的是,当用途:使用系统配置语言时,使用shell来修复问题是不安全的:从shell应用的修复可能导致系统偏离配置语言指定的状态。因此,尽管配置语言有其优点,但它们迫使系统管理员放弃shell的简单性和熟悉性。本文提出了一种基于合成的技术,允许管理员和谐地使用配置语言和shell。管理员可以使用shell修复错误,并且该技术会自动修复用配置语言编写的高级规范。该方法(1)产生与使用shell进行的修复一致的修复;(2)通过最小化对原始规范进行的编辑来产生可维护的修复;(3)在相关时对多个修复进行排序和呈现;以及(4)支持管理员可能希望使用的所有shell。我们实现我们的技术木偶,广泛使用的系统配置语言,并评估它的一套基准下42个修复方案。76%的情况下,人类选择了排名第一的修复,而人类等效修复的平均排名为1.31。
2017-09-15 cs.SE
Towards a Benchmark Set for Program Repair Based on Partial Fixes
软件缺陷显著增加了软件成本,并增加了系统故障的风险。近年来,已经提出了许多自动程序修复方法来自动修复不期望的程序行为。尽管他们取得了巨大的成功,但一些具体的问题,如用部分修复来修复bug,仍然没有得到解决。对已知软件问题的部分修复是程序员第一次尝试修复问题失败。即使失败,此修复尝试仍然会传递重要信息,例如可疑软件区域和错误类型。在这项工作中,我们不提出一种方法,部分修复程序修复,而是回答一个初步的问题:部分修复经常发生足够的,一般来说,是相关的自动程序修复的研究领域?我们在GitHub上抓取了1500个开源C代码库来进行部分修复。其结果是基于部分修复的自动程序修复的2204个基准任务的基准集。基准集是开源的,并开放进一步的贡献和改进。
2021-07-16 cs.PL cs.SE
An Analysis of the Automatic Bug Fixing Performance of ChatGPT
为了支持软件开发人员发现和修复软件错误,已经引入了几种自动程序修复技术。给定一个测试套件,标准方法通常要么合成一个修复,要么导航一个软件编辑的搜索空间来找到测试套件通过的变体。最近的程序修复方法基于深度学习方法。ChatGPT是这些新方法中的一种,它主要不是用于自动程序修复,但仍然适用于它。然而,到目前为止,ChatGPT的bug修复性能还不清楚。因此,在本文中,我们评估ChatGPT的标准错误修复基准集,菜错误,并比较性能与其他几种方法的结果在文献中报道。我们发现ChatGPT的错误修复性能与常见的深度学习方法CoCoNut和Codex相比具有竞争力,并且明显优于标准程序修复方法的结果。与以前的方法相比,ChatGPT提供了一个对话系统,通过该系统,可以输入特定输入的预期输出或观察到的错误消息。通过向ChatGPT提供这样的提示,它的成功率可以进一步提高,修复了40个错误中的31个,超过了最先进的水平。
2023-01-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
MUFIN: Improving Neural Repair Models with Back-Translation
本文提出使用反向翻译技术并设计MUFIN框架,通过专门的代码评估器选择高质量样本,在自监督学习下自动生成超50万对错误/修复数据,有效提升了神经程序修复模型的训练效果。
2023-04-05 cs.SE
You Cannot Fix What You Cannot Find! An Investigation of Fault Localization Bias in Benchmarking Automated Program Repair Systems
适当的基准测试自动程序修复(APR)系统应有助于开发和采用的研究成果的从业者。为此,研究界必须通过可靠地比较最先进的工具,以更好地了解它们的优缺点,确保达到重要的里程碑。在这项工作中,我们确定和调查的故障定位(FL)在修复管道的步骤所造成的实际偏差。我们建议强调文献中使用的不同故障定位配置,以及它们在应用于Defects 4J基准测试时对APR系统的影响。然后,我们探讨的性能变化,可以通过“调整”FL步骤。最终,我们希望创造一个新的动力:(1)关于FL的APR实验程序的全面披露,(2)修复Defects 4J中错误的现实期望,以及(3)最先进的APR系统之间的可靠性能比较,以及我们彻底评估的kPAR修复工具的基线性能结果。我们的主要发现包括:(a)目前只有缺陷4J缺陷的一个子集可以通过常用的FL技术定位;(b)比较最先进的APR系统的当前实践(即,计算已修复错误的数量)由于FL配置的偏差而潜在地具有误导性;以及(c)APR作者没有适当地限定他们关于在APR系统中实现的不同调谐参数的性能成就。
2019-02-15 cs.SE
Human-competitive Patches in Automatic Program Repair with Repairnator
修理工是个机器人。它不断监控在持续集成开源软件过程中发现的软件错误,并尝试自动修复这些错误。如果它成功合成了一个有效的补丁,Repairnator会向人类开发人员推荐这个补丁,伪装成一个假的人类身份。到目前为止,Repairnator已经能够生成5个补丁,这些补丁被人类开发人员接受并永久合并到代码库中。这是软件工程中程序自动修复研究中人类竞争力的一个里程碑。
2018-10-13 cs.SE
Auto-repair without test cases: How LLMs fix compilation errors in large industrial embedded code
Mälardalen University(马来西亚大学)
本研究利用LLM自动修复工业嵌入式系统编译错误,在超4万提交数据上,解决63%错误且83%修复合理,大幅缩短调试时间。
2025-10-15 cs.SE
InferFix: End-to-End Program Repair with LLMs
软件开发的生存周期深受bug的影响:它们的引入、识别和最终的解决方案占软件成本的很大一部分。这促使软件工程研究人员和从业人员提出不同的方法来自动识别和修复软件缺陷。通过Few-Shot演示学习和指令提示,大语言模型已经适应了程序修复任务,将其视为填充任务。然而,这些模型只专注于学习从公共存储库中挖掘的未分类错误的一般错误修复模式。在本文中,我们提出了InferFix:一个基于transformer的程序修复框架与最先进的静态分析器配对,以修复关键的安全和性能错误。InferFix结合了检索器-通过对比学习目标预训练的Transformer编码器模型,其目的是搜索语义等效的错误和相应的修复;和生成器-一个大语言模型(Codex Cushman)对监督错误修复数据进行微调,并通过错误类型注释和从外部非参数存储器检索的语义相似的修复来增强提示。为了训练和评估我们的方法,我们策划了InferredBugs,这是一个新颖的、元数据丰富的bug数据集,通过对数千个Java和C#存储库的更改历史执行Infer静态分析器来提取。我们的评估表明,InferFix优于强大的LLM基线,在C#中生成修复的前1准确率为65.6%,在Java中为76.8%。我们将讨论InferFix与Infer在微软的部署,Infer提供了一个端到端的解决方案,用于检测,分类和定位错误,以及修复和验证候选补丁,集成在持续集…
2023-03-13 cs.SE
Fix the Tests: Augmenting LLMs to Repair Test Cases with Static Collector and Neural Reranker
针对测试代码与生产代码不同步导致的过时测试修复问题,提出SYNTER方法,通过静态分析收集三类上下文并用神经重排序器筛选,输入LLM修复测试,实验显示优于基线且幻觉减少57.1%。
2024-11-05 cs.SE
RESTORE: Retrospective Fault Localization Enhancing Automated Program Repair
本文提出回顾式故障定位技术,通过复用失败补丁验证结果进行基于变异的动态分析,并在RESTORE工具中实现,在Defects4J基准上以更高效率修复了41个缺陷,显著优于现有Java自动修复工具。
2020-03-31 cs.SE
Towards an automated approach for bug fix pattern detection
缺陷数据集的特征是必不可少的,以支持自动程序修复工具的评估。在以前的工作中,我们手动研究了Defects4J数据集中近400个人类编写的补丁(bug修复),并使用属性(如修复模式)对其进行注释。然而,在不同的数据集中手动查找这些模式是繁琐和耗时的。为了解决这个问题,我们设计并实现了PPD,补丁中的修复模式检测器,它在抽象语法树级别执行源代码更改分析。在本文中,我们报告了PPD及其对Defects4J的评估,其中我们将自动检测的结果与以前的手动分析结果进行了比较。我们发现,PPD的总体精确度为91%,总体召回率为92%,我们得出结论,PPD有可能检测到尽可能多的修复模式,人类手动分析。
2018-07-30 cs.SE
FixMiner: Mining Relevant Fix Patterns for Automated Program Repair
本研究提出FixMiner方法,通过对补丁原子变更的迭代聚类、利用富编辑脚本的多树表示挖掘可复用修复模式,集成到PARFixMiner后可修复Defects4J中26个漏洞,合理补丁正确率达81%。
2019-09-30 cs.SE
A Generic Approach to Fix Test Flakiness in Real-World Projects
针对现有测试不稳定性修复技术泛化性差的问题,提出结合LLM与程序分析的神经符号技术FlakyDoctor,在真实项目多类型不稳定测试修复上效果优于现有方法,且部分补丁已被合并。
2024-04-15 cs.SE
RepairAgent: An Autonomous, LLM-Based Agent for Program Repair
University of Stuttgart(斯图加特大学);UC Davis(加利福尼亚大学戴维斯分校)
本文提出RepairAgent,利用可动态调用工具、由有限状态机引导的LLM自主智能体完成缺陷信息收集、修复成分获取与修复验证,在Defects4J上自主修复164个缺陷。
2024-10-28 cs.AI cs.SE
TBar: Revisiting Template-based Automated Program Repair
我们重新审视基于模板的APR的性能,以建立有关修复模式有效性的全面知识,并强调补充步骤(如故障定位或供体代码检索)的重要性。为此,我们首先调查文献收集,总结和标签经常使用的修复模式。基于调查,我们建立TBar,一个简单的APR工具,系统地尝试将这些修复模式应用于程序错误。我们在Defects 4J基准上彻底评估了TBar。特别是,我们评估的实际定性和定量的多样性的修复模式,以及它们的有效性,产生合理的或正确的补丁。最终,我们发现,假设一个完美的故障定位,TBar正确/可修复74/101个错误。复制APR评估的标准和实用管道,我们证明TBar正确修复了Defects 4J中的43个错误,这是文献中前所未有的表现(包括所有方法,即,基于模板、基于随机突变或基于合成的APR)。
2019-06-06 cs.SE
OFP-Repair: Repairing Floating-point Errors via Original-Precision Arithmetic
The Hong Kong University of Science and Technology (Guangzhou)(香港科技大学(广州));Wuhan University(武汉大学);University of Waterloo(滑铁卢大学)
针对浮点错误修复中难以区分原始精度可修复错误的问题,提出 OFP-Repair 方法,利用原始精度算术实现高效修复,在多个指标上取得显著提升并成功修复真实开源项目缺陷。
2025-10-11 cs.SE
ThinkRepair: Self-Directed Automated Program Repair
本文提出自导向自动程序修复方法ThinkRepair,通过收集阶段自动收集思维链,修复阶段结合少样本学习与LLM交互修复bug,在Defects4J和QuixBugs上显著优于12个SOTA方法。
2024-07-30 cs.SE
Program Repair: Automated vs. Manual
在过去的十年中,已经提出了各种自动程序修复(APR)技术来自动修复错误。虽然最近的研究在有效性和效率方面取得了重大进展,但在真实的调试场景中,APR技术在人工干预下的表现仍然不清楚。为了弥补这一差距,我们进行了广泛的研究,比较三个国家的最先进的APR工具与手动程序修复,并进一步调查是否协助APR工具(即,修复报告)可以改进手动程序修复。为此,我们招募了20名参与者进行对照实验,共产生了160个手动修复任务和问卷调查。实验结果表明:(1)人工修复程序有时会受到修复操作频率的影响;(2)APR工具在调试时间方面更有效,而人工修复程序往往会以更少的尝试生成正确的补丁;(3)APR工具可以进一步提高手工修复程序的错误修复率,但对补丁的正确性有负面影响;(4)参与者习惯于花费更多的时间来识别错误的补丁,但仍然容易被误导;(5)参与者对工具的修复性能持肯定态度,但对实际使用中的可用性普遍缺乏信心。此外,我们还提供了一些提高APR工具可用性的指南(例如,报告中的误导性信息和对反馈意见的观察)。
2022-03-10 cs.SE
DEAR: A Novel Deep Learning-based Approach for Automated Program Repair
现有的基于深度学习(DL)的自动程序修复(APR)模型在修复一般软件缺陷方面受到限制。我们提出了{ \tool },这是一种基于DL的方法,支持修复一般错误,这些错误需要立即对一个或多个代码块中的一个或多个连续语句进行相关更改。我们首先设计了一种新的故障定位(FL)技术,用于多块、多语句修复,该技术将传统的基于频谱(SB)的FL与深度学习和数据流分析相结合。它接受SBFL模型返回的错误语句,检测出要立即修复的错误块,并扩展块中的错误语句$s$,以包括$s$周围的其他可疑语句。我们设计了一个基于树的两层LSTM模型,该模型结合了循环训练,并使用分治策略来学习适当的代码转换,以便在由周围子树组成的适当固定上下文中固定多个语句。我们在三个数据集上进行了几次实验来评估{ \tool }:Defects 4J(395个错误)、BigFix(+26k个错误)和CPatMiner(+44k个错误)。在Defects 4J数据集上,{ \tool }在仅使用前1个修补程序自动修复的错误数量方面优于基线,从42\%到683\ %。在BigFix数据集上,它比现有的基于DL的APR模型多修复了31- 145个错误。在CPatMiner数据集中,在667个修复的bug中,有169个(25.3%)多块/多语句bug。与最先进的基于DL的APR模型相比,{ \tool }分别多修复了71个和164个错误,其…
2022-05-04 cs.SE
Practical Program Repair via Preference-based Ensemble Strategy
针对集成多种自动程序修复(APR)工具成本过高的问题,提出非学习型集成框架P-EPR,利用修复模式动态排名APR工具,显著提升了修复的灵活性和有效性。
2023-09-15 cs.SE
Extracting Fix Ingredients using Language Models
针对神经程序修复受限于输入窗口的问题,提出 ScanFix 方法利用扫描器模型提取标识符作为修复成分,实验表明该方法能提升 31% 的修复效果,但仍受限于模型上下文窗口规模。
2025-03-06 cs.SE
Revisiting Evolutionary Program Repair via Code Language Model
本文提出ARJA-CLM方法,将多目标进化算法与代码语言模型结合,并采用上下文感知的提示构建策略,有效解决了Java项目中多点错误修复的难题,在Defects4J等基准上表现优异。
2024-08-26 cs.SE
Katana: Dual Slicing-Based Context for Learning Bug Fixes
上下文信息在软件开发人员理解和修复错误时起着至关重要的作用。因此,基于深度学习的程序修复技术利用上下文进行错误修复。然而,现有的技术以任意的方式处理上下文,通过在封闭文件、类或方法内提取与错误语句非常接近的代码,而不进行任何分析以找到与错误的实际关系。为了减少噪音,它们对用作上下文的令牌数量使用预定义的最大限制。我们提出了一个程序切片为基础的方法,而不是任意包括作为上下文的代码,我们分析的语句有一个控制或数据依赖的错误语句。我们提出了一个新的概念,称为双切片,它利用的上下文中的错误和固定版本的代码来捕获相关的修复成分。我们提出了我们的技术和工具,称为武士刀,第一个应用基于切片的上下文程序修复任务。结果表明,Katana有效地保留了足够的信息,供模型选择上下文信息,同时降低噪声。我们比较了最近四个国家的最先进的上下文感知程序修复技术。我们的研究结果表明,Katana修复的错误是现有技术的1.5到3.7倍。
2022-12-05 cs.SE
Automated Repair of Programs from Large Language Models
像Codex这样的大语言模型已经显示出为许多编程任务生成代码的能力。然而,现有模型的成功率很低,特别是对于复杂的编程任务。原因之一是语言模型缺乏对程序语义的认识,导致程序不正确,甚至不能编译。在本文中,我们系统地研究了自动程序修复(APR)技术是否可以修复LeetCode竞赛中由语言模型产生的错误解决方案。我们的目标是研究APR技术是否可以提高可靠性的代码产生的大语言模型。我们的研究显示:(1)自动生成的代码与人工制作的解决方案共享常见的编程错误,这表明APR技术可能具有修复自动生成的代码的潜力;(2)给定由统计错误定位方法提供的错误位置信息,新发布的Codex编辑模式(支持编辑代码)在修复错误解决方案方面类似于或优于现有的Java修复工具TBar和Codder。通过分析这些工具产生的实验结果,我们提供了几个建议:(1)增强APR工具,以超越补丁空间的限制(例如,引入更灵活的错误定位)是期望的;(2)由于大语言模型可以通过在更多数据上训练来导出更多修复模式,未来的APR工具可以将焦点从添加更多修复模式转移到基于合成/语义的方法,(3)语言模型与APR的组合以策展补丁成分是值得研究的。
2023-01-02 cs.SE
Program Repair
自动程序修复是一种新兴的技术,它包括一套技术来自动修复程序中的错误或漏洞。在本文中,我们提出了一个全面的调查,最先进的程序修复。我们首先研究了不同的技术套件,包括基于搜索的修复,基于约束的修复和基于学习的修复。然后,我们讨论了程序修复的主要挑战之一,即补丁过拟合,通过提炼一类技术,可以减轻补丁过拟合。然后,我们讨论了程序修复工具的类别,程序修复的应用以及程序修复在工业中的用途。我们的调查结论与前瞻性的前景,对未来的使用程序修复,以及研究机会所产生的工作代码从大语言模型。
2022-11-23 cs.SE
How Far Can We Go with Practical Function-Level Program Repair?
针对现有基于LLM的APR多聚焦单行/块级修复、实用性受限的问题,本文首次全面研究函数级APR,提出双LLM框架的SRepair技术,在Defects4J数据集上修复性能超越现有技术至少85%,并首次实现多函数缺陷修复。
2024-10-31 cs.SE
Review4Repair: Code Review Aided Automatic Program Repairing
内容:基于学习的自动程序修复技术有望为软件源代码中检测到的错误提供质量修复建议。这些工具主要利用错误和修复代码更改的历史数据,并且在应用于新代码时严重依赖错误定位器。随着代码审查的日益普及,对bug定位器的依赖可以减少。此外,基于代码评审的错误定位更值得信赖,因为评审员的专业知识和经验反映在这些建议中。目的:评审评论中的自然语言说明是关于bug的性质和预期解决方案的大量信息来源。然而,据我们所知,没有一个基于学习的工具利用评审注释来修复编程错误。在这项研究中,我们调查的性能改善修复技术使用代码审查意见。方法:我们对55,060个代码评审和相关的代码变更进行了序列到序列模型的训练。我们还介绍了新的标记化和预处理方法,这些方法有助于实现对最先进的基于学习的修复技术的显着改进。结果:我们将前1名的准确率提高了20.33%,前10名的准确率提高了34.82%。我们可以为现有技术未解决的文体和非代码错误提供建议。结论:我们相信,通过我们的方法生成的自动修复建议以及代码审查将帮助开发人员快速正确地处理审查评论,从而节省他们的时间和精力。
2020-10-06 cs.SE
There are More Fish in the Sea: Automated Vulnerability Repair via Binary Templates
针对现有源代码层面漏洞修复技术的局限性,本文提出基于模板的Java二进制自动化漏洞修复方法TemVUR,通过收集并实现修复模板,在Vul4J和ManyVuls4J数据集上展现出显著的修复效果与通用性。
2024-11-27 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
Enabling Automatic Repair of Source Code Vulnerabilities Using Data-Driven Methods
Simula Research Laboratory(西穆拉研究实验室)
世界各地的用户在日常活动中依赖软件密集型系统。这些系统经常包含错误和安全漏洞。为了便于错误修复,自动程序修复的数据驱动模型使用错误代码和修复代码对来学习修复代码中错误的转换。然而,安全漏洞的自动修复仍然没有得到充分的探索。在这项工作中,我们提出了从三个角度来改善代码表示漏洞修复的方法:输入数据类型,数据驱动的模型,和下游任务。这项工作的预期结果是改进的代码表示自动程序修复,特别是修复安全漏洞。
2022-02-07 cs.CR cs.LG cs.SE
Less Training, More Repairing Please: Revisiting Automated Program Repair via Zero-shot Learning
本文提出零样本APR工具AlphaRepair,直接利用预训练CodeBERT依据上下文预测正确代码,无需缺陷修复训练数据,并在Defects4J上显著优于现有基线。
2024-12-05 cs.SE
GAMMA: Revisiting Template-based Automated Program Repair via Mask Prediction
本文提出GAMMA,将模板修复模式转化为掩码预测任务,利用预训练语言模型直接生成供体代码,在Defects4J等基准上显著超越TBar和Recoder,并展示了良好的泛化性与可扩展性。
2023-09-17 cs.SE
TerraRepair: A Tool-Grounded LLM Agent for Infrastructure-as-Code Repair
University of L’Aquila(拉奎拉大学)
研究探讨工具接地能否改进基于LLM的Terraform修复及何时升级问题。提出TerraRepair工具接地LLM代理,通过检索上下文等操作进行修复。实验表明其能显著提高扫描器验证修复率,凸显工具接地改进修复效果,同时指出特定部署上下文是自主修复的主要限制。
2026-07-14 cs.SE
SelfHeal: Empirical Fix Pattern Analysis and Bug Repair in LLM Agents
Oakland University(奥克兰大学)
本文研究LLM代理中的故障修复模式,提出首个基准数据集AgentDefect,并设计SelfHeal多智能体系统,利用ReAct代理结合内部和外部知识实现高效故障修复。
2026-04-20 cs.SE
Beyond Fixed Tests: Repository-Level Issue Resolution as Coevolution of Code and Behavioral Constraints
Beihang University(北京航空航天大学);Beijing Tokfinity Technology Co., Ltd.(北京拓维信息技术有限公司)
本文提出Agent-CoEvo框架,通过共进化代码与行为约束提升修复效果,优于现有基线方法。
2026-04-06 cs.SE
Attention Please: Consider Mockito when Evaluating Newly Proposed Automated Program Repair Techniques
自动程序修复(Automated program repair,APR)技术近年来引起了广泛的关注。与此同时,许多基准测试已经建立了评估APR技术的性能,其中Defects 4J是使用最广泛的基准测试之一。然而,在Mockito,一个项目中的缺陷增强后的版本的Defects 4J,没有得到太多的关注,最近的研究。在本文中,我们的目的是调查评估APR技术时考虑Mockito错误的必要性。我们的研究结果表明:1)与其他项目的bug相比,Mockito bug的修复并不复杂; 2)与修复Mockito bug所需的模式相比,最先进的工具修复的bug共享相同的修复模式;但是,在此情况下,3)最先进的工具在Mockito错误上表现不佳(Nopol只能正确修复一个bug,而SimFix和CapGen无法修复Mockito中的任何bug,即使所有bug位置都已暴露)。从这些结果中,我们得出结论,现有的APR技术可能是过拟合的评估科目,我们应该考虑Mockito,甚至更多的错误,从其他项目,当评估新提出的APR技术。我们进一步找出了一个独特的修复行动所需的修复Mockito错误命名为外部包添加。从与源代码相关联的测试代码中恢复外部包对于扩大搜索空间是可行的,并且该动作可以用现有的修复动作来增强以推进现有技术。
2019-01-08 cs.SE
Break-It-Fix-It: Unsupervised Learning for Program Repair
Stanford University(斯坦福大学)
我们考虑修复任务:给定一个批评者(例如,编译器),其评估输入的质量,目标是训练将坏示例(例如,具有语法错误的代码)转换为好的代码(例如,没有语法错误的代码)。现有的工作通过使用统计学破坏好的示例来创建由(坏的,好的)对组成的训练数据(例如,丢弃令牌)。然而,在这种合成生成的数据上训练的修复者不能很好地外推到错误输入的真实分布。为了弥合这一差距,我们提出了一种新的训练方法,打破它,修复它(BIFI),它有两个关键的想法:(i)我们使用的评论家检查一个真正的坏输入修复器的输出,并添加良好的(固定)输出的训练数据,以及(ii)我们训练断路器从好代码生成现实的坏代码。基于这些想法,我们迭代地更新断路器和固定器,同时结合使用它们来生成更多的配对数据。我们在两个代码修复数据集上评估BIFI:GitHub-Python,我们引入的一个新数据集,目标是修复带有AST解析错误的Python代码; DeepFix,目标是修复带有编译器错误的C代码。BIFI优于现有方法,在GitHub-Python上获得90.5%的修复准确率(+28.5%),在DeepFix上获得71.7%(+5.6%)。值得注意的是,BIFI不需要任何标记数据;我们希望它将成为各种修复任务的无监督学习的一个强有力的起点。
2021-06-22 cs.CL cs.LG cs.SE
Automated Repair of Resource Leaks in Android Applications
本文提出PlumbDroid,通过静态分析识别可能泄漏资源的执行轨迹,并自动在合适位置插入释放操作;实验表明其可精确修复多种Android资源泄漏且修复更小、更快。
2022-06-28 cs.SE
LLM-Based Repair of C++ Implicit Data Loss Compiler Warnings: An Industrial Case Study
SAP Labs Korea(SAP韩国实验室)
本文提出利用LLM修复C++隐式数据丢失警告的方法,通过工业案例验证其有效性,减少人工干预并提升代码质量。
2026-01-21 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
BUGSPHP: A dataset for Automated Program Repair in PHP
本文提出面向 PHP 的自动化程序修复基准数据集 BUGSPHP,包含超60万条训练提交和513条经人工验证并附带测试用例的测试提交,以填补 PHP 缺陷修复研究的数据空白。
2024-01-21 cs.SE
Neural Transfer Learning for Repairing Security Vulnerabilities in C Code
KTH Royal Institute of Technology(瑞典皇家理工学院);Colorado State University(科罗拉多州立大学)
在本文中,我们解决了深度学习自动修复软件漏洞的问题。数据驱动漏洞修复的主要问题是,已知已确认漏洞的少数现有数据集仅包含几千个示例。然而,训练一个深度学习模型通常需要数十万个示例。在这项工作中,我们利用直觉,错误修复任务和漏洞修复任务是相关的,从错误修复学到的知识可以转移到修复漏洞。在机器学习社区中,这种技术被称为迁移学习。本文提出了一种基于迁移学习的安全漏洞修复方法VRepair。VRepair首先在一个大型的bug修复语料库上进行训练,然后在一个小一个数量级的漏洞修复数据集上进行调整。在我们的实验中,我们证明了只在bug修复语料库上训练的模型已经可以修复一些漏洞。然后,我们证明了迁移学习提高了修复脆弱C函数的能力。我们还表明,迁移学习模型的性能优于使用去噪任务训练并在漏洞修复任务上进行微调的模型。总之,本文表明,与在小数据集上学习相比,迁移学习在修复C中的安全漏洞方面效果良好。
2022-01-04 cs.CR cs.LG cs.SE
Anchored Self-Play for Code Repair
研究代码修复能力,提出生成器-修复器自博弈,通过强化学习训练单个模型生成并修复错误,引入BugSourceBench测试泛化性,发现问题后提出锚定自博弈,提高修复率。
2026-07-07 cs.CL cs.SE
RepairLLaMA: Efficient Representations and Fine-Tuned Adapters for Program Repair
KTH Royal Institute of Technology(皇家理工学院);NC State University(北卡罗来纳州立大学)
针对现有大语言模型程序修复方法代码表示朴素、无法扩展到前沿模型的问题,提出RepairLLaMA方法,通过最优代码表示和参数高效微调构建程序修复适配器,在多个基准上性能超越所有基线。
2025-09-03 cs.LG cs.SE
Practical Program Repair in the Era of Large Pre-trained Language Models
本研究首次对直接应用大预训练语言模型(PLMs)进行自动化程序修复(APR)开展广泛研究,验证了PLMs在多数据集上的修复效果优于现有技术,并揭示了规模效应和后缀代码的重要性。
2024-12-09 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
Fixing 7,400 Bugs for 1$: Cheap Crash-Site Program Repair
本文提出崩溃点修复和模板引导补丁生成方法,实现低成本自动程序修复,结合CodeRover-S将令牌成本降低45.9%,修复率提升至73.5%,并支持本地模型运行。
2025-05-24 cs.CR cs.SE
Harnessing Evolution for Multi-Hunk Program Repair
尽管在过去的十年中,自动程序修复(APR)技术取得了重大进展,但实际部署仍然是一个难以捉摸的目标。在这方面的重要挑战之一是当前APR技术一般不能产生需要在多个位置编辑的补丁,即,多块补丁在这项工作中,我们提出了一种新的APR技术,推广单大块修复技术,包括一个重要的一类多大块的错误,即错误,可能需要应用一个基本上类似的补丁在一些位置。我们将这些修复位置称为进化兄弟姐妹--在相似的环境中实例化的相似代码,预计会经历相似的变化。我们提出的方法的核心是分析,以准确地识别一组进化的兄弟姐妹,对于一个给定的错误。这个分析利用了三个不同的信息源,即测试套件谱,一个新的代码相似性分析,以及项目的修订历史。发现的兄弟姐妹然后以类似的方式同时修复。我们在一个名为Hercules的工具中实例化了这种技术,并证明它能够正确修复Defects 4J数据集中的49个错误,这是迄今为止任何单独的APR技术中最高的。这包括15个多大块的错误和13个迄今为止还没有被任何其他技术修复的错误。
2019-06-21 cs.SE