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
Partitioning Patches into Test-equivalence Classes for Scaling Program Repair
自动程序修复是一个寻找给定错误程序的转换(称为补丁)以消除可观察到的故障的问题。它具有重要的应用,例如提供调试辅助,自动分级作业和修补安全漏洞。所有现有修复技术面临的共同挑战是可扩展性大补丁空间,因为有许多候选补丁,这些技术显式或隐式考虑。程序修复的正确性标准通常是作为一套测试给出的,因为可能无法获得预期程序行为的正式规范。由于底层搜索算法执行的大量测试执行,当前的修复技术不能扩展。我们解决这个问题,通过引入一种方法,补丁生成的基础上的测试等价关系(如果两个程序是“测试等价”的一个给定的测试,他们在这个测试上产生难以区分的结果)。我们提出了两个测试等价关系的运行时值和依赖关系的基础上,分别提出了一个算法,执行上的飞行分区的补丁到测试等价类。我们对真实世界的程序的实验表明,所提出的方法大大减少了测试执行的数量,因此提供了一个数量级的效率提高现有的修复技术,而不牺牲补丁的质量。
2017-07-15 cs.SE
Well Begun is Half Done: Location-Aware and Trace-Guided Iterative Automated Vulnerability Repair
Yangzhou University(扬州大学);Nanjing University of Posts and Telecommunications(南京邮电大学)
\sysname通过位置感知和跟踪引导的迭代方法,改进了漏洞修复的补丁生成质量与准确性。
2025-12-23 cs.SE
On the acceptance by code reviewers of candidate security patches suggested by Automated Program Repair tools
工作背景:对自动程序修复(APR)工具提供的补丁的语义正确性进行测试和验证已受到广泛关注。然而,人类补丁评审员最终接受或拒绝现实世界项目的建议补丁受到了有限的关注。目的:为了解决这个问题,我们计划调查APR工具建议的(可能不正确的)安全补丁是否被人类审查者识别。我们还想调查是否知道一个补丁是由一个所谓的专门工具产生的,并改变了人类评审员的决定。方法:在第一阶段,使用平衡设计,我们向人类评审员提出APR工具针对不同漏洞提出的补丁组合,并要求评审员采用或拒绝提出的补丁。在第二阶段,我们告诉参与者,一些建议的补丁是由安全专用工具生成的(即使该工具实际上是一个“正常”的APR工具),并衡量人类审查者是否会改变他们的决定,采用或拒绝补丁。局限性:该实验将在学术环境中进行,为了保持力量,它将集中在流行的APR工具和流行的漏洞类型的有限样本上。
2022-09-16 cs.SE
A Critical Review of "Automatic Patch Generation Learned from Human-Written Patches": Essay on the Problem Statement and the Evaluation of Automatic Software Repair
在ICSE'2013上,有史以来第一次专门用于自动程序修复的会议。在这次会议上,Kim等人介绍了PAR,这是一种用于修复Java bug的基于模板的新方法。我们强烈反对这篇文章的主要观点。我们的评论有两个目标。首先,我们的目的是解释为什么我们不同意金和同事,为什么这种分歧背后的原因是重要的自动软件修复的研究一般。其次,我们的目标是通过澄清自动软件修复背后的基本思想来为该领域做出贡献。特别讨论了软件自动修复的主要评价标准:可理解性、正确性和完整性。我们表明,根据如何设置修复方案,评估目标可能是矛盾的。最后,我们讨论了修复的可接受性的性质和它的关系,软件正确性的概念。
2014-08-09 cs.SE
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
Neural Program Repair with Execution-based Backpropagation
神经机器翻译(NMT)架构在自动程序修复方面取得了可喜的成果。然而,它们具有生成低质量补丁的限制(例如,不可编译的补丁)。这是因为现有的工作仅优化基于字符和标记的纯语法损失函数,而没有在神经网络权重优化期间并入程序特定的信息。在本文中,我们提出了一种新的程序修复模型称为奖励修复。RewardRepair的核心新颖性是通过基于程序编译和测试执行信息的损失函数来改进基于NMT的程序修复,奖励网络生成可编译且不会过拟合的补丁。我们进行了几个实验来评估RewardRepair,表明使用编译和测试执行结果来优化底层神经修复模型是可行和有效的。RewardRepair在四个基准测试中正确修复了207个错误。我们报告修复成功的121个错误是固定的第一次在文献中。此外,RewardRepair生成高达45.3%的可编译补丁,比最先进的39%有所提高。
2022-04-10 cs.SE
Automated Classification of Overfitting Patches with Statically Extracted Code Features
自动程序修复(APR)旨在降低手动修复软件缺陷的成本。然而,APR会产生大量的过拟合补丁,这些补丁除了使测试通过之外,不能正确修复缺陷。本文提出了一种新的过拟合补丁检测系统称为ODS来评估APR补丁的正确性。ODS首先静态比较修补程序和有缺陷的程序,以便在抽象语法树(AST)级别提取代码特征。然后,ODS使用具有捕获的代码特征和补丁正确性标签的监督学习来自动学习概率模型。然后,学习的ODS模型可以最终应用于对新的和看不见的程序修复补丁进行分类。我们进行了一个大规模的实验,以评估ODS的补丁正确性分类的基础上,从缺陷4J,Bugs.jar和熊基准的10,302补丁的有效性。实验结果表明,ODS对26个项目中71.9%的程序修复补丁进行了正确分类,提高了程序修复补丁的分类水平,具有一定的实用性,可以作为一种后处理方法对不同APR系统生成的补丁进行分类。
2021-08-06 cs.SE
Test Case Generation for Program Repair: A Study of Feasibility and Effectiveness
在许多不同种类的程序修复技术中,一个被广泛研究的技术家族被称为基于测试集的修复。测试套件本质上是输入输出规范,因此通常不足以完全指定修复中程序的预期行为。因此,基于测试套件的程序修复技术生成的补丁通过测试套件,但可能是不正确的。过于特定于所使用的测试套件而不能推广到其他测试用例的补丁被称为过拟合补丁。在本文中,我们研究的可行性和有效性的测试用例生成在缓解过拟合问题。我们提出了两种方法,使用测试用例生成,以提高测试套件为基础的修复,并进行了广泛的评估所提出的方法的有效性,使更好的测试套件为基础的修复缺陷4J存储库的224个错误。结果表明,测试用例生成可以改变产生的补丁,但不是有效地把不正确的补丁到正确的。我们确定的无效性相关的问题,并预计我们的研究结果和发现将导致未来的研究,以建立测试用例生成技术,量身定制的自动修复系统。
2017-03-01 cs.SE
Interactive Patch Filtering as Debugging Aid
广泛认识到程序修复工具需要具有高精度才能有用,即,所生成的补片需要具有高的正确概率。然而,从根本上难以确保补丁的正确性,并且许多工具在修复性能的其他方面(例如召回率)妥协以获得可接受的精度。在本文中,我们提出了一个问题:一个低精度的修复工具仍然有用吗?为了探讨这个问题,我们提出了一个互动的过滤方法来补丁审查,过滤出不正确的补丁,问问题的开发人员。我们的直觉是,不正确的补丁仍然可以帮助理解错误。有了适当的工具支持,即使有许多不正确的补丁,好处也超过了成本。我们实现的方法作为一个Eclipse插件工具,InPaFer,并与30名开发人员的模拟实验和用户研究进行评估。结果表明,我们的方法提高了修复性能的开发人员,62.5%以上的成功修复错误和25.3%的平均调试时间减少。特别地,即使生成的补丁都是不正确的,开发人员的性能也不会显著降低,并且当一些补丁提供用于修复的有用信息(诸如故障位置和部分修复)时,可以提高开发人员的性能。
2020-04-27 cs.SE
Trust Enhancement Issues in Program Repair
自动程序修复是一种新兴的技术,它试图使用学习、搜索和语义分析来自动纠正错误和漏洞。信任自动生成的补丁是实现程序修复的更大采用所必需的。为了实现这一目标,我们调查了100多名软件从业者,以了解增强对自动生成的补丁的信任所需的工件和设置。基于对开发人员偏好的调查反馈,我们定量评估现有的基于测试套件的程序修复工具。我们发现,他们不能产生高质量的补丁在前10名的排名和可接受的时间段为1小时。我们的定性研究中的开发人员反馈以及我们对现有修复工具的定量检查中的观察结果指出了推动程序修复研究的可操作见解。具体来说,我们注意到,在可接受的时间范围内产生修复非常依赖于利用足够丰富的搜索空间的抽象搜索空间表示。此外,虽然额外的开发人员输入对于生成或排名补丁是有价值的,但开发人员似乎对重要的人在环交互不感兴趣。
2022-02-11 cs.SE
How Different Is It Between Machine-Generated and Developer-Provided Patches? An Empirical Study on The Correct Patches Generated by Automated Program Repair Techniques
背景资料:多年来,自动程序修复(Automated Program Repair,APR)由于能够降低修复错误的成本而受到学术界和工业界的广泛关注。然而,如何评估补丁的正确性仍然是一个开放的挑战。两种广泛采用的方法来应对这一挑战,包括手动检查和使用自动生成的测试进行验证,都是有偏见的(即,分别遭受主观性和低精度)。目的:为了解决这一问题,我们建议进行实证研究,了解正确的补丁,由现有的国家的最先进的APR技术,旨在为未来的补丁评估提供指导方针。方法:为此,我们首先提出了一个文献综述(LR)报告的正确补丁生成的最新技术的缺陷4J基准和收集177个正确的补丁后,健全检查的过程。我们研究了这些机器生成的正确补丁是如何实现语义等价的,但与开发人员提供的补丁相比在语法上存在差异,这些补丁如何在不同的项目和APR技术中分布,以及错误的特征如何影响为其生成的补丁。我们的主要发现包括:1)我们不需要像开发人员那样修复bug,因为我们观察到25.4%(45/177)2)机器生成的正确补丁的分布在Defects 4J项目和APR技术方面存在差异;以及3)APR技术倾向于生成与开发者针对具有大补丁大小的错误所生成的补丁不同的补丁。结论:我们的研究不仅验证了以前的研究结论,但也强调了未来的研究对评估补丁的正确性的影响。
2019-06-08 cs.SE
Characterizing Multi-Hunk Patches: Divergence, Proximity, and LLM Repair Challenges
University of British Columbia(不列颠哥伦比亚大学)
针对现有自动化修复研究多聚焦单代码块场景的不足,本研究构建多代码块补丁数据集HUNK4J,提出代码块差异性指标与空间邻近性分类,通过实证实验揭示大语言模型在高分散多代码块缺陷修复上的能力缺口。
2025-11-17 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
ITER: Iterative Neural Repair for Multi-Location Patches
Carnegie Mellon University(卡内基梅隆大学);KTH Royal Institute of Technology(KTH皇家理工学院)
针对现有自动化程序修复工具多局限于单位置补丁、忽视部分补丁潜力的问题,提出迭代式神经修复范式ITER,通过迭代优化部分补丁生成多位置修复方案,在Defects4J 2.0基准上实现15.5%的修复率并修复9个独有多位置缺陷。
2024-04-23 cs.LG cs.SE
Social Diversity for ATL Repair
模型转换在模型驱动工程范例中扮演着重要的角色。编写一个正确的转换程序需要熟练掌握源和目标建模语言,对两者元素之间的映射有清晰的理解,以及掌握转换语言来正确地描述转换。因此,转换程序是复杂且容易出错的,并且在这样的程序中查找和修复错误通常涉及开发人员的繁琐且耗时的工作。在本文中,我们提出了一种新的基于搜索的方法来自动修复包含许多语义错误的转换程序。为了防止健身高原和单一健身峰值的限制,我们利用社会多样性的概念,以促进修复补丁解决的错误,是由人口的其他补丁覆盖较少。我们评估我们的方法71语义不正确的转换程序中写的ATL,并同时包含多达5个语义错误。评估结果表明,整合社会多样性搜索修复补丁时,可以提高这些补丁的质量,并加快收敛,即使当多达5个语义错误。
2022-08-25 cs.SE
Self-Boosted Automated Program Repair
程序修复是每个软件系统生命周期中不可或缺的一部分,但可能极具挑战性。到目前为止,研究人员已经提出了各种自动程序修复(APR)技术,以减少手工调试的努力。然而,给定一个真实世界的bug程序,一个典型的APR技术通常会产生大量的补丁,其中每个补丁都需要对原始测试套件进行验证,这会产生极高的计算成本。尽管现有的APR技术已经利用各种静态和/或动态信息来更快地找到期望的补丁,但是它们仍然相当昂贵。在最近的工作中,研究人员提出了统一调试,以利用APR期间的补丁执行信息来帮助提升故障定位;这样,APR技术的应用范围可以扩展到所有可能的错误,例如,APR期间的补丁执行信息可以帮助手动修复不能自动修复的错误。受统一调试的启发,这项工作提出了SeAPR(自增强自动程序修复),第一个技术,利用早期的补丁执行信息在APR期间,以帮助提高自动修复本身的飞行。我们的基本直觉是,补丁类似于早期的高质量/低质量的补丁应该被提升/降级,以加快检测所需的补丁。这项对12个最先进的APR系统的实验研究表明,总的来说,SeAPR可以大大减少补丁执行的数量,而开销可以忽略不计。我们的研究还调查了各种配置对SeAPR的影响。最后,我们的研究表明,SeAPR甚至可以利用来自同一错误程序的其他APR工具的补丁执行信息来进一步提高APR。
2021-04-09 cs.SE
Hybrid Automated Program Repair by Combining Large Language Models and Program Analysis
本文提出GIANTREPAIR方法,通过结合LLM生成补丁骨架与程序分析技术进行上下文感知的补丁实例化,有效提升了自动化程序修复在真实场景下的缺陷修复数量与性能。
2024-06-04 cs.SE
Boosting Redundancy-based Automated Program Repair by Fine-grained Pattern Mining
针对基于冗余的自动化程序修复方法修复错误少、补丁错误多的问题,提出含两级模式挖掘的Repatt技术,在Defects4J基准上实验显示其能提升正确补丁数量、精度,结合排序策略后修复效果更优。
2025-08-26 cs.SE
High-Quality Automated Program Repair
自动程序修复(APR)最近引起了人们的关注,因为它提出在没有人为干预的情况下修复软件缺陷。为了自动修复缺陷,大多数APR工具使用开发人员编写的测试来(a)定位缺陷,以及(b)基于测试施加的约束生成并验证自动生成的候选补丁。虽然APR工具可以生成修补程序,似乎可以修复真实软件中11-19%的缺陷,但大多数补丁都不正确或不被开发人员接受,因为它们过度拟合修复过程中使用的测试。这个问题被称为补丁过拟合问题。为了解决这个问题,我建议配备APR工具,从自然语言的软件工件,如错误报告和需求规格,描述的错误和预期的软件行为,但通常不使用的APR工具派生的额外的约束。我假设APR工具在使用这些附加约束时生成的补丁质量更高。为了验证这一假设,我提出了一个自动化和客观的方法来评估补丁的质量,并提出了两种新的方法来提高故障定位和开发人员编写的测试套件使用自然语言的软件工件。最后,我建议使用我的补丁评估方法来分析改进的故障定位和测试套件对APR工具为现实世界的缺陷所产生的补丁质量的影响。
2021-04-16 cs.SE
Sorting and Transforming Program Repair Ingredients via Deep Learning Code Similarities
本文提出DeepRepair,利用深度学习代码相似性对修复成分排序与转换,在374个缺陷程序上实验,虽补丁数量无显著提升,但能发现现有冗余修复技术无法找到的补丁。
2018-12-31 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
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
Multi-Location Program Repair Strategies Learned from Past Successful Experience
自动程序修复(Automated program repair,APR)在减少软件维护工作量和时间消耗方面具有巨大的潜力,近年来成为软件工程的研究热点,提出了许多方法。多位置程序修复由于其逻辑和结构的复杂性一直是该领域的一个挑战。虽然一些方法并不声称具有解决多位置错误的功能,但它们在实践中为这些缺陷生成正确的补丁。在本文中,我们首先对Defects4J中的多位置错误进行了观察,并将其分为两类(即,相似的和相关的多位置错误)基于其补丁中的修复动作。然后,我们总结了当前工具修复Defects4J中多位置错误的情况。我们分析了当前工具生成的22个补丁,并提出了两个可行的策略来修复多位置错误,通过两个详细的案例研究来说明它们。最后,通过修复两个从未修复过的漏洞,验证了该方法的可行性。通过借鉴以往的成功经验,指出了多位置程序修复的可能途径。
2019-01-07 cs.SE
Dissection of a Bug Dataset: Anatomy of 395 Patches from Defects4J
精心设计和公开可用的错误数据集是推进故障定位和程序修复等研究领域的宝贵资产,因为它们可以直接和公平地比较竞争技术和实验复制。这些数据集需要研究人员深入理解:诸如“我的技术可以处理哪些bug?”"和"我的技术对哪些bug有效?"取决于对bug及其补丁相关属性的理解。然而,这些属性通常不包括在数据集中,并且仍然没有广泛采用的方法来表征错误和补丁。在这项工作中,我们深入研究了Defects4J数据集的395个补丁。定量属性(补丁大小和蔓延)自动提取,而定性的(修复行动和模式)手动提取使用专题分析为基础的方法。我们发现:1)Defects4J补丁的中值大小为4行,几乎30%的补丁仅包含添加行; 2)92%的补丁仅更改一个文件,38%的补丁根本没有扩展; 3)最常用的前3个修复操作是添加方法调用,条件和赋值,发生在77%的补丁中; 95%的斑块有9种修复模式,其中条件块修复模式最多,占斑块总数的43%。这些结果有助于研究人员基于Defects4J对其技术结果进行高级分析。此外,我们的属性集可用于表征和比较不同的bug数据集。
2018-02-05 cs.SE
Practical Program Repair via Bytecode Mutation
软件调试本身是乏味的、耗时的,甚至容易出错。因此,在文献中已经提出了各种自动化调试技术来促进调试过程。自动程序修复(APR)是自动调试的最新进展之一,它可以直接为有缺陷的程序生成补丁,只需最少的人为干预。尽管已经提出了各种先进的APR技术(包括基于搜索或基于语义的技术),但是简单化的基于变异的APR技术,其简单地使用预定义的变异算子(例如,将a>=b改变为a>b)来改变程序以寻找补丁,还没有被彻底研究。在本文中,我们实现了第一个实用的字节码级APR技术,PraPR,并提出了第一个关于修复现实世界错误的广泛研究(例如,defects4J bugs)使用字节码突变。实验结果表明,令人惊讶的是,即使只有基本的传统突变体的PraPR也可以为18个错误生成真正的补丁。此外,使用我们的增强突变器,PraPR能够为43个错误生成真正的补丁,显著优于最先进的APR。它也快了一个数量级,表明基于字节码突变的APR有着光明的未来。
2018-07-10 cs.SE
Invariant-based Program Repair
本文提出一种基于程序不变量的形式化通用自动化程序修复框架,通过动态推断正确与可疑不变量并结合严格程序分析生成和验证补丁,且在性能错误修复中验证了其有效性。
2024-01-26 cs.SE
When Automated Program Repair Meets Regression Testing -- An Extensive Study on 2 Million Patches
本文首次在超过200万个补丁上系统研究了不同粒度回归测试选择技术对12个先进APR系统的影响,揭示了将RTS应用于APR以降低补丁执行成本的实用指南。
2024-07-02 cs.SE
Red Teaming Program Repair Agents: When Correct Patches can Hide Vulnerabilities
Columbia University(哥伦比亚大学);University of Southern California(南加州大学)
本文提出SWExploit,通过对抗性GitHub issue诱导APR智能体生成功能正确但含漏洞的补丁,实验攻击成功率最高达0.91,揭示仅以测试通过评估补丁安全性的范式缺陷。
2026-10-30 cs.SE
Automated Patch Assessment for Program Repair at Scale
在本文中,我们做的程序修复系统生成的补丁的自动正确性评估。我们将人类书写的补丁视为地面真实预言,并基于它随机生成测试,这是Shamshiri等人提出的一种技术,随机地面真值测试(RGT)。我们建立了一个由14个最先进的修复系统生成的638个Defects 4J补丁的策展数据集,我们在这个数据集上评估了自动补丁评估。本研究的结果是新颖的和有意义的:第一,我们提高了最先进的性能与RGT的自动补丁评估的190%,通过改进的预言;第二,我们表明,RGT是足够可靠的,以帮助科学家做过拟合分析,当他们评估程序修复系统;第三,我们提高了程序修复知识的外部效度与最大的研究。
2021-05-07 cs.SE
Patch Space Exploration using Static Analysis Feedback
本研究提出一种利用静态分析(不正确性分离逻辑)反馈指导自动程序修复的方法,通过创建等效补丁类减少验证次数,在无测试用例下高效修复内存安全问题。
2023-08-01 cs.SE
Refine After Generation: Toward Correct and Concise Patches in LLM-based Program Repair
City University of Hong Kong(香港城市大学);Aalto University(阿尔托大学);Jisuan Institute of Technology(计算技术研究所);University of Alberta(阿尔伯塔大学)
针对基于LLM的程序修复中补丁冗余问题,提出RECAP适配器,在保留或提升解决率的同时,大幅降低补丁大小,实现更优的大小-正确性权衡。
2026-08-14 cs.SE
CFAAR: Control Flow Alteration to Assist Repair
我们提出CFAR,程序修复援助技术,通过选择性地改变可疑谓词的结果,以产生预期的行为。CFAAR适用于在特定条件下通过否定谓词可修复的缺陷。CFAAR的收益如下:1)它识别谓词,使得在给定实例处否定它们将使失败的测试表现出正确的行为; 2)对于每个候选谓词,它使用程序状态信息来构建指示何时应该否定谓词的分类器; 3)对于每个分类器,它利用决策树来合成要呈现给开发人员的补丁。我们使用IntroClass和Siemens基准测试中的149个缺陷来评估我们的工具集。CFAR确定了91个潜在的候选缺陷,并为其中41个生成了合理的补丁。其中12个补丁被认为是正确的,而其余的则为开发人员提供修复帮助。
2018-08-28 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
FixMiner: Mining Relevant Fix Patterns for Automated Program Repair
本研究提出FixMiner方法,通过对补丁原子变更的迭代聚类、利用富编辑脚本的多树表示挖掘可复用修复模式,集成到PARFixMiner后可修复Defects4J中26个漏洞,合理补丁正确率达81%。
2019-09-30 cs.SE
Patch Validation in Automated Vulnerability Repair
Northwestern University(西北大学);University of Waterloo(滑铁卢大学);University of New Hampshire(新罕布什尔大学)
本文提出PVBench基准测试,揭示现有自动漏洞修复系统在补丁验证中存在显著误差,指出需提升根因分析、规范遵循和开发者意图捕捉能力。
2026-03-20 cs.SE
Beyond Crash-to-Patch: Patch Evolution for Linux Kernel Repair
University of Illinois Chicago(伊利诺伊大学芝加哥分校);Indiana University(印第安纳大学)
本文研究Linux内核修复的补丁演变过程,提出PatchAdvisor框架,通过整合检索与诊断顾问,提升修复质量与审查一致性。
2026-04-04 cs.OS cs.SE
PathFix: Automated Program Repair with Expected Path
PathFix提出一种基于期望路径的自动化程序修复方法,通过路径敏感约束生成补丁,并集成大语言模型,在循环和递归等复杂结构上表现更优。
2025-10-16 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
ComPass: Contrastive Learning for Automated Patch Correctness Assessment in Program Repair
Nanjing University of Science and Technology(南京理工大学);Nanjing University(南京大学)
ComPass利用对比学习和数据增强解决程序修复中补丁过拟合问题,通过代码转换规则生成语义保持的代码片段,提升补丁正确性评估的准确性。
2026-04-06 cs.SE
Mitigating Error Propagation in Chain-of-Thought: A Tree-of-Thought Framework for Smart Contract Repair
Hainan University(海南大学)
针对智能合约修复中线性推理导致的错误累积问题,提出思维树框架,结合文档解析、静态分析与Tree of Thoughts推理,在50个真实漏洞上测试,性能优于ContractTinker。
2026-08-25 cs.CR 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
Conversational Automated Program Repair
University of Illinois at Urbana-Champaign(伊利诺伊大学厄巴纳-香槟分校)
自动程序修复(APR)可以帮助开发人员自动生成bug补丁。由于使用大型预训练语言模型(LLM)在许多代码相关任务上获得了令人印象深刻的性能,研究人员已经开始直接使用LLM进行APR。然而,先前的方法简单地重复采样LLM,给出从原始错误代码创建的相同构造的输入/提示,这不仅导致重复生成相同的错误补丁,而且还错过了测试用例中的关键信息。为了解决这些局限性,我们提出了会话式APR,一种新的模式,程序修复,交替补丁生成和验证之间的对话方式。在会话式APR中,我们通过将先前生成的补丁与验证反馈相结合来迭代地构建模型的输入。因此,我们利用LLM的长期上下文窗口,不仅可以避免生成以前不正确的补丁,而且还可以结合验证反馈,以帮助模型理解被测程序的语义含义。我们评估了10种不同的LLM,包括新开发的ChatGPT模型,以证明会话式APR比APR方法的先前LLM的改进。
2023-01-30 cs.LG cs.SE
Evaluating Representation Learning of Code Changes for Predicting Patch Correctness in Program Repair
自动程序修复的大量文献开发了生成补丁以针对oracle进行验证的方法(例如,测试套件)。因为这样的预言机可能是不完美的,所以生成的补丁尽管经过了预言机的验证,但实际上可能是不正确的。虽然最先进的探索研究方向,需要动态信息或依赖于手工制作的算法,我们研究学习代码表示的好处,学习深度功能,可能编码的补丁正确性的属性。我们的工作主要是研究不同的表示学习方法的代码变化,以获得嵌入,是服从相似性计算。我们报告基于预训练和重新训练的神经网络产生的嵌入的结果。实验结果表明,嵌入的潜力,使学习算法在推理补丁的正确性:机器学习预测器与BERT变换为基础的嵌入与逻辑回归产生的AUC值约为0.8预测补丁的正确性去重复数据集的1000标记的补丁。我们的研究表明,与依赖于动态信息的最先进的PATCH-SIM相比,学习表示可以带来合理的性能。这些表示可以进一步补充文献中仔细(手动)设计的特征。
2020-08-07 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
How Safe Are AI-Generated Patches? A Large-scale Study on Security Risks in LLM and Agentic Automated Program Repair on SWE-bench
Drexel University(德雷塞尔大学);Virginia Commonwealth University(弗吉尼亚共同wealth大学)
本研究评估了LLM和代理框架生成补丁的安全性,发现LLM引入新漏洞,代理工作流在自主权高时也产生漏洞,需考虑上下文因素进行风险评估。
2026-11-03 cs.CR cs.LG cs.SE
Adversarial Reasoning for Repair Based on Inferred Program Intent
针对自动程序修复中补丁过度拟合测试套件的问题,提出AdverIntent-Agent多智能体方法,通过对抗性推理推断程序意图并生成测试和补丁,在Defects4J 2.0和HumanEval-Java上分别修复77和105个缺陷。
2025-06-20 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
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
Can defects be fixed with weak test suites? An analysis of 50 defects from Defects4J
自动程序修复技术,其目标是自动生成正确的补丁,为现实世界的缺陷,在过去的十年中,得到了很多的关注。已经提出和开发了许多不同的技术和工具。然而,即使是最复杂的程序修复技术也只能修复一小部分缺陷,同时产生大量不正确的补丁。这种低性能的一个可能原因是,真实世界程序的测试套件通常太弱,无法保证程序的行为。为了了解弱测试套件可以在多大程度上修复缺陷,我们分析了来自Defects4J的50个真实世界的缺陷,其中我们发现高达84%的缺陷可以被正确修复。这一结果表明,目前的自动程序修复技术有很大的改进空间。此外,我们总结了七个故障定位策略和七个补丁生成策略,是有用的定位和修复这些缺陷,并比较这些策略与当前的修复技术。研究结果表明,在未来的研究中,提高自动程序修复的潜在方向。
2017-05-12 cs.SE
Neural Program Repair with Program Dependence Analysis and Effective Filter Mechanism
提出一种结合程序切片与过滤机制的神经程序修复框架,利用预训练语言模型修复单行Java错误,在五个基准上优于现有方法。
2023-05-16 cs.SE
Harnessing Evolution for Multi-Hunk Program Repair
尽管在过去的十年中,自动程序修复(APR)技术取得了重大进展,但实际部署仍然是一个难以捉摸的目标。在这方面的重要挑战之一是当前APR技术一般不能产生需要在多个位置编辑的补丁,即,多块补丁在这项工作中,我们提出了一种新的APR技术,推广单大块修复技术,包括一个重要的一类多大块的错误,即错误,可能需要应用一个基本上类似的补丁在一些位置。我们将这些修复位置称为进化兄弟姐妹--在相似的环境中实例化的相似代码,预计会经历相似的变化。我们提出的方法的核心是分析,以准确地识别一组进化的兄弟姐妹,对于一个给定的错误。这个分析利用了三个不同的信息源,即测试套件谱,一个新的代码相似性分析,以及项目的修订历史。发现的兄弟姐妹然后以类似的方式同时修复。我们在一个名为Hercules的工具中实例化了这种技术,并证明它能够正确修复Defects 4J数据集中的49个错误,这是迄今为止任何单独的APR技术中最高的。这包括15个多大块的错误和13个迄今为止还没有被任何其他技术修复的错误。
2019-06-21 cs.SE
Practical Program Repair in the Era of Large Pre-trained Language Models
本研究首次对直接应用大预训练语言模型(PLMs)进行自动化程序修复(APR)开展广泛研究,验证了PLMs在多数据集上的修复效果优于现有技术,并揭示了规模效应和后缀代码的重要性。
2024-12-09 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