Page 367 - 《软件学报》2026年第3期
P. 367

1330                                                       软件学报  2026  年第  37  卷第  3  期


                    (3) GUI 测试
                    在  GUI 测试任务中, RAG    框架展现出强大的异常输入生成与崩溃检测能力. InputBlaster             [97] 通过引入  LLM  和
                 上下文学习机制, 系统化地自动生成异常文本输入, 用于触发移动应用中的崩溃缺陷, 实现对文本输入组件的深度
                 测试. 具体而言, InputBlaster 首先借助   LLM  从  GUI 页面的视图结构中提取上下文信息, 结合动态提示信息                (如用
                 户输入错误反馈) 和候选约束分类, 生成有效输入样例及其约束信息. 然后, InputBlaster 利用这些有效输入推理出
                 多样化的变异规则, 进一步生成批量异常输入, 提升生成效率并覆盖更多边界情况. 同时, 为了增强模型对具体任
                 务的理解能力, InputBlaster 引入上下文学习机制. 该机制通过构建高质量的异常输入示例集, 设计基于语义向量
                 匹配的检索器, 从 GitHub issue、历史运行记录等检索与当前输入场景最相似的历史崩溃案例, 以示例提示的形式
                 提供给   LLM, 提升其生成异常输入的相关性和有效性.
                  5.3   软件维护
                    软件维护是软件工程的基础性内容之一, 涵盖了交付后对软件进行持续修改的过程, 旨在修正错误并满足不
                 断涌现的需求.
                    (1) 程序修复
                    RAG  在自动程序修复中的应用主要通过检索历史修复示例或相关代码上下文, 增强生成器对错误类型和修
                 复模式的理解, 结合生成与修改策略, 显著提升了自动程序修复的准确性和上下文适配能力, 为检测到的有缺陷代
                 码片段自动生成正确的补丁          [98–100] . 具体而言, SARGAM [101] 框架将检索、生成和修改相结合, 从代码库中检索相似
                 的代码补丁, 生成器基于这些补丁生成初始修复, 随后修改器对生成的补丁进行优化, 显著提升了程序修复的性
                 能. RAP-Gen  [41] 利用混合检索策略, 结合词法和语义相似度, 从历史修复中检索相关的                   bug-fix  补丁对, 生成器
                 CodeT5  利用这些检索结果生成修复补丁, 增强了对历史修复模式的理解, 提高了修复准确率, 如图                         10  所示.

                      ① 检索器类型
                                                    BM25检索器 (词法级)
                       历史bug-fix补丁对

                                    代码库             DPR检索器 (语义级)

                      ② 检索与生成流程                  相关修复模式
                                                 Bug   Fix
                       训练bug-fix补丁对
                                                               预训练                             Fix
                                                                                          生成
                        Bug  Fix          检索
                                        Bug
                                                           微调
                                                    拼接
                      ③ 测试与验证流程
                            Bug                                       Fix
                                    集束搜索                 最高排名补丁                 验证



                                           图 10 针对自动程序修复的        RAG  模型示例   [41]

                    针对特定语言的程序修复, RTLFixer        [102] 通过  RAG  和  ReAct [51] 提示框架, 解决了  Verilog  代码的语法错误修
                 复问题. 它检索相关的修复示例, 生成器结合编译器的反馈, 迭代生成正确的代码. RING                         [103] 框架在多语言环境
                 下, 通过检索与当前错误最相关的示例, 生成器               Codex  利用  few-shot 学习生成修复代码, 实现了跨语言的自动
                 程序修复.
   362   363   364   365   366   367   368   369   370   371   372