Measuring the Influence of Incorrect Code on Test Generation

📄 arXiv: 2409.09464v3 📥 PDF

作者: Dong Huang, Jie M. Zhang, Mark Harman, Mingzhe Du, Heming Cui

分类: cs.SE, cs.CL

发布日期: 2024-09-14 (更新: 2025-03-28)

备注: Under review


💡 一句话要点

研究代码正确性对LLM测试生成的影响:正确代码提升测试准确率57%

🎯 匹配领域: 支柱九:具身大模型 (Embodied Foundation Models)

关键词: 大型语言模型 测试生成 代码正确性 缺陷检测 代码覆盖率

📋 核心要点

  1. 现有研究缺乏对代码正确性如何影响LLM测试生成质量的量化分析,阻碍了对LLM测试能力边界的理解。
  2. 该研究通过对比正确与错误代码提示下LLM生成的测试用例,量化分析代码正确性对测试生成质量的影响。
  3. 实验结果表明,使用正确代码提示LLM能显著提升测试准确率、代码覆盖率和缺陷检测能力,并验证了自然语言描述的有效性。

📝 摘要(中文)

本文旨在衡量在测试生成任务中,使用正确代码与错误代码作为提示时,大型语言模型(LLM)生成测试用例的质量差异。研究发现,相较于使用错误代码,使用正确代码提示LLM能够显著提升测试的准确率、代码覆盖率和缺陷检测能力,分别提升57%、12%和24%。此外,该结论在基准数据集和真实世界代码中均成立,真实世界代码中针对错误代码生成的测试,其缺陷检测率降低了47%。最后,研究表明,提供自然语言代码描述可以进一步提升测试的准确率(+18%)、覆盖率(+4%)和缺陷检测能力(+34%)。这些发现为软件工程师和研究人员提供了可操作的结论,例如,通过添加代码描述来弥补因代码错误导致的缺陷检测率下降。

🔬 方法详解

问题定义:当前缺乏对代码正确性对LLM测试生成影响的量化研究。虽然直觉上认为使用正确代码作为提示会生成更好的测试,但具体提升幅度未知。现有方法没有充分考虑代码质量对LLM测试生成的影响,可能导致对LLM测试能力的评估不准确。

核心思路:该研究的核心思路是通过对比使用正确代码和错误代码作为提示时,LLM生成的测试用例的质量差异,从而量化代码正确性对测试生成的影响。通过这种对比,可以揭示LLM在处理不同质量代码时的测试能力差异,并为改进LLM测试生成方法提供指导。

技术框架:该研究的技术框架主要包括以下几个步骤:1) 选择开源和闭源的LLM;2) 选取广泛使用的基准数据集和真实世界代码示例;3) 使用正确和错误的代码作为提示,让LLM生成测试用例;4) 评估生成的测试用例的准确率、代码覆盖率和缺陷检测能力;5) 分析实验结果,量化代码正确性对测试生成的影响。

关键创新:该研究的关键创新在于首次量化了代码正确性对LLM测试生成的影响。以往的研究主要关注LLM本身的能力,而忽略了输入代码质量的影响。该研究通过对比实验,揭示了代码正确性对测试生成质量的显著影响,为后续研究提供了新的视角。

关键设计:研究中使用了5个开源和6个闭源的LLM,以及3个广泛使用的基准数据集和41个来自真实世界的代码示例。评估指标包括测试准确率、代码覆盖率和缺陷检测能力。为了模拟错误代码,研究人员可能采用了代码突变等技术。此外,研究还探索了自然语言代码描述对测试生成的影响,并分析了不同LLM在处理不同质量代码时的表现差异。

🖼️ 关键图片

fig_0
fig_1
fig_2

📊 实验亮点

实验结果表明,使用正确代码提示LLM能够显著提升测试的准确率、代码覆盖率和缺陷检测能力,分别提升57%、12%和24%。在真实世界代码中,针对错误代码生成的测试,其缺陷检测率降低了47%。提供自然语言代码描述可以进一步提升测试的准确率(+18%)、覆盖率(+4%)和缺陷检测能力(+34%)。

🎯 应用场景

该研究成果可应用于软件测试自动化、代码质量评估和LLM测试能力提升等领域。通过了解代码质量对LLM测试生成的影响,可以更好地利用LLM进行自动化测试,并提高测试效率和质量。此外,该研究还可以帮助开发人员评估代码质量,并及时发现和修复代码缺陷。未来,可以进一步研究如何利用LLM自动修复错误代码,并生成更有效的测试用例。

📄 摘要(原文)

It is natural to suppose that a Large Language Model is more likely to generate correct test cases when prompted with correct code under test, compared to incorrect code under test. However, the size of this effect has never been previously measured, despite its obvious importance for both practicing software engineers and researchers. To answer the question, we conducted a comprehensive empirical study on 5 open source and 6 closed source language models, with 3 widely-used benchmark data sets together with 41 repo-level real-world examples from two different real-world data sets. Our results reveal that, when compared to incorrect code under test, LLMs prompted with correct code achieve improvements in test accuracy, code coverage, and bug detection of 57\%, 12\%, and 24\% respectively. We further show that these scientific conclusions carry over from the three benchmark data sets to the real-world code, where tests generated for incorrect code experience a 47\% worse bug detection rate. Finally, we report that improvements of +18\% in accuracy, +4\% coverage, and +34\% in bug detection can be achieved by providing natural language code descriptions. These findings have actionable conclusions. For example, the 47\% reduction in real-world bug detection is a clear concern. Fortunately, it is a concern for which our findings about the added value of descriptions offer an immediately actionable remedy.