Evaluating LLM-Based Test Generation Under Software Evolution

📄 arXiv: 2603.23443v1 📥 PDF

作者: Sabaat Haroon, Mohammad Taha Khan, Muhammad Ali Gulzar

分类: cs.SE, cs.AI

发布日期: 2026-03-24

备注: 10 pages, 9 figures, 2 tables


💡 一句话要点

评估软件演化下基于LLM的测试生成:揭示其对语义变化的敏感性

🎯 匹配领域: 支柱二:RL算法与架构 (RL & Architecture) 支柱九:具身大模型 (Embodied Foundation Models)

关键词: LLM测试生成 软件演化 突变测试 代码覆盖率 语义分析

📋 核心要点

  1. 现有基于LLM的测试生成方法,其测试质量和对程序演化的适应性尚不明确,可能过度依赖表面模式。
  2. 通过构建自动化突变驱动框架,分析LLM生成的测试在语义改变和保持变化下的表现,评估其鲁棒性。
  3. 实验表明,LLM在程序演化后性能显著下降,对语法变化敏感,难以适应语义变化,提示其依赖表面线索。

📝 摘要(中文)

大型语言模型(LLM)越来越多地用于自动单元测试生成。然而,这些测试是否真正反映了对程序行为的推理,还是仅仅再现了训练期间学到的表面模式,仍然不清楚。如果后者占主导地位,LLM生成的测试可能会表现出覆盖率降低、遗漏回归和未检测到的故障等弱点。因此,理解LLM如何生成测试以及这些测试如何响应代码演化至关重要。本文对程序变更下基于LLM的测试生成进行了大规模实证研究。使用自动化的突变驱动框架,我们分析了生成的测试如何对八个LLM和22374个程序变体中的语义改变变化(SAC)和语义保持变化(SPC)做出反应。LLM实现了强大的基线结果,在原始程序上达到了79%的行覆盖率和76%的分支覆盖率,并且测试套件完全通过。但是,随着程序的演变,性能会下降。在SAC下,新生成的测试的通过率降至66%,分支覆盖率降至60%。超过99%的失败的SAC测试在原始程序上执行修改后的区域时通过,表明与原始行为的残余对齐,而不是适应更新的语义。尽管SPC编辑保留了语义,但它们通常会引入更大的语法更改,从而导致生成的测试套件不稳定:通过率降至79%,分支覆盖率降至69%。模型生成更多新测试,同时丢弃许多基线测试,这表明对词汇变化的敏感性,而不是真正的语义影响。总体而言,我们的结果表明,当前基于LLM的测试生成严重依赖于表面线索,并且在程序演化时难以保持回归意识。

🔬 方法详解

问题定义:论文旨在评估基于LLM的自动测试生成方法在软件演化过程中的有效性。现有方法在面对代码变更时,生成的测试用例可能无法准确反映程序的新行为,导致测试覆盖率下降、回归错误遗漏等问题。现有方法的痛点在于对程序语义理解不足,过度依赖表面模式。

核心思路:论文的核心思路是通过模拟软件演化过程中的各种代码变更(包括语义改变和语义保持的变化),来评估LLM生成的测试用例的质量和适应性。通过分析测试用例在不同程序版本上的执行结果,揭示LLM在测试生成过程中对语义理解的局限性。

技术框架:论文构建了一个自动化的突变驱动框架,用于生成程序变体并评估LLM生成的测试用例。该框架包含以下主要模块:1) 程序变异模块:通过引入语义改变(SAC)和语义保持(SPC)的突变,生成程序的多个变体。2) 测试生成模块:利用不同的LLM生成针对原始程序和变体的测试用例。3) 测试执行模块:在原始程序和变体上执行生成的测试用例,记录测试结果(通过/失败)和代码覆盖率。4) 结果分析模块:分析测试结果和覆盖率数据,评估LLM在不同程序版本上的测试生成性能。

关键创新:论文的关键创新在于:1) 系统性地研究了LLM在软件演化场景下的测试生成能力,揭示了其对语义变化的敏感性。2) 构建了一个自动化的突变驱动框架,可以高效地生成程序变体并评估测试用例。3) 区分了语义改变和语义保持的变化,更细粒度地分析了LLM的测试生成行为。

关键设计:论文的关键设计包括:1) 选择了多种LLM作为测试生成器,以评估不同模型的性能差异。2) 设计了多种语义改变和语义保持的突变算子,以模拟不同的代码变更场景。3) 采用了行覆盖率和分支覆盖率作为测试质量的评估指标。4) 分析了测试用例在原始程序和变体上的执行结果,以评估LLM的适应性。

🖼️ 关键图片

fig_0
fig_1
fig_2

📊 实验亮点

实验结果表明,LLM在原始程序上能达到79%的行覆盖率和76%的分支覆盖率。然而,在语义改变(SAC)后,新生成测试的通过率下降到66%,分支覆盖率下降到60%。超过99%的SAC失败测试在原始程序上执行修改区域时通过,表明LLM难以适应语义变化。即使是语义保持的变化(SPC),也导致通过率下降到79%,分支覆盖率下降到69%,表明LLM对语法变化敏感。

🎯 应用场景

该研究成果可应用于软件测试自动化领域,帮助开发者更好地理解和评估基于LLM的测试生成工具的可靠性。通过识别LLM在处理代码变更时的局限性,可以指导开发者改进测试生成策略,提高软件质量,并降低维护成本。未来的研究可以探索如何增强LLM对程序语义的理解,使其能够生成更具鲁棒性和适应性的测试用例。

📄 摘要(原文)

Large Language Models (LLMs) are increasingly used for automated unit test generation. However, it remains unclear whether these tests reflect genuine reasoning about program behavior or simply reproduce superficial patterns learned during training. If the latter dominates, LLM-generated tests may exhibit weaknesses such as reduced coverage, missed regressions, and undetected faults. Understanding how LLMs generate tests and how those tests respond to code evolution is therefore essential. We present a large-scale empirical study of LLM-based test generation under program changes. Using an automated mutation-driven framework, we analyze how generated tests react to semantic-altering changes (SAC) and semantic-preserving changes (SPC) across eight LLMs and 22,374 program variants. LLMs achieve strong baseline results, reaching 79% line coverage and 76% branch coverage with fully passing test suites on the original programs. However, performance degrades as programs evolve. Under SACs, the pass rate of newly generated tests drops to 66%, and branch coverage declines to 60%. More than 99% of failing SAC tests pass on the original program while executing the modified region, indicating residual alignment with the original behavior rather than adaptation to updated semantics. Performance also declines under SPCs despite unchanged functionality: pass rates fall to 79% and branch coverage to 69%. Although SPC edits preserve semantics, they often introduce larger syntactic changes, leading to instability in generated test suites. Models generate more new tests while discarding many baseline tests, suggesting sensitivity to lexical changes rather than true semantic impact. Overall, our results indicate that current LLM-based test generation relies heavily on surface-level cues and struggles to maintain regression awareness as programs evolve.