Page 104 - 《软件学报》2025年第4期
P. 104
1510 软件学报 2025 年第 36 卷第 4 期
较于其他方法, 在生成可复现错误的测试用例方面, LIBRO 取得了显著提升.
Yuan 等人 [47] 对目前最先进的对话型大语言模型 ChatGPT 在生成测试方面进行了充分的实证研究. 实验结果
表明: ChatGPT 生成测试用例的覆盖率和可读性均与开发人员编写的有效测试用例相近, 这些测试用例有时甚至
更受开发人员欢迎. 然而 ChatGPT 自动生成的测试用例的成功率不高, 仅有 24.8% 能够通过执行, 其余面临编译
错误或执行失败等问题. 在此基础上, 他们提出 CHATTESTER 工具, 该工具包括一个初始测试用例生成器和一个
迭代测试用例修复器, 通过 ChatGPT 与自身迭代对话, 提高其生成测试的有效性. 实验结果显示, 相较于直接使用
ChatGPT, CHATTESTER 在编译率和执行通过率方面分别提高了 34.3% 和 18.7%. 然而该技术也受限于生成式语
言模型本身的局限性, 例如 ChatGPT 对目标项目代码的深层信息缺乏了解, 以及对待测的焦点方法理解不足.
和 Yuan 等人 [47] 的发现类似, Xie 等人 [136] 也发现直接应用 ChatGPT 生成的测试用例仅有 20% 的成功率, 并进
一步发现这样的结果主要是因为 ChatGPT 受限于有限的上下文令牌数量, 例如 GPT-3.5 仅支持 4 096 个令牌, 以
及由于缺少适当的编译器和测试执行器, ChatGPT 无法验证生成的测试. 在这些发现基础上, 他们提出 ChatUni-
Test 工具, 该工具由 ChatGPT 驱动, 通过自适应上下文生成机制控制 ChatGPT 的上下文空间, 并进一步引入了验
证和修复组件以提高生成测试的成功率. 实验显示, ChatUniTest 生成了 30% 的正确测试, 并在多个项目中相较主
流程或提供丰富的程序相关信息, 其在测试用例生成等任务上可以达到更好的效果或满足传统工具无法实现的功
流工具有显著优势. 然而 ChatGPT 驱动的测试自动生成技术还共同面临一些挑战, 如处理大型代码时的令牌限制,
以及缺乏适当的编译器和测试执行器来验证生成的单元测试等.
Chen 等人 [137] 提出了 CodeT, 该工具尝试将测试用例自动生成技术应用到基于模型的代码生成任务中, 为生
成的代码提供测试并验证其有效性. 具体而言, CodeT 首先使用大模型生成待测代码, 然后采用零样本提示策略,
使用同一模型为该任务生成测试用例. 在对测试用例的分析中, Chen 等人发现, 由 CodeX 代码大模型生成的测试
用例的准确度和覆盖率均优于其他大模型. 而且, 大多数大模型的测试用例覆盖率都在 94% 以上. 结果显示, 通过
使用大模型生成的测试用例进行自动验证, 大模型在代码生成任务中的性能得到了大幅提高.
此外, 在利用大模型进行代码生成的场景中, 开发者与大模型使用自然语言交互可能存在偏差, 导致模型生成
的代码有缺陷或难以理解. 为解决这一问题, Lahiri 等人 [138] 提出了 TiCoder, 该框架采用测试驱动的用户意图形式
化 (test-driven user-intent formalization, TDUIF) 的工作流程. 在该工作流程中, 模型将用户意图中表述不清晰的部
分转换为测试用例, 并让用户决定该测试用例是否体现了所需的代码功能, 从而让模型生成更符合用户意图的代
码. 在 MBPP 数据集的测试中, TiCoder 的效果较为优异.
4.3 小 结
本节简要介绍了测试用例生成的目的和机制, 并分析了不同技术的代表工作和特性以及对应的关键挑战. 测
试用例自动生成的技术多而庞杂, 不同的技术经常被研究人员混合应用, 从而提升工具性能. 然而, 传统和基于学
习的工具始终面临覆盖率低、断言无效、测试用例多样性差等挑战. 考虑到大模型拥有强大的解决复杂问题的能
力, 研究人员进一步尝试将大模型应用于测试用例生成任务中. 具体而言, 大模型在被用于测试用例生成时, 它们
不仅单纯地生成测试用例, 还可以利用更多上下文及代码相关信息并且可以与其他技术相结合. 此外, 基于大模型
的技术还可以采用更复杂的生成策略, 以达成更好的测试效果. 部分研究者还尝试利用大模型生成测试用例以检
验自动生成的代码或更清晰地表达用户需求.
许多工作已经表明, 大模型在自然语言与形式化表达的互译等方面具有相当的灵活性, 通过实施复杂的任务
能. 在这种情况下, 面对实践中无穷多的开发需求和应用场景, 大模型在测试用例生成乃至复合的软件工程任务中
潜在的应用场景仍有待研究人员发掘. 比如, 在某些对时间敏感的应用场景 (如竞赛代码、音视频处理、游戏项目
等) 中, 程序的时空效率应被有效测试. 时空开销问题几乎不被当前的单元测试技术视为缺陷, 但又会影响用户体
验, 而由于大语言模型具有理解代码功能和算法过程的潜力 (比如, 通过简单提示, GPT-4 给出了与 AlphaDev [139]
相同的排序优化算法 [140] ), 它们可能可以被用于针对程序运行效率进行测试用例生成.
本文已经探讨了大模型在深度学习库的缺陷检测、GUI 自动化测试及测试用例自动生成技术中的应用及进