六族模型测试联合成功率最高28%,单参考评估达59.67%

TestPrism: Rethinking Test Evaluation Beyond a Single Reference

Han Li, Lingxiang Hu, Jiacheng Huang, Ziqian Jiang, Jingkai Luo, Wei Gao, Yunfan Tan, Zun Wang, Jiaheng Liu

cs.SE

2026-10-09

TestPrism用每题10个实现重评测试生成:六族模型里联合成功率最高28.00%,同题单参考成功率59.67%。

这篇在解决什么

编程智能体生成的测试,通行验收只看两步:初始程序失败,唯一参考实现通过。SWT-Bench 和 TDD-Bench Verified 都按此计分。一条需求往往有多种合法写法,也有能跑但违背规格的错补丁。测试绑死参考解,会误伤其他合法实现;参考解碰巧没犯的错若没被测到,漏测也算成功。

TestPrism 改成联合判定。生成时面板隐藏。测试必须同时做到:初始状态失败,每个合法实现通过,每个非法实现失败。

方法

17 个公开基准收成 2000 题,1700 题训练、300 题测试,两边不相交。测试集含 6 种语言、67 个仓库。每题 10 个实现:参考解、4 个合法替代、5 个非法实现,合法与非法各 1500。标签来自源验证器,全过为合法,有一项失败为非法,评测中不变。

合法组的平均 AST Jaccard 距离须大于 0.5。距离只看改动处深度为 3 的语法子树,标识符会归一,改个变量名不算多样。非法实现先比失败的检查集合,集合不同即算多样,相同才比结构。15148 道源题去掉不可复现环境后,两名专家独立审查验证器是否过拟合参考解,判定前 Cohen's κ 为 0.68,留下 300 题。

JSF(Joint Success Function,联合成功)是 300 题的平均。计 1 分必须初始失败,并放行全部合法实现、拒绝全部非法实现;缺记录或运行错误为 0。只留参考解时,JSF 退化为单参考成功率 RAR,且不会高于 RAR。差值就是单参考过关、联合判定失败的题占比。同时报告合法接受率、非法拒绝率及调和平均 H。变更覆盖率 ∆C 量参考解改动被打中的比例,入口覆盖率量入口代码,可以超出改动行。

TestHelix 改的是写测试的流程。多个隔离智能体各写一对测试和修复,每对必须本地闭环:测试让初始程序稳定失败,并让自己的修复通过。交叉执行把甲的测试跑在乙的修复上;审稿人不看修复,只按公开需求审断言。几份合格修复都通过时,再找能把它们分开的输入。外层 RSI 用 AutoSaddler,由 Opus 4.6 在 600 道训练题上按 RAR 搜策略。JSF 太稀,小改动经常没有奖励,所以搜索不直接优化它。评测时策略冻结,配对数量和每题推理预算与对照相同。

结果

十四种配置、六族模型。下表是每族 JSF 最高的一条,300 题都有完整观测。

模型RAR合法接受非法拒绝JSF
Claude Fable 5.159.67%72.67%79.33%28.00%
Kimi K356.67%63.67%83.00%24.67%
Qwen3.8 Max54.67%77.00%66.00%23.67%
GPT 5.6 sol-max54.00%61.33%86.00%23.33%
DeepSeek V4 Pro41.00%57.67%70.33%13.33%
GLM 5.343.00%50.33%86.33%11.33%

Claude Fable 5.1 单参考 59.67%,联合成功 28.00%,差出 31.67 个百分点:参考解过了,完整面板没过。六族里五族的非法拒绝率高于合法接受率。Qwen3.8 Max 相反,接受率 77.00%,拒绝率 66.00%。GLM 5.3 拒绝率最高,JSF 最低。十四种配置上,∆C 与 JSF 的 Pearson r 为 0.91,入口覆盖率 r 为 0.96。Claude 这条的 ∆C 为 82.33%,入口覆盖率只有 54.33%。覆盖到代码,不等于断言判得对。

套件固定、只扩面板,JSF 还会掉。50 题、六族等权:只看参考解 49.33%,加 5 个合法实现后 38.10%,加 5 个非法实现后 30.49%,交替增加 9 步后 24.33%。这组诊断里,实现数量和结构多样性一起变。

失败轨迹按每族最高配置各抽 50 条,去掉 14 条超时,余 286 条,两名专家标注,κ 为 0.81。错误检查 50.0%,覆盖缺口 34.6%,测试自身的执行错误 15.4%。其中缺输入 30.8%,判据错误 26.9%。扑克测试从没把 A 低顺和三条放在一起比,把顺子误判成高牌的实现能通过。括号解析器只数输出个数,丢掉合法分组的实现也能通过。两套都是初始失败、参考解通过。

TestHelix 只评 GPT 5.6 sol 和 Kimi K3,推理预算与各自原生 harness 对齐。原生行就是上表这两条,对应 Codex (max) 和 Kimi Code。

设置GPT 5.6 solKimi K3
原生智能体23.33%24.67%
单对,无交叉验证20.33%21.67%
3 对后随机交一套21.00%22.67%
3 对 + 交叉验证27.67%29.00%
5 对 + 交叉验证28.33%29.67%
3 对 + 交叉验证 + RSI32.33%33.33%

单对生成比原生低 3.00 个点。3 对里随机交一套,比单对最多高 1 个点。打开交叉验证,GPT 从 21.00% 到 27.67%,Kimi 从 22.67% 到 29.00%。加到 5 对只再多 0.67 个点。RSI 再加 4.33 到 4.67 个点。相对原生 harness,JSF 提高 8.67 到 9.00 个点;相对单对,提高 11.67 到 12.00 个点。摘要里较小的那个区间,比的是原生智能体;正文里较大的区间,比的是这条流程自己的单对版本。Kimi 的完整配置把 JSF 做到 33.33%,非法拒绝率却从 83.00% 降到 78.67%,H 从 72.06% 降到 70.73%。联合成功看每一题是否全部做对,平均拒绝率可以往反方向走。

为什么重要

用「初始失败、参考解通过」放行,会把误伤合法实现、又漏掉错补丁的测试送进持续集成。Claude 上,单参考成功的题过半过不了完整面板。

预算锁死时,涨分集中在交叉验证和策略搜索。配对数从 3 加到 5 几乎不涨。Kimi 的 33.33% 高于 Claude 原生的 28.00%,两边推理预算没有对齐。联合成功率仍停在三分之一附近。

局限与存疑

合法或非法等于源验证器的执行结果。附录写明,不论补丁本意对不对,检查全过即合法,有一项失败即非法。验证器若过拟合参考解,更宽容也更正确的测试会被 JSF 罚分。可用性判断的 κ 只有 0.68。相关工作也指出 oracle problem:多观察到一些行为,不等于标签在语义上完备。

面板扩张实验里,候选数量和 AST 多样性缠在一起。286 条只覆盖失败轨迹,没有报告已经通过的套件里还剩多少同类毛病。TestHelix 没评 JSF 最高的 Claude Fable 5.1,搜索目标又是 RAR。语言压在 Python 上,205/300,C++ 和 Go 各 8 题。非零退出码既可能是断言失败,也可能是测试脚本自己坏了,初始状态上的一次失败不总是有意义的失败。

术语

原文与代码

相关论文

全部论文解读