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
FPA-FL: Incorporating Static Fault-proneness Analysis into Statistical Fault Localization
尽管在自动故障定位的统计方法的适用性证明,这些方法是有偏见的程序的不同执行收集的数据。这种偏倚可能导致不稳定的统计模型,该模型可能会因程序试验执行所提供的测试数据而异。针对这一问题,本文提出了一种基于弹性网络回归的故障倾向性统计方法,即FPA-FL。FPA-FL的主要思想是考虑程序语句的静态结构和错误倾向,以及它们与程序终止状态的动态相关性。FPA-FL的分组效应有助于发现多个故障并支持可扩展性。为了提供失败的上下文,程序故障的因果链被发现。FPA-FL是从不同的角度对著名的测试套件进行评估。结果表明,高故障定位性能,我们的方法相比,在文献中的类似技术。
2017-12-09 cs.SE
Exception-Driven Fault Localization for Automated Program Repair
自动程序修复(APR)技术通常利用基于频谱的故障定位(SBFL)来识别应当被修补的程序位置,使得APR技术的有效性取决于故障定位的有效性。事实上,结果表明,SBFL往往不本地化故障准确,阻碍了有效性的APR。在本文中,我们提出了EXCEPT,一种技术,解决本地化问题,专注于语义的失败,而不是执行语句和失败的测试之间的相关性,SBFL。我们专注于故障由于异常,我们利用他们的类型和来源定位和猜测故障。对Defects4J基准测试中的43个异常引发错误的实验表明,EXCEPT的性能优于Ochiai和ssFix。
2022-01-03 cs.SE
Evaluating Mutation-based Fault Localization for Quantum Programs
本文评估 MBFL 在 Qiskit 量子程序调试中的效果,通过真实与人工故障实验表明其潜力及在真实故障上的局限。
2025-05-14 cs.SE
Inforence: Effective Fault Localization Based on Information-Theoretic Analysis and Statistical Causal Inference
在本文中,一种新的方法,Inforence,提出了隔离可疑的代码,可能包含故障。Inforence采用了一种基于互信息的特征选择方法,以识别那些可能导致程序失败的错误相关语句。由于大多数程序故障可能会被揭示为不希望的联合效果的程序语句对彼此和程序终止状态,不像国家的最先进的方法,信息试图识别和选择组相互依赖的语句,这完全可能影响程序故障。语句之间的相互依赖性是根据它们对彼此和对程序终止状态的相互影响来衡量的。为了提供失败的上下文,考虑到程序的静态结构,所选择的错误相关语句彼此链接。最后,所产生的因果链排名根据其组合的因果关系对程序失败。为了验证Inforence,我们的实验结果与七套程序,包括西门子套件,gzip,grep,sed,空间,使和bash。实验结果进行了比较,提供了不同的故障定位技术的单故障和多故障程序。实验结果证明了所提出的方法相比,国家的最先进的技术的优越性。
2017-12-09 cs.SE
Reproducing Failures in Fault Signatures
本文提出从故障位置和源代码生成故障签名,在小型可执行程序中重现故障,实验表明该方法可降低复杂度并生成原始程序无法生成的故障输入。
2023-09-20 cs.SE
An Empirical Study on Failed Error Propagation in Java Programs with Real Faults
在测试过程中,开发人员可以在方法的外部或内部放置Oracle。给定错误的执行状态,即,一个与预期的错误不同的错误,如果它被放置在不能访问不正确的程序状态或程序状态不再被破坏的程序点处,则Oracle可能无法暴露该错误。在这种情况下,oracle会受到失败的错误传播的影响。我们进行了一项实证研究,以衡量失败的错误传播缺陷4J,参考基准的Java程序与真正的故障,考虑所有6个项目(386个真正的错误和459个固定的方法)。我们的研究结果表明,失败的错误传播的流行是可以忽略不计的测试时,在单元级。然而,当提供系统级输入时,失败的错误传播的发生率大幅增加。这表明,方法后置条件仅根据外部可观察状态/数据进行预测就足够了,并且在系统级测试时应检查中间步骤。
2020-11-21 cs.SE
Data Poisoning: Lightweight Soft Fault Injection for Python
本文介绍并探讨了数据投毒的思想,这是一种轻量级的对等体系结构技术,用于将错误注入Python程序。这种方法只需要对原始程序进行很小的修改,这有助于评估在Python中原型化或建模的系统的灵敏度。我们提出了不同的故障情况下,可以注入程序使用数据投毒。我们使用Dijkstra的自稳定环算法来说明这种方法。
2016-11-04 cs.SE
CharmFL: A Fault Localization Tool for Python
故障定位是软件调试中最耗时、最容易出错的部分之一。有几种工具可以帮助开发人员进行故障定位过程,但是,它们主要针对用Java和C/C++程序设计语言编写的程序。虽然这些工具本身就很出色,但我们不能忽视Python是一种流行的程序设计语言的事实,仍然缺乏易于使用和方便的Python开发人员故障定位工具。在本文中,我们提出了一个名为“CharmFL”的软件故障定位工具作为PyCharm IDE的插件。该工具采用基于频谱的故障定位(SBFL)来帮助Python开发人员自动分析他们的程序,并在运行时生成有用的数据,然后生成潜在故障程序元素的排名列表(即,语句、函数和类)。因此,我们提出的工具支持不同的代码覆盖类型的可能性,以调查这些类型的分层方法。我们的工具的适用性已通过使用一组实验用例。结果表明,我们的工具可以帮助开发人员有效地找到不同类型的错误在他们的程序中的位置。
2021-08-27 cs.SE
Path Conditions Help to Locate and Localize Faults from Programs
准确、自动地检测程序中的错误,是软件工程的梦想。在这方面的每一次努力都使我们离实现这一目标更近了一步。这些地区的人们在测试、验证和调试方面付出了许多努力。我们正在为这个领域的研究社区提出这样的努力是使用路径条件来生成PLOFC(可能的错误代码行)的最小集合。这是一种运行时间方法,它将通过路径条件和一些相关的算法的帮助,有效地产生最小可能的错误代码行集。在本文中,我们产生可能的故障位置,从程序使用路径条件,可以把积极的影响,程序的静态分析。在此基础上,我们讨论了关于路径条件的基本思想、理论和初步分析结果。这项工作是基于以前的工作,使用的变量依赖故障检测。最后给出了一些应用实例,对软件验证有一定的参考价值。
2013-08-12 cs.SE
An Empirical Study of Fault Localization in Python Programs
本文首次对真实 Python 程序开展多系列大规模故障定位实证研究,基于 BugsInPy 的 135 个故障评估七类技术,并通过 FauxPy 工具复现和比较 Java 相关结论。
2024-03-20 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
Improved Detection and Diagnosis of Faults in Deep Neural Networks Using Hierarchical and Explainable Classification
提出DEFault技术,结合动态与静态特征及层次化分类和可解释AI,检测并诊断DNN程序故障,在14.5K程序上训练,召回率达94%和63%,优于现有方法。
2025-01-22 cs.SE
Program Spectra Analysis in Embedded Software: A Case Study
由于市场的限制,消费电子产品中的嵌入式软件几乎不可避免地带有故障,目标只是在产品发布之前将固有的不可靠性降低到可接受的水平。自动故障诊断是一种有价值的工具,可以捕获软件故障,而无需花费额外的精力进行测试。除了在设计和集成时的调试辅助之外,故障诊断还可以帮助分析操作期间的问题,从而实现更准确的系统恢复。在本文中,我们将讨论应用一个特定的故障诊断技术,即程序谱分析,在消费电子设备的嵌入式软件领域的前景和局限性。我们说明了我们的第一次经验,从行业的测试案例。
2006-07-26 cs.SE
SmartFL: Semantics Based Probabilistic Fault Localization
本文提出SmartFL,一种基于语义的概率故障定位方法,通过仅建模程序值的正确性而非完整语义,在有效性和可扩展性间取得平衡,在Defects4J 2.0上比现有SBFL和MBFL方法提升130%且时间减半。
2025-04-03 cs.SE
Exploring the Potential and Limitations of Large Language Models for Novice Program Fault Localization
College of Information Science and Technology, Beijing University of Chemical Technology(北京化工大学信息科学与技术学院);College of Information Engineering, Beijing Institute of Petrochemical Technology(北京石油化工学院信息工程学院);School of Artificial Intelligence and Computer Science, Nantong University(南通大学人工智能与计算机科学学院)
本文评估了LLM在初级程序员故障定位中的性能,发现高级模型在准确性上表现优异,但存在推理过度和计算成本高等问题。
2025-12-03 cs.SE
Towards Fault Localization via Probabilistic Software Modeling
软件测试帮助开发人员识别bug。然而,意识到bug只是第一步。找到并纠正错误的程序组件对于高质量的软件来说同样困难和必要。错误定位自动地精确定位程序中现有的错误。这是一个难题,现有的方法还不够精确,无法在工业上广泛采用。我们建议通过概率软件建模(PSM)的故障定位。PSM分析程序的结构和行为,并综合概率模型(PM)的网络。每个PM用它的输入和输出对方法进行建模,并且能够评估运行时数据的可能性。我们使用这种可能性评估,以找到故障位置及其对相关代码元素的影响。结果表明,PSM是一个强大的框架,准确的故障定位。
2020-03-04 cs.SE
Faults in Deep Reinforcement Learning Programs: A Taxonomy and A Detection Approach
Polytechnique Montréal(蒙特利尔理工学院)
在工业界和学术界,越来越多的人需要在各个领域使用深度学习(DL)来解决现实世界的问题。深度强化学习(DRL)是深度学习在强化学习(RL)领域的应用。像任何软件系统一样,DRL应用程序可能会因为程序中的错误而失败。在本文中,我们提出了第一次尝试分类故障发生在DRL程序。我们手动分析了使用知名DRL框架(OpenAI Gym,Dopamine,Keras-rl,Tensorforce)开发的761个DRL程序工件(来自Stack Overflow帖子和GitHub问题),并确定了开发人员/用户报告的错误。通过几轮讨论,我们对识别出的故障进行了标记和分类。由此产生的分类验证使用在线调查与19开发人员/研究人员。为了允许DRL程序中的故障的自动检测,我们已经定义了一个元模型的DRL程序和开发DRLinter,基于模型的故障检测方法,利用静态分析和图形转换。DRLinter的执行流程包括解析DRL程序以生成符合我们的元模型的模型,并在模型上应用检测规则来识别故障发生。DRLinter的有效性进行了评估,使用15个合成DRL程序,我们注入故障中观察到的分析工件的分类。结果表明,DRLinter能够成功地检测出所有合成故障程序中的故障。
2021-11-28 cs.LG cs.SE
Fault Localization in Multi-Threaded C Programs using Bounded Model Checking (extended version)
软件调试是一个非常耗时的过程,对于多线程程序来说,由于线程调度算法的不确定性行为,这一过程甚至更糟。然而,如果使用自动方法来定位故障,则可以大大减少调试时间。在这项研究中,提出了一种新的方法,故障定位,在多线程的C程序。它将多线程程序转换为相应的顺序程序,然后使用适合于这类程序的故障诊断方法,以定位故障。代码转换是用来自反例的规则和上下文切换信息实现的,反例通常由有界模型检查器生成。实验结果表明,该方法是有效的,在这样一种方式,顺序故障定位方法可以扩展到多线程程序。
2015-09-08 cs.LO cs.SE
Mining Bug Repositories for Multi-Fault Programs
针对 Defects4J 与 BugsInPy 多为单缺陷条目的局限,本文利用测试用例移植和故障位置转换构建保留原数据集特性的真实多故障程序数据集。
2024-04-10 cs.SE
A Note About: Critical Review of BugSwarm for Fault Localization and Program Repair
数据集在软件工具的进步中发挥着重要作用,并有助于对其进行评估。BugSwarm是一个基础设施,用于自动创建真实世界可重现故障和修复的大型数据集。在本文中,我们回应Durieux和Abreu对BugSwarm数据集的批判性评论,本文中称为CriticalReview。我们复制了CriticalReview的研究,并发现了关于BugSwarm数据集的几个不正确的说法和假设。我们讨论这些不正确的索赔和CriticalReview列出的其他贡献。最后,我们讨论了关于BugSwarm的一般误解,以及我们对基础设施和数据集使用的愿景。
2019-10-29 cs.SE
IBIR: Bug Report driven Fault Injection
软件工程和软件测试的许多研究依赖于基于故障注入的实验研究。然而,故障注入并不经常与模拟真实世界的软件故障相关,因为它“盲目地”注入大量的故障。它仍然确实具有挑战性,注入少数但现实的故障,目标是一个特定的功能,在一个程序。在这项工作中,我们引入IBIR,故障注入工具,通过探索与用户报告的故障相关的变化模式来解决这一挑战。为了注入真实的错误,我们通过重定向错误报告驱动的自动程序修复系统来创建突变体,即,反转其代码转换模板。IBIR在实践中更有吸引力,因为它既不需要深入了解代码也不需要深入了解测试,而只需要了解程序的相关错误报告。因此,我们的方法将故障注入的重点放在功能的缺陷报告。我们通过考虑Defects4J数据集来评估IBIR。实验结果表明,我们的方法优于传统的突变测试进行的故障注入与原始错误的语义相似性,当应用在系统或类级别的粒度,并提供更好的,统计上显着的,测试有效性(故障检测)的估计。此外,当注入100个错误时,IBIR在36%的情况下注入与真实错误耦合的错误,而突变测试中的突变注入不到1%。总的来说,IBIR的目标是真正的功能,并注入现实和多样化的故障。
2020-12-11 cs.SE
Automated Fixing of Programs with Contracts
本文介绍了AutoFix,一种自动调试技术,可以修复通用软件中的错误。为了提供高质量的修复建议并实现整个调试过程的自动化,AutoFix依赖于以契约形式存在的简单规范元素(例如前置条件和后置条件)。使用契约增强了用于故障检测和定位以及验证修复的动态分析技术的精度。AutoFix支持工具唯一需要的用户输入是一个带有合同注释的错误程序;该工具根据其适用性的估计为故障生成一个经过验证的修复集合。在一个广泛的实验评估中,我们将AutoFix应用于不同成熟度和质量(实现和合同)的四个代码库中的200多个错误。AutoFix成功地修复了42%的错误,在大多数情况下,产生的纠正质量与合格的程序员编写的质量相当;使用的计算资源是适度的,在商品硬件上每次修复的平均时间低于20分钟。这些数字与自动化程序修复的最新技术水平相比毫不逊色,并证明了AutoFix方法可以成功地应用于减少现实世界场景中的调试负担。
2014-04-25 cs.SE
Improving Fault Localization by Integrating Value and Predicate Based Causal Inference Techniques
统计故障定位(SFL)技术使用来自软件执行的执行简档和成功/失败信息,结合统计推断,基于程序元素有多可能出错来自动对它们进行评分。SFL技术通常采用一种类型的配置文件数据:覆盖数据,谓词结果或变量值。大多数SFL技术实际上测量的是配置文件值与成功/失败之间的相关性,而不是因果关系,因此它们会受到混淆偏差的影响,从而扭曲了它们产生的分数。本文提出了一种新的SFL技术,命名为\emph{UniVal},它使用因果推理技术和机器学习整合谓词结果和变量值的信息,以更准确地估计真正的失败导致的程序语句的影响。\emph{UniVal}经验比较几个覆盖为基础的,基于谓词的,基于值的SFL技术上的800个程序版本与真正的故障。
2021-02-11 cs.SE
DeepFD: Automated Fault Diagnosis and Localization for Deep Learning Programs
The Hong Kong University of Science and Technology(香港科技大学);Guangzhou HKUST Fok Ying Tung Research Institute(广州香港科技大学霍英东研究院);Huazhong University of Science and Technology(华中科技大学);University of Waterloo(滑铁卢大学);MIT-IBM Watson AI Lab(麻省理工学院-IBM沃森人工智能实验室)
随着深度学习(DL)系统被广泛部署用于关键任务应用程序,调试此类系统变得至关重要。大多数现有的工作在训练的深度神经网络(DNN)上识别和修复可疑神经元,不幸的是,这可能是一个弯路。具体来说,一些现有的研究报告说,许多不满意的行为实际上是源于故障驻留在DL程序。此外,定位错误神经元对开发人员来说是不可操作的,而定位DL程序中的错误语句可以为开发人员提供更多有用的调试信息。虽然最近的一些研究提出了在DL程序或训练设置(例如,太大的学习率),他们主要是基于预定义的规则,导致许多误报或漏报,特别是当故障超出了他们的能力。鉴于这些局限性,在本文中,我们提出了DeepFD,一个基于学习的故障诊断和定位框架,它将故障定位任务映射到学习问题。特别是,它通过监测DNN模型训练过程中提取的运行时特征来推断可疑故障类型,然后在DL程序中定位诊断的故障。它通过识别DL程序中的故障的根本原因而不是神经元,并通过学习方法而不是一组硬编码的规则来诊断故障,从而克服了局限性。评估显示了DeepFD的潜力。它正确诊断了52%的错误DL程序,而最先进的作品只有大约一半(27%)。此外,对于故障定位,DeepFD也优于现有的工作,正确定位42%的故障程序,这几乎是现有工作的最佳结果(23%)的两倍。
2022-05-04 cs.LG cs.SE
Simple Fault Localization using Execution Traces
本文利用编程竞赛短程序的数千条执行轨迹,结合机器学习及运行时、控制流和词法特征,提出了改进传统基于谱的错误定位(SBFL)的简单方法与上下文信息集成技巧,无需GPU或高级程序分析即在多个数据集上优于Ochiai等现有公式。
2025-03-06 cs.SE
An Empirical Analysis of the Influence of Fault Space on Search-Based Automated Program Repair
自动程序修复(Automated program repair,APR)已经引起了广泛的研究关注,并且已经提出了各种技术。基于搜索的APR是这些技术中最重要的类别之一。现有的研究集中在设计有效的变异算子和搜索算法,以更好地找到正确的补丁。尽管有各种努力,这些技术的有效性仍然受到搜索空间爆炸问题的限制。这个问题的关键因素之一是现有研究报告的故障空间的质量。这促使我们研究故障空间的重要性,成功地找到一个正确的补丁。我们的实证研究旨在回答三个问题。故障空间是否与基于搜索的APR的性能显著相关?如果是,在应用昂贵的APR技术之前,是否有任何指示性测量来近似故障空间的准确性?有没有自动化的方法可以提高故障空间的精度?我们观察到,故障空间的准确性影响基于搜索的APR技术的有效性和效率,例如,即使正确的补丁在搜索空间中,当实际定位位置的等级低于10时,GenProg的失败率也可能高达$60\%$。此外,GenProg能够找到更多的正确补丁,并与更少的尝试时,给定的故障空间具有更高的精度。我们还发现,负突变覆盖率,这是在这项研究中被设计来衡量一个测试套件的能力,杀死突变的语句执行失败的测试,是最具指示性的测量,以估计基于搜索的APR的效率。最后,我们证实,自动生成的测试用例可以帮助提高故障空间的准确性,并进一步提高基于搜索的APR技术的性能。
2017-07-17 cs.SE
Extending Delta Debugging Minimization for Spectrum-Based Fault Localization
University of Ruhuna(卢胡纳大学)
DDMIN-LOC结合Delta调试最小化与基于光谱的故障定位,通过计算可疑性分数来定位故障语句,实验表明其在Jaccard算法下效果最佳。
2026-01-08 cs.SE
Error Propagation Analysis for Multithreaded Programs: An Empirical Approach
本文提出不变量传播分析(IPA)替代黄金轨迹,用于多线程程序的错误传播分析,实验表明其稳定且故障覆盖率可高于传统单线程EPA。
2023-12-28 cs.DC cs.SE
Test Case Purification for Improving Fault Localization
在软件开发中,查找和修复bug是非常耗时的活动。基于谱的故障定位是指根据测试用例的执行轨迹来确定源代码中的故障位置。失败的测试用例和它们的断言形成了被分析系统的失败行为的测试预言。本文提出了一种新的频谱驱动测试用例净化的概念,以提高故障定位。测试用例纯化的目标是将现有的测试用例分成小部分(称为纯化的测试用例),并增强测试预言机以进一步定位故障。结合原始故障定位技术(例如,Tarantula),测试用例净化结果更好地对程序语句进行排名。通过对6个开放源代码Java程序中的1800个错误的实验表明,测试用例净化可以有效地改进现有的错误定位技术。
2014-09-10 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
Assessing Test Case Prioritization on Real Faults and Mutants
测试用例优先级(TCP)是回归测试的一个重要组成部分,它允许更早地检测故障或帮助减少测试时间和成本。虽然研究文献中存在几种TCP方法,但越来越多的研究已经针对称为突变体的合成软件缺陷对其进行了评估。因此,目前尚不清楚在何种程度上突变体上的TCP性能将代表在真实故障上实现的性能。为了回答这个基本问题,我们进行了第一次实证研究,比较TCP技术应用于现实世界和突变故障的性能。我们的研究背景包括八种经过充分研究的TCP方法,35k+突变故障和Defects4J数据集中五个Java系统的357个真实故障。我们的研究结果表明,所研究的TCP技术突变体的相对性能可能不会强烈相关的性能上真正的故障,这取决于属性的主题程序。这表明,在某些情况下,在一组突变体上表现最好的技术在实际应用于实际故障时可能不是最好的技术。我们还说明,这些相关性不同的突变体所产生的不同运营商,这取决于所选择的运营商是否反映一个主题程序的典型故障。这突出了开发针对特定程序域的变异算子的重要性,特别是对于TCP。
2018-09-18 cs.SE
Efficient Symbolic Execution of Software under Fault Attacks
University of Southern California(南加州大学);Purdue University(普渡大学)
本文提出了一种高效准确的符号执行方法,用于分析软件在故障攻击下的安全性,通过改进的故障建模和符号执行算法,提升了分析效率和准确性。
2026-04-24 cs.PL cs.SE
HyQDB: LLM-Assisted Debugging for Hybrid Quantum Workflows
Imperial College London(帝国理工学院)
针对混合量子程序故障静默发生且现有工具支持有限的问题,提出分层代理HyQDB,注入确定性证据并升级意图重建,在QFaultBench上将修复成功率从45%提升至75%。
2026-09-28 cs.SE
Spectrum-based Software Fault Localization: A Survey of Techniques, Advances, and Challenges
尽管调试是软件开发中最基本的任务之一,但仍然以大多数手动方式执行,导致高成本和低性能。为了解决这个问题,研究人员已经研究了一些有前途的方法,例如基于频谱的故障定位(SFL)技术,该技术可以精确定位更有可能包含故障的程序元素。本调查讨论了SFL的最新技术,包括已提出的不同技术,它们解决的故障类型和数量,它们使用的光谱类型,它们在验证中使用的程序,支持它们的测试数据以及它们在工业环境中的使用。尽管取得了这些进展,但该行业在采用这些技术方面仍面临挑战,我们在本文中对此进行了分析。SFL技术应该提出新的方法来生成可疑实体的精简集,结合不同的频谱来微调故障定位能力,使用策略来收集细粒度的覆盖水平,从可疑的粗水平,以平衡执行成本和输出精度,并提出新的技术,以应付多故障程序。此外,需要更多的用户研究,以更好地了解如何SFL技术可以在实践中使用。最后,我们提出了一个概念图的主题和未来的研究在SFL的挑战。
2017-11-26 cs.SE
A Slice-Based Change Impact Analysis for Regression Test Case Prioritization of Object-Oriented Programs
针对面向对象程序回归测试用例优先级排序问题,提出基于受影响切片图(ASG)和受影响组件耦合度(ACC)的静态方法,通过计算节点故障易发性排序测试用例,经七个案例验证比现有技术可行且性能可接受。
2025-08-26 cs.SE
FaultLens: Learning Compact Behavioral Test Suites for Generated Operational Programs
FaultLens是一种学习紧凑行为测试套件的方法,通过混合故障驱动贪心组件与多样性组件,在低计算成本下实现高故障覆盖率,可降低尾部回归风险。
2026-09-11 cs.AI cs.SE
Fault Localization Models in Debugging
可重用性被认为是软件工程过程的一个严格而重要的特征。十多年来,软件工程研究界一直在探索各种消除程序错误的技术,但要克服软件程序的所有错误是相当困难的。因此,它仍然是一个真正的挑战,软件调试和维护社区。本文首先简要介绍了软件异常和故障的分类,然后用诊断理论解释了不同的故障定位模型。此外,我们根据不同的实际错误行为,比较和对比基于值和依赖关系的模型,并提出了一些洞察信息的调试过程。最后,对两种模型的结果进行了讨论,指出了两种模型在调试和维护方面的优缺点。
2018-02-13 cs.SE
Demystifying Faulty Code with LLM: Step-by-Step Reasoning for Explainable Fault Localization
本研究提出FuseFL,利用LLM结合频谱故障定位、测试执行结果和代码描述进行逐步推理,实现可解释故障定位,Top-1定位成功率提升超30%,并在人工评估中表现良好。
2024-03-15 cs.SE
Automatic Fault Detection for Deep Learning Programs Using Graph Transformations
K. N. Toosi University of Technology(K.N.托西理工大学);Polytechnique Montreal(蒙特利尔理工大学)
如今,我们看到企业和学术界对利用深度学习(DL)解决复杂现实问题的需求越来越大。DL程序编码期望DL模型的网络结构和模型从训练数据集学习的过程。像任何软件一样,DL程序可能会出错,这意味着软件质量保证面临巨大挑战,特别是在安全关键领域。因此,为深度学习开发团队配备高效的故障检测技术和工具至关重要。在本文中,我们提出了NeuraLint,基于模型的故障检测方法DL程序,使用元建模和图形转换。首先,我们设计了一个元模型DL程序,包括其基本骨架和基本属性。然后,我们构建了一个基于图的验证过程,该过程涵盖了在元模型之上定义的23条规则,并作为图变换来实现,以检测生成的模型中的故障和设计效率低下(即,元模型的实例)。首先,所提出的方法进行评估,发现故障和设计效率低下,在28个合成的例子,从文献中报道的常见问题。然后,NeuraLint成功地从Stack Overflow帖子和GitHub存储库中提取了34个真实的DL程序中发现了64个错误和设计效率低下。结果表明,NeuraLint在合成和真实世界的例子中有效地检测故障和设计问题,召回率为70.5%,准确率为100%。虽然所提出的元模型是为前馈神经网络设计的,但它可以扩展到支持其他神经网络架构,例如递归神经网络。研究人员还可以扩展我们的验证规则集,以涵盖DL程序中的更多类型的问题。
2021-05-31 cs.LG cs.SE
Evaluating data-flow coverage in spectrum-based fault localization
背景:软件开发是软件开发周期中的一项关键任务。基于频谱的故障定位(SFL)是一种很有前途的技术,以提高和自动化调试。SFL技术使用控制流谱来查明最可疑的程序元素。然而,数据流谱提供了关于程序执行的更详细的信息,这可能对故障定位有用。目的:我们使用数据流谱评估10个SFL排名指标的有效性和效率。方法:我们比较的性能的数据和控制流频谱SFL使用163故障从5个真实世界的开放源程序,其中包含从468到4130测试用例。在我们的评估中使用的数据流和控制流谱类型分别是定义使用关联(DUA)和线。结果:使用数据流频谱,高达50%以上的故障被排在前15名的位置相比,控制流频谱。此外,大多数SFL排名指标使用数据流来检查前40个位置,从而呈现出更好的有效性。数据流频谱的执行成本高于控制流,从22秒到不到9分钟。数据流对所有程序的平均开销为353%,而控制流的平均开销为102%。结论:结果表明,SFL技术可以受益于使用数据流频谱分类故障在更好的位置,这可能会导致开发人员检查更少的代码来发现错误。与控制流相比,收集数据流的执行成本更高,但这并不是禁止的。此外,数据流谱还提供了可疑变量的信息,用于故障定位,这可以提高开发人员使用SFL的性能。
2019-06-27 cs.SE
FuzzerAid: Grouping Fuzzed Crashes Based On Fault Signatures
Fuzzing已经成为发现程序中错误和漏洞的重要方法。工业中部署的许多模糊器每天都在运行,可能会产生大量的崩溃。诊断这种崩溃可能非常具有挑战性和耗时。现有的模糊器通常采用诸如代码覆盖或调用堆栈散列之类的算法来消除错误的重复报告。虽然这些漏洞分析很便宜,但它们通常不精确,最终仍然报告了许多对应于同一个bug的“独特”崩溃。在本文中,我们提出了FuzzerAid,使用故障签名组崩溃报告的模糊。错误签名是一个小的可执行程序,由从原始程序中选择的可以重现错误的必要语句组成。在我们的方法中,我们首先使用给定的崩溃生成故障签名。然后,我们使用其他崩溃诱导输入执行故障签名。如果故障再现,我们将崩溃分类到标有故障特征的组中;如果没有,我们生成一个新的故障特征。在对所有导致崩溃的输入进行分类之后,我们进一步将相同根本原因的故障特征合并到一个组中。我们在一个名为FuzzerAid的工具中实现了我们的方法,并在15个真实世界的错误和4个大型开源项目中产生的3020个崩溃中对其进行了评估。我们的评估表明,我们能够正确地对99.1%的崩溃进行分组,并且仅报告了17个(+2)“独特”错误,优于最先进的模糊器。
2022-09-02 cs.SE
Hybrid Fault-Driven Mutation Testing for Python
Simon Fraser University(西蒙菲莎大学);University of Ottawa(渥太华大学)
本文提出了一种基于静态和动态分析混合技术的Python变异测试方法,通过七种新的变异算子生成补充现有工具的变异体,提高测试覆盖率和发现缺陷的能力。
2026-07-22 cs.SE
Optimizing Metamorphic Testing: Prioritizing Relations Through Execution Profile Dissimilarity
针对机器学习程序判定器缺失及现有蜕变关系优先排序成本高或不准确的问题,提出一种基于语句中心性并利用执行剖面多样性的MR优先排序方法,显著提升了故障检测有效性与测试效率。
2024-11-14 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
Improving Spectrum-Based Localization of Multiple Faults by Iterative Test Suite Reduction
本文提出FLITSR方法,通过迭代缩减测试套件改进SBFL在多故障场景下的定位能力,实验表明其能显著减少浪费工作量并提升精确率与召回率。
2023-06-16 cs.SE
FLACK: Counterexample-Guided Fault Localization for Alloy Models
错误定位是一个实用的研究课题,它可以帮助开发人员识别可能导致程序错误的代码位置。大多数现有的故障定位技术是为命令式程序(例如,C和Java),并依靠分析程序的正确和不正确执行来识别可疑语句。在这项工作中,我们为用声明性语言编写的模型引入了一种故障定位方法,其中模型不是“执行”,而是转换为逻辑公式并使用后端约束求解器求解。我们提出了FLACK,一个工具,作为输入的合金模型组成的一些违反断言,并返回一个排名列表的可疑表达式有助于违反断言。关键思想是分析反例之间的差异,即,不满足断言的模型实例以及满足断言的实例,以在输入模型中查找可疑表达式。实验结果表明,FLACK是高效的(可以在5秒内处理复杂的,真实世界的Alloy模型,具有数千行代码),准确的(可以始终将错误表达式排在可疑列表的前1.9%),并且有用(通常可以将错误缩小到可疑表达式中的确切位置)。
2021-02-19 cs.SE
Reasoning with failures
安全仪表系统(SIS)保护重大危险设施,如发电厂,防止灾难性事故。SIS由硬件部件和控制器软件--"程序“组成。目前的SIS安全分析包括故障树的构建,总结组件的潜在故障以及它们如何在SIS中出现。识别故障的练习通常依赖于安全工程师的经验。不幸的是,程序部分往往过于复杂,无法以这种“手工”方式进行分析,因此无法准确捕捉它对最终安全分析的影响。在本文中,我们演示了如何故障和故障模式的正式模型可以用来分析SIS程序的影响。我们概述了\emph{Failure Mode Reasoning}的基本概念及其在安全分析中的应用,并通过一个实际例子说明了这些想法。
2020-07-20 cs.SE
CFaults: Model-Based Diagnosis for Fault Localization in C Programs with Multiple Test Cases
INESC-ID, IST, Universidade de Lisboa, Portugal(葡萄牙里斯本大学、IST、INESC-ID)
针对现有基于公式的故障定位方法存在多测试下诊断不一致、易生成冗余结果的问题,本文提出CFaults方法,结合多观测MBD与统一MaxSAT公式实现多故障C程序定位,实验证明其速度更快且仅生成子集最小诊断。
2025-09-05 cs.AI cs.LO cs.SE
Searching a Database of Source Codes Using Contextualized Code Search
考虑这样一种情况:程序员已经编写了程序的某一部分,但程序的某一部分(如方法或函数体)尚未完成。目标是使用缺失代码周围的上下文来自动“找出”数据库中的哪些代码对程序员有用,以帮助完成缺失的代码。搜索是“上下文化的”,在这个意义上,搜索引擎应该使用部分完成的代码中的线索来找出哪个数据库代码最有用。不应要求用户制定显式查询。我们将上下文化代码搜索视为一个学习问题,其目标是学习一个分布函数,计算每个数据库代码完成程序的可能性,并提出一个神经模型来预测哪个数据库代码可能最有用。由于在搜索时将神经模型应用于数百万或数十亿代码的数据库中的每个代码将是非常昂贵的,因此我们的关键技术问题之一是确保快速搜索。我们通过学习“反向编码器”来解决这个问题,该编码器可用于将评估每个数据库代码的问题减少到计算两个正态分布的卷积。
2020-07-26 cs.SE
Evaluation-Strategy Gap in Fault Diagnosis of Deep Learning Programs
Sigma Jahan(西格玛·贾汗)
针对深度学习程序训练故障诊断技术,发现程序内交叉验证与留出完整程序评估间存在0.190的平衡准确率差距,归因于特征的程序级结构,并分析了曲率特征和优化器特征在不同程序上的表现。
2026-06-26 cs.AI cs.LG cs.SE
Understanding and Detecting Annotation-Induced Faults of Static Analyzers
本文首次系统研究静态分析器中的注解诱发故障,分析六个主流工具的246个问题并提出检测修复指南,同时开发AnnaTester框架发现43个新故障,其中20个已修复。
2024-02-22 cs.SE
Enhancing NeuroEvolution-Based Game Testing: A Branch Coverage Approach for Scratch Programs
本文针对Scratch游戏测试提出基于分支覆盖的适应度函数扩展NEATEST框架,引导神经进化最大化分支探索,实验表明其比语句覆盖方法具有更高的分支覆盖率和更低的故障误报率。
2025-07-12 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