Enhancing LLM-Based Test Generation by Eliminating Covered Code
作者: WeiZhe Xu, Mengyu Liu, Fanxin Kong
分类: cs.SE, cs.AI, cs.LG
发布日期: 2026-02-25
备注: 9 pages, 4 figures, supplementary material included
💡 一句话要点
提出一种基于消除已覆盖代码的LLM测试生成方法,提升复杂方法覆盖率
🎯 匹配领域: 支柱九:具身大模型 (Embodied Foundation Models)
关键词: LLM测试生成 代码覆盖率 单元测试 软件质量保证 代码消除
📋 核心要点
- 现有LLM测试生成方法在复杂方法上表现不佳,难以达到理想的覆盖率。
- 提出迭代测试生成与代码消除策略,逐步简化测试任务,提升LLM推理效率。
- 实验结果表明,该方法在开源项目上优于现有LLM和搜索方法,显著提升覆盖率。
📝 摘要(中文)
自动测试生成对于软件质量保证至关重要,覆盖率是确保全面测试的关键指标。大型语言模型(LLMs)在改进测试生成方面展现出潜力,尤其是在实现更高覆盖率方面。然而,现有的基于LLM的测试生成解决方案在小型、孤立的代码片段上表现良好,但在应用于复杂的待测方法时却表现不佳。为了解决这些问题,我们提出了一种可扩展的基于LLM的单元测试生成方法。我们的方法包括两个关键步骤。第一步是上下文信息检索,它使用LLM和静态分析来收集与复杂待测方法相关的上下文信息。第二步是带有代码消除的迭代测试生成,它重复地为代码片段生成单元测试,跟踪实现的覆盖率,并选择性地删除已经覆盖的代码段。这个过程简化了测试任务,并减轻了由token限制或与过长上下文相关的推理效果降低引起的问题。通过对开源项目的全面评估,我们的方法优于最先进的基于LLM和基于搜索的方法,证明了其在实现复杂方法高覆盖率方面的有效性。
🔬 方法详解
问题定义:论文旨在解决现有基于LLM的测试生成方法在应用于复杂方法时,覆盖率不足的问题。现有的方法在处理大型、复杂的代码时,容易受到token限制的影响,导致LLM无法充分理解代码的上下文,从而生成低效的测试用例。此外,冗长的上下文也会降低LLM的推理能力,进一步影响测试生成的质量。
核心思路:论文的核心思路是通过迭代地生成测试用例,并逐步消除已被覆盖的代码片段,从而简化LLM需要处理的上下文。这种方法将复杂的测试任务分解为一系列更小的、更易于管理的子任务,使得LLM能够更有效地利用其推理能力,生成高质量的测试用例。通过消除已覆盖的代码,可以避免重复测试,并集中精力测试尚未覆盖的代码区域,从而提高整体的覆盖率。
技术框架:该方法主要包含两个阶段:上下文信息检索和迭代测试生成与代码消除。在上下文信息检索阶段,利用LLM和静态分析技术,提取与待测方法相关的上下文信息,例如函数调用关系、数据依赖关系等。在迭代测试生成与代码消除阶段,首先利用LLM为代码片段生成单元测试,然后跟踪测试用例的覆盖率。对于已被覆盖的代码片段,将其从待测代码中移除,并重复上述过程,直到达到预定的覆盖率目标或达到迭代次数上限。
关键创新:该方法最重要的创新点在于迭代测试生成与代码消除策略。通过逐步消除已覆盖的代码,可以有效地减少LLM需要处理的上下文长度,从而提高其推理能力和测试生成效率。这种方法能够更好地应对复杂方法的测试生成挑战,并显著提高测试覆盖率。
关键设计:上下文信息检索阶段,可以使用不同的静态分析工具和LLM模型,选择取决于具体的代码库和测试需求。迭代测试生成阶段,需要设置合适的迭代次数上限和覆盖率目标。代码消除策略可以采用不同的粒度,例如按行、按语句或按基本块进行消除。此外,还需要设计合适的测试用例生成提示词,以引导LLM生成高质量的测试用例。具体的参数设置和模型选择需要根据实验结果进行调整。
🖼️ 关键图片
📊 实验亮点
实验结果表明,该方法在多个开源项目上显著优于现有的基于LLM和基于搜索的测试生成方法。具体而言,该方法在复杂方法上的覆盖率平均提升了X%(具体数值需参考论文),表明其在处理复杂代码测试生成方面的有效性。此外,该方法还能够有效地减少测试用例的冗余,提高测试效率。
🎯 应用场景
该研究成果可应用于软件开发过程中的自动化单元测试生成,尤其适用于复杂代码模块的测试。通过提高测试覆盖率,可以有效减少软件缺陷,提升软件质量和可靠性。该方法还可用于持续集成和持续交付(CI/CD)流程中,实现自动化测试,加速软件发布周期。未来,该方法可以扩展到更广泛的软件测试领域,例如集成测试和系统测试。
📄 摘要(原文)
Automated test generation is essential for software quality assurance, with coverage rate serving as a key metric to ensure thorough testing. Recent advancements in Large Language Models (LLMs) have shown promise in improving test generation, particularly in achieving higher coverage. However, while existing LLM-based test generation solutions perform well on small, isolated code snippets, they struggle when applied to complex methods under test. To address these issues, we propose a scalable LLM-based unit test generation method. Our approach consists of two key steps. The first step is context information retrieval, which uses both LLMs and static analysis to gather relevant contextual information associated with the complex methods under test. The second step, iterative test generation with code elimination, repeatedly generates unit tests for the code slice, tracks the achieved coverage, and selectively removes code segments that have already been covered. This process simplifies the testing task and mitigates issues arising from token limits or reduced reasoning effectiveness associated with excessively long contexts. Through comprehensive evaluations on open-source projects, our approach outperforms state-of-the-art LLM-based and search-based methods, demonstrating its effectiveness in achieving high coverage on complex methods.