论文
传统测试标准在检测 大语言模型 生成代码中的错误方面有多有效?
How effective are traditional test criteria at detecting bugs in large language models generated code?
摘要
测试充分性标准广泛用于评估和指导软件测试。尽管先前的研究已经使用人工编写的程序、故障和测试广泛地检查了这些标准,但越来越多地采用 大语言模型 (LLM) 进行代码生成,引发了有关其检测 LLM 引起的故障的有效性的重要问题。为了调查这一点,我们进行了一项涉及 5 个 LLM 和 4 个基准测试的实证研究,模拟自动生成代码和测试的端到端工作流程。我们收集了 6,000 多个错误程序实例,并评估了 3 个广泛使用的充分性标准的有效性和效率:语句覆盖率、分支覆盖率和突变测试。我们的研究结果揭示了几个关键的见解。首先,LLM 引入的大多数故障相对来说比较容易捕获。其次,使用传统的基于覆盖或基于突变的标准都很难触发具有挑战性的故障。第三,实际的故障检测率仍然极低,通常接近于零,因为测试预言机无法捕获由生成的测试前缀触发的错误行为,从而暴露了自动化测试生成的关键限制。第四,提示感知预言机可以改进故障检测,但其整体有效性仍然有限,这凸显了用户需要手动推理测试断言。我们进一步观察到,突变测试在触发和检测故障方面仅略微优于传统的覆盖标准,这引发了关于在这种情况下其显着较高的应用成本是否合理的问题。