“ 在软件开发中测试是保证代码质量的核心环节。生成覆盖率高、符合预期逻辑的测试用例既能发现潜在bug也能提升软件可靠性。然而传统测试用例生成方法不仅耗时还需要复杂分析自动化难度大。近年来LLM在代码理解与生成方面表现出色但它们在自动生成测试用例、覆盖特定代码路径上的能力尚不清楚。TESTEVAL的出现正是为了系统评估LLMs在这一关键任务上的性能。 ”论文标题TESTEVAL: Benchmarking Large Language Models for Test Case Generation发表时间 Findings of the Association for Computational Linguistics:NAACL2025作者单位 阿尔伯塔大学东京大学等开源代码https://github.com/LLM4SoftwareTesting/TestEval01—方法介绍论文提出了 TESTEVAL 基准框架通过三个任务评估 LLM 的测试能力① 整体覆盖生成尽可能覆盖程序大部分语句的测试用例② 目标行/分支覆盖生成能覆盖特定语句或分支的测试用例③ 目标路径覆盖生成能执行指定路径的测试用例。图 1. TESTEVAL整体框架小结TESTEVAL 强调 LLM 理解程序逻辑的能力而不仅仅是生成可运行代码。02—关键机制全新测试用例基准首次系统评估 LLMs 在覆盖率导向的测试用例生成能力多任务设计兼顾整体覆盖、特定分支及路径覆盖多模型对比涵盖 17 个商业与开源 LLM展示差异化能力真实控制流复杂度数据集平均环路复杂度 13.35高于许多现有数据集。模块设计思路作用任务设计整体覆盖、特定分支/路径覆盖考察 LLM 的逻辑理解与测试用例生成能力数据集构建210 个 LeetCode Python 程序提供可控、复杂度适中的测试环境LLM 评估17 个流行商业及开源模型系统对比 LLM 在不同覆盖任务上的性能指标计算语法、执行、断言正确性及覆盖率保证评价的全面性与科学性小结ESTEVAL 不只是生成测试用例更是考察 LLM 对程序执行路径和分支逻辑的理解。03—实验结果为了构建基准数据集首先收集了LeetCodehttps://github.com/walkccc/LeetCode的解题程序。LeetCode是一个在线平台用于评估程序员的编程能力因为它对每个编程任务都有明确的任务描述和输入限制。作者首先筛选出截至2024年4月的所有公开任务。随后从GitHub仓库1中收集了每个任务的Python解决方案共收集了3123个测试程序。表1显示了整体覆盖任务的评估结果。实验中对每个模型进行20轮查询N20为每个待测程序生成测试用例每轮一个测试用例。进一步使用covk来衡量每个大型语言模型LLM生成的测试用例的多样性。表1. 整体覆盖任务的结果表2和表3分别展示了目标行覆盖率和分支覆盖率的评估结果。对于每个目标LLM还通过排除文本提示中关于目标行/分支的信息来设置基线。对于每个测试程序复用为整体覆盖任务生成的首个测试用例并测量其在目标行/分支上的覆盖准确性。表2. 目标行覆盖结果表3. 目标分支覆盖结果图4展示了目标路径覆盖任务的结果。实验采用了与目标行/分支覆盖任务中类似的基线方法即在文本提示中排除了目标路径。表4 目标路径覆盖结果小结TESTEVAL是一个新型基准数据集目标覆盖任务能够评估LLM在理解复杂程序逻辑和执行路径方面的能力以及根据测试者的意图生成测试用例的能力。实验发现尽管LLM通过生成多样化的测试用例可以实现较高的整体覆盖率但要生成覆盖特定元素的测试用例仍然具有挑战性。 总结TESTEVAL 为 LLM 测试用例生成提供了系统评价框架与公开数据集使研究者能够科学衡量模型能力。未来提升 LLM 对程序执行路径和逻辑的理解可能是突破自动化测试的关键。 欢迎留言讨论你认为 LLMs 是否能够在不依赖传统测试工具的情况下可靠地生成高覆盖率测试用例对于工业级项目覆盖特定路径的自动化生成有多大可行性 点赞 收藏 分享你的支持是我们持续解析高水平软件安全论文的最大动力