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

香佳宏 等: 大模型在软件缺陷检测与修复的应用发展综述                                                     1517


                 在  AlphaRepair 之后, Xia 等人提出了一种通过系统地结合多种微调和提示策略自动进行缺陷修复的工具 FitRepair                  [24] .
                 在  CodeT5  模型基础上, FitRepair 使用知识增强微调和修复导向微调生成了两种领域特定的微调模型, 并应用相关标
                 识符提示策略, 通过信息检索和静态分析获取错误行的相关标识符列表以优化提示信息. 在修复过程中, FitRepair 将
                 4  种模型变体   (包括基础模型、两种微调模型和带有提示的基础模型) 进行结合以便更好地发挥大模型的能力. 在
                 Defects4J 1.2  和  2.0  缺陷数据集上的评估中, 相较于先前的工作, FitRepair 取得了更好的修复效果.
                    在之前的诸多研究中, 研究者直接利用大型预训练语言模型对漏洞进行自动修复, 然而这样的方式会导致多
                 次采样生成重复的补丁等问题. 基于此发现, Xia 等人             [57] 提出基于  ChatGPT  的对话式自动修复工具     ChatRepair. 在
                 修复过程中, ChatRepair 使用最新的对话大模型         ChatGPT  交替进行补丁生成和验证: 首先让大语言模型生成补丁,
                 然后针对测试集进行验证, 提供反馈并用新的反馈信息提示大模型生成新的补丁. 对于未能通过所有测试的补丁,
                 ChatRepair 将其与相应的测试失败信息结合起来, 构造一个新的提示继续进行迭代. 实验结果表明: ChatRepair 在
                 Defects4J 1.2  和  2.0  数据集上分别修复了  114  和  48  个漏洞, 达到了目前最佳的修复效果. 并且根据作者统计, 单个
                 漏洞的修复成本平均为        0.42  美元.

                 5.4   小 结
                 并且可以进一步有针对性地对模型进行微调和构造提示输入.
                    本节首先简要介绍了自动修复系统的机制, 并聚焦于不同补丁生成技术进行探究. 具体而言, 传统技术中, 基
                 于启发式搜索和约束求解的技术在早期验证了自动修复系统的有效性. 然而, 基于启发式搜索的技术需要面临搜
                 索空间过大及规则依赖人类专家精细设置等挑战, 基于约束求解的技术存在路径爆炸和代码不可读等挑战. 后续
                 研究者尝试通过人工分类缺陷特征定制修复模板, 然而现实中软件缺陷的复杂性导致大部分缺陷特征无法被准确
                 分类, 限制了基于模板技术的发展. 基于此, 研究人员尝试使用深度学习和神经网络相关技术解决之前工作的挑战
                 并获得了更好的修复效果, 但是基于学习的技术所依赖的缺陷修复数据集在数量质量以及收集清洗方式上的困难
                 是该类技术长期面对的难题. 在此之后随着大模型的推出, 研究人员尝试将大模型应用到软件缺陷自动修复任务
                 上并获得了优异的效果. 目前主要的工作集中在将大模型应用到缺陷修复的实证研究中. 进一步, 许多研究者尝试
                 提出定制化的工具和框架以更好地应用模型进行软件缺陷修复.
                    尽管诸多研究者通过大规模的实证研究已经验证大模型驱动的自动修复工具的有效性, 并尝试微调大模型及
                 调整提示词以达到更好的修复效果. 但是目前研究者尚未对大模型的输入进行更加精细化的构建, 而是将大模型
                 当作一种高效的补丁搜索工具使用. 事实上, 研究者青睐                  Defects4J 数据集的原因是该数据集是在真实复杂的
                 Java 项目上构建而成, 其包含的漏洞拥有超过人工构建缺陷数据集的复杂度. 因此, 该数据集也可以更好地展示大
                 模型在修复复杂漏洞, 尤其是需要多编辑的漏洞时的修复能力. 在模型尝试修复这类复杂缺陷时, 修复的上下文至
                 关重要. 目前   Xia 等人  [24] 尝试使用缺陷项目对模型微调, 帮助大模型理解缺陷上下文信息, 获得了不俗的修复效
                 果. 进一步, 他们尝试将对话式模型         ChatGPT  引入到自动修复任务中, 在模型对话迭代中理解修复上下文, 同样获
                 得了优异的缺陷修复性能表现. 因此, 如何进一步发掘和利用上下文信息增强模型的修复能力, 还有待研究人员进
                 行更多的探索. 此外, Xia 等人     [171] 、Jiang  等人  [189] 和  Huang  等人  [45] 的大规模实证研究已经表明不同模型的修复性
                 能有显著的区别, 不同模型在微调前后有显著的区别, 以及不同模型在使用不同的输入构造方式时效果也有截然
                 的不同. 那么基于以上几个方面, 研究者仍然可以进行更加深入的探索和研究, 尝试挖掘出不同模型的不同特性,

                 6   挑战与机遇

                    大模型的出现推动了软件工程任务的发展, 但是考虑到现实世界软件应用的复杂性和大模型本身的随机性等
                 因素, 大模型在真实场景的应用仍存在一系列挑战. 下面我们将对本文所涉及的                         4  个领域进行分析, 并在此基础上
                 探讨基于大模型的技术在模型快速迭代更新下的挑战与机遇以及在工业实践与落地的未来发展方向.

                 6.1   深度学习库缺陷检测
                    使用大模型进行深度学习库缺陷检测最核心的逻辑是大模型在预训练过程中隐含地学习到深度学习库相关
   106   107   108   109   110   111   112   113   114   115   116