跳转至

Read this paper write-up in English

规范驱动测试:先建立行为契约,再生成测试

论文信息

字段 内容
论文链接 Grounding AI Agents in Contracts,固定核对v1正文
公司/机构 一作Michele Tufano:Google, USA
首次公开日期 2026-08-17 22:36:12 UTC;这是历史补发现,不是10月新首发
原文开源代码 在Google官方详情和v1正文未找到作者实现仓库;90个历史生产缺陷为内部数据,不声称全网未开源
本地 Adapter spec-driven-tests,协议组件键,不是完整模型adapter
本地复现代码 src/auto_research/agent_research/spec_driven_tests.py;scripts/run_oct21_priority_backfill.py

L1协议诊断,不是代码Agent能力复现。 外部可信回调负责提取规范、生成测试和执行。本地确定性夹具只检查阶段门控与评价语义,不声称能自主理解代码、提升缺陷检出率或实现完整沙箱。

原始论文总结

背景与主要改动

直接让模型编写单元测试,可能遗漏输入边界或隐含的行为约定。本文先让Agent读取修复后的源码,写出每个代码单元的描述、前置条件、后置条件与测试建议;把条件标为已测试或未测试,保存为.spec.md,之后才允许生成测试。中间可由开发者修订规范;论文自动比较没有启用人工干预。

flowchart TD
    F[修复后源码与公开需求] --> S[阶段一:提取行为规范]
    S --> H[可选人工修订]
    H --> T[阶段二:按规范生成测试]
    T --> A[审计被修改的文件]
    A --> X[原样测试运行于fixed源码]
    X --> B[私有评价器运行于buggy源码]
    B --> R[仅真实测试失败计为检出]

原论文关键图

原文Figure 1:规范提取与测试生成两阶段

图片来自原论文PDF第3页Figure 1,已核对输入、规范产物、阶段二和输出方向。图片版权归原作者所有,不是本地重绘的效果证据。

核心定义

每个代码单元的规范为:

\[ S_c=\langle D_c,Pre_c,Post_c,Sug_c\rangle. \]

生成时仅给Agent修复后的源码,隐藏历史bug、补丁及提交信息。检出条件为:同一个测试集在fixed版本编译并通过,在buggy版本编译成功但至少一个测试断言失败。编译失败不算检出。 若Agent改动了被测源码或非允许的既有文件,该次运行作废且不自动重试。论文还汇总每个bug的前k次尝试中是否至少有一次成功,而非把每条测试当成独立bug。

论文离线与线上效果

作者在90个Google内部历史缺陷上,用同一个Gemini 3 Flash及Harness比较直接生成与规范驱动生成,另用Gemini 3.1 Pro评价测试质量。论文报告detect@5为63.2%,对照53.4%,分支覆盖增加2.5个百分点。这些是作者的离线私有数据结果,不是线上A/B,也不是本地测量。实验设计与结果

本地复现

PYTHONPATH=src python scripts/run_oct21_priority_backfill.py \
  --device cpu --components spec-driven-tests --seeds 42,43,44 \
  --output runs/spec-driven-tests/fresh-result.json

已实现与未实现

  • Specification保存唯一代码单元及D/Pre/Post/Sug,输出Markdown;未测试条件须有建议。本地结构校验比论文提示约束更严格,但不把它当语义正确性证明。
  • generate先完成规范提取,再可选修订、生成测试。传入回调的是重新构建的公共fixed-source白名单对象,不携带buggy/gold字段;原文允许的existing-tests输入默认留空以适配greenfield。
  • evaluate将同一测试交给可信执行器,固定先fixed后buggy;区分编译失败、实际测试失败、未检出和非法修改。
  • pass_detect_at_k按bug分组计算观测到的至少一次通过/检出,不伪装成组合无偏pass@k估计器。

API不是操作系统安全沙箱。modified_existing_paths必须由外部可信文件差异审计提供,不能相信模型自报;回调本身不得通过闭包或文件系统偷看私有评价数据。默认不exec生成文本,不自动启动shell。缺陷覆盖、分支覆盖和契约语义覆盖均未实现,不能由规范是否非空推断它们。

本地结果与边界

三seed的确定性小整数fixture检查阶段顺序、公共字段隔离、相同测试双执行、非法源码修改拒绝、编译错误负控及按bug汇总。回调并非LLM,actual_llm_calls=0;其通过只是协议工作正常,不是Agent成功率。CPU诊断指标

成本与完整实验

90个内部缺陷、两臂各5次Gemini生成、强模型多次评审及私有构建环境无法在单A100/A30或Mac上忠实低成本重做。成本过高,不复现(审查 DONE)。不下载大模型、不请求付费API、不替代私有缺陷造假;没有自动重试或待训练队列。组件保持diagnostic_only=true、promotion_eligible=false、evolve_integrated=false。