本技术公开了基于调用图与多层次对比学习的函数级缺陷定位方法,包括构建包含类节点及其内部函数节点的局部调用图和覆盖所有函数的全局调用图;利用Light‑GCN对这两种调用图进行图嵌入学习,生成函数的局部和全局嵌入向量;同时,采用预训练代码模型提取函数代码的语义嵌入向量,并使用预训练语言模型获取缺陷报告的语义嵌入向量;为了优化模型性能,设计了包含局部对比损失、全局对比损失及语义对比损失的多层次对比损失函数,通过最小化该损失函数,有效优化了缺陷报告与函数嵌入之间的匹配关系,从而增强了整体的定位能力,并显著提升了模型的缺陷定位准确性。
背景技术
随着信息技术的快速发展,软件系统在金融、医疗、交通、通信等多个关键领域中的应用日益广泛。这些系统的复杂性和规模不断扩大,导致软件缺陷成为影响系统稳定性、安全性和用户体验的主要因素之一。高效且准确地定位和修复软件缺陷,对于保障系统的正常运行、降低维护成本及提升开发效率具有重要意义。缺陷定位是指根据缺陷报告,确定导致软件异常行为的源代码位置。开发团队通常依赖Bugzilla和JIRA等缺陷跟踪系统来记录、跟踪和管理这些缺陷。然而,随着软件项目规模的扩大,缺陷报告数量急剧增加,例如在大型软件Eclipse中,几乎每天有200个缺陷被用户报告。如果仅依赖手动分析和定位,不仅会消耗大量时间和精力,还要求开发人员具备较高的专业技能。
为了应对这一挑战,研究人员引入了各种自动化缺陷定位方法。近年来,随着人工智能和机器学习技术的快速发展,越来越多的研究将这些先进技术应用于软件缺陷定位领域,以提升定位的自动化水平和智能化能力。
目前,相关研究主要集中在文件级别的缺陷定位,这类方法通常基于文件的修改历史、代码特征或文件间的依赖关系进行分析。然而,一项研究调查显示,约52%的软件从业者更倾向于使用函数级粒度进行缺陷定位,而仅有26%的人偏好文件级粒度,这表明开发人员在实际工作中更希望能够快速且准确地定位到具体的函数,而不仅仅是识别出可能存在问题的文件。尽管部分研究尝试通过分析单个函数的代码特征在函数级别进行缺陷定位以提高定位精度,但这些方法往往将函数视为相互独立的单元,忽视了函数之间复杂的调用关系和交互,导致在复杂软件系统中的表现不足。因此,如何在函数级别上更好地理解和利用函数间的关系,提高缺陷定位的准确性,仍然是一个亟待解决的研究课题。
实现思路