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  种具有良好复现结果的优秀定位方法, 作为基于深度模型特征的错误
                 定位基线方法. 这一选择过程旨在提高实验结果的可靠性和可比性.
   209   210   211   212   213   214   215   216   217   218   219