Page 366 - 《软件学报》2026年第3期
P. 366
张犬俊 等: 检索增强生成在软件工程中的应用综述 1329
例, 融合到生成过程中, 通过计算相似度动态调整对检索结果的依赖程度, 生成更加准确的代码摘要. REDCODER [29]
使用密集检索技术, 从代码或摘要数据库中检索相关的代码或摘要, 将检索到的候选与目标代码拼接, 输入生成器
生成摘要, 丰富了上下文信息, 帮助生成更准确的摘要.
(4) Text-to-SQL
RAG 通过在 Text-to-SQL 任务中引入外部检索信息 (如数据库表格 [85,86] 、SQL 模板 [87] 和相关示例 [31,52,88] ), 帮
助生成器获得更相关的上下文信息 [64] , 减少了理解复杂查询和生成正确 SQL 的难度. RESDSQL [86] 优化了 SQL 生
成过程, 首先通过检索获得表格信息, 然后生成骨架并填充具体内容, 提高了生成质量. XRICL [89] 提升了多语言环
境下的 Text-to-SQL 能力, 通过检索并翻译相关 SQL 示例来生成目标语言的 SQL 查询. Chang 等人 [90] 提出了 ODIS
框架, 通过选择跨领域的 SQL 示例, 优化了生成器在不同领域中的表现, 确保生成的 SQL 查询符合目标领域的需
求. MURRE [91] 通过多跳检索逐步收集相关的表格信息, 提升了开放域 Text-to-SQL 任务中的准确性. ReFSQL [87] 结
合 SQL 模板和表格示例的检索帮助生成器避免了 SQL 结构的错误和冗余. Nan 等人 [31] 通过优化提示和示例选择,
增强了 LLM 对 SQL 结构和数据库模式的理解, 提高了生成 SQL 的多样性和准确性.
(5) 代码翻译
在代码翻译任务中, Mansourian 等人 [62] 收集并将 iOS 和 Android 平台的官方文档转换为可检索的 Markdown
格式, 然后构建向量数据库以存储这些文档, 形成检索器, 提供必要的上下文信息供模型在生成过程中检索使用.
生成器则是 GPT-4 模型, 利用检索到的信息生成高质量的跨平台代码翻译. 在翻译过程中, 调整提示指令. 通过这
种结构化的集成, RAG 不仅提供了丰富的上下文支持, 帮助模型理解平台特定的 API 和最佳实践, 还提高了翻译
结果的质量, 减少了错误和遗漏.
5.2 软件测试
软件测试是为了发现错误而执行程序或系统的过程, 或者是针对程序或系统的某个属性或能力进行评估, 以
确保其满足所需结果的任何活动 [92] .
(1) 测试生成
在测试生成任务 [93,94] 中, RAG 框架通过整合检索器和生成器显著提升了生成效果. 例如, APT [51] 首先利用神
经编码组件构建检索器, 从代码库中根据属性关系 (如 Given、When、Then) 检索与目标方法相关的已有方法及
其测试用例, 确保生成器获取到高质量的参考信息. 然后, 生成器基于这些检索到的示例, 通过预定义的模板和序
列生成准确且覆盖全面的单元测试.
其中, 断言生成作为测试生成中的关键子任务之一, 主要关注测试方法中断言语句的自动化生成, 近年来逐渐
受到研究者的关注 [95] . RAG 框架的提升主要体现在通过检索相关演示示例来提供额外的上下文信息, 从而增强生
成模型的表现. 该方法依赖于检索器从庞大的代码库中检索出与当前查询相关的示例 (如焦点方法、测试方法及
预期的断言), 这些示例为生成模型提供了必要的背景信息 [59] . CEDAR [96] 利用检索器从大规模代码示例库中自动
筛选出与当前测试方法相似的演示案例, 每个示例中包含焦点方法与含有<AssertPlaceholder>的测试方法, 形成高
质量的代码演示. 随后, 这些演示案例与当前查询按照预设的提示模板组合成完整的输入, 通过 LLM 进行补全生
成, 从而使模型能够依赖外部示例来生成精准且连贯的断言.
(2) 漏洞检测
在漏洞检测任务中, RAG 主要通过检索历史修复案例与相关代码上下文来增强生成器对漏洞类型和修复模
式的理解, 从而提高检测准确性. Vul-RAG [48] 在漏洞检测任务中提出了基于知识级检索增强生成的方法, 构建了包
含功能语义、漏洞原因和修复方案的三维知识库, 生成器逐条输入检索到的知识条目, 结合代码片段推理漏洞的
存在与否, 并提供修复建议. 通过逐条迭代推理, Vul-RAG 缓解了生成器处理长文本的限制, 显著提升了漏洞检测
的准确率和解释能力. VulScribeR [60] 专注于通过增强漏洞样本来提高漏洞检测模型的性能, 其检索器通过聚类和
相似性分析, 提供多样化的干净代码与漏洞代码对, 生成器采用变异、注入和扩展这 3 种生成策略, 生成具有多样
性和上下文增强的新漏洞数据, 有效解决了漏洞数据稀缺问题, 并优化了模型的泛化能力.

