oh-my-muse/design-docs/专题-08-自动化测试方案.md
zizi 8f04dc3f0c docs(设计): 蒸馏测试倒逼剩余缺口G2/G3/G8/G9/G10
- G8 安全时长钉死:handoff token 15min(架构-04 §10.1)/下载凭证 5min(§12.2)/高危安全操作冷却 24h(§3.2)
- G9 风险/冲突分级三级枚举 none/soft/hard,hard 禁静默一键确认(产品-02 §10.4)
- G3 改写洗白判据:外部 lineage 限制不可经改写解除,原创确认非洗白通道(产品-02 §6.4)
- G10 灰度通过/回退/证据不足准则,照对照实验范式(流程-02A §5.1)
- G2 计费分阶段:本阶段以额度调整 ledger 为可测合同,完整四态列后续阶段(产品-02 §10.8)
- 同步 专题-08 §7.3 与缺口跟踪文档:10 项缺口已全部拍死,G5/G6/G7 留回放基线(待执行)
2026-07-31 00:26:40 +08:00

14 KiB
Raw Permalink Blame History

专题-08自动化测试方案

  • 目标读者:创作者 / 产品 / 架构 / 前端 / 后端 / 测试 / Agent 实现者
  • 阅读时间25-40 分钟
  • 边界说明本文件是贯穿四仓muse-cloud / muse-admin / muse-studio / muse-design-docs测试可判定性横切 SoTowns 三个概念——测试金字塔分层、确定性/语义分界判据、语义评测方法论。它不重定义任何状态机、Schema、API 或质量维度:那些的单一归属仍在各自分册(见各节引用),本册只规定"它们必须满足什么条件才算可测、以及用什么手段验证"。

1. 定位与非目标

1.1 定位

Muse 的可测性呈两极:

  • 约 95% 的系统是确定性机器——状态机、双轨写路径、事务、幂等、鉴权、协议外壳、不丢稿。其对错不看正文含义、只比对结构与数值即可判定,用经典自动化测试钉死,是自动化率 > 90% 的主体。
  • 决定"这段 AI 写得能不能用"的语义内核——正文质量、一致性判定、知识效用——本质上必须靠多模态大模型评判,不能用"通过/失败"硬断言,只能用对照实验与盲评量表。

本册给出:四层测试金字塔、一条确定性/语义分界判据、三套语义评测机制,以及每个功能"要可测必须提供什么"的可判定性合同。

1.2 非目标

  • 不定义具体业务状态机、表结构、端点、错误码、质量维度——归属见各节引用的 owner 分册。
  • 不替代 docs/mvp/ 的进度总账与覆盖 JSON本册定义"测什么、怎么验",覆盖 JSON 是"哪些已登记可机械核对"的执行台账。
  • 不记录调试经过、某次测试结果或开发状态。

2. 测试金字塔(四层)

越往下越贵、越往上越该多。每一层的用例都从现有 SoT 合同反推。

验证对象 规模/成本 手段 合同 owner本册只引用
L1 数据不变式 / 状态机 双轨写路径、状态迁移合法性、唯一约束、快照不可变 多而密、最廉价 后端单测 + 真 PG 集成测试 + ArchUnit 架构-02(双轨不变式)、架构-04(状态机)、后端-04(约束)
L2 接口契约 / 事务 / 幂等 错误码、乐观锁、鉴权边界、事务回滚、SSE 框架、版本头 多、廉价 契约测试 + 集成测试 + 故障注入 后端-05API 契约)、后端-03(事务/事件)
L3 前端交互 / 不丢稿 编辑器保存、影子层冲突、建议接受、动态表单、SSE 重连 Playwright E2E + 前端单测 前端-02前端-03专题-01
L4 AI 语义质量 正文质量、一致性判定、知识效用 少而精、最贵 LLM 评委 + 对照实验 + 回放评测 专题-04(质量维度/量表)、专题-07(知识效用/回放)

分层纪律L1L3 必须占自动化用例的绝大多数L4 数量少、慢、贵,但测的是产品命根子,绝不用 L1L3 的"通过/失败"思路去做(见 §5

3. 确定性 / 语义分界判据

唯一判据:

这件事的对错,能不能不看正文含义、只比对结构和数值就知道?能 → 确定性(机械断言);不能 → 语义(大模型评判)。

3.1 分界总表

测什么 类别 验证手段
状态迁移、枚举值域 确定性 状态图遍历 + 断言
双轨写路径隔离AI 不直写正文事实层) 确定性 写路径审计测试
事务原子 / 乐观锁 / 幂等 确定性 集成测试 + 故障注入
鉴权 / admin·app 入口隔离 确定性 矩阵化权限测试
协议外壳 / 哈希绑定 / fail-closed 确定性 契约测试
不丢稿 / 冲突不静默覆盖 确定性 Playwright 杀进程重载
一致性"两段设不设定冲突" 混合 定位/绑定部分断言 + 判定部分 LLM 评委
正文质量五维打分 混合 确定性流程 + 盲评大模型打分
知识回放对照 混合 确定性框架 + 对照评分
风格 / 节奏 / 可行动性 纯语义 LLM 评委 / 对照实验,不下硬结论

