Page 126 - 《软件学报》2025年第4期
P. 126
1532 软件学报 2025 年第 36 卷第 4 期
该项工作整理和归纳了基于信息检索的缺陷定位方法. 2020
图 2 导致缺陷的源文件
现有的基于信息检索的缺陷定位工作根据其方法可以分为 3 代 [5] : 第 1 代方法基于软件库的词包 bag-of-
words (BoW), 通过比较源代码与缺陷报告文本中相同术语的频率确定其相关性, 最后根据相关性排序源代码. 如
Robertson 等人 [6] 提出基于 TF-IDF 的技术, 将查询词在源代码文件中的频率 (term frequency) 和查询词在语料库中
的反向文档频率 (inverse document frequency) 结合起来, 以确定源代码文件与查询的相关性. 第 2 代方法增强了基
于 BoW 的建模, 弥补了词汇上的差距. 除了使用术语频次, 还引入了用于信息检索的其他特征, 比如 API 描述、
缺陷修复历史等特征. 如 Zhou 等人 [7] 根据假设”相似的缺陷报告更有可能修复相同的源代码文件”提出 Bug-
[8]
[9]
Locator 方法, 通过计算与历史修复缺陷报告的相似性, 更加准确地推荐源代码文件. 还有如 DHbPd , BLUiR ,
BRTracer [10] , Amalgam [11] , BLIA [12] , Locus [13] 等著名缺陷定位工具会结合软件项目中版本历史和代码变更等额外信
息进行缺陷定位. 但由于这些第 2 代方法不能自动提取关键的特征, 所以报告和源文件中的信息不能被充分地利
用. 近年来, 随着深度学习在代码分析中越来越多成功案例的出现, 揭露了深度学习在理解代码方面的可行性和有
效性. 衍生出了第 3 代方法, 即使用深度学习的基于信息检索的缺陷定位方法, 利用深度学习技术提取代码和文本
中的语义信息, 并进行匹配, 例如最早出现的结合深度神经网络与信息检索特征的 HyLoc [14] , 以及 NP-CNN [15] ,
CNN-Forest [16] , BugPecker [17] , TROBO [18] , bjXnet [19] 等方法, 均基于神经网络架构实现了效果显著的基于信息检索
的缺陷定位. 近几年, 随着深度学习技术的飞速发展, 深度学习在缺陷定位领域也取得了显著的效果. 与前两代方
法相比, 深度学习技术可以更好地挖掘和学习代码和文本之间的语义, 其缺陷定位效果明显优于前两代方法 [5] .
目前已有多项研究工作对基于信息检索的缺陷定位技术研究进行了系统性调研与总结. 2016 年, Wong 等人 [20]
调查了从 1977 年至 2014 年 11 月间有关软件缺陷定位的论文, 将这些论文中提及的技术分为传统的缺陷定位技
术和更高级复杂缺陷定位的技术, 并讨论了与整个软件缺陷定位有关的关键问题和关注点. 2018 年 Lee 等人 [21]
对 6 种最新简单基于信息检索的缺陷定位技术进行全面研究, 并对研究的结果打包成了一个新的基准 Bench4BL.
年, 张芸等人 [22] 梳理了基于信息检索的缺陷定位方法
的通用技术, 总结了该类研究进展与常用性能指标, 归纳出了基于信息检索的缺陷定位方法的 4 个关键问题方向.
郭肇强等人 [23] 从模型改良、模型评估、其他方法这 3 个方面介绍近年的基于信息检索的缺陷定位方法, 总结现
有方法的问题和进展, 并提出未来面临的挑战. 2021 年, 李政亮等人 [24] 从影响缺陷定位性能的 3 个方向: 数据源、
检索模型、应用场景对基于信息检索的缺陷定位方法进行分析和总结, 还介绍了常用的性能测评和测评数据集.
2022 年, 倪珍等人 [25] 围绕缺陷定位模型的分类、使用相关特征优化模型输出、优化模型的基本输入这 3 个方面,
对现有的基于信息的缺陷定位论文进行系统总结并展望了未来研究可能面临的挑战. Mohsen 等人 [26] 通过一个激
励性的例子说明并强调了现有缺陷定位方法的优缺点, 并提出现有方法没有正确利用一些软件工件、现有的缺陷