Page 215 - 《软件学报》2026年第5期
P. 215
2094 软件学报 2026 年第 37 卷第 5 期
BLIA [32] : 整合了之前提出的错误相关特征, 通过组合这些特征的方式提高基于信息检索的错误定位性能.
DNNLOC [33] : 利用深度神经网络来进行错误定位, 结合了卷积神经网络 (CNN) 和长短期记忆网络 (LSTM) 来
处理代码和错误报告的序列数据, 从而提取高层次的特征表示. 该模型在处理代码的上下文信息和长范围依赖关
系方面表现优异, 能够有效地识别和定位代码中的错误.
DreamLoc [34] : 采用 wide and deep 模型架构来提升错误特征的学习效果. 综合考虑了错误报告和代码的信息,
通过引入注意力机制和门控机制, 旨在提高错误报告与代码文件之间的关联匹配精度.
[5]
Locus : 利用代码块级别的粒度和向量空间模型, 根据在错误报告、代码块和日志消息之间获得的最大相似
度得分来定位相关的变更集.
Bug2Commit : 通过构建基于图的神经网络来对代码提交与错误报告进行匹配, 它将错误报告和代码提交映
[8]
射到一个共享的嵌入空间中, 并利用图神经网络 (GNN) 来捕捉错误报告与代码提交之间的复杂关系.
[6]
FBL-BERT : 使用 BERT 作为预训练模型, 将变化的标签加入训练中, 通过对错误报告和代码变更集的文本
进行词嵌入, 将它们映射到 BERT 生成的上下文敏感的嵌入空间中. 通过对最大余弦相似度的求和来综合评分, 从
而提高错误定位的精度. 该方法强调了使用 BERT 的上下文信息来增强对代码和错误报告之间语义关联的捕捉能
力, 从而有效提升错误定位的准确性.
[7]
SemanticCodeBERT : 该模型使用语义流图 (SFG) 来捕捉代码语义, 基于 SFG 设计和训练改进的 CodeBERT,
并设计了一种新颖的分层动量对比错误定位技术.
我们在相同的错误定位场景下, 对比了以上基准方法与本文提出的 GTCL 方法在所设计研究问题下的实验结
果和相关指标, 以验证 GTCL 方法的有效性. GTCL 方法不依赖于日志消息等其他信息检索 (IR) 特征, 因为我们旨
在探索从错误报告中的自然语言到代码更改之间的映射关系. 尽管高质量的日志消息可以通过提高某些变更集的
评分对结果产生积极影响, 但并非所有相关的代码更改都伴随有高质量的日志消息.
3.3 实验结果与分析
RQ1: 相较于其他方法, GTCL 的性能如何?
为了验证这个问题, 我们将 GTCL 模型的定位性能与其他 7 种不同类型的基线方法在 6 个变更数据集上进行
对比, 具体结果详见表 2.
表 2 展示了 GTCL 与其他对比方法在 6 组数据集上的定位性能指标, 其中每个指标的粗体值表示所有方法中
最佳的结果. 在最优指标方面, 相较于次优基线方法 SemanticCodeBERT, GTCL 的 MAP 平均提升 5.8%, MRR 平
均提升 7.2%; 在 P@1 指标上, 有着最为显著的提升, 达到 12.2%. 特别是在 SWT 数据集中, P@1 的值达到了
0.478, 这意味着在仅定位一个错误诱发变更集以应对错误报告时, GTCL 的精确率接近 50%. 在 Tomcat 数据集上,
GTCL 的 Top@5 达到 0.907, Top@10 达到 0.954, 该结果证明了本模型定位错误变更集性能的先进性. 根据
Wilcoxon 符号秩检验的结果 GTCL 与其他模型在预测性能上具有显著差异.
进一步分析, 3 种传统深度模型在变更数据集上的表现较差, 主要由于其泛化能力有限, 导致其性能指标均低
于定位错误诱发变更集的 3 种基线模型. 其中, BLIA 和 DNNLOC 由于仅依赖序列信息而未考虑代码的结构特征,
导致错误报告与错误代码的语义相似度较低, 从而使其性能指标最低. 而 DreamLoc 尽管属于传统深度模型, 其宽
度与深度架构以及代码切片技术在提升错误特征学习效果方面有所改进, 相较于前两种方法有所提升. 除早期的
Locus 技术外, 基于错误诱发变更集的基线模型在定位性能上皆优于 3 种传统深度模型, 其中, SemanticCodeBERT
在与 Bug2Commit 和 FBL-BERT 两类模型的比较中表现出更高的性能. 这一优越性源于 SemanticCodeBERT 利用
语义流图来捕捉代码的语义特征, 相较于仅使用代码的序列信息, 结构信息提供了更为丰富和深刻的上下文理解,
进而更有效地捕捉代码的语法和语义特征, 从而提升错误报告与变更块匹配的准确性. 此外, GTCL 在定位结果上
展现出比基线模型更有效且稳定的性能, 其在所有 6 个数据集上的各项指标均优于基准模型. 与 SemanticCodeBERT
相比, 基于变更的抽象语法树在捕捉变更块的变化方面表现更为出色. 相较于语义流图, 基于变更的抽象语法树提
供了更为精确的全局与局部视角, 从而更敏锐地捕捉了图节点的变更信息, 并有效减少了无关冗余节点的干扰.

