Bugs4Q: A Benchmark of Real Bugs for Quantum Programs
可重现错误和修复的实际基准对于调试和测试方法的良好实验评估至关重要。然而,到目前为止,还没有合适的基准测试套件可以系统地评估量子程序的调试和测试方法。本文提出了Bugs4Q,一个基准的36个真实的,手动验证Qiskit错误从四个流行的Qiskit元素(Terra,Aer,Awis,和Aqua),补充测试用例再现错误的行为。Bugs4Q还提供了访问Qiskit程序的错误版本和修复版本以及执行相应测试用例的接口,便于对Qiskit程序调试和测试工具进行可重复的实证研究和比较。Bugs4Q可在https://github.com/Z-928/Bugs4Q上公开获取。
2021-09-20 cs.PL cs.SE
Understanding the Heterogeneity of Contributors in Bug Bounty Programs
背景资料:虽然漏洞赏金计划在软件开发中并不新鲜,但越来越多的公司以及开源项目依赖外部方对其软件进行安全评估以获得奖励。然而,关于漏洞赏金计划贡献者的特征,经验知识相对较少。目的:本文旨在通过强调它们之间的异质性来了解这些贡献者。方法:我们分析了82个bug赏金计划和2,504个不同的bug赏金贡献者的历史,并进行了定量和定性调查。结果如下:我们发现,有特定项目和非特定的贡献者,他们有不同的动机为产品和组织做出贡献。结论:我们的研究结果提供了见解,使错误赏金计划更好地和新的软件开发角色的进一步研究。
2017-09-19 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
OSD: A Source Level Bug Localization Technique Incorporating Control Flow and State Information in Object Oriented Program
面向对象程序的缺陷定位一直是软件工程中的一个重要问题。在本文中,我提出了一个面向对象的嵌入式程序的源代码级错误定位技术。我提出的技术,提出了在类级调试面向对象的程序,将对象的状态信息到类依赖图(ClDG)的想法。给定一个程序(有错误的语句)和一个失败的输入,其他人通过,我的方法使用具体的以及符号执行来合成通过的输入,从失败的输入在他们的控制流行为。对失败输入和通过输入的执行跟踪进行比较,可以为失败的根本原因提供必要的线索。状态跟踪差异,关于各个节点的ClDG,这导致检测程序中的错误。
2011-08-20 cs.SE
STANSE: Bug-finding Framework for C Programs
STANSE是一个免费的(在GPL v2许可下可用)模块化框架,用于使用静态分析查找C程序中的bug。它的两个主要设计目标是:1)处理大型软件项目(如Linux内核)的能力; 2)以最小的工作量使用新的错误查找技术进行扩展。目前在STANSE中实现了四种错误查找算法:Automatonetry检查以基于自动机的形式描述的属性,Threadetry检测多个线程之间的死锁,Locketry基于统计信息查找锁定错误,Reachabilityetry查找无法访问的代码。STANSE已经在Linux内核上进行了测试,发现了数十个以前未发现的bug。
2012-02-03 cs.SE
Directed Test Program Generation for JIT Compiler Bug Localization
针对 JIT 编译器缺陷定位中测试程序生成效果不佳的问题,提出依据种子程序结构定向生成相似通过输入与相异失败输入的方法,实验证明可显著提升定位效果。
2023-07-17 cs.SE
Finding Bug-Inducing Program Environments
本文提出覆盖率引导的系统调用拦截与环境资源变异方法,并通过 AFLChaos 在多个开源项目中自动发现资源处理相关 Bug。
2023-04-20 cs.SE
HyperPUT: Generating Synthetic Faulty Programs to Challenge Bug-Finding Tools
本文提出 HyperPUT,从种子缺陷出发通过增量程序变换自动生成可扩展规模的带缺陷 C 程序,用于多方面挑战现代缺陷发现工具并支持实证评估。
2024-02-02 cs.CR cs.SE
Locating Buggy Segments in Quantum Program Debugging
本文首次针对量子程序调试提出考虑程序段位置依赖测试成本及统计测试精度-成本权衡特性的缺陷定位方法,实验证明其能有效降低以量子门执行数衡量的定位成本。
2024-01-15 cs.SE
Bugfix: a standard language, database schema and repository for research on bugs and automatic program repair
针对自动程序修复领域缺乏统一参照框架的问题,提出Bugfix框架,包括标准语言、数据库和仓库,以支持APR社区试验和比较结果。
2025-02-27 cs.SE
Characterizing Real-World Bugs in Tile Programs for Automated Bug Detection
University of Texas at Dallas(达拉斯大学);Institute of Systems for Advanced Computing, Fudan University(复旦大学高级计算系统研究所);Beijing Tongming Lake Information Technology Application Innovation Center(北京通明湖信息技术应用创新中心);Shanghai Institute of Systems for Open Computing(上海开放计算系统研究所);Key Lab of HCST (PKU), MOE(北京大学计算机辅助设计与图形学教育部重点实验室;计算机科学系,北京大学);SCS, Peking University
本文首次系统研究了Tile程序代码生成中的Bug,通过收集401个GitHubbug报告,识别出301个Tile程序代码生成Bug,分析其根本原因、症状、输入模式、触发测试或acles以及修复策略,为构建针对Tile编译器基础设施的调试、测试和修复工具提供基础见解。
2026-07-30 cs.SE
BUGSPHP: A dataset for Automated Program Repair in PHP
本文提出面向 PHP 的自动化程序修复基准数据集 BUGSPHP,包含超60万条训练提交和513条经人工验证并附带测试用例的测试提交,以填补 PHP 缺陷修复研究的数据空白。
2024-01-21 cs.SE
Learning Likely Invariants to Explain Why a Program Fails
这是困难的。最近的研究表明,自动缺陷定位技术的实用性有限。原因之一是,程序员通常必须了解为什么程序失败之前修复它。在这项工作中,我们的目标是帮助程序员理解一个错误,自动生成可能的不变量,违反了失败的测试。给定一个初始断言和至少一个未通过断言的测试用例的程序,我们首先生成随机测试用例,通过错误定位来识别潜在的错误位置,然后基于主动学习技术生成程序状态变异,以识别“解释”错误原因的谓词。谓词是通过测试用例和失败测试用例的分类器。我们的主要贡献是应用不变量学习的错误解释,以及一种新的方法来克服缺乏测试用例的问题在实践中。我们将我们的方法应用于现实世界的错误,并显示生成的不变量通常与实际的错误修复相关。
2016-10-27 cs.SE
QChecker: Detecting Bugs in Quantum Programs via Static Analysis
本文提出了一种名为QChecker的静态分析工具,通过基于AST提取程序信息和基于模式检测错误的两个模块,有效检测Qiskit量子程序中的错误。
2023-04-10 cs.PL cs.SE
Mining Bug Repositories for Multi-Fault Programs
针对 Defects4J 与 BugsInPy 多为单缺陷条目的局限,本文利用测试用例移植和故障位置转换构建保留原数据集特性的真实多故障程序数据集。
2024-04-10 cs.SE
CMind: An AI Agent for Localizing C Memory Bugs
University of Notre Dame(圣母大学)
CMind通过模拟人类程序员行为,利用大语言模型和引导决策方法,定位C程序中的内存错误。
2026-02-20 cs.SE
Deep Learning for Bug-Localization in Student Programs
Indian Institute of Science(印度科学学院);Google Brain(谷歌大脑)
提供反馈是教学的一个组成部分。大多数关于编程的开放式在线课程都使用自动评分系统来支持编程作业并提供实时反馈。这些系统通常依赖于测试结果来量化程序的功能正确性。他们把不及格的试卷作为反馈给学生。然而,学生们可能会发现,如果他们没有得到关于错误在哪里以及如何修复它的提示,他们很难调试他们的程序。在这项工作中,我们提出了第一个基于深度学习的技术,可以定位错误程序中的错误w.r.t.一个失败的测试,甚至没有运行程序。我们的技术的核心是一种新型的树卷积神经网络,它被训练来预测程序是否通过或失败。为了定位错误,我们使用最先进的神经预测归因技术分析训练的网络,并查看程序的哪些行使其预测测试结果。我们的实验表明,所提出的技术通常是更准确的两个国家的最先进的程序频谱为基础的和一个语法差异为基础的错误定位基线。
2019-05-28 cs.LG cs.SE
Bug Characteristics in Quantum Software Ecosystem
随着近年来量子计算的发展,量子软件对于探索量子计算系统的全部潜力至关重要。量子编程不同于经典编程,例如,量子程序的状态本质上是概率性的,并且由于量子机制的不稳定性,量子计算机容易出错。因此,量子软件项目中的bug的特征可能与经典软件项目中的bug有很大不同。这项工作旨在了解量子软件项目中错误的特征,以便提供见解,帮助设计有效的测试和调试机制。为了实现这一目标,我们对125个量子软件项目的错误报告进行了实证研究。我们观察到量子软件项目比经典软件项目更容易出错,并且量子项目的错误比经典项目的错误修复成本更高。我们还确定了错误的类型和它们发生的量子编程组件。我们的研究表明,错误分布在不同的组件中,但量子特定的错误特别出现在编译器,门操作和状态准备组件中。最常见的三种错误类型是程序异常错误、配置错误和数据类型和结构错误。我们的研究强调了量子软件开发中一些特别具有挑战性的领域,例如缺乏科学的量子计算库来实现量子计算的综合数学函数。量子开发人员还寻求专门的量子软件工程数据操作库,如量子计算的Numpy。我们的研究结果还为未来的工作提供了见解,以推进量子软件的量子程序开发,测试和调试,例如为调试低级电路提供工具支持。
2022-04-25 cs.SE
Network-Clustered Multi-Modal Bug Localization
Singapore Management University(新加坡管理大学)
开发人员经常花费大量的精力和资源来调试程序。为了帮助开发人员调试,许多基于信息检索(IR)和基于频谱的错误定位技术已经被设计出来。基于IR的技术处理错误报告中的文本信息,而基于谱的技术处理程序谱(即,对于每个测试用例执行哪些程序元素的记录)。虽然这两种技术最终都会生成一个可能包含bug的程序元素的排序列表,但它们只考虑一个信息源--bug报告或程序谱--这不是最佳的。针对这一不足,本文提出了一种新的网络聚类多模态错误定位方法(NetML),该方法利用来自错误报告和程序谱的多模态信息对错误进行定位。NetML通过执行错误定位误差的联合优化以及错误报告和程序元素的聚类(即,方法)。聚类是通过结合网络Lasso正则化来实现的,它激励相似错误报告和相似程序元素的模型参数靠近在一起。为了估计错误报告和方法的模型参数,NetML采用了一种基于牛顿方法的自适应学习过程,该过程在每个特征的基础上更新参数。我们对来自7个软件系统的355个真实错误进行了广泛的实验,以针对各种最先进的本地化方法对NetML进行基准测试。结果显示,NetML在开发人员检查前1、5和10种方法时成功定位的错误数量以及平均平均精度(MAP)方面分别超过了最佳性能基线31.82%、22.35%、19.72%和19.24%。
2018-02-27 cs.IR cs.LG cs.SE
MUZZ: Thread-aware Grey-box Fuzzing for Effective Bug Hunting in Multithreaded Programs
灰盒模糊测试由于其轻量级的测试工具、快速的覆盖反馈和动态调整策略,已经揭示了真实世界软件中成千上万的漏洞。然而,直接将灰盒模糊应用于依赖于输入的多线程程序可能效率极低。在实践中,多线程相关的错误通常隐藏在复杂的程序流中。同时,现有的灰盒模糊技术没有强调线程交织影响多线程程序的执行状态。因此,主流的灰盒模糊器不能有效地测试多线程程序中的问题段,尽管他们可能会获得高的代码覆盖率统计。为此,我们提出MUZZ,一个新的灰盒模糊技术,在多线程程序中的错误狩猎。MUZZ拥有三种新颖的线程感知插装,即面向覆盖插装、线程上下文插装和调度干预插装。在模糊化过程中,这些工具产生运行时反馈,以强调线程交织引起的执行状态。通过利用动态种子选择和执行策略中的反馈,MUZZ保留了更多有价值的种子,这些种子在多线程上下文中暴露了错误。我们在12个真实世界的软件程序上评估MUZZ。实验表明,MUZZ在多线程相关种子生成和并发漏洞检测方面优于AFL。此外,通过针对生成的种子重放目标程序,MUZZ还揭示了更多的并发错误(例如,数据竞争,线程泄漏)比AFL。MUZZ总共检测到8个新的并发漏洞和19个新的并发错误。在撰写本文时,已为报告的问题分配了4个CVE ID。
2020-07-31 cs.SE
Less is More: Adaptive Program Repair with Bug Localization and Preference Learning
Zhejiang University(浙江大学);Hohai University(河海大学);Guizhou University(贵州大学)
本文提出自适应程序修复任务 AdaPR 及两阶段方法 AdaPatcher,通过缺陷定位与偏好学习在保持代码一致性的同时以最小修改生成补丁,实验表明其效果显著优于基线方法。
2025-03-09 cs.CL cs.SE
BugsInPy: A Database of Existing Bugs in Python Programs to Enable Controlled Testing and Debugging Studies
受Java缺陷基准Defects4J启发,本研究构建了包含17个真实Python项目493个真实缺陷的BugsInPy基准数据库及工具,以填补Python测试调试基准的不足,推动相关工具研究发展。
2024-01-27 cs.SE
One Bug, Hundreds Behind: LLMs for Large-Scale Bug Discovery
IBM Research(IBM研究院);William & Mary(威廉与玛丽大学)
本文针对大型程序中反复出现但未解决的重复模式Bug,提出基于LLVM和LLM的BugStone系统,利用已修补实例识别错误模式,在Linux内核中发现大量新问题,并构建数据集验证其高效性。
2025-10-15 cs.AI cs.SE
If It's Not Buggy, Don't Fix It: On the Dynamics of Iterative Bug-fixing with LLMs
University of Warwick(华威大学);UnlikelyAI
本研究探讨LLM迭代式盲目修复缺陷的动态,发现其常误报无缺陷程序并陷入伪修复循环,机制探针揭示存在控制编辑倾向的引导向量,为自主修复系统提供见解。
2026-09-10 cs.CL cs.SE
Towards More Reliable Automated Program Repair by Integrating Static Analysis Techniques
自动程序修复的一个长期存在的公开挑战是过拟合问题,这是由于没有足够或不完整的规范来验证生成的补丁是否正确而引起的。大多数可用的修复系统依赖于弱规范(即,从测试用例合成的规范),这限制了生成的修复的质量。为了加强规范和提高修复的质量,我们建议更紧密地结合静态错误检测技术与自动程序修复。该集成将自动程序修复与静态分析技术相结合,使得错误检测模式可以合成为修复系统可以使用的规范。我们探索这种集成使用两种类型的错误的可行性:算术错误,如整数溢出,和逻辑错误,如终止错误。作为我们分析的一部分,我们提出了一些意见,有助于提高这些类别的错误补丁生成。此外,这些观察有助于缩小候选块搜索空间,并推断有效的搜索顺序。
2021-11-10 cs.SE
On Repairing Quantum Programs Using ChatGPT
针对量子编程领域缺乏自动化程序修复技术的问题,该研究探索用ChatGPT修复量子程序,在Bugs4Q基准上实现38个漏洞中29个的成功修复,为量子程序修复自动化提供了可行方向。
2024-01-26 cs.PL cs.SE
Hierarchical Knowledge Injection for Improving LLM-based Program Repair
Drexel University(德雷塞尔大学);Belmont University(贝尔蒙特大学);Florida State University(佛罗里达州立大学)
本文提出分层知识注入框架,通过逐步提供结构化上下文提高LLM在程序修复中的表现,实现79%的修复率,展示不同bug类型对上下文层次的需求差异。
2025-10-03 cs.SE
Automated Customized Bug-Benchmark Generation
我们介绍了错误注入器,一个系统,自动创建基准定制评估的静态分析工具。我们分享了一个使用Bug-Injector生成的基准测试,并通过使用它来评估两个领先的开源静态分析工具Clang Static Analyzer和Infer的召回率来说明其有效性。Bug-Injector的工作原理是将基于bug模板的bug插入到真实世界的主机程序中。它在宿主程序上运行测试以收集动态跟踪,在跟踪中搜索状态满足某个bug模板的前提条件的点,然后修改宿主程序以基于该模板注入bug。注入的bug被用作静态分析工具评估基准中的测试用例。每个测试用例都伴随着一个程序输入,用于执行注入的bug。我们已经确定了广泛的需求和缺陷基准的desiderata;我们的方法生成的按需测试基准,满足这些要求。它还允许我们创建适合于评估特定用例(例如,给定的代码库和一组错误类型)。我们的实验评估表明,我们所生成的基准评估静态错误检测工具,并比较不同的工具的性能的适用性。
2019-09-06 cs.PL cs.SE
Closed source versus open source in a model of software bug dynamics
我们介绍了一个简单的微观描述的软件错误动态用户,程序员和维护人员通过一个给定的程序进行交互,特别强调错误的创建,检测和修复。当程序从零开始编写时,开发的第一阶段的特点是错误数量快速下降,然后是一个缓慢的阶段,大多数错误已经被修复,因此很难找到。立即发布bug修复可以加快调试过程,这也是bazaar开源方法论的实质。我们提供了一个数学分析,支持我们的数值模拟。最后,我们将我们的模型应用于Linux的历史,并确定其程序员的质量存在一个下限。
2005-09-05 cond-mat.stat-mech cs.SE
Katana: Dual Slicing-Based Context for Learning Bug Fixes
上下文信息在软件开发人员理解和修复错误时起着至关重要的作用。因此,基于深度学习的程序修复技术利用上下文进行错误修复。然而,现有的技术以任意的方式处理上下文,通过在封闭文件、类或方法内提取与错误语句非常接近的代码,而不进行任何分析以找到与错误的实际关系。为了减少噪音,它们对用作上下文的令牌数量使用预定义的最大限制。我们提出了一个程序切片为基础的方法,而不是任意包括作为上下文的代码,我们分析的语句有一个控制或数据依赖的错误语句。我们提出了一个新的概念,称为双切片,它利用的上下文中的错误和固定版本的代码来捕获相关的修复成分。我们提出了我们的技术和工具,称为武士刀,第一个应用基于切片的上下文程序修复任务。结果表明,Katana有效地保留了足够的信息,供模型选择上下文信息,同时降低噪声。我们比较了最近四个国家的最先进的上下文感知程序修复技术。我们的研究结果表明,Katana修复的错误是现有技术的1.5到3.7倍。
2022-12-05 cs.SE
Characterizing Bugs in Python and R Data Analytics Programs
该研究通过分析Stack Overflow帖子、GitHub修复提交与Issue,系统对比了R和Python数据分析程序的Bug类型、根本原因及关联,得出多维度差异结论并贡献了人工验证的Bug数据集。
2023-06-14 cs.SE
Benchmarking Large Language Models on Repairing Qiskit Programs using Bugs4Q
University of Maryland, Baltimore County(马里兰大学巴尔的摩县分校);Indian Institute of Technology Hyderabad(印度理工学院海得拉巴分校)
研究使用 Bugs4Q 对修复 Qiskit 程序的大语言模型进行基准测试,评估两个含 67 个缺陷的 Bugs4Q 版本,在六个 Qiskit 版本上测试四个大语言模型,发现问题并发布重新验证的基准测试,强调基准验证先于修复评估。
2026-07-13 cs.SE quant-ph
Effects of Hints on Debugging Scratch Programs: An Empirical Study with Primary School Teachers in Training
学习者程序中的错误通常是基本误解的结果。教师经常面临的挑战是,首先必须了解这些错误,然后提出修复它们的方法。为了使教师能够有效和高效地这样做,最好支持他们识别和修复错误。误解通常会导致类似错误的重复模式,从而使自动化工具能够在常见错误模式出现时提供提示。在本文中,我们调查在何种程度上的提示提高了教师在调试学习者的程序使用一个队列的163名小学教师的培训,任务是纠正错误的Scratch程序的有效性和效率,有和没有提示的错误模式。我们的实验表明,自动生成的提示可以将查找和修复错误的时间从8.66分钟减少到5.24分钟,同时将正确解决方案的有效性提高34%。虽然这种改进是令人信服的,但可以说,培训中的教师可能首先需要学习调试“艰难的方式”,以免错过依靠工具学习的机会。因此,我们调查是否在训练过程中使用提示影响他们的能力,以识别和修复错误没有提示。我们的实验没有提供任何重要的证据表明,无论是学习调试与提示或学习调试“困难的方式”导致更好的学习效果。总的来说,这表明,错误模式可能是一个有用的概念,包括在课程中的教师培训,而工具支持,以认识到这些模式是可取的教师在实践中。
2021-08-16 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
REINS: Agent-guided Thread Scheduling for Concurrency Bug Detection and Reproduction
The University of Queensland(昆士兰大学);Carnegie Mellon University(卡内基梅隆大学)
REINS是一种智能体引导线程调度的方法,通过利用并发语义与缺陷模式优化调度,在有限预算内更高效检测并发缺陷,还在实际项目中发现6个未知缺陷且3个获开发者确认。
2026-10-12 cs.SE
Adversarial Patch Generation for Automated Program Repair
提出基于GAN的NEVERMORE模型,利用历史缺陷修复数据生成类人修复方案,在500个真实缺陷上21.2%匹配人类修复,并解决多个基线未修复的缺陷。
2023-09-03 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
How Often Do Single-Statement Bugs Occur? The ManySStuBs4J Dataset
程序修复是软件工程中的一个重要而又困难的问题。实现可接受性能的一种方法是关注简单bug的类,例如具有单个语句修复的bug,或者匹配一小组bug模板的bug。然而,很难估计简单错误的修复技术的召回率,因为没有关于相关错误在代码中发生频率的数据集。为了填补这一空白,我们提供了一个数据集,其中包含从1,000个流行的开源Java项目中挖掘出来的153,652个单语句错误修复更改,并通过它们是否匹配16个错误模板中的任何一个进行了注释,这些模板的灵感来自最先进的程序修复技术。在最初的分析中,我们发现大约33%的简单错误修复与模板匹配,这表明相当数量的单语句错误可以用相对较小的模板集修复。此外,我们发现模板拟合错误的出现频率约为每1,600 - 2,500行代码中出现一个错误(以项目最新版本的大小衡量)。我们希望该数据集将证明为未来的工作在程序修复和经验软件工程的研究资源。
2020-04-10 cs.PL 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
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
On the Bug-proneness of Structures Inspired by Functional Programming in JavaScript Projects
受函数式编程启发的语言构造已经进入了大多数主流程序设计语言。许多研究人员和开发人员认为,这些结构导致程序更简洁,可重用,更容易理解。然而,很少有研究调查在主流程序设计语言中使用它们的影响。本文量化了JavaScript中与函数式编程相关的四个概念:递归、不变性、惰性求值和函数作为值。我们专注于JavaScript程序,因为这些概念中的一些在语言中的可用性,因为它的灵感来自函数式程序设计语言,以及它的流行。我们挖掘了91个GitHub存储库(2200多万个),其中大部分是用JavaScript编写的(超过50%的代码),从静态和时间角度衡量这些概念的使用情况。我们还测量了错误修复提交删除这些概念的可能性(这将暗示错误倾向)以及它们与代码注释的存在(这将暗示代码难以理解)的关联。我们发现,这些概念被广泛使用(每46.65个,43.59%的人)。此外,高阶函数、不变性和惰性求值相关结构的使用在这些年来一直在增长,而递归、回调和承诺的使用却在减少。我们还发现统计证据表明,除了与不变性相关的结构之外,删除这些结构在bug修复提交中比在其他提交中更不常见。此外,它们的存在与评论大小无关。我们的研究结果表明,函数式编程的概念是很重要的开发人员使用多范式语言,他们的使用不会使程序更难理解。
2022-06-17 cs.PL cs.SE
Diff-Based Code Corruption using LLMs for Large-Scale Bugfix Benchmarking
Eötvös Loránd University(罗兰大学);Faculty of Informatics(信息学学院)
提出MegaBugFix,一个包含12,629个由LLM通过差异生成的有缺陷Python程序的大规模基准,用于评估模型错误修复能力,发现现有模型在此基准上表现更差。
2026-07-02 cs.AI cs.SE
Revisiting ssFix for Better Program Repair
自动程序修复(APR)技术的一个分支着眼于查找和重用现有代码以进行错误修复。ssFix是基于语法搜索的技术之一:它在代码数据库中搜索与bug上下文语法相似的代码片段,并重用这些检索到的代码片段来生成补丁。使用这样的语法方法,ssFix是相对轻量级的,并且表现出优于许多其他APR技术。在本文中,为了研究ssFix的真正有效性,我们进行了多个实验来验证ssFix的内置假设(即,以了解是否经常可以重用现有代码进行错误修复),并评估其代码搜索和代码重用方法。我们的研究结果表明,虽然ssFix的基本思想,即,重用现有代码进行错误修复是有希望的,ssFix使用的方法不是最好的,可以显着改进。我们提出了一种新的修复技术sharpFix,它遵循ssFix的基本思想,但不同的代码搜索和重用方法。我们在两个bug数据集上评估了sharpFix和ssFix:Defects 4J和Bugs.jar-ELIXIR。结果证实sharpFix是ssFix的改进。对于Defects 4J数据集,sharpFix成功修复了总共36个错误,并且在修复更多错误方面优于许多现有的修复技术。对于Bugs.jar-ELIXIR数据集,我们比较了sharpFix、ssFix和其他四种APR技术,发现sharpFix具有最佳的修复性能。从本质上讲,本文展示了如何有效的句法搜索为基础的方法可以和什么技术应该用于这样的方法。
2019-03-11 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
iFixR: Bug Report driven Program Repair
问题跟踪系统通常用于现代软件开发中,用于收集来自用户和开发人员的反馈。软件维护的最终自动化目标是系统化的补丁生成用户报告的错误。虽然这一雄心与自动程序修复的势头一致,但到目前为止,文献大多集中在生成和验证设置上,其中故障定位和补丁生成由定义良好的测试套件驱动。然而,一方面,对于大多数开发环境,存在相关测试用例的常见(但很强)假设在实践中并不成立:许多错误报告没有可用的测试套件能够揭示它们。另一方面,对于许多项目,bug报告的数量通常超过了可用于分类它们的资源。为了增加从业者采用补丁生成工具,我们调查了一个新的修复管道,iFixR,驱动的错误报告:(1)错误报告被馈送到一个基于IR的故障定位器;(2)补丁生成的修复模式,并通过回归测试验证;(3)优先级列表生成的补丁,建议开发人员。我们在我们丰富的Defects 4J数据集上评估iFixR(即,故障被链接到错误报告)并仔细地重新组织(即,测试用例的时间轴自然地被分割)。iFixR使用其基于IR的故障定位器为21/44 Defects 4J故障生成真实/合理的补丁。iFixR准确地将真实/合理的补丁置于其对这些故障中的8/13的前5个建议中(在生成和验证中不使用未来的测试用例)。
2019-07-12 cs.SE
Enhanced Bug Prediction in JavaScript Programs with Hybrid Call-Graph Based Invocation Metrics
针对 JavaScript 静态分析不精确导致函数级缺陷预测受限的问题,提出融合静态特征与混合调用图 HNII/HNOI 度量的模型,并在 BugsJS 的 ESLint 数据上验证性能提升 2–10%。
2024-05-12 cs.SE
Abstain and Validate: A Dual-LLM Policy for Reducing Noise in Agentic Program Repair
Google, USA(谷歌公司);Meta, USA(Meta公司)
本文提出双LLM策略,通过bug回避和补丁验证减少代理程序修复中的噪声,提升修复成功率和可靠性。
2026-01-29 cs.AI cs.SE
Review4Repair: Code Review Aided Automatic Program Repairing
内容:基于学习的自动程序修复技术有望为软件源代码中检测到的错误提供质量修复建议。这些工具主要利用错误和修复代码更改的历史数据,并且在应用于新代码时严重依赖错误定位器。随着代码审查的日益普及,对bug定位器的依赖可以减少。此外,基于代码评审的错误定位更值得信赖,因为评审员的专业知识和经验反映在这些建议中。目的:评审评论中的自然语言说明是关于bug的性质和预期解决方案的大量信息来源。然而,据我们所知,没有一个基于学习的工具利用评审注释来修复编程错误。在这项研究中,我们调查的性能改善修复技术使用代码审查意见。方法:我们对55,060个代码评审和相关的代码变更进行了序列到序列模型的训练。我们还介绍了新的标记化和预处理方法,这些方法有助于实现对最先进的基于学习的修复技术的显着改进。结果:我们将前1名的准确率提高了20.33%,前10名的准确率提高了34.82%。我们可以为现有技术未解决的文体和非代码错误提供建议。结论:我们相信,通过我们的方法生成的自动修复建议以及代码审查将帮助开发人员快速正确地处理审查评论,从而节省他们的时间和精力。
2020-10-06 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
FReD: Automated Debugging via Binary Search through a Process Lifetime
可逆调试器至少从1970年就开始开发了。当bug的原因与bug的表现时间接近时,这样的特性非常有用。如果原因很久以前,则可以在调试器中设置适当的断点并开始新的调试会话。对于这些情况,当一个错误的原因是远远从它的表现时间,错误诊断需要一系列的调试会话,以缩小错误的原因。对于这样的“困难”的错误,这项工作提出了一个自动化的工具,通过进程的生命周期搜索,并找到原因。例如,该错误可能与程序不变式失败有关。在整个进程生命周期中进行二分搜索就足够了,因为在程序执行开始时不变表达式为真,而在遇到bug时为假。在FReD(快速可逆搜索器)软件中提出了一种用于这种二分搜索的算法。它基于检查点、重新启动和确定性地重放调试会话的多个进程的能力。它基于GDB(调试器),DMTCP(用于检查点重启)和DMTCP的自定义确定性记录重放插件。FReD支持复杂的、真实世界的多线程程序,如MySQL和Firefox。此外,二分搜索是鲁棒的。它在多线程程序上运行,并在重放期间利用多核架构。
2012-12-20 cs.SE
Configuring Test Generators using Bug Reports: A Case Study of GCC Compiler and Csmith
University of Houston(休斯顿大学)
编译器的正确性对其他软件系统的安全性和可靠性至关重要,因为编译器中的错误可能会产生不反映程序员意图的可执行文件。这样的错误很难识别和调试。随机测试程序生成器是编译器测试中常用的一种工具,它在发现编译器中的错误方面有很好的效果。然而,引导这些测试生成器生成更有可能发现错误的测试程序的问题仍然具有挑战性。在本文中,我们使用错误报告中的代码片段来指导测试生成。这项工作的主要思想是从错误报告中提取关于更容易实现不充分的语言功能的见解,并使用这些见解来指导测试生成器。我们使用GCC C编译器来评估这种方法的有效性。特别地,我们首先根据GCC错误报告中的测试程序的特征对其进行聚类。然后,我们使用集群的质心来计算Csmith的配置,Csmith是一个流行的C编译器测试生成器。我们在八个版本的GCC上评估了这种方法,发现我们的方法提供了更高的覆盖率,并触发了比GCC最先进的测试生成技术更多的错误编译失败。
2021-03-18 cs.LG cs.PL 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
Bug Hunters' Perspectives on the Challenges and Benefits of the Bug Bounty Ecosystem
尽管研究人员已经从平台和程序的角度描述了bug赏金生态系统的特征,但很少有人去理解主要工作者的观点:bug猎人。为了提高bug奖励,重要的是要了解猎人的激励因素,挑战和整体利益。我们解决这一研究差距与三项研究:确定关键因素,通过自由上市调查(n=56),评级每个因素的重要性与较大的比例因子评级调查(n=159),并进行半结构化访谈,以揭示细节(n=24)。在bug猎人列出的54个因素中,我们发现奖励和学习机会是最重要的好处。此外,我们发现范围是程序之间的最大区别。令人惊讶的是,我们发现获得声誉是猎人最不重要的动机之一。在我们确定的挑战中,沟通问题,如反应迟钝和争议,是最实质性的。我们提出建议,使bug赏金生态系统适应更多的bug猎人,并最终增加在一个未充分利用的市场的参与。
2023-03-07 cs.CR cs.SE
Adversarial Bug Reports as a Security Risk in Language Model-Based Automated Program Repair
Nicolaus Copernicus University(尼古拉·哥白尼大学);TU Wien(维也纳工业大学)
本文研究对抗性错误报告对基于大语言模型的自动程序修复系统的安全威胁,通过实证分析发现现有防御措施不足,并提出自动化生成对抗性错误报告的原型框架。
2026-01-26 cs.SE