Call-Chain-Aware LLM-Based Test Generation for Java Projects
作者: Guancheng Wang, Qinghua Xu, Lionel C. Briand, Zhaoqiang Guo, Kui Liu
分类: cs.SE, cs.AI
发布日期: 2026-04-23
💡 一句话要点
CAT:一种调用链感知的LLM测试生成方法,提升Java项目测试覆盖率。
🎯 匹配领域: 支柱九:具身大模型 (Embodied Foundation Models)
关键词: LLM测试生成 Java项目 调用链分析 静态分析 代码覆盖率 单元测试 软件测试
📋 核心要点
- 现有基于LLM的测试生成方法在处理复杂Java项目时,由于缺乏对类间依赖和调用链的考虑,效果不佳。
- CAT方法通过静态分析显式地将调用链和依赖关系上下文融入LLM提示中,从而提升测试生成的质量。
- 实验表明,CAT在Defects4J和真实GitHub项目上显著提升了代码覆盖率,优于现有最佳方法PANTA。
📝 摘要(中文)
本文提出了一种新颖的基于LLM的测试生成方法CAT,该方法能够感知调用链,用于Java项目。现有方法主要依赖执行路径信息来指导提示构建,但对于具有复杂类间依赖、深度调用链和复杂对象初始化需求的软件系统而言,这通常是不够的。CAT通过专门的静态分析,将调用链和依赖关系上下文显式地纳入提示中。为了构建可执行的、语义上有效的测试上下文,CAT系统地建模了调用者-被调用者关系、对象构造函数和第三方依赖关系,并支持在生成失败时进行迭代测试修复。在Defects4J基准和LLM截止日期后发布的四个真实GitHub项目上的评估结果表明,在Defects4J项目中,CAT的行覆盖率和分支覆盖率分别比最先进的方法PANTA提高了18.04%和21.74%,并且在截止日期后的真实项目中始终表现出卓越的性能。消融研究进一步证明了调用链和依赖关系上下文在CAT中的重要性。
🔬 方法详解
问题定义:现有基于LLM的Java项目测试生成方法,主要依赖执行路径信息,无法充分处理复杂软件系统中普遍存在的类间依赖、深度调用链和复杂对象初始化问题。这些问题导致生成的测试用例难以执行,语义不正确,覆盖率不足。
核心思路:CAT的核心思路是通过静态分析提取代码的调用链和依赖关系信息,并将这些信息作为上下文显式地添加到LLM的提示中,从而引导LLM生成更准确、更有效的测试用例。这种方法模拟了人工编写测试用例时对代码结构的理解过程。
技术框架:CAT的整体流程包括以下几个主要阶段:1) 静态分析:使用静态分析工具提取Java项目的调用链和依赖关系信息。2) 提示构建:根据静态分析的结果,构建包含调用链和依赖关系上下文的LLM提示。3) 测试生成:使用LLM根据提示生成测试用例。4) 测试修复:如果生成的测试用例无法编译或执行,则进行迭代修复,直到生成可执行的测试用例。
关键创新:CAT的关键创新在于将调用链和依赖关系上下文显式地融入到LLM的提示中。与现有方法相比,CAT不再仅仅依赖执行路径信息,而是更全面地考虑了代码的结构和语义,从而提高了测试生成的质量。
关键设计:CAT的关键设计包括:1) 调用链和依赖关系提取的粒度:需要仔细选择提取的调用链和依赖关系的深度和广度,以避免提示过长或信息不足。2) 提示信息的编码方式:需要设计一种有效的编码方式,将调用链和依赖关系信息转化为LLM能够理解的自然语言提示。3) 迭代测试修复策略:需要设计一种有效的迭代测试修复策略,以处理LLM生成的测试用例中可能存在的错误。
🖼️ 关键图片
📊 实验亮点
CAT在Defects4J基准测试中,相较于最先进的方法PANTA,行覆盖率提升了18.04%,分支覆盖率提升了21.74%。在LLM截止日期后发布的四个真实GitHub项目上,CAT也始终表现出优越的性能,证明了其在实际应用中的有效性。消融实验进一步验证了调用链和依赖关系上下文在CAT中的重要作用。
🎯 应用场景
CAT方法可应用于各种规模的Java软件项目,尤其适用于具有复杂类间依赖和深度调用链的系统。它可以帮助开发人员自动生成高质量的单元测试,提高代码覆盖率,减少人工测试的工作量,并最终提升软件质量。该方法还可扩展到其他面向对象编程语言。
📄 摘要(原文)
Large language models (LLMs) have recently shown strong potential for generating project-level unit tests. However, existing state-of-the-art approaches primarily rely on execution-path information to guide prompt construction, which is often insufficient for complex software systems with rich inter-class dependencies, deep call chains, and intricate object initialization requirements. In this paper, we present CAT, a novel call-chain-aware LLM-based test generation approach that explicitly incorporates call-chain and dependency contexts into prompts through dedicated static analysis. To construct executable, semantically valid test contexts, CAT systematically models caller--callee relationships, object constructors, and third-party dependencies, and supports iterative test fixing when generation failures occur. We evaluate CAT on the widely used Defects4J benchmark and on four real-world GitHub projects released after the LLM's cut-off date. The results show that, across projects in Defects4J, CAT improves line and branch coverage by 18.04% and 21.74%, respectively, over the state-of-the-art approach PANTA, while consistently achieving superior performance on post-cutoff real-world projects. An ablation study further demonstrates the importance of call-chain and dependency contexts in CAT.