Page 132 - 《软件学报》2025年第4期
P. 132
1538 软件学报 2025 年第 36 卷第 4 期
存在一定差别, 并不方便横向对比. (2) 大多数数据集都使用 Java 作为缺陷定位评测的语言, 缺少其他编程语言的
数据集和测评情况, 只有一个数据集是针对 C 语言的. 要让基于深度学习的基于信息检索的缺陷定位方法更具有
实用性和通用性还需要在更多编程语言的数据集上进行测试.
针对测评数据集, 对传统的基于信息检索的缺陷定位方法往往会采用 Bench4BL 进行测评, 其对 6 种当时最
新传统的基于信息检索的缺陷定位方法进行全面研究, 并对研究的结果打包成了一个新的基准 Bench4BL. 该项工
作通过整理和归纳传统的基于信息检索的缺陷定位方法, 提出基于信息检索的缺陷定位方法通常在较新的软件项
目上表现更好等结论. 而针对使用深度学习技术的第 3 代基于信息检索的缺陷定位方法 Akbar 等人 [5] 整理了测评
数据集 Bugzbook 对涉及多种语言代码库且包括所有 3 代工具的大规模缺陷定位进行研究. 发现使用深度学习的
基于信息检索的缺陷定位方法在 Java 项目上的表现与在 C++和 Python 项目上的表现类似. 上述两个工作均对基
于信息检索的缺陷定位方法在来源于不同项目的数据上的表现进行了实验探究.
最后是针对数据的处理上. 在从问题跟踪系统收集到缺陷报告和源文件数据后, 使用深度学习模型的基于信
息检索的缺陷定位方法与传统的基于信息检索的缺陷定位方法在数据集的处理与创建过程中, 都需要在文件被修
复后将缺陷报告与其相应的源代码文件链接起来, 并将每个缺陷报告与相应的项目版本相匹配, 最后对文件进行
MAP
数据集人工验证. 但存在的不同是, 深度学习模型通常对于大量的标记数据有更大的需求, 需要更大量的数据对模
型进行训练, 但可以在一定程度上处理原始、未经加工的数据, 无需太多人工干预, 只用手动检查数据集中随机选
择的一小部分. 具体而言, 可以从中的每个软件项目中随机选取两个缺陷报告并手动验证其在在线平台中的条目,
检查数据集中与缺陷报告相关联的缺陷 ID 是否确实属于在线跟踪系统中的正确缺陷报告.
2.2 评估方法
对传统的基于信息检索的缺陷定位方法主要对方法的排序性能和分类性能进行评价. 排序性能是指信息检索
或推荐的缺陷报告中对返回结果进行排序的效果或质量与准确性等信息. 主要的对排序性能的评价指标是平均精
度均值 (mean average precision, MAP), 平均倒数排名 (mean reciprocal rank, MRR), Top-N 准确度. 而分类性能是指
在缺陷定位方法对缺陷报告进行分类的能力和质量性能, 有助于判断模型在实际应用中的表现以及它对不同类别
的识别能力如何. 曲线下面积 (area under curve, AUC), 准确率 (Precision rate), 召回率 (Recall rate), F-measure 是
对分类性能的评价指标. 为回答 RQ1, 本文统计了 52 篇论文中采用的评估指标类型及其使用情况, 如表 6 所示,
传统的基于信息检索的缺陷定位方法与使用深度学习的基于信息检索的缺陷定位方法的评价指标基本相同.
表 6 评价指标统计
评价指标 使用次数 文献
MAP 50 [14–19,28–50,52–68,70–72]
MRR 45 [14–17,19,28,29,31–39,41–50,52,54–58,60–63,65–72]
Top-N 45 [14,17–19,29,32–43,45–51,53–72]
AUC 4 [15,28,38,57]
Precision rate 2 [30,52]
Recall rate 1 [30]
F-measure 1 [30]
2.2.1 平均精度均值 MAP
平均精度均值 [73] 指标考虑了列表中所有正确结果, 计算方法是取所有根据缺陷报告给出的排名列表中
平均精度 AP 的平均值, 可以稳定地评价缺陷定位方法的排序性能. 该数值越大, 表示缺陷定位方法排序性能越优
秀. 计算公式为:
1 M ∑
MAP = AP( j) (1)
M
j=1
其中, AP 是报告的平均精度, 若 AP = 0.5 , 则对于一个有 k 个实际修复的文件, 意味着方法可以在前 k 个推荐中
以 50% 的概率做出正确的推荐. 计算公式为