论文
在软件演进下评估基于 LLM 的测试生成
Evaluating LLM-Based Test Generation Under Software Evolution
摘要
大语言模型 (LLM) 越来越多地用于自动化单元测试生成。然而,目前尚不清楚这些测试是否反映了程序行为的真实推理,或者只是再现了训练期间学到的表面模式。如果后者占主导地位,LLM 生成的测试可能会表现出一些弱点,例如覆盖范围缩小、回归缺失和未检测到的故障。因此,了解 LLM 如何生成测试以及这些测试如何响应代码演化至关重要。我们提出了程序变更下基于 LLM 的测试生成的大规模实证研究。使用自动化突变驱动框架,我们分析了生成的测试如何对 8 个 LLM 和 22,374 个程序变体中的语义更改更改 (SAC) 和语义保留更改 (SPC) 做出反应。 LLM 取得了强劲的基线结果,达到了 79% 的线路覆盖率和 76% 的分支覆盖率,并完全通过了原始程序的测试套件。然而,随着程序的发展,性能会下降。在 SAC 下,新生成的测试通过率下降至 66%,分支覆盖率下降至 60%。超过 99% 的失败 SAC 测试在执行修改区域时会通过原始程序,这表明与原始行为的残余对齐,而不是适应更新的语义。尽管功能不变,SPC 下的性能也会下降:通过率下降至 79%,分支机构覆盖率下降至 69%。尽管 SPC 编辑保留了语义,但它们经常引入较大的语法更改,导致生成的测试套件不稳定。模型生成更多新测试,同时丢弃许多基线测试,这表明对词汇变化的敏感性而不是真正的语义影响。总的来说,我们的结果表明,当前基于 LLM 的测试生成严重依赖于表面线索,并且随着程序的发展而努力保持回归意识。