软件缺陷需要开发人员付出大量的努力来识别和解决,通常消耗他们三分之一的时间。缺陷定位是指确定需要修改的确切源代码文件的过程,对于减少这种努力非常重要。现有的缺陷定位工具通常依赖于深度学习技术,但在跨项目适用性和多语言环境下的有效性方面存在限制。最近,大型语言模型(LLMs)的进展为缺陷定位提供了详细的表示。然而,它们在有限的上下文窗口和映射精度方面遇到了挑战。为了解决这些问题,我们提出了BLAZE,一种采用动态分块和困难示例学习的方法。首先,BLAZE动态分割源代码以最小化连续性损失。然后,BLAZE使用具有挑战性的缺陷案例对基于GPT的模型进行微调,以增强跨项目和跨语言的缺陷定位能力。为了支持BLAZE的能力,我们创建了BEETLEBOX数据集,其中包括来自5种不同编程语言(Java、C++、Python、Go和JavaScript)的29个大型和繁荣的开源项目中的26,321个缺陷。我们对BLAZE在三个基准数据集BEETLEBOX、SWE-Bench和Ye等人的评估表明,与六种最先进的基线相比,有了显著的改进。具体而言,BLAZE在Top 1准确率、平均精度(MAP)和平均倒数排名(MRR)方面分别实现了高达120%、144%和100%的增长。广泛的消融研究证实了我们管道组件对整体性能提升的贡献。
提问交流