BLAZE: Cross-Language and Cross-Project Bug Localization via Dynamic Chunking and Hard Example Learning
作者: Partha Chakraborty, Mahmoud Alfadel, Meiyappan Nagappan
分类: cs.SE, cs.IR, cs.LG
发布日期: 2024-07-24 (更新: 2025-06-22)
期刊: IEEE Transactions on Software Engineering, 2025
💡 一句话要点
BLAZE:通过动态分块和难例学习实现跨语言和跨项目的缺陷定位
🎯 匹配领域: 支柱九:具身大模型 (Embodied Foundation Models)
关键词: 缺陷定位 跨语言 跨项目 动态分块 难例学习
📋 核心要点
- 现有缺陷定位工具在跨项目和多语言环境下存在局限性,大型语言模型虽有潜力,但受限于上下文窗口和映射准确性。
- BLAZE通过动态分块最小化代码连续性损失,并利用难例学习微调GPT模型,提升跨项目和跨语言缺陷定位能力。
- 在BEETLEBOX等数据集上,BLAZE相比现有方法,Top 1准确率提升高达120%,MAP提升144%,MRR提升100%。
📝 摘要(中文)
软件缺陷的识别和解决需要开发人员投入大量精力。缺陷定位,即精确定位需要修改的源代码文件,对于减少这种工作量至关重要。现有的缺陷定位工具通常依赖于深度学习技术,但在跨项目适用性和多语言环境下的有效性方面存在局限性。最近,大型语言模型(LLMs)的进步为缺陷定位提供了详细的表示。然而,它们在有限的上下文窗口和映射准确性方面面临挑战。为了解决这些问题,我们提出了一种名为BLAZE的方法,该方法采用动态分块和难例学习。首先,BLAZE动态地分割源代码,以最大限度地减少连续性损失。然后,BLAZE使用具有挑战性的缺陷案例对基于GPT的模型进行微调,以增强跨项目和跨语言的缺陷定位。为了支持BLAZE的能力,我们创建了BEETLEBOX数据集,该数据集包含来自五个不同编程语言(Java、C++、Python、Go和JavaScript)的29个大型且蓬勃发展的开源项目的26,321个缺陷。我们对BLAZE在三个基准数据集BEETLEBOX、SWE-Bench和Ye et al.上的评估表明,与六个最先进的基线相比,BLAZE取得了显著的改进。具体而言,BLAZE在Top 1准确率方面提高了120%,在平均精度均值(MAP)方面提高了144%,在平均倒数排名(MRR)方面提高了100%。广泛的消融研究证实了我们的pipeline组件对整体性能提升的贡献。
🔬 方法详解
问题定义:论文旨在解决跨语言和跨项目的缺陷定位问题。现有方法,特别是基于深度学习的方法,在不同项目和编程语言之间泛化能力较弱。大型语言模型虽然提供了更强的表示能力,但其上下文窗口限制和映射精度不足,影响了缺陷定位的准确性。
核心思路:论文的核心思路是结合动态分块和难例学习,提升模型对不同语言和项目的适应性。动态分块旨在保留代码的上下文信息,减少因分块造成的语义损失。难例学习则通过引入具有挑战性的缺陷案例,增强模型对复杂缺陷的识别能力。
技术框架:BLAZE的整体框架包含两个主要阶段:动态分块和难例学习的GPT模型微调。首先,对源代码进行动态分块,以保留代码的上下文信息。然后,使用包含难例的缺陷数据集对GPT模型进行微调,以提升模型在跨语言和跨项目场景下的缺陷定位能力。
关键创新:BLAZE的关键创新在于动态分块策略和难例学习的结合。动态分块能够自适应地分割代码,避免了固定大小分块可能造成的上下文信息丢失。难例学习则侧重于提升模型对复杂和难以定位的缺陷的识别能力,从而提高整体的缺陷定位准确率。与现有方法相比,BLAZE更注重代码上下文信息的保留和模型对难例的学习。
关键设计:动态分块策略根据代码的结构和语义信息进行自适应分割,避免破坏代码的逻辑完整性。难例学习通过选择具有挑战性的缺陷案例进行模型微调,例如选择定位难度较高的缺陷或来自不同项目的缺陷。损失函数的设计可能包括交叉熵损失或对比损失,以鼓励模型区分缺陷代码和非缺陷代码。
🖼️ 关键图片
📊 实验亮点
BLAZE在BEETLEBOX、SWE-Bench和Ye et al.三个基准数据集上取得了显著的性能提升。在BEETLEBOX数据集上,BLAZE的Top 1准确率提升了120%,MAP提升了144%,MRR提升了100%。这些结果表明,BLAZE在跨语言和跨项目的缺陷定位方面具有显著优势,优于现有的最先进方法。
🎯 应用场景
BLAZE可应用于软件开发和维护的各个阶段,帮助开发人员快速定位缺陷,缩短调试时间,提高软件质量。该研究成果对于构建智能化的软件开发工具,提升软件开发效率具有重要意义。未来,可以进一步探索BLAZE在自动化缺陷修复、代码审查等领域的应用。
📄 摘要(原文)
Software bugs require developers to exert significant effort to identify and resolve them, often consuming about one-third of their time. Bug localization, the process of pinpointing the exact source code files that need modification, is crucial in reducing this effort. Existing bug localization tools, typically reliant on deep learning techniques, face limitations in cross-project applicability and effectiveness in multi-language environments. Recent advancements with Large Language Models (LLMs) offer detailed representations for bug localization. However, they encounter challenges with limited context windows and mapping accuracy. To address these issues, we propose BLAZE, an approach that employs dynamic chunking and hard example learning. First, BLAZE dynamically segments source code to minimize continuity loss. Then, BLAZE fine-tunes a GPT-based model using challenging bug cases, in order to enhance cross-project and cross-language bug localization. To support the capability of BLAZE, we create the BEETLEBOX dataset, which comprises 26,321 bugs from 29 large and thriving open-source projects across five different programming languages (Java, C++, Python, Go, and JavaScript). Our evaluations of BLAZE on three benchmark datasets BEETLEBOX, SWE-Bench, and Ye et al. demonstrate substantial improvements compared to six state-of-the-art baselines. Specifically, BLAZE achieves up to an increase of 120% in Top 1 accuracy, 144% in Mean Average Precision (MAP), and 100% in Mean Reciprocal Rank (MRR). An extensive ablation study confirms the contributions of our pipeline components to the overall performance enhancement.