Page 213 - 《软件学报》2026年第5期
P. 213

2092                                                       软件学报  2026  年第  37  卷第  5  期


                 度要高于不匹配对的相似度, 并且有一个固定的边际, 强制模型在预测正负样本时保持一定的间隔, 从而在区分正
                 负样本时更为准确.
                    给定匹配的代码变更-错误报告对            (c, p), 以及  mini-batch  内对应的最难不匹配代码  c  和最难负文本  , 我们计
                                                                                                 q
                                                                                                 ′
                                                                                     ′
                 算双向排名损失如下:

                                    ∑
                                        [                     ] [                     ]
                                                         ′
                              L = min    r − f sim (c,q,W)+ f sim (c ,q,W) + r − f sim (c,q,W)+ f sim (c,q ,W) +λ|θ| 2  (20)
                                                                                  ′
                                      (c,q)
                                   ′           q  通过公式   (18) 选取.  c  表示与错误报告相似度得分最高, 但与错误报告
                                                                  ′
                                                ′
                 其中, 最难不匹配代码       c  和最难负文本
                 无关的变更代码,      q  表示与变更代码相似度得分最高的无关错误报告文本. r 是一个边界参数,                     f sim (·,·,·) 表示用相
                               ′
                 似度计算模块实现的相似性预测函数.
                  3   实 验
                    本节介绍实验设置, 包括模型所用到的数据集, 评估指标, 基线方法和超参数配置. 我们在                          6  个软件更改项目
                 数据集上进行了广泛实验, 以回答以下研究问题.
                    RQ1: 相较于其他方法, GTCL      的性能如何? 本文与      7  种不同类型的基线方法进行对比, 比较了在             6  个变更数
                 据集上的错误定位效果, 以验证方法性能.
                    RQ2: GTCL  能否捕获代码的变化信息? 为此设计了两项实验: 一是删除编辑节点标签以评估其对模型性能的
                 影响; 二是仅使用单一语法树, 不考虑变化信息, 评估变化信息对模型性能的影响.
                    RQ3: GTCL  各子模块对本方法总体性能的贡献如何? 本文分别对变更语法树、全局和局部表示进行了消融
                 实验, 研究变更语法树构建和图         Transformer 两个模块对本方法总体性能的影响.
                    RQ4: GTCL  的主要参数   (模型层数    L, 隐藏状态维度    d  和相关性判断阈值     k) 会对定位结果产生怎样的影响?
                  3.1   实验数据
                    为了评估本文错误定位技术的有效性, 采用了                Ciborowska 等人  [6] 构建的错误数据集. 该数据集基于       Wen  等
                 人  [5] 所提供数据集进行分离和手动验证. 包括         AspectJ、JDT、PDE、SWT、Tomcat 和    ZXing  这  6  个软件项目, 其
                 中的错误报告数目和变更块数目如表             1  所示, 每个项目的数据集都包括版本更新记录和错误报告, 这些信息对于
                 分析代码中的错误和验证错误定位技术的有效性至关重要.


                                                      表 1 实验数据集

                             数据集       错误报告        更改次数        代码变更块        变更文件        变更集
                            AspectJ      200        5 539       23 446       14 030      2 939
                              JDT        94         16 582      150 630      58 619     13 860
                             PDE         60         10 834      100 373      42 303      9 419
                             SWT         90         17 688      69 833       25 666     10 206
                            Tomcat       193        15 381      72 134       30 866     10 034
                             ZXing       20          853         6 165       2 846       843

                    为了对每个项目进行模型训练和评估, 我们首先根据收集到的错误报告和诱发变更集按照时间顺序排列, 在
                 确保训练集早于验证集和测试集的前提下, 随机选择                 60%  的数据用作训练集, 20%     用于验证集, 剩余的      20%  作为
                 测试集. 在划分过程中, 确保训练集和测试集之间不存在重复的错误报告和诱发变更集. 在负样本的生成上, 通过
                 选择不属于诱发变更集的代码更改来构建负样本, 形成包含错误报告、诱发变更集和非诱发变更集的三元组, 然
                 而, 由于生成负样本的方法计算成本较高, 并且通过选择句法相似且不诱导错误的变更集未能显著提升检索准确
                 性  [6] , 本文最终决定采用随机采样策略来生成负样本, 并选择与正样本数量相同的负样本数量, 以保障数据集的平
                 衡性. 需要指出的是, 尽管训练集并未涵盖所有可用的代码变更, 但在错误定位过程中, 模型会对特定项目中所有
                 可用的代码变更执行检索.
   208   209   210   211   212   213   214   215   216   217   218