- 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 留回放基线(待执行)
14 KiB
专题-08:自动化测试方案
- 目标读者:创作者 / 产品 / 架构 / 前端 / 后端 / 测试 / Agent 实现者
- 阅读时间:25-40 分钟
- 边界说明:本文件是贯穿四仓(muse-cloud / muse-admin / muse-studio / muse-design-docs)的测试可判定性横切 SoT,owns 三个概念——测试金字塔分层、确定性/语义分界判据、语义评测方法论。它不重定义任何状态机、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 框架、版本头 | 多、廉价 | 契约测试 + 集成测试 + 故障注入 | 后端-05(API 契约)、后端-03(事务/事件) |
| L3 前端交互 / 不丢稿 | 编辑器保存、影子层冲突、建议接受、动态表单、SSE 重连 | 中 | Playwright E2E + 前端单测 | 前端-02、前端-03、专题-01 |
| L4 AI 语义质量 | 正文质量、一致性判定、知识效用 | 少而精、最贵 | LLM 评委 + 对照实验 + 回放评测 | 专题-04(质量维度/量表)、专题-07(知识效用/回放) |
分层纪律:L1–L3 必须占自动化用例的绝大多数;L4 数量少、慢、贵,但测的是产品命根子,绝不用 L1–L3 的"通过/失败"思路去做(见 §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 直接生成用例,是回归主干,最先落地:
- 错误码枚举稳定:业务错误码取自 后端-05 §5 枚举;特定失败不得压缩为泛化码(如来源阻断必须返
SOURCE_BLOCKED而非STATE_CONFLICT)。 - 乐观锁:Block 写入必带
expectedRevision,冲突必拒且 revision 单调递增(owner 架构-04 §4.6)。 - Accept 事务原子:候选接受 8 步(校验→写 revision→归因→归档→审计/outbox)任一步失败整体无副作用;outbox/投影异步失败不回滚已提交正文(owner 后端-03 §4)。
- 幂等:同
commandId重提返回首次结果、不重复写/确认/绑定/导出;同键不同语义必报IDEMPOTENCY_CONFLICT(owner 后端-05 §2.5)。 - 鉴权矩阵 / 入口隔离:
/admin-api/**改不了用户正文,/app-api/**碰不到系统配置;系统内部调用不得复用用户 token;越权FORBIDDEN、无身份UNAUTHENTICATED(owner 后端-02 §4.3,ArchUnit 包级隔离)。 - 双轨写路径审计: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 范式补硬标准——每维一个量表 + 双盲评委 + 通过线,不达标阻断或触发有限重写(重写上限默认 ≤2,owner 专题-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 中 L1–L3 测试失败阻断合入;L4 语义评测以"证据不足/退化"为失败信号,不以单次分数为失败信号。
- 语义门上线门禁:任何语义质量门,要么持有 §5.2 范式的硬通过线,要么书面标注"只展示不阻断";二者皆无 → 测试侧拒绝背书,需求视为未闭合。