How to Design a Program Repair Bot? Insights from the Repairnator Project
在过去的几年里,程序修复研究取得了巨大的进展,现在正在发明软件开发机器人来帮助开发人员提高生产力。在本文中,我们研究了“程序修复机器人”的概念,并提出了Repairnator。Repairnator bot是一个自主智能体,它不断地监视测试失败,复制bug,并针对每个复制的bug运行程序修复工具。如果找到补丁,Repairnator bot会将其报告给开发人员。在撰写本文时,Repairnator使用三种不同的程序修复系统,自2017年2月以来一直在运行。它总共研究了托管在GitHub上的1609个开源软件项目的11317个测试失败,并为17个不同的错误生成了补丁。几个月来,我们遇到了许多困难的技术挑战,不得不做出各种设计和工程决策。这给了我们一个独特的经验在这个领域。在本文中,我们反思Repairnator,以便与自动程序修复社区分享这些知识。
2018-11-24 cs.SE
Repairing Bugs in Python Assignments Using Large Language Models
Yale University(耶鲁大学);Microsoft(微软)
作为学习过程的一部分,学生经常在介绍性编程作业中犯错误。不幸的是,为这些错误提供自定义修复可能需要大量的时间和精力,从课堂教师。自动程序修复(APR)技术可用于合成这样的修复。先前的工作已经探索了在教育领域中使用符号和神经技术进行APR。这两种方法都需要大量的工程努力或大量的数据和培训。我们建议使用一个经过代码训练的大语言模型,比如Codex,来构建一个APR系统--MMAPR--用于介绍Python编程作业。我们的系统可以修复语法和语义错误相结合的多模态提示,迭代查询,基于测试用例的选择少数镜头,和程序分块。我们在286个真实的学生程序上评估了MMAPR,并将其与通过结合最先进的Python语法修复引擎BIFI和最先进的Python语义修复引擎Refactory构建的基线进行了比较。我们发现,MMAPR可以修复更多的程序,并产生更小的补丁平均。
2022-09-29 cs.AI cs.SE
Counterexample Guided Program Repair Using Zero-Shot Learning and MaxSAT-based Fault Localization
INESC-ID, IST, UL(INESC-ID、里斯本大学学院、里斯本大学)
针对入门编程作业自动化程序修复的局限,提出结合MaxSAT故障定位与大语言模型零样本学习的反例引导方法,提升修复能力且实现更小修复,优于现有工具。
2024-12-19 cs.AI cs.SE
ConDefects: A New Dataset to Address the Data Leakage Concern for LLM-based Fault Localization and Program Repair
Beijing University of Chemical Technology(北京化工大学)
针对LLM错误定位与程序修复中数据泄露问题,提出新数据集ConDefects,含2021-2023年AtCoder的Java/Python真实错误程序,并配对错误位置与修复版本,以支持更可靠的基准测试。
2023-10-25 cs.AI cs.SE
Dr. Boot: Bootstrapping Program Synthesis Language Models to Perform Repairing
MSc Artificial Intelligence Master Thesis(人工智能硕士论文);November 2022 - July 2023(2022年11月-2023年7月);N. Butt MSc(N. Butt 硕士);M. Macfarlane MSc(M. Macfarlane 硕士);Dr. H.C. van Hoof(H.C. van Hoof 博士)
本文提出引导算法Dr. Boot,通过教会程序合成语言模型迭代修复代码,在性能上超越常规微调,并达到更大规模微调模型的水平,同时揭示了APPS训练集测试用例的质量问题。
2025-07-20 cs.AI cs.SE
Multi-Perspective Agentic Program Repair via Code Property Graphs and Temporal Execution Graphs
研究针对大语言模型在自动程序修复中的局限,提出CT-Repair框架,通过代码属性图和时间执行图表示证据,利用三阶段过滤管道及多视角智能体分析错误并生成修复策略,实验证明该方法能有效提高修复有效性。
2026-07-15 cs.AI cs.SE
Human-competitive Patches in Automatic Program Repair with Repairnator
修理工是个机器人。它不断监控在持续集成开源软件过程中发现的软件错误,并尝试自动修复这些错误。如果它成功合成了一个有效的补丁,Repairnator会向人类开发人员推荐这个补丁,伪装成一个假的人类身份。到目前为止,Repairnator已经能够生成5个补丁,这些补丁被人类开发人员接受并永久合并到代码库中。这是软件工程中程序自动修复研究中人类竞争力的一个里程碑。
2018-10-13 cs.SE
INTERVENOR: Prompting the Coding Ability of Large Language Models with the Interactive Chain of Repair
Northeastern University(东北大学);Tsinghua University(清华大学)
该研究提出 INTERVENOR,通过代码学习者与代码教师角色交互及编译器反馈构建修复链,提升 LLM 的代码生成、翻译与缺陷修复能力。
2024-06-13 cs.AI cs.SE
$T^3$: Multi-level Tree-based Automatic Program Repair with Large Language Models
School of Computer and Information Technology(计算机与信息科技学院);Shanxi University(山西大学)
本研究针对CoT技术在自动程序修复(APR)中应用不足的问题,系统评估了常见CoT技术,并提出创新框架$T^3$,将大语言模型推理与树搜索结合,有效提升候选修复方案的精确度并指导策略优化。
2025-06-26 cs.AI cs.SE
DynaFix: Iterative Automated Program Repair Driven by Execution-Level Dynamic Information
Chongqing University(重庆大学)
DynaFix通过迭代利用运行时动态信息改进程序修复,利用变量状态、控制流路径和调用栈等结构化提示引导LLM生成候选补丁,有效提升修复效率和准确性。
2026-04-19 cs.AI cs.SE
AdaRepair-Mem: Adaptive Experience Orchestration for Repository-Level Program Repair
Zhejiang University(浙江大学);Tencent(腾讯)
针对仓库级程序修复中记忆不平衡、冗余和阶段错配问题,提出自适应经验检索框架,通过覆盖感知、质量选择和阶段路由提升修复性能。
2026-09-18 cs.AI cs.SE
Human-In-The-Loop Automatic Program Repair
Monash University(莫纳什大学)
我们介绍Learn 2fix,这是第一个人在回路中的半自动修复技术,当没有错误预言时-除了报告错误的用户-可用。我们的方法与用户协商的条件下,该错误被观察到。只有当用户的查询预算耗尽时,它才会尝试修复错误。一个查询可以被认为是下面的问题:“当执行这个替代的测试输入时,程序产生下面的输出;是否观察到了bug”?通过系统化的查询,Learn 2fix训练了一个自动的错误预言,在预测用户的响应方面变得越来越准确。我们的主要挑战是在给定的小查询预算的情况下,最大限度地提高预言机在预测哪些测试是bug暴露方面的准确性。从用户标记的替代测试中,测试驱动的自动修复生成补丁。我们的实验表明,Learn 2fix学习一个足够准确的自动甲骨文与一个合理的低标签的努力(lt.20查询)。给定Learn 2fix的测试套件,GenProg测试驱动的修复工具生成更高质量的补丁(即,通过更大比例的验证测试)而不是使用与修复基准一起提供的手动测试套件。
2019-12-16 cs.AI cs.SE
Leveraging Causal Inference for Explainable Automatic Program Repair
Ping An Technology (Shenzhen) Co., Ltd.(平安科技(深圳)有限公司)
深度学习模型在自动程序修复方面取得了重大进展。然而,这些方法的黑箱性质限制了它们的实际应用。为了解决这个问题,本文提出了一种可解释的方法,程序修复的基础上的序列到序列模型的因果推理和我们的方法被称为CPR,短期因果程序修复。我们的CPR可以在决策过程中生成解释,它由因果相关的输入输出令牌组组成。首先,我们的方法推断这些关系查询模型与输入干扰数据增强。其次,它从响应中生成令牌图,并解决分区问题以选择最相关的组件。在Java、C、Python和JavaScript四种程序设计语言上的实验表明,CPR可以生成合理解释的因果图,提高程序自动修复中的错误修复性能。
2022-06-06 cs.AI cs.CL cs.SE
Rethinking Automated Program Repair: The Impact of Bug Complexity, Fault Localization, and LLM Cost-efficiency
Colorado State University(科罗拉多州立大学)
本研究通过实证分析,发现中等复杂度缺陷可超50%由低成本LLM修复,不精确缺陷定位会扩大APR技术差距,高成本LLM与强推理设置并非总能提升成本效率,DeepSeek-V3.2成本效率最优。
2026-08-18 cs.AI cs.SE
FAPR: Fast and Accurate Program Repair for Introductory Programming Courses
在编程入门课程中,教师对学生的错误程序提供调试反馈是一项挑战。最近的一些工具通过识别错误程序和正确程序之间的任何差异来自动提供程序修复反馈,但存在与可扩展性,准确性和跨语言可移植性相关的问题。本文介绍了FAPR -我们的新方法,建议修复程序的差异,在一个快速,准确的方式。FAPR在三个方面不同于当前的工具。首先,它将语法信息编码为令牌序列,以实现错误和正确程序之间的高速比较。其次,为了准确地提取程序差异,FAPR采用了一种新的匹配算法,最大限度地提高令牌级匹配,最小化语句级差异。第三,FAPR依赖于测试而不是静态/动态分析来验证和细化候选修复,因此它消除了由复杂程序分析引起的语言依赖性或高运行时开销。我们实现了FAPR,为C和C++程序提供修复建议;我们的经验表明FAPR具有出色的跨语言可移植性。更重要的是,我们经验比较FAPR与最先进的工具克拉拉。FAPR建议对95.5%以上的错误解决方案进行修复。我们在FAPR的建议中抽取了250个维修样本,发现89.6%的样本是最小的和正确的。FAPR的表现优于Clara,因为它为更多的案例提供了修复建议,创建了更小的修复,产生了更高质量的修复,并降低了运行时开销。我们的研究结果表明,FAPR可以潜在地帮助教师或TA有效地定位错误的代码中的错误,并提供调试提示/指导方针的基础上产生的修复。
2021-07-14 cs.SE
How Do LLMs Read Bug Reports? An Empirical Study of Attention in LLMs for Automated Program Repair
Drexel University(德雷塞尔大学);IBM Research(IBM研究院)
研究基于大语言模型的自动程序修复中模型注意力模式,通过分析319个真实错误,探究其在错误报告各部分的分布、成功与失败修复的注意力差异及与开发者重视信息的比较,发现注意力分配错误是失败关键因素,为改进系统提供见解。
2026-07-29 cs.AI cs.SE
HAFixAgent: History-Aware Agentic Program Repair
Queen's University(女王大学)
本文提出HAFixAgent,通过注入历史衍生的仓库启发式方法,提升大规模多补丁bug修复的效率与鲁棒性,实验证明其在Defects4J和BugsInPy上均优于现有方法。
2026-10-12 cs.AI cs.SE
On The Effectiveness of Dynamic Reduction Techniques in Automated Program Repair
针对自动化程序修复处理大规模工业级缺陷程序耗时耗资源的问题,提出集成ORBS观测切片的修复框架,通过程序约简优化修复全流程,在Defects4J数据集上实现性能提升且不降低修复质量。
2024-06-23 cs.SE
Better Understanding, Better Fixes? A Study of Hallucination in LLM-based Automated Program Repair
Harbin Institute of Technology(哈尔滨工业大学);Blekinge Institute of Technology(布莱金厄理工学院);Singapore Management University(新加坡管理大学)
本研究针对基于LLM的自动化程序修复中的幻觉问题,通过多层分析、三项任务及832个Defects4J缺陷的实验,揭示修复与理解幻觉普遍存在,明确其表现、占比及成因。
2026-09-29 cs.AI cs.SE
RepairBench: Leaderboard of Frontier Models for Program Repair
KTH Royal Institute of Technology(瑞典皇家理工学院)
RepairBench是一个基于执行、频繁标准化评估前沿模型在真实程序修复任务上性能的排行榜,利用Defects4J和GitBug-Java基准,并公开评估框架。
2024-09-27 cs.LG cs.SE
On Repairing Quantum Programs Using ChatGPT
针对量子编程领域缺乏自动化程序修复技术的问题,该研究探索用ChatGPT修复量子程序,在Bugs4Q基准上实现38个漏洞中29个的成功修复,为量子程序修复自动化提供了可行方向。
2024-01-26 cs.PL cs.SE
Externalizing Requirement-to-Repair Artifacts as Observable Traces for LLM-Based Program Repair
Rikkyo University(立教大学)
本文提出THEMIS,一种通过外部化需求到修复过程的可观察工件来支持仓库级程序修复的工作流,实验表明其能有效提升修复效果并支持跨阶段审计。
2026-09-15 cs.AI cs.SE
The Impact of Program Reduction on Automated Program Repair
本文提出利用程序切片缩减无关代码以提升自动程序修复的可扩展性,并在Defects4J上验证其可将TBar的中位修复时间从80分钟降至18分钟以内,同时保持修复质量。
2024-08-02 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
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
Path-Based Program Repair
我们提出了一个基于路径的方法来修复程序的命令式程序。我们的修复框架作为输入的一个错误的程序,逻辑规范,被驳回,并提示故障可能位于。然后使用迭代抽象细化循环来修复程序:在每次迭代中,考虑符号反例重新合成错误的程序部分,其中控制流保持具体,但数据流是符号的。这个想法的吸引力是双重的:1)该方法懒洋洋地考虑候选修复,2)修复直接来自逻辑规范。与以前的工作相比,我们的方法是完整的程序与许多控制流路径,即,当且仅当程序可以在指定的故障位置处被修复时,才修复该程序。小程序的初步结果表明,该方法是有用的调试程序在实践中。
2015-03-17 cs.PL cs.SE
Learner-Tailored Program Repair: A Solution Generator with Iterative Edit-Driven Retrieval Enhancement
本文提出面向学习者的程序修复任务及LSGEN框架,通过迭代编辑驱动检索增强方法提升程序修复效果,实验验证其在编程辅导中的有效性。
2026-01-18 cs.AI cs.CL 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
RepoRepair: Leveraging Code Documentation for Repository-Level Automated Program Repair
State Key Laboratory for Novel Software Technology, Nanjing University(新型软件技术国家重点实验室,南京大学);Human Language Technology Research Institute, University of Texas at Dallas(人机语言技术研究院,德克萨斯大学达拉斯分校)
RepoRepair通过生成代码文档增强LLM能力,实现仓库级别的自动程序修复,取得高修复率和低成本的优异表现。
2026-03-01 cs.AI 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
AgenticRepair: Multi-Faceted Program Context Engineering for Agentic Vulnerability Repair
The University of Melbourne(墨尔本大学);Monash University(莫纳什大学)
针对现有智能体漏洞修复方法缺乏多维度程序上下文工程的问题,提出AgenticRepair框架,协调三个LLM子智能体构建三类上下文,在SEC-Bench上取得73%的修复成功率,显著优于基线。
2026-08-03 cs.AI cs.CR cs.SE
Exploring the Potential of Conversational Test Suite Based Program Repair on SWE-bench
本研究针对会话式补丁生成在SWE-Bench上的潜力未被专门评估的问题,开展实验验证基于LLaMA 3.1 70B的简单会话流水线的修复效果,达到47%的有效补丁生成率,可媲美当前最优水平。
2024-10-06 cs.AI cs.MA 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
MORepair: Teaching LLMs to Repair Code via Multi-Objective Fine-tuning
MORepair提出多目标微调方法,同时适应代码转换的语法特征和代码变更背后的逻辑原因,在四个开源LLM上验证可将程序修复性能提升11.4%至56.0%,优于现有最先进方法。
2025-09-21 cs.SE
Gradient-Based Program Repair: Fixing Bugs in Continuous Program Spaces
KTH Royal Institute of Technology(皇家理工学院)
本文提出基于梯度的程序修复方法,通过在可微数值程序空间中进行连续优化,有效修复符号程序中的错误,首次将程序修复视为数值空间中的连续优化问题。
2026-03-25 cs.LG cs.PL 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
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
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
Automated Program Repair of Uncompilable Student Code
North Carolina State University(北卡罗来纳州立大学)
本研究利用大型语言模型修复不可编译的学生代码,以保留其结构意图,从而提升学生建模和知识追踪的分析能力。
2025-12-23 cs.AI cs.CY 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
Program Repair with Minimal Edits Using CodeT5
University of Aizu(会津大学);Dhaka University of Engineering & Technology(达卡工程技术大学)
本文提出使用CodeT5模型,通过微调错误-正确程序对,以最小编辑距离生成正确程序,实验达到91.95%的pass@100,证明其在入门编程问题修复中的有效性。
2023-09-26 cs.AI cs.CL 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