Presentation: SymDefFix -- Sound Automatic Repair Using Symbolic Execution
在本演示中,我们介绍了我们的基于约束的修复方法,称为SymDefFix。SymDefFix基于ExtractFix [3],并取代了ExtractFix的动态分析步骤,以检测错误并在具有符号执行的输入程序中找到潜在的修复位置。我们首先简要介绍ExtractFix的动机和修改,然后用一个例子来演示它。
2022-09-08 cs.SE
Automatic Repair of Infinite Loops
软件自动修复的研究主要是开发能够自动检测和修复缺陷的系统。一个著名的bug是无限循环。每个计算机程序员或用户都至少经历过一次这种类型的错误。我们陈述了在基于测试集的软件修复的上下文中修复无限循环的问题:给定至少一个失败测试的测试集,生成使所有测试用例通过的补丁。因此,修复无限循环意味着至少有一个测试用例通过触发无限循环而挂起。我们自动修复无限循环的系统称为$Infinitel$。我们开发了一种技术来操纵循环,以便可以动态地分析循环的迭代次数;决定中断循环执行;并动态地检查循环的状态在每个迭代的基础上。然后,为了合成新的循环条件,我们使用基于可满足性模理论(SMT)的技术将这组程序状态编码为代码合成问题。我们评估我们的技术在七个种子错误和七个真正的错误。$Infinitel$能够在标准笔记本电脑配置上在几秒钟到一个小时内修复所有这些问题。
2015-04-20 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
Obstacles in Fully Automatic Program Repair: A survey
目前的文章是一个跨学科的尝试破译自动程序修复过程。审查是由典型的方式,以人类科学称为衍射。我们试图找出自我修复和自我修复操作的文献中的差距,并进一步研究使我们能够解决我们面临的问题的方法。作为结论,我们建议改变目前的方法,自动程序修复操作,以达到我们的目标。这次审查的重点是实现全面自动化。在当前的文章中提到了几个障碍,但所涵盖的主要不足是过拟合障碍,并且在与修复过程的全自动化相关的流中研究了这个特定问题。
2020-11-05 cs.AI cs.SE
Alleviating Patch Overfitting with Automatic Test Generation: A Study of Feasibility and Effectiveness for the Nopol Repair System
在许多不同种类的程序修复技术中,一个被广泛研究的技术家族被称为基于测试集的修复。然而,测试套件本质上是输入输出规范,因此通常不足以完全指定修复下的程序的预期行为。因此,基于测试集的修复技术生成的补丁只能过拟合到使用过的测试集,而不能推广到其他测试。对程序修复中的过拟合问题进行了深入的分析,并对过拟合问题进行了分类。这种分类将有助于社区更好地理解和设计技术来解决过拟合问题。我们进一步提出并评估了一种称为UnsatGuided的方法,该方法旨在通过自动生成测试用例来缓解基于合成的修复技术的过拟合问题。该方法使用额外的自动生成的测试,以加强修复约束所使用的合成为基础的修复技术。我们分析了Unsat Guided的有效性:1)分析性地缓解了两种不同类型的过拟合问题; 2)基于对Defects 4J存储库的224个错误的实验进行经验性分析。主要结果是,自动测试生成是有效的,在缓解一种过拟合问题-回归介绍,但由于预言机的问题,对缓解另一种过拟合问题-不完全固定的积极影响很小。
2018-10-24 cs.SE
Automatic Repair of Buggy If Conditions and Missing Preconditions with SMT
我们提出了Nopol,一种自动修复错误的方法,如果条件和缺少先决条件。作为输入,它采用一个程序和一个测试套件,其中包含通过测试用例建模的预期行为的程序和至少一个失败的测试用例体现的错误要修复。它包括从多个仪表测试套件执行中收集数据,将这些数据转换为可满足性模理论(SMT)问题,并将SMT结果(如果存在)转换为源代码补丁。Nopol修复面向对象的代码,并允许补丁包含空性检查以及特定的方法调用。
2014-04-11 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
NPEFix: Automatic Runtime Repair of Null Pointer Exceptions in Java
空指针异常,也称为空取消引用,是该领域的头号异常。在本文中,我们提出了9个替代执行语义时,一个空指针异常即将发生。我们实现这些替代执行策略使用代码转换的工具称为NPEfix。我们评估了我们的原型实现上的11个字段空解引用错误和519种子故障,并表明NPEfix能够在运行时修复10/11和318/519故障。
2015-12-23 cs.SE
Automatic Repair of Real Bugs in Java: A Large-Scale Experiment on the Defects4J Dataset
Defects4J是一个大型的、同行评审的、结构化的Java bug数据集。Defects4J中的每个bug都有一个测试套件和至少一个触发bug的失败测试用例。在本文中,我们报告了一个实验,以探讨基于自动测试套件的缺陷4J修复的有效性。我们的实验结果表明,所考虑的国家的最先进的修复方法可以生成补丁的224个错误中的47。然而,这些补丁仅适用于测试套件,这意味着它们通过了测试套件,并且可能在测试套件满足正确性标准之外是不正确的。我们手动分析了84个不同的补丁,以评估它们的真实正确性。总的来说,9个真正的Java bug可以通过基于测试套件的修复来正确修复。该分析表明,基于测试套件的修复遭受未指定的错误,其中微不足道或不正确的补丁仍然通过测试套件。在实用性方面,找到一个补丁平均需要14.8分钟。实验是在科学网格上进行的,总共计算时间为17.6天。所有的修复系统和实验结果都在Github上公开,以方便将来对自动修复的研究。
2018-11-04 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
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
Parfum: Detection and Automatic Repair of Dockerfile Smells
Docker是开发人员和组织在轻量级、可移植的容器中打包、部署和运行应用程序的流行工具。Docker的一个关键组件是Dockerfile,这是一个简单的文本文件,指定了构建Docker镜像所需的步骤。虽然Dockerfiles很容易创建和使用,但创建一个最佳镜像是很复杂的,因为很容易不遵循最佳实践,当它发生时,我们称之为Docker气味。为了提高Dockerfiles的质量,以前的工作都集中在检测Docker气味上,但他们没有提供建议或修复气味。在本文中,我们提出了Parfum,这是一种检测和自动修复Docker气味的工具,同时生成最小的补丁。Parfum基于一个新的Dockerfile AST解析器Dinghy。我们通过分析和修复大量Dockerfiles并将其与现有工具进行比较来评估Parfum的有效性。我们还根据构建失败和镜像大小来衡量修复对Docker镜像的影响。最后,我们打开了35个pull request来收集开发人员的反馈,并确保修复和气味是有意义的。我们的结果表明,Parfum能够修复806 245 Docker气味,并对Docker镜像大小产生显著影响,最后,开发人员在合并20个pull请求的同时欢迎Parfum生成的补丁。
2023-02-09 cs.SE
CRepair: CVAE-based Automatic Vulnerability Repair Technology
Nanning Normal University(南宁师范大学)
针对现有漏洞修复方法忽略代码多样特征且定位不精确的问题,本文提出基于CVAE的CRepair技术,通过提示预处理、因果推断和多样本融合实现自动修复,实验显示完美修复率达52%。
2024-11-08 cs.AI cs.SE
Automatic Testing and Improvement of Machine Translation
本文介绍了TransRepair,一个全自动的方法来测试和修复的一致性机器翻译系统。TransRepair将突变与变形测试相结合,以检测不一致的错误(无需访问人类神谕)。然后采用概率参照或交叉参照的方法对译文进行后处理,以灰盒或黑盒的方式对不一致进行修正。我们对两个最先进的翻译器Google Translate和Transformer的评估表明,TransRepair在生成具有一致翻译的输入对方面具有很高的精度(99%)。通过这些测试,使用自动一致性指标和手动评估,我们发现Google翻译和Transformer有大约36%和40%的不一致性错误。黑盒修复平均修复了Google翻译和Transformer 28%和19%的错误。灰箱修复平均为Transformer修复30%的错误。手动检查表明,我们的方法修复的翻译在87%的情况下提高了一致性(2%的情况下降低了一致性),并且我们的修复在27%的情况下具有更好的翻译可接受性(8%的情况下较差)。
2019-12-25 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
Accelerating Automatic Program Repair with Dual Retrieval-Augmented Fine-Tuning and Patch Generation on Large Language Models
提出SelRepair方法,通过集成微调LLM与双重RAG模块,结合语义和语法相似性信息高效检索,在Java数据集上显著提升自动程序修复性能并降低推理时间。
2025-07-14 cs.CR 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
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
BUGFIX: towards a common language and framework for the AutomaticProgram Repair community
本文提出一个面向自动程序修复(APR)社区的通用框架和标准缺陷描述语言,以统一多样化的 APR 工具、语言与环境,促进 APR 在 IDE 中的实用化。
2024-02-22 cs.SE
Review4Repair: Code Review Aided Automatic Program Repairing
内容:基于学习的自动程序修复技术有望为软件源代码中检测到的错误提供质量修复建议。这些工具主要利用错误和修复代码更改的历史数据,并且在应用于新代码时严重依赖错误定位器。随着代码审查的日益普及,对bug定位器的依赖可以减少。此外,基于代码评审的错误定位更值得信赖,因为评审员的专业知识和经验反映在这些建议中。目的:评审评论中的自然语言说明是关于bug的性质和预期解决方案的大量信息来源。然而,据我们所知,没有一个基于学习的工具利用评审注释来修复编程错误。在这项研究中,我们调查的性能改善修复技术使用代码审查意见。方法:我们对55,060个代码评审和相关的代码变更进行了序列到序列模型的训练。我们还介绍了新的标记化和预处理方法,这些方法有助于实现对最先进的基于学习的修复技术的显着改进。结果:我们将前1名的准确率提高了20.33%,前10名的准确率提高了34.82%。我们可以为现有技术未解决的文体和非代码错误提供建议。结论:我们相信,通过我们的方法生成的自动修复建议以及代码审查将帮助开发人员快速正确地处理审查评论,从而节省他们的时间和精力。
2020-10-06 cs.SE
Astragalus: Automatic Configuration Repair for Production Networks
Xi’an Jiaotong University(西安交通大学)
本文提出Astragalus,一种基于语法的自动配置修复方法,通过多次迭代的『定位-修复-验证』流程,在生产网络中有效修复了多种类型的配置错误。
2026-06-12 cs.NI cs.SE
Automated Repair of Declarative Software Specifications in the Era of Large Language Models
Donald Bren School of Information and Computer Science, University of California, Irvine(加州大学欧文分校唐纳德·布伦信息与计算机科学学院)
本研究评估了ChatGPT修复Alloy声明式软件规约的效果,发现其整体表现不及现有主流修复技术,但能修复其他方法无法解决的缺陷,同时也存在修复错误、幻觉及结果不一致等问题,为相关从业者提供了参考。
2023-11-07 cs.AI cs.LG cs.SE
Automatic Repair of Overflowing Expressions with Abstract Interpretation
我们考虑合成可证明非溢出整数算术表达式或整数算术表达式之间的布尔关系的问题。首先,我们使用一个数值抽象域来推断程序变量之间的数值属性。然后我们检查这些属性是否保证给定的表达式不会溢出。如果不是这种情况,我们合成一个等价的,但不溢出的表达式,或者我们报告这样的表达式不存在。非溢出表达式的合成取决于三个正交因素:输入表达式(例如,是线性的,多项式的,?),输出表达式(例如,是否允许进行情况拆分?),和底层的数值抽象域--抽象域越精确,就能合成越正确的表达式。我们考虑三种常见的情况:(i)整数系数和区间的线性表达式;(ii)线性表达式的布尔表达式;和(iii)线性表达式与模板。在第一种情况下,我们证明了存在一个完整的多项式算法来解决这个问题。在第二种情况下,我们有一个不完整的多项式算法,而在第三种情况下,我们有一个完整的,但最坏情况的指数算法。
2013-09-20 cs.PL cs.SE
Combining Logic with Large Language Models for Automatic Debugging and Repair of ASP Programs
本文提出 FormHe,融合逻辑故障定位、程序变异与 LLM,自动识别并修复学生提交的错误 ASP 程序,实验显示故障检测准确率达 94%、修复成功率达 58%。
2024-10-28 cs.LO cs.SE
Automated Patch Assessment for Program Repair at Scale
在本文中,我们做的程序修复系统生成的补丁的自动正确性评估。我们将人类书写的补丁视为地面真实预言,并基于它随机生成测试,这是Shamshiri等人提出的一种技术,随机地面真值测试(RGT)。我们建立了一个由14个最先进的修复系统生成的638个Defects 4J补丁的策展数据集,我们在这个数据集上评估了自动补丁评估。本研究的结果是新颖的和有意义的:第一,我们提高了最先进的性能与RGT的自动补丁评估的190%,通过改进的预言;第二,我们表明,RGT是足够可靠的,以帮助科学家做过拟合分析,当他们评估程序修复系统;第三,我们提高了程序修复知识的外部效度与最大的研究。
2021-05-07 cs.SE
When Large Language Models Confront Repository-Level Automatic Program Repair: How Well They Done?
本文构建含124个仓库级缺陷的RepoBugs基准,揭示LLM仓库级APR表现不足,并提出通用RLCE上下文提取方法,使修复率最高提升160%。
2024-03-01 cs.SE
No Man is an Island: Towards Fully Automatic Programming by Code Search, Code Generation and Program Repair
本文提出一个自动编程框架,首次整合代码搜索、代码生成和程序修复,利用大型语言模型提升生成代码质量,并在编程问题上取得62.53%的提升。
2024-09-05 cs.SE
Diagnosis-Driven Automatic Repair for Agentic Workflow via Symbolic Inference
State Key Laboratory of Complex System Modeling and Simulation Technology, Institute of Software, Chinese Academy of Sciences(中国科学院软件研究所复杂系统建模与仿真技术国家重点实验室);University of Chinese Academy of Sciences(中国科学院大学);Singapore Management University(新加坡管理大学)
针对智能工作流可靠性挑战,提出FlowFixer框架,通过将执行转化为符号跟踪、符号推理得行为规范,经规范验证进行故障归因与根因分析,生成修复补丁,还采用预执行评估降成本,实验证明其效果良好。
2026-07-07 cs.SE
ENCORE: Ensemble Learning using Convolution Neural Machine Translation for Automatic Program Repair
University of Waterloo(滑铁卢大学);Purdue University(普渡大学)
针对传统生成-验证程序修复技术规则固化、适配语言有限的问题,提出基于卷积神经机器翻译集成学习的ENCORE方法,可跨多语言修复缺陷,在多个基准上修复效果优于现有技术。
2024-03-10 cs.LG cs.SE
Boosting Automatic Java-to-Cangjie Translation with Multi-Stage LLM Training and Error Repair
Nanjing University of Aeronautics and Astronautics(南京航空航天大学)
本文提出多阶段LLM训练框架,结合编译器反馈和错误修复,提升Java到Cangjie的翻译准确性与语义一致性,实验显示在有限平行数据下功能等价性提升6.06%。
2026-05-08 cs.SE
CURE: Code-Aware Neural Machine Translation for Automatic Program Repair
Purdue University(普渡大学);University of Waterloo(滑铁卢大学)
自动程序修复(APR)是提高软件可靠性的关键.最近,神经机器翻译(NMT)技术已被用于自动修复软件错误。虽然这些方法很有前途,但有两个主要的局限性。它们的搜索空间通常不包含正确的修复,并且它们的搜索策略忽略了软件知识,例如严格的代码语法。由于这些限制,现有的基于NMT的技术表现不如最好的基于模板的方法。我们提出了CURE,一种新的基于NMT的APR技术,具有三个主要的新颖性。首先,CURE在大型软件代码库上预训练程序设计语言(PL)模型,以便在APR任务之前学习类似于开发人员的源代码。其次,CURE设计了一个新的代码感知搜索策略,通过关注可编译的补丁和长度接近错误代码的补丁来找到更多正确的修复。最后,CURE使用子字标记化技术来生成包含更多正确修复的较小搜索空间。我们对两个广泛使用的基准测试的评估表明,CURE正确地修复了57个Defects4J错误和26个菜错误,在这两个基准测试上优于所有现有的APR技术。
2021-09-02 cs.AI cs.LG cs.SE
NARRepair: Non-Autoregressive Code Generation Model for Automatic Program Repair
Shandong University(山东大学)
针对自回归式自动程序修复技术推理延迟高的问题,本文提出首个定制化非自回归代码生成模型NARRepair,通过三项创新设计实现高修复准确率下的推理速度显著提升。
2024-06-24 cs.AI cs.SE
Bears: An Extensible Java Bug Benchmark for Automatic Program Repair Studies
错误基准测试对于经验性地评估自动程序修复工具是必不可少的。在本文中,我们提出了熊,一个项目收集和存储错误到一个可扩展的错误基准自动修复研究在Java中。bug的收集依赖于持续集成(CI)的提交构建状态,以从GitHub上托管的开源项目中找到潜在的bug和补丁程序版本对。每一对程序版本都通过一个管道,在管道中尝试复制一个错误及其补丁。再现流水线的核心步骤是在两个程序版本上执行程序的测试套件。如果在有缺陷的程序版本候选中发现测试失败,并且在其修补程序版本候选中没有发现测试失败,则错误及其修补程序成功再现。Bears的独特之处在于使用CI(构建)来识别有缺陷和打补丁的程序版本候选者,这在过去几年中已被广泛采用在开源项目中。这种方法允许我们从各种各样的项目中收集bug,而不仅仅是使用bug跟踪系统的成熟项目。此外,Bears被设计为公开可用,并通过在给定的GitHub存储库中自动创建带有bug的分支来轻松扩展研究社区,这些分支可用于Bears存储库中的拉取请求。我们在本文中介绍的方法所采用的熊,我们提供了版本1.0的熊,其中包含251个可重复的错误收集72个项目,使用特拉维斯CI和Maven构建环境。
2019-01-17 cs.SE
Nopol: Automatic Repair of Conditional Statement Bugs in Java Programs
我们提出了NOPOL,一种自动修复错误条件语句的方法(即,if-then-else语句)。这种方法将一个有缺陷的程序和一个测试套件作为输入,并生成一个带有条件表达式的补丁作为输出。测试套件需要包含通过测试用例,以模拟程序的预期行为,以及至少一个失败的测试用例,以揭示要修复的错误。NOPOL的过程包括三个主要阶段。首先,NOPOL采用天使修复本地化,以确定在测试执行过程中的条件的预期值。其次,运行时跟踪收集用于收集变量及其实际值,包括原始数据类型和面向对象的特征(例如,空性检查),以用作补丁生成的构建块。第三,NOPOL将这些收集的数据编码成可满足性模理论(SMT)问题的实例,然后将SMT实例的可行解翻译回代码补丁。我们评估NOPOL的22个真实世界的错误(16个错误与错误的IF条件和6个错误与缺少先决条件)在两个大型开源项目,即Apache Commons Math和Apache Commons Lang。这些错误的实证分析表明,我们的方法可以有效地修复错误的IF条件和缺少先决条件。我们说明了NOPOL的能力和局限性,使用真正的错误修复的案例研究。
2018-11-10 cs.SE
Automatic Syntax Error Repair for Discrete Controller Synthesis using Large Language Model
Institute of Science Tokyo(东京科学大学);Waseda University(早稻田大学);Kobe University(神户大学)
本文提出利用大语言模型自动修复离散控制器综合模型中的语法错误,通过设计提示策略提高修复准确性和效率,实验显示其比人类开发者快3.46倍。
2025-12-08 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
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
Automatic Detection, Validation and Repair of Race Conditions in Interrupt-Driven Embedded Software
本文提出自动化框架 SDRacer,结合静态分析、符号执行和虚拟平台动态验证,实现中断驱动嵌入式软件中竞态条件的精确检测、验证与修复,并在九个真实 C 语言嵌入式程序上验证了其有效性。
2023-05-29 cs.SE
A Comprehensive Study of Code-removal Patches in Automated Program Repair
自动程序修复(APR)技术有望帮助降低调试成本。许多相关的APR技术遵循生成和验证的方法,即错误的程序迭代地修改不同的更改操作符,然后验证测试套件,直到一个合理的补丁生成。特别是,Kali是一种生成和验证技术,用于研究仅通过删除代码生成合理补丁的可能性。以前的研究表明,卡利确实成功地解决了几个错误。本文讨论了在自动程序修复中代码删除补丁的情况,调查的原因和场景,使他们的创建成为可能,以及与补丁的关系,由开发人员实现。我们的研究表明,代码删除补丁往往不足以修复错误,并提出了一个全面的分类代码删除补丁,提供的问题,可能会影响测试套件的证据,打开新的机会,研究人员在自动程序修复领域。
2021-12-15 cs.SE
The Right Prompts for the Job: Repair Code-Review Defects with Large Language Model
本研究探究利用大语言模型修复代码审查缺陷,通过设计多种提示词并在主流模型上比较,最佳提示词实现72.97%的修复率,显著提升自动修复的有效性与实用性。
2023-12-29 cs.SE
Automatic Repair and Type Binding of Undeclared Variables using Neural Networks
Iowa State University(爱荷华州立大学)
深度学习已被用于程序分析中,用于使用软件缺陷数据集预测隐藏的软件缺陷,使用生成对抗网络预测安全漏洞,以及通过学习程序代码上经过训练的神经机器翻译来识别语法错误。然而,所有这些方法要么需要缺陷数据集,要么需要可执行的无缺陷源代码来训练深度学习模型。我们的神经网络模型既没有使用任何缺陷数据集进行训练,也没有使用无缺陷的编程源代码,而是使用抽象树(AST)的结构语义细节进行训练,其中每个节点代表源代码中出现的一个构造。这个模型的实现是为了修复最常见的语义错误之一,比如未声明的变量错误,以及在程序编译之前推断它们的类型信息。通过该方法,在1059个程序的Prutor数据集上,只有未声明变量错误的程序,该模型能正确定位和识别81%的程序,并能正确推断出80%的程序类型。
2019-07-14 cs.CL cs.FL cs.LG
TarTar: A Timed Automata Repair Tool
我们提出了TarTar,一个自动修复分析工具,给定的定时诊断跟踪(TDT)的时间自动机模型的模型检验过程中获得的,建议可能的语法修复的分析模型。建议的修复包括修改位置不变量和转换保护中的时钟边界值,添加或删除时钟重置等。建议的修复保证消除给定TDT的可执行性,同时保留系统的整体功能行为。我们深入研究了TarTar的设计和架构,并表明它可以成功修复来自不同案例研究的系统模型中69%的种子错误。
2020-05-12 cs.FL 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
RAP-Gen: Retrieval-Augmented Patch Generation with CodeT5 for Automatic Program Repair
Salesforce AI Research(赛富时人工智能研究院);Nanyang Technological University(南洋理工大学)
提出检索增强补丁生成框架 RAP-Gen,利用混合检索器与 CodeT5 模型统一补丁检索与生成,在三个基准上显著优于现有方法。
2023-09-12 cs.CL cs.SE
Automatic Build Repair for Test Cases using Incompatible Java Versions
本文提出一种在源代码层面进行依赖最小化的方法,通过移除测试用例执行所不需要的类和方法来修复因 Java 版本不兼容导致的构建失败,并在 Defects4J 上验证了其有效性和低开销。
2024-05-03 cs.SE
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
High-Quality Automated Program Repair
自动程序修复(APR)最近引起了人们的关注,因为它提出在没有人为干预的情况下修复软件缺陷。为了自动修复缺陷,大多数APR工具使用开发人员编写的测试来(a)定位缺陷,以及(b)基于测试施加的约束生成并验证自动生成的候选补丁。虽然APR工具可以生成修补程序,似乎可以修复真实软件中11-19%的缺陷,但大多数补丁都不正确或不被开发人员接受,因为它们过度拟合修复过程中使用的测试。这个问题被称为补丁过拟合问题。为了解决这个问题,我建议配备APR工具,从自然语言的软件工件,如错误报告和需求规格,描述的错误和预期的软件行为,但通常不使用的APR工具派生的额外的约束。我假设APR工具在使用这些附加约束时生成的补丁质量更高。为了验证这一假设,我提出了一个自动化和客观的方法来评估补丁的质量,并提出了两种新的方法来提高故障定位和开发人员编写的测试套件使用自然语言的软件工件。最后,我建议使用我的补丁评估方法来分析改进的故障定位和测试套件对APR工具为现实世界的缺陷所产生的补丁质量的影响。
2021-04-16 cs.SE
CodeCureAgent: Automatic Classification and Repair of Static Analysis Warnings
CISPA Helmholtz Center for Information Security(CISPA赫尔姆霍兹信息安全中心)
本文提出CodeCureAgent,利用大语言模型代理自动分析、分类和修复静态分析警告,通过三步启发式方法生成合理修复方案,有效提升代码质量。
2026-04-13 cs.MA cs.SE
FetaFix: Automatic Fault Localization and Repair of Deep Learning Model Conversions
University of Edinburgh(爱丁堡大学);University of Glasgow(格拉斯哥大学)
本文提出自动化故障定位与修复方法 FetaFix,通过迭代比较源模型与目标模型的输出标签差异,修复深度学习框架间模型转换时在输入、参数、超参数和模型图中引入的故障,在 755 个故障中成功修复 462 个。
2025-04-26 cs.AI cs.CV cs.LG
An Empirical Evaluation of Pre-trained Large Language Models for Repairing Declarative Formal Specifications
本研究首次实证评估大语言模型修复声明式形式规约的能力,设计含单/双智能体、自动提示等的12种修复设置,发现带自动提示的双智能体方案优于现有Alloy APR技术,为软件工程中基于智能体的技术奠定基础。
2025-06-12 cs.SE
Execution-free Program Repair
针对自动程序修复依赖测试导致成本高且无法保证正确性的问题,本文提出 Proof2Fix 方法与工具,利用程序证明器在不运行程序或测试的情况下发现并修复历史缺陷。
2024-05-09 cs.SE
Tea: Program Repair Using Neural Network Based on Program Information Attention Matrix
Microsoft Asia-Pacific Technology Company Ltd.(微软亚太科技有限公司);University of Chinese Academy of Sciences(中国科学院大学);Institute of Software, Chinese Academy of Sciences(中国科学院软件研究所)
机器学习(ML)驱动的自然语言处理(NLP)的进步为软件程序的自动错误修复指明了一个有希望的方向,因为修复有错误的程序可以转换为翻译任务。虽然软件程序包含比一维自然语言文档更丰富的信息,但使用ML驱动的NLP技术进行自动程序修复的开创性工作只考虑了有限的此类信息。我们假设,更全面的软件程序的信息,如果适当利用,可以提高ML驱动的NLP方法在修复软件程序的有效性。作为证明这一假设的第一步,我们提出了一个统一的表示来捕捉软件程序的语法,数据流和控制流方面,并设计了一种方法来使用这样的表示来指导Transformer模型从NLP更好地理解和修复错误的程序。我们的初步实验证实,更全面的软件程序使用的信息,更好的ML驱动的NLP技术可以执行在这些程序中修复错误。
2021-07-17 cs.AI cs.SE
MintHint: Automated Synthesis of Repair Hints
能够自动修复程序是一项极具挑战性的任务。在本文中,我们提出了MintHint,一种新的技术,程序修复,是从今天的大多数方法出发。MintHint没有尝试完全自动化程序修复,这通常是一个无法实现的目标,而是执行统计相关性分析,以识别修复代码中可能出现的表达式,并使用基于模式匹配的合成,从这些表达式中生成修复提示。直觉上,这些提示建议如何纠正错误的语句,并帮助开发人员找到完整的实际修复。MintHint可以解决各种常见的错误,包括不正确的,虚假的和丢失的表达式。我们提出了一个用户的研究表明,开发人员的生产力可以提高许多倍的使用MintHint生成的修复提示-相比,只有传统的故障定位信息。我们还将MintHint应用于一个广泛使用的Unix实用程序的几个故障,以进一步评估该方法的有效性。我们的研究结果表明,即使在以下情况下,MintHint也表现良好:(1)搜索的修复空间不包含精确的修复,以及(2)从修复测试用例中获得的操作规范不完整甚至不精确。
2013-09-16 cs.SE