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

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


                    近年来, 软件应用市场竞争激烈, 快速响应市场需求至关重要. 为满足用户的多样化需求并实现软件功能的迅
                 速迭代, 开发人员需要进行频繁的代码变更和维护. 这种变更不仅增加了版本发布的数量, 还引发了大量错误, 活
                 跃项目每日的提交次数可高达数百次, 伴随的错误数量甚至超过提交量                       [1] . 这些错误不仅影响系统正常功能, 还可
                 能引发数据泄露和系统崩溃等严重问题              [2] . 因此, 准确定位错误产生的变更版本成为维护软件系统稳定性和安全
                 性的核心任务.
                    随着软件系统规模的不断扩展和更新迭代速度的加快, 软件的变更变得愈加复杂. 继续依赖传统的手动定位
                 方法, 显然无法满足快速、精准定位错误的需求, 从而可能导致软件发布的延迟和质量的下降, 进而影响用户体
                 验. 研究表明, 现代软件系统平均每          2–3  周发布一个新版本, 而像     Linux  内核这样的大型开源项目, 其每日的变更
                 次数甚至可达数百次. 频繁的版本变更已经成为软件开发的常态, 但这一趋势也使得错误定位变得愈加困难. 尤其
                 是在大量变更中, 产生的错误数量往往超过提交的变更数, 且这些错误不仅可能影响系统的基本功能, 还可能引发
                 数据泄露、系统崩溃等严重后果, 威胁到软件系统的稳定性和安全性. 因此, 如何准确地将故障归因于具体的变更
                 集, 已经成为软件工程领域亟待解决的核心问题               [3] . 在此背景下, 面向变更集的自动化错误定位技术应运而生, 成
                 为软件工程研究中的长期挑战, 并且被认为是保障软件快速变更和高质量迭代的重要手段                             [4] .
                    基于文本信息检索的方法将变更序列视为文本信息, 通过计算错误报告与变更序列的文本相似度进行匹配.
                     [5]
                 Locus 首次在基于信息检索       (IR) 的错误定位技术中使用变更集构建文本语料库. 该研究在语料库中检索文档, 与
                 错误报告进行匹配, 进而实现错误定位. FBL-BERT 将         [6]  BERT  模型应用于错误变更集的定位, 将错误报告与代码
                 的局部信息匹配进行错误定位. 这些研究取得了一定进展, 推动了自动化错误定位研究的发展. 然而, 代码通过清
                 晰的函数划分、模块化和注释等, 展现出显著的结构特征, 仅提取语义信息无法进行准确表征, 这从很大程度上影
                 响了错误定位的准确性. 为了克服这一局限, 基于图结构的方法受到广泛关注. 该研究将代码变更集表示为图, 进
                 而实现更精准的代码表示学习. Du          等人  [7] 提出了语义流图, 使用程序元素之间的数据流和控制流以及程序元素的
                 具体角色以捕捉代码的语义, 并设计了            SemanticCodeBERT, 用于学习深层代码结构的表示. 这些方法引入了程序
                 元素之间的数据依赖和控制依赖关联, 也带来了冗余节点, 无法有效聚焦变更特征, 即代码图结构中的局部变化节
                 点. 而这些局部变化节点中包含了代码的变化信息, 是变更的关键内容, 却极易在规模庞大的代码信息中被忽略                                  [8] .
                    为了定位错误, 现有研究分别从局部和全局角度评估错误报告与变更集的语义相关性. 一部分研究                                [6,9,10] 从局
                 部细节出发, 计算错误报告与变更集局部信息的最大余弦相似度, 进行错误匹配. 另一部分研究                             [5,7] 从全局视角出
                 发, 将错误报告作为整体, 与变更集的整体嵌入计算相似度. 尽管这些方法在各自的视角上取得了进展, 但未能同
                 时综合局部细节和全局信息, 限制了错误定位的准确性.
                    近年来, 基于图的     Transformer 模型因其学习代码图节点复杂关系的优秀能力而成为研究热点                    [11−14] . 该模型通
                 过注意力机制捕捉图节点间的长距离依赖关系, 进而有效表征变更代码的整体结构和局部节点特征                                 [15−17] . 基于此,
                 本文提出了一种基于图        Transformer 的代码变更集错误定位方法         GTCL, 包含  3  个主要模块: (1) 基于变更的语法
                 树构建模块. 首先为每个变更块构建一个基于变更的抽象语法树, 记录代码变更前后的信息并标注变更内容.
                 (2) 图  Transformer 模块, 从全局和局部角度提取和学习变更代码与错误报告的语义信息. (3) 错误定位模块, 依据
                 代码和错误报告相关性进行排序, 完成错误定位任务.
                    为了评估    GTCL  的有效性, 本文对来自     6 个错误诱发变更集的错误报告和变更进行测试. 实验结果表明: GTCL
                 能有效地定位错误诱发变更集, 与最先进模型相比, MAP                 和  MRR  指标分别提升    11.4%  和  12.9%. 实验还证明了
                 GTCL  的主要组件   (全局和局部特征表示模块、相似度注意力计算模块) 以及变更信息                      (变更节点标签、变更的抽
                 象语法树) 对定位结果的贡献. 另外, 本文对           GTCL  主要参数   (模型层数、隐藏状态维度和相关性判断的阈值) 的
                 影响进行了讨论.

                  1   研究背景

                  1.1   基于变更的抽象语法树
                    在版本控制系统中, 每一次的变更提交均涵盖了代码修改前后的状态. 具体而言, 更改的代码在行前面标有“+”
   202   203   204   205   206   207   208   209   210   211   212