Impact of Code Context and Prompting Strategies on Automated Unit Test Generation with Modern General-Purpose Large Language Models
作者: Jakub Walczak, Piotr Tomalak, Artur Laskowski
分类: cs.SE, cs.AI
发布日期: 2025-07-18
🔗 代码/项目: GITHUB
💡 一句话要点
研究代码上下文和提示策略对LLM自动生成单元测试的影响
🎯 匹配领域: 支柱九:具身大模型 (Embodied Foundation Models)
关键词: 单元测试生成 大型语言模型 代码上下文 提示策略 自动化测试 软件工程 思维链 代码质量
📋 核心要点
- 软件测试是保障软件质量的关键环节,而单元测试占据了测试工作的大部分,但人工编写耗时耗力。
- 利用大型语言模型(LLM)自动生成单元测试,通过调整代码上下文和提示策略来提升生成测试的质量。
- 实验表明,包含文档字符串能显著提升代码充分性,思维链提示策略效果最佳,M5模型表现突出。
📝 摘要(中文)
生成式AI在软件工程领域日益受到关注,而测试仍然是不可或缺的可靠性机制。根据广泛采用的测试金字塔,单元测试构成了测试用例的大部分,并且通常是示意性的,只需要最少的领域专业知识。在软件工程师的监督下自动生成此类测试可以显著提高软件生命周期开发阶段的生产力。本文研究了代码上下文和提示策略对各种大型语言模型(LLM)生成的单元测试的质量和充分性的影响。结果表明,包含文档字符串显著提高了代码的充分性,而将上下文进一步扩展到完整的实现所带来的收益则明显较小。值得注意的是,即使应用于“推理”模型,思维链提示策略也取得了最佳结果,分支覆盖率高达96.3%,平均突变分数为57%,并且编译成功率接近完美。在评估的模型中,M5(Gemini 2.5 Pro)在突变分数和分支覆盖率方面表现出卓越的性能,并且在编译成功率方面仍然名列前茅。所有代码和生成的测试套件均可在https://github.com/peetery/LLM-analysis上公开获得。
🔬 方法详解
问题定义:论文旨在解决如何利用大型语言模型(LLM)自动生成高质量单元测试的问题。现有方法在生成单元测试时,往往面临测试覆盖率不足、测试用例质量不高的问题,难以满足实际软件开发的需求。人工编写单元测试耗时耗力,且容易出错。
核心思路:论文的核心思路是通过调整输入LLM的代码上下文和提示策略,来提高生成的单元测试的质量和充分性。具体来说,研究了不同粒度的代码上下文(如仅包含函数签名、包含文档字符串、包含完整函数实现)以及不同的提示策略(如思维链提示)对生成测试效果的影响。
技术框架:论文采用实验研究的方法,首先选择了一系列开源项目作为测试数据集,然后针对每个函数,构建不同粒度的代码上下文。接着,使用不同的提示策略,指示LLM生成单元测试。最后,通过编译成功率、分支覆盖率和突变分数等指标,评估生成的单元测试的质量。整体流程包括数据准备、模型推理和结果评估三个阶段。
关键创新:论文的关键创新在于系统性地研究了代码上下文和提示策略对LLM生成单元测试的影响。以往的研究往往只关注单一因素,而本文综合考虑了两者,并发现了思维链提示策略在提升测试质量方面的显著作用。此外,论文还评估了不同LLM在单元测试生成任务上的性能差异。
关键设计:论文的关键设计包括:1) 代码上下文的构建,包括函数签名、文档字符串和完整函数实现三种粒度;2) 提示策略的选择,包括标准提示和思维链提示;3) 评估指标的选择,包括编译成功率、分支覆盖率和突变分数。这些设计旨在全面评估LLM生成单元测试的质量和充分性。
🖼️ 关键图片
📊 实验亮点
实验结果表明,包含文档字符串能显著提高代码充分性,思维链提示策略效果最佳,分支覆盖率高达96.3%,平均突变分数为57%,编译成功率接近完美。M5(Gemini 2.5 Pro)在突变分数和分支覆盖率方面表现出卓越的性能,并且在编译成功率方面仍然名列前茅。
🎯 应用场景
该研究成果可应用于软件开发过程的自动化测试环节,帮助开发人员快速生成高质量的单元测试,提高开发效率和软件质量。通过优化代码上下文和提示策略,可以进一步提升LLM在自动化测试领域的应用潜力,降低软件开发成本,并有望推广到其他类型的自动化测试任务中。
📄 摘要(原文)
Generative AI is gaining increasing attention in software engineering, where testing remains an indispensable reliability mechanism. According to the widely adopted testing pyramid, unit tests constitute the majority of test cases and are often schematic, requiring minimal domain expertise. Automatically generating such tests under the supervision of software engineers can significantly enhance productivity during the development phase of the software lifecycle. This paper investigates the impact of code context and prompting strategies on the quality and adequacy of unit tests generated by various large language models (LLMs) across several families. The results show that including docstrings notably improves code adequacy, while further extending context to the full implementation yields definitely smaller gains. Notably, the chain-of-thought prompting strategy -- applied even to 'reasoning' models -- achieves the best results, with up to 96.3\% branch coverage, a 57\% average mutation score, and near-perfect compilation success rate. Among the evaluated models, M5 (Gemini 2.5 Pro) demonstrated superior performance in both mutation score and branch coverage being still in top in terms of compilation success rate. All the code and resulting test suites are publicly available at https://github.com/peetery/LLM-analysis.