Page 214 - 《软件学报》2026年第5期
P. 214
刘浩 等: 基于图 Transformer 的变更集错误定位方法 2093
3.2 评价指标及参数设置
3.2.1 评价指标
本文旨在从代码变更集合中检索与错误报告相关的代码片段, 追求算法的高精确率. 为了评估模型的性能, 我
们采用了一组常用的用于评估信息检索系统性能的指标.
Top@N: 用于衡量软件开发中错误检测工具的有效性. 它反映了通过检查可疑代码实体列表中的前 N 项, 能
够发现缺陷实体的缺陷比例. 该指标越高, 开发人员定位缺陷所需的工作量就越少, 性能也就越好.
Precision@K (P@K): 用于评估排名中排名靠前的变更集与错误报告相关的数量. P@K 的值等于排名中位于
前 K 位置的相关变更集数量 , 在 B 个错误报告中取平均值:
Rel B i
1 |B| ∑ Rel B i
P@K = (21)
|B| K
i=1
平均倒数排名 (MRR): 量化了模型将第 1 个相关变更集定位到错误报告的能力. 该指标通过计算在 B 个错误
报告中的倒数排名的平均值得出, 其中错误报告 B i 的倒数排名等于排名中第 1 个相关变更集的倒数排名:
1 |B| ∑ 1
MRR = (22)
|B| rank (1)
i=1 B i
其中, rank (1) 表示在第 i 个错误报告中, 第 1 个相关变更集在返回结果中的排名.
B i
平均精确率 (MAP): 衡量模型定位与错误报告相关的所有变更集的能力, MAP 被计算为 B 个错误报告的平均
精度值 (AvgP) 的平均值, 而错误报告 B i 的平均精度值 AvgP 是基于排名中所有相关变更集的位置来计算的:
B i
P@j×pos( j)
M ∑
AvgP =
N
j=1
(23)
1 |B| ∑ 1
MAP =
|B| AvgP B i
i=1
其中, j 是排名, M 是检索到的变更集数量, pos(j) 表示第 j 个变更集是否与该错误报告相关, N 是与变更集相关的
错误报告总数, P@j 是在检索排名中的前 j 个位置的精确率, B i 是第 i 个错误报告.
基于上述评价指标, 我们使用 Wilcoxon 符号秩检验来验证两个模型在预测性能上是否有显著差异, 当 p 值小
于 0.05 时, 就认为模型间的差异是不可忽视的.
3.2.2 实验设置
实验在一台配备 12 核 3.2 GHz Intel 处理器的服务器上进行, 使用了一块 80 GB 显存的 NVIDIA A100 显卡,
并运行 CUDA 11.7. 模型实现采用了 PyTorch v2.0.1. 由于预训练任务计算资源需求高且数据集规模庞大, 我们选
择了现成的 Graphformer 预训练模型进行实验. 具体设置方面, 我们将错误报告最大嵌入长度限制设定为 256, 语
法树节点数量设置最大为 50, 使用 12 层 Graphformer, 同时将代码和文本的隐藏状态维度设置为 512, 批次大小设
置为 256, 多头自注意力机制中的头数设为 2. 相关性判断的阈值 k 被设置为 0.35, 边缘参数 γ 设为 0.2. 在训练过
程中, 使用 Adam 作为优化器, 并将超参数设置为 1E–8, 我们使用了 0.4 的 dropout 层以防止过拟合. Epoch 设置
为 20 轮, 当 MRR 在 10 个 epoch 内没有改善时, 停止训练过程.
3.2.3 对比方法
综合已有文献研究和相关开源代码的现状, 我们选取了错误检测性能最优的 3 个基于深度学习的方法和 4 个
基于错误变更集的错误检测方法, 在所选数据集上进行了充分的实验与分析.
对于利用深度神经网络特征进行错误定位的方法, 许多相关研究 (如 Np-CNN [28] 、LS-CNN [29] 、DeepLoc [30]
等) 未公开其代码, 使得其复现过程具有一定的挑战性 [31] . 为确保已有工作复现的准确性, 我们对现有的开源工作
进行了全面的调研和筛选, 并从中选择了 3 种具有良好复现结果的优秀定位方法, 作为基于深度模型特征的错误
定位基线方法. 这一选择过程旨在提高实验结果的可靠性和可比性.

