Page 86 - 《软件学报》2025年第4期
P. 86

1492                                                       软件学报  2025  年第  36  卷第  4  期


                 点关注基于大模型技术的最新进展. 此外, 关于大模型在整个软件工程领域的相关文献调研, 已有综述进行了充分
                 的分析  [25,26] , 而本综述则专注于大模型在软件缺陷检测和修复领域中的应用并梳理其发展脉络. 鉴于此, 在保证本
                 综述内容完整以及更好地反映出缺陷检测和修复                 4  个领域相关研究发展脉络的前提下, 本文在介绍经典工作的同
                 时会侧重于    2020  年后发表具有代表性的工作, 并重点聚焦于基于大模型的技术. 此外, 基于大模型的工作往往与
                 过去的技术进行实验比较分析, 例如缺陷自动修复的技术                   AlphaRepair [32] 选取了大量自动修复技术进行比较. 因
                 此, 本综述会重点选择多次被用作性能基线进行比较的技术进行分析介绍.
                    基于此, 本综述最终选取了         9  篇深度学习库缺陷检测文章、21         篇缺陷自动修复文章、28         篇测试用例自动生
                 成文章、30   篇  GUI 自动测试文章, 共计     88  篇文章进行详细论述, 其中早于        2020  年的论文  34  篇, 2020–2022  年的
                 论文  30 篇, 2023 年的论文  24 篇. 这些论文中大多数来自所涉及领域的高质量会议和期刊, 例如                  ICSE  会议  (33 篇)、
                 ESEC/FSE  会议  (12  篇)、ISSTA  会议  (8  篇)、ASE  会议  (6  篇)、OOPSLA  会议  (4  篇)、TSE  期刊  (2  篇). 综上所述,
                 本文的主要贡献如下.
                    (1) 对大模型在缺陷检测与修复方向的            4  个成熟技术领域: 深度学习库缺陷检测、GUI 自动化测试、测试用
                 例的自动生成以及缺陷自动修复, 进行了详细的分析和探讨.
                    (2) 总结并分析了这     4  个领域传统技术流派的特性和挑战.
                    (3) 对大模型应用于这      4  个领域的机制特性进行分析阐述.
                    (4) 对基于大模型技术所面临的挑战进行了系统的梳理, 并总结了未来可能的研究方向.
                    本文第   1  节将对大模型的机制特性与常见应用于下游任务的方式进行概述. 第                     2–4  节聚焦于大模型在缺陷检
                 测领域的成熟技术与这些领域的发展脉络. 具体而言: 第                 2  节在深度学习库的缺陷检测领域将首先分析介绍模型
                 和  API 级别的工作, 进而分析最新基于大模型的技术进展. 第              3  节将介绍  GUI 自动化测试技术中传统技术的发展
                 脉络和最新基于大模型技术的特性. 第            4  节是测试用例自动生成技术, 本文将首先回顾传统技术和挑战, 进而分析
                 基于大模型工作的最新进展. 第          5  节将聚焦于大模型在缺陷修复方向上缺陷自动修复领域的应用, 首先分析软件
                 缺陷自动修复机制, 并分别对传统技术、基于学习的技术和基于大模型的技术进行分析探讨. 在第                               6  节, 本文将根
                 据研究现状分析总结这些领域研究所面临的挑战及未来的机遇. 最后, 第                      7  节对全文进行总结.

                 1   大模型概述                         (模型参数量多达

                    大型语言模型      (large language model, LLM, 简称为大模型) 通常指包含数百亿或更多参数的预训练语言模型
                 (pre-trained language model, PLM), 例如  GPT-3.5 [33] 、LLaMA [34] 、PaLM [35] 等. 这种模型在大量开源语料库中的文
                 本和代码片段上进行预训练, 并且已经在各种与自然语言和代码相关的任务中展示出令人印象深刻的性能表现.
                 具体而言, 大模型基于流行的转换器            (Transformer) 架构  [36] , 该架构结合了编码器和解码器以处理文本生成任务,
                 其中多头注意力层堆叠在非常深的神经网络中. 编码器首先接收模型的输入, 然后生成编码向量. 解码器利用编码
                 向量基于所有先前生成的标记自回归地生成下一个标记. 根据缩放定律                       (scaling law), 模型的性能大致随着模型大
                 小的增加而提高      [37,38] . 随着研究者大幅扩展了模型的规模, 使用了更加复杂多样的预训练数据集和更加先进的训
                 练方式, 大模型可以更好地根据上下文理解自然语言或者代码并生成更高质量的文本. 不仅如此, 相较于其他模
                 型, 大模型的特殊性质是其具有涌现能力, 即较小规模的语言模型所不具备的处理复杂任务的通用能力. 在这种现
                 象下, 研究人员尝试构建了越来越大的模型                           540 B [35] ), 并在代码补全和代码合成等代码相关任务
                 上展示出令人印象深刻的效果.
                    根据模型的架构和预训练目标, 如图            3  所示, 语言模型可以被划分为        3  种主要类型: 解码器模型、编码器模
                 型  (掩蔽语言模型) 以及编码器-解码器模型. 这          3  类模型各自具有独特的架构和预训练目标, 因此在处理不同的任
                 务和问题时, 它们的表现也会有所不同. 以下是对这               3  种模型更具体的描述.
                    (1) 解码器模型: 这类模型采用顺序预测的策略, 即它们生成一个标记                   (例如一个词或者字符) 时, 只考虑该标
                 记之前的上下文信息        (即前缀), 而忽略了之后的信息. GPT       [13,14] 是典型的解码器架构模型, 它的训练目标是根据给
   81   82   83   84   85   86   87   88   89   90   91