小组研究成果被IEEE/ACM会议ICSE 2026接收
ICSE(International Conference on Software Engineering)是软件工程领域的国际顶级学术会议,每年汇集来自学术界与工业界的众多研究人员与从业者,与ASE、ISSTA和FSE共同被誉为软件工程领域的“四大顶会”。在2026年Cycle 2的评选中,ICSE共直接接收论文72篇,录用率为8.9%。
由清华大学软件系统安全保障小组完成的论文《LSPRAG: LSP-Guided RAG for Language-Agnostic Real-Time Unit Test Generation》成功被ICSE 2026接收。该工作针对现有检索增强生成方法存在的局限,提出了一种新颖的、可扩展且跨语言一致的上下文检索方法,显著提升了大语言模型在单元测试生成方面的能力。在Java、Golang和Python三种语言的基准测试中,该方法取得了显著效果:代码覆盖率分别提升了213%、175%和32%,同时生成测试的有效率提升了251%、242%和20%。
自动化单元测试生成是保障软件质量的关键环节,然而现有技术在跨语言适配与实时生成方面仍面临严峻挑战。尽管大语言模型展现出了巨大潜力,但其生成高覆盖率测试代码的能力,却严重依赖于能否精准捕获目标方法的核心上下文。当前基于检索增强生成的方法,或受限于基于相似度的模糊匹配,或需为每种语言构建高成本的静态分析工具链,难以在实际开发中高效应用。
以典型场景为例(见图例):要为checkout方法中第3行的“true”分支生成测试,必须获取位于另一个文件(如PaymentService.java)中守卫条件方法isValid的定义。然而,现有方法对此类看似直接的任务却难以有效处理。例如,GitHub Copilot无法跨文件提取依赖上下文,用户必须手动提供相关代码。现有基于检索增强生成的代码生成方法同样难以精准捕捉此类“使用-定义”关系,因为依赖函数名、变量名和注释等表层线索进行相似度检索,而这些线索易受代码风格与规范差异的干扰,引入噪声。近期研究尝试引入基于静态分析的搜索以弥补这一缺陷,但此类方案仍需大量人工投入,且受限于特定编程语言,难以满足现代软件开发对通用性与实时性的迫切需求。
核心创新:本文提出LSPRAG,一个面向多语言单元测试生成的精准上下文检索框架。我们的关键发现是,现代代码编辑器已通过语言服务器协议(Language Server Protocol)集成了成熟的静态分析器。通过按需查询这些分析器,LSPRAG能够为焦点方法中使用的每个符号(如函数、方法等)精准定位其上下文来源,无需重复构建语言相关的基础设施。
整体设计架构如图所示,LSPRAG包含三个在开发者工作空间W中协同运作的核心模块。其工作流程如下:
1. 关键令牌提取:当开发者发起生成单元测试请求时,该模块首先识别焦点方法中的关键令牌。这些令牌通常掌控方法的控制流和外部交互,对生成高覆盖率测试用例至关重要。
2. 索与上下文构建(RAG):提取的令牌随后传递至RAG模块。该模块利用LSP提供的定义与引用(DEF/REF)查询能力,收集关键令牌的完整定义以及使用上下文,并构建出信息丰富的提示词输入至大语言模型。
3. 单元测试优化:为解决生成代码中可能的语法错误,优化模块在不编译的情况下对测试代码进行审查。若检测到潜在错误,则自动收集修复所需上下文,反馈给LLM进行错误的迭代修复。
本项目已在小组代码仓库中全面开源,更多细节与代码请访问:https://thu-wingtecher.github.io/LSPRAG
通过上述设计,LSPRAG在单元测试生成任务中,相较于其他RAG技术及业界广泛使用的GitHub Copilot,实现了更高的代码覆盖率。
