摘要
大型语言模型(LLM)经常生成在典型输入下看似正确的代码,但在边缘案例、无效输入及其他规范定义的特殊条件下却失败。一个流行的解决方案是让模型编写自己的测试并进行修复,直到通过,但其增益来源尚不明确:是测试的存在仅仅有效,还是它们基于规范的基础上进行的?我们对这一因素进行了隔离。
在固定测试器、测试预算和修复循环的情况下,我们改变了一行控制测试器是否接收规范作为规则清单的提示。基线表现强劲:它已经被告知探测无效输入和边缘案例。将测试与规范结合后,正确代码的生成率比基线高出38个百分点,在持出集上则高出36个百分点。研究表明,基础规范的作用是主要驱动因素:加倍测试预算几乎没有帮助,而将八个独立的无规范测试套件组合在一起的结果远低于基于规范的效果。通过消融实验,我们隔离了规范的内容,而非格式:当以普通段落形式给出规范时,测试器恢复了30个错误中的27个,但在没有规范的情况下仅恢复了2个。
这一效果在更强的基线下依然存在:一个基于属性的生成器捕捉到30个错误中的28个,但引入了超出规范的要求,而一个类似AlphaCodium的循环仅匹配基线。该效果在不同模型上也能复制(GPT-5.3-codex +28,Gemini 3.5 Flash +19),在18个任务上的任务级符号检验显著,p=0.002。规范化提高了敏感性和精确性:它捕获了更多真实错误,并大幅减少了错误拒绝正确代码的情况,将误报率从33%(针对Python标准库的68%)降低到0%。在良好规范的算法问题上,规范化既没有帮助也没有伤害。
博主点评: 这项研究强调了代码测试中规范基础的重要性,表明单纯增加测试数量并不能有效提升代码质量。相反,确保测试与明确的功能规范相结合,能够显著提高捕获真实错误的能力,减少误报率,为开发者提供了更加可靠的工具。通过这种方式,不仅提升了代码的正确性,也为未来的模型优化提供了重要的方向。