基于规范约束驱动 LLM 代码的测试有效性
Specification Grounding Drives Test Effectiveness for LLM Code
摘要
大语言模型 经常生成在典型输入上显示正确的代码,但在边缘情况、无效输入和其他规范定义的角落条件下会失败。一种流行的修复方法是让模型编写自己的测试并进行修复,直到它们通过,但增益的来源尚不清楚:它是来自仅仅存在的测试,还是来自它们基于代码应该做什么的规范?我们隔离这个因素。保持测试人员、测试预算和修复循环固定,我们更改单个提示行,控制测试人员是否接收规范作为规则清单。基线很强大:它已经被告知要探测无效输入和边缘情况。在规范中进行测试,在 Claude 的三个级别(Haiku 4.5、Sonnet 4.6、Opus 4.8)中,产生正确代码的概率比该基线高出 38 个百分点,而在保留集上则高出 36 个百分点。依据规范约束,而不是测试数量,是主要驱动力:将测试预算加倍几乎没有帮助,并且将八个独立的未依据规范约束套件组合起来,其水平远低于依据规范约束。消融隔离了规范的内容,而不是其格式:将规范作为普通段落,测试人员恢复了 30 个错误中的 27 个,但要求在没有规范的情况下计划测试,它只恢复了 30 个错误中的 2 个。这种效果在更强的基线下仍然存在:基于属性的生成器捕获了 30 个错误中的 28 个,但发明了不符合规范的要求,并且 AlphaCodium 样式的循环仅与基线匹配。它可以跨供应商复制(GPT-5.3-codex +28、Gemini 3.5 Flash +19),并在 18 个任务上进行任务级符号测试,显着性为 p=0.002。依据规范约束提高了灵敏度和精确度:它捕获了更多真正的错误,并错误地拒绝了不太正确的代码,将误报率从 33%(相对于 Python 标准库预言机为 68%)降低到 0%。对于明确的算法问题,它既无帮助也无害。