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

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


                    值得注意的是, SemanticCodeBERT    的结果与其原文      (文献  [7]) 中同项目上的结果有较大差异, 在此给出分析:
                 本文实验中对数据集进行预处理, 包括删除了更改代码中的注释以及日志信息. 我们查看了                              SemanticCodeBERT
                 的数据集, 其数据集中保留了代码中的注释和日志信息, 这些内容虽然对于代码的实际运行没有直接作用, 但可能
                 包含了一些有助于模型理解代码语义的额外信息. 删除这些信息后, 模型失去了这部分辅助理解的线索, 使得模型
                 在学习代码语义时出现偏差, 进而影响最终的结果. 为了保证比较结果的公平性, 使用处理的数据集在本文实验设
                 备上对   SemanticCodeBERT  进行了重新训练. 在实验中发现, 在不同设备上进行实验, 硬件性能的差异导致模型收
                 敛的速度和程度不同, 本实验使用的是一台配备                12  核  3.2 GHz Intel 处理器的服务器, 使用了一块   80 GB  显存的
                 NVIDIA A100  显卡, 并运行  CUDA 11.7. 而文献  [7] 是在  Ubuntu  系统上使用  128 GB RAM 的 NVIDIA Tesla A100
                 进行预训练. 本文实验设备与文献           [7] 使用的设备可能不同, 这会影响模型训练的速度和稳定性. 在训练过程中,
                 硬件性能的差异导致模型收敛的速度和程度不同, 从而使得模型学到的参数存在差异, 最终影响实验结果.
                    综上所述, GTCL    模型在软件错误定位任务中展现出卓越的性能. 基于变更的抽象语法树在捕捉变更块变化
                 方面的优势, 以及全局与局部视角的结合, 使得             GTCL  在多个关键性能指标上均优于其他对比方法. 这一成果不仅
                 为软件错误定位任务提供了新的思路和方法, 也为软件维护和质量保障领域的研究和应用提供了新的可能性.
                    RQ2: GTCL  能否捕获代码的变化信息?
                    为了回答这个问题, 我们设计了两个实验: 一是删除编辑节点标签以考察其对模型性能的影响, 二是仅使用单
                 一变更语法树来分析其对模型效果的作用.
                    (1) 前后变更语法树与变更类型的相关性分析
                    为了深入探讨前后变更语法树与变更类型之间的关系, 我们进行了一系列关键实验. 首先, 将实验数据集按照
                 变更类型划分为      3  个子集: 仅包含删除操作的       Delete 数据集, 仅包含新增操作的       Add  数据集, 以及其他操作的数
                 据集  Other. 接着, 对  GTCL  模型进行消融实验, 分别在变更数据集的旧语法树和新语法树的基础上进行了实验, 具
                 体步骤包括: 替换旧语法树, 并将其复制成两棵新语法树; 替换新语法树, 并将其复制成两棵旧语法树. 实验结果如
                 图  5  所示.

                                                  w/o AST new  Normal   w/o AST old
                      0.6                        0.6                         0.6
                      0.5                        0.5                         0.5
                     MRR  0.4                   MRR  0.4                    MRR  0.4
                                                                             0.3
                                                 0.3
                      0.3
                      0.2                        0.2                         0.2
                      0.1                        0.1                         0.1
                       0                           0                          0
                          AspectJ JDT  PDE  SWT Tomcat ZXing  AspectJ JDT  PDE  SWT Tomcat ZXing  AspectJ JDT  PDE  SWT Tomcat ZXing
                          (a) Delete 数据集的 MRR 指标      (b) Add 数据集的 MRR 指标         (c) Other 数据集的 MRR 指标
                                        图 5 替换新旧抽象语法树对          MRR  指标的影响分析

                    在  3  个数据集上, 替换新旧语法树的操作均导致了模型              MRR  指标的下降. 这一现象可以归因于替换操作导致
                 了代码变更部分信息的丢失. 在          Delete 数据集上, 替换语法树造成了性能的显著下降. 进一步分析表明, 替换旧语
                 法树对结果的影响最为显著, MRR          指标较基本模型降低了        28.8%. 这一情况可能与旧语法树中主要包含删除节点
                 信息有关. 相对而言, 在      Add  数据集上, 替换新语法树对模型性能的影响最为显著, MRR                指标较基本模型降低了
                 33.7%. 这一结果可能与新语法树中主要包含新增节点信息有关. 在                  Other 数据集上, 虽然替换新旧语法树的操作
                 没有显著差异, 但均导致了性能的下降, MRR            指标较基本模型降低了        30.3%. 综上所述, 保留新旧语法树对于模型
                 捕捉代码变更信息至关重要, 因为新旧语法树反映了代码的前后变化差异, 包括具体的删除、增加和更新操作, 这
                 对提升模型性能具有重要意义, 证明前后变更语法树体现了代码块的变化信息.
                    (2) 变更节点标签对模型的性能有何影响
                    除了对变更语法树的结构分析, 我们还进一步研究了变更节点标签对模型性能的影响. 如图                                6  所示, 在图
   212   213   214   215   216   217   218   219   220   221   222