Where's the Bug? Attention Probing for Scalable Fault Localization

📄 arXiv: 2502.13966v2 📥 PDF

作者: Adam Stein, Arthur Wayne, Aaditya Naik, Mayur Naik, Eric Wong

分类: cs.SE, cs.LG

发布日期: 2025-02-19 (更新: 2025-02-20)

备注: 14 pages, 5 figures


💡 一句话要点

提出Bug Attention Probe (BAP),无需标注实现可扩展的缺陷定位。

🎯 匹配领域: 支柱九:具身大模型 (Embodied Foundation Models)

关键词: 缺陷定位 注意力机制 预训练语言模型 代码分析 软件测试

📋 核心要点

  1. 现有缺陷定位方法依赖测试用例或昂贵标注,且大型语言模型计算成本高昂。
  2. Bug Attention Probe (BAP) 通过注意力机制探测缺陷,无需直接定位标签。
  3. 实验表明,BAP在多个数据集上显著优于传统基线和大型语言模型,且效率更高。

📝 摘要(中文)

即使大型语言模型(LLMs)在代码相关任务中能力越来越强,确保代码正确性仍然是一个具有挑战性的问题。基于LLM的程序修复系统可以使用用户的错误报告来提出错误修复,但其有效性从根本上受到其执行缺陷定位(FL)能力限制,这对人类和LLM来说都是一个具有挑战性的问题。现有的FL方法依赖于可执行的测试用例,需要在昂贵且通常嘈杂的行级注释上进行训练,或者需要资源密集型的LLM。在本文中,我们提出了一种名为Bug Attention Probe (BAP)的方法,该方法无需任何直接的定位标签即可学习最先进的缺陷定位,优于传统的FL基线和大型LLM的提示。我们在各种代码设置中评估了我们的方法,包括来自标准Defects4J数据集的真实Java错误以及其他七个数据集,这些数据集涵盖了各种错误类型和语言。在所有八个数据集上平均,与最强的基线相比,BAP提高了34.6%的top-1准确率,比zero-shot prompting GPT-4o提高了93.4%。BAP也比prompting效率高得多,以一小部分的计算成本优于大型开放权重模型。

🔬 方法详解

问题定义:论文旨在解决软件缺陷定位问题,即在代码中找到导致错误的具体位置。现有方法存在依赖可执行测试用例、需要大量人工标注数据以及计算资源消耗高等痛点。这些限制阻碍了缺陷定位技术在实际软件开发中的广泛应用。

核心思路:BAP的核心思路是利用预训练语言模型(PLM)的注意力机制来识别代码中与错误相关的部分。通过设计特定的探针任务,引导模型学习代码中不同部分与错误之间的关联性,从而实现无需显式标注的缺陷定位。这种方法避免了对大量标注数据的依赖,并降低了计算成本。

技术框架:BAP的技术框架主要包含以下几个阶段:1) 代码表示:使用预训练语言模型(如BERT或CodeBERT)将代码转换为向量表示。2) 注意力探测:设计特定的探针任务,例如预测代码片段是否包含错误,并利用模型的注意力权重来衡量代码不同部分与错误的相关性。3) 缺陷定位:根据注意力权重,确定代码中可能存在缺陷的位置。框架整体简洁高效,易于实现和部署。

关键创新:BAP的关键创新在于利用注意力机制进行缺陷定位,无需任何直接的定位标签。与现有方法相比,BAP不需要人工标注数据,也不依赖于可执行的测试用例,从而降低了成本并提高了可扩展性。此外,BAP能够利用预训练语言模型的知识,从而提高缺陷定位的准确性。

关键设计:BAP的关键设计包括:1) 探针任务的设计:选择合适的探针任务,例如预测代码片段是否包含错误,以引导模型学习代码与错误之间的关联性。2) 注意力权重的利用:设计合适的策略来利用模型的注意力权重,例如选择特定层的注意力权重,或者对不同层的注意力权重进行加权平均。3) 损失函数的设计:设计合适的损失函数,以优化模型的性能,例如使用交叉熵损失函数来训练模型。

🖼️ 关键图片

fig_0
fig_1
fig_2

📊 实验亮点

实验结果表明,BAP在多个数据集上显著优于传统缺陷定位基线和大型语言模型。在所有八个数据集上平均,BAP的top-1准确率比最强的基线提高了34.6%,比zero-shot prompting GPT-4o提高了93.4%。此外,BAP的计算效率远高于大型语言模型,以一小部分的计算成本实现了更高的性能。

🎯 应用场景

BAP可应用于软件开发、测试和维护等多个领域,帮助开发人员快速定位代码中的缺陷,提高软件质量和开发效率。该技术还可用于自动化程序修复,为程序自动生成修复补丁。未来,BAP有望与持续集成/持续交付(CI/CD)流程集成,实现自动化缺陷检测和修复。

📄 摘要(原文)

Ensuring code correctness remains a challenging problem even as large language models (LLMs) become increasingly capable at code-related tasks. While LLM-based program repair systems can propose bug fixes using only a user's bug report, their effectiveness is fundamentally limited by their ability to perform fault localization (FL), a challenging problem for both humans and LLMs. Existing FL approaches rely on executable test cases, require training on costly and often noisy line-level annotations, or demand resource-intensive LLMs. In this paper, we present Bug Attention Probe (BAP), a method which learns state-of-the-art fault localization without any direct localization labels, outperforming traditional FL baselines and prompting of large-scale LLMs. We evaluate our approach across a variety of code settings, including real-world Java bugs from the standard Defects4J dataset as well as seven other datasets which span a diverse set of bug types and languages. Averaged across all eight datasets, BAP improves by 34.6% top-1 accuracy compared to the strongest baseline and 93.4% over zero-shot prompting GPT-4o. BAP is also significantly more efficient than prompting, outperforming large open-weight models at a small fraction of the computational cost.