3.2 混合体的处理纪律

混合体(外壳确定 + 打分语义)是最易做错的一类:外壳必须单测,内核必须大模型,二者不可互相替代。

  • 一致性检测owner 专题-03):引用能否唯一定位、哈希是否绑定、unknown 是否带 gapReason——确定性断言"claims/事实冲突 verdict"——LLM 判定。
  • 正文离线实验owner 专题-04 §10):双盲双评流程、"单维差 >0.5 加第三评""取稳定配对中位数""样本 <5 判证据不足"——确定性规则;五维打分——盲评大模型。
  • 知识回放owner 专题-07 §4):冻结第 N 章、按契约组装、对照第 N+1 章——确定性框架;"台阶命中/设定一致/错误检出"——对照评分。

4. 确定性合同主干(高 ROI优先铺

以下六类全部可从现有 SoT 直接生成用例,是回归主干,最先落地:

  1. 错误码枚举稳定:业务错误码取自 后端-05 §5 枚举;特定失败不得压缩为泛化码(如来源阻断必须返 SOURCE_BLOCKED 而非 STATE_CONFLICT)。
  2. 乐观锁Block 写入必带 expectedRevision,冲突必拒且 revision 单调递增owner 架构-04 §4.6)。
  3. Accept 事务原子:候选接受 8 步(校验→写 revision→归因→归档→审计/outbox任一步失败整体无副作用outbox/投影异步失败不回滚已提交正文owner 后端-03 §4)。
  4. 幂等:同 commandId 重提返回首次结果、不重复写/确认/绑定/导出;同键不同语义必报 IDEMPOTENCY_CONFLICTowner 后端-05 §2.5)。
  5. 鉴权矩阵 / 入口隔离/admin-api/** 改不了用户正文,/app-api/** 碰不到系统配置;系统内部调用不得复用用户 token越权 FORBIDDEN、无身份 UNAUTHENTICATEDowner 后端-02 §4.3ArchUnit 包级隔离)。
  6. 双轨写路径审计AI 任务/候选/智能体绝不能直写正文事实层;来源传播只能限制/标记/作废不得改写已确认正文owner 架构-02 §1.1架构-04 §11)。

补充确定性主干(同优先级):状态机迁移图遍历(通用版本/任务/候选/来源、唯一约束与快照不可变、SSE 框架合同与重连续传、X-API-Version 废弃期/410 行为、不丢稿不变式(崩溃后 max(本地缓存, 服务端) 可恢复、零丢失)。

5. 语义评测方法论

语义部分最大的坑是"测了个寂寞"(跑一次、看着行、就过)。三套机制,铁律先行:n=1 不下结论;两臂必须对等、控住混淆变量。

5.1 LLM 评委(双盲双评)——给单条产出打分

  • 两个评委独立打分、互不知结果;分差超阈值(专题-04 §10.1 用 0.5)自动引入第三评。
  • 评委 fresh 进程隔离、匿名样本,不告知"AI 写还是人写"。

5.2 对照实验A/B 两臂对等)——回答"新策略是否真的更好"

  • 两臂对等:同一批章节、同一模型、同一预算,只改变被测变量。
  • 样本不足不下结论:专题-04 §10.1 Gate A——样本 <5 或五场景不全 → insufficient_evidence(判"证据不足"不是"通过")。
  • 通过线必须是硬数字。全仓范本 = 专题-04 §10.1 Gate B试验臂相对对照臂文风或张力不退化,且设定保真均值 ≥0.25、且 ≥60% 样本为正 → passed。这是"语义质量落成确定性判定"的唯一现成范本,所有新语义门补标准时照此范式。

5.3 回放评测——回答"知识/上下文策略有没有用"

拿参考书当标准答案:冻结到第 N 章,按消费契约组装上下文去生成第 N+1 章,对照真实第 N+1 章owner 专题-07 §4)。铁律:没跑过回放,不许声称有改善。

6. 测试可判定性合同(倒逼 owner 分册)

每个功能要进入自动化验收,必须向测试提供下列之一;提供不出来的,视为需求未闭合,不得声称"已完成"。

功能类型 必须提供 提供不出来的后果
状态机 / 流程 完整合法+非法迁移图、终态 无法写迁移断言
端点 / 命令 稳定错误码、前置条件、幂等键来源 无法写契约/并发测试
数值门槛TTL/置信度/配额) 具体数值,或明确的"基线产生时点+校准责任人" 过期/拒绝/超限路径不可断言
语义质量门 量表 + 通过线 + 评委规则(照 §5.2 Gate B 范式),或书面承认"只展示不阻断" 既想阻断又无判据 = 黑洞,测试拒绝背书
失败路径 四问:为什么 / 哪些事实没变 / 下一步 / 返回哪里 失败恢复不可验收

本条是测试对需求的硬约束:凡声称"质量达标""风险可控""自动入库"而无上表对应判据者,测试侧记为不可判定,回退 owner 分册补标准。当前已知的不可判定点,集中登记在 docs/plans/2026-07-30-测试倒逼需求缺口跟踪.md,拍死后蒸馏回各分册即删。

7. 已拍决策的测试合同

以下三项已由人类拍死2026-07-30本册登记其测试合同;对应 owner 分册的措辞修订见缺口跟踪文档的蒸馏清单。

7.1 收紧自动确认G1

决策:知识草稿仅在四条件全满足时自动入库——① 自有正文产生 ② 无外部来源 lineage ③ 无冲突 ④ 置信度达标;任一不满足 → 进待确认队列,用户确认才入正文事实层。

测试合同(确定性)

  • 四条件逐一置假,断言草稿进入待确认队列、写正文事实层;
  • 四条件全真且置信度达标,断言 confirm_mode=auto 且可撤回;
  • 带外部 lineage 的草稿即便改写,断言洗白来源、走自动确认。

已蒸馏产品-02 §6.4 入口清单已纳入"知识草稿达标自动确认(四条件)"§9.1 "唯一入口"措辞已对齐,与 流程-02B §7 矛盾消除。

7.2 叙事质量门补硬标准并阻断G4

决策:运行时叙事三维(设定一致 / 角色声音 / 场景结构)照 §5.2 Gate B 范式补硬标准——每维一个量表 + 双盲评委 + 通过线,不达标阻断或触发有限重写(重写上限默认 ≤2owner 专题-04 §5)。

测试合同(混合)

  • 确定性外壳:量表步长、双盲流程、"分差 >0.5 加第三评"、重写上限、qualityState 转移——机械断言;
  • 语义内核:三维打分由盲评大模型给;
  • 阻断断言:构造低于通过线的样本,断言候选shadow_ready可接受。

已蒸馏专题-04 §4.2.1 已补运行时叙事门量表0-10/0.5 步长)、三维通过线(设定 ≥7.0、角色/场景 ≥6.0)与四步裁决顺序,盲评机制引用 §10.1。

7.3 阈值分类处理

决策

  • 安全类阈值现在拍死——凭证有效期handoff token / 下载凭证)、风险与冲突分级。一旦数值确定,其过期/拒绝/禁静默确认路径即为确定性断言。
  • 语义类阈值留回放首轮基线——知识质量三性门槛、回放通过线、自动确认置信度。必须同时写明"基线产生时点 + 校准责任人",否则视同悬置。

测试合同

  • 安全类:数值落 SoT 后,过期/重复使用/actor 不匹配/越级确认 → 断言拒绝 + 写审计;
  • 语义类:基线未定时,测试只断言"指标可计算、留痕、门禁要求附运行标识"断言 pass/fail基线定后补硬断言。

已蒸馏(安全类)handoff token 15 分钟(架构-04 §10.1)、下载凭证 5 分钟(架构-04 §12.2)、高危安全操作冷却窗口 24 小时(架构-04 §3.2);风险/冲突分级三级枚举 none/soft/hard产品-02 §10.4留基线(语义类):知识质量门槛、回放通过线、自动确认置信度留回放首轮基线,校准责任人=质量策略 owner、时点=回放首轮完成时;基线未定前测试只断言"指标可计算、留痕、门禁附运行标识"。

8. 验收与 CI 门禁

  • 覆盖登记:每条确定性合同登记进覆盖 JSON接口门机械源可机械核对未登记者不计入自动化率。
  • 防假绿:遵循 .agents/rules/verification-and-anti-false-green.md——测试必须真驱动被测流程并观察行为,禁止只跑 typecheck/空断言冒充通过。
  • 阻断规则CI 中 L1L3 测试失败阻断合入L4 语义评测以"证据不足/退化"为失败信号,不以单次分数为失败信号。
  • 语义门上线门禁:任何语义质量门,要么持有 §5.2 范式的硬通过线,要么书面标注"只展示不阻断";二者皆无 → 测试侧拒绝背书,需求视为未闭合。