# 专题-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](架构-02-核心数据结构与双轨模型.md)(双轨不变式)、[架构-04](架构-04-状态机与约束清单.md)(状态机)、[后端-04](后端-04-统一数据库Schema-v1.md)(约束) | | **L2 接口契约 / 事务 / 幂等** | 错误码、乐观锁、鉴权边界、事务回滚、SSE 框架、版本头 | 多、廉价 | 契约测试 + 集成测试 + 故障注入 | [后端-05](后端-05-统一API契约-v1.md)(API 契约)、[后端-03](后端-03-关键流程实现与接口契约.md)(事务/事件) | | **L3 前端交互 / 不丢稿** | 编辑器保存、影子层冲突、建议接受、动态表单、SSE 重连 | 中 | Playwright E2E + 前端单测 | [前端-02](前端-02-编辑器与影子层交互.md)、[前端-03](前端-03-元引擎与动态表单.md)、[专题-01](专题-01-正文建议接受(Accept%20Suggestion)实现规范.md) | | **L4 AI 语义质量** | 正文质量、一致性判定、知识效用 | 少而精、最贵 | LLM 评委 + 对照实验 + 回放评测 | [专题-04](专题-04-生成质量门控与创作健康度设计方案.md)(质量维度/量表)、[专题-07](专题-07-知识消费契约与质量闭环.md)(知识效用/回放) | **分层纪律**:L1–L3 必须占自动化用例的绝大多数;L4 数量少、慢、贵,但测的是产品命根子,绝不用 L1–L3 的"通过/失败"思路去做(见 §5)。 ## 3. 确定性 / 语义分界判据 唯一判据: > **这件事的对错,能不能不看正文含义、只比对结构和数值就知道?能 → 确定性(机械断言);不能 → 语义(大模型评判)。** ### 3.1 分界总表 | 测什么 | 类别 | 验证手段 | |---|---|---| | 状态迁移、枚举值域 | 确定性 | 状态图遍历 + 断言 | | 双轨写路径隔离(AI 不直写正文事实层) | 确定性 | 写路径审计测试 | | 事务原子 / 乐观锁 / 幂等 | 确定性 | 集成测试 + 故障注入 | | 鉴权 / admin·app 入口隔离 | 确定性 | 矩阵化权限测试 | | 协议外壳 / 哈希绑定 / fail-closed | 确定性 | 契约测试 | | 不丢稿 / 冲突不静默覆盖 | 确定性 | Playwright 杀进程重载 | | 一致性"两段设不设定冲突" | 混合 | 定位/绑定部分断言 + 判定部分 LLM 评委 | | 正文质量五维打分 | 混合 | 确定性流程 + 盲评大模型打分 | | 知识回放对照 | 混合 | 确定性框架 + 对照评分 | | 风格 / 节奏 / 可行动性 | 纯语义 | LLM 评委 / 对照实验,不下硬结论 | ### 3.2 混合体的处理纪律 混合体(外壳确定 + 打分语义)是最易做错的一类:**外壳必须单测,内核必须大模型**,二者不可互相替代。 - **一致性检测**(owner [专题-03](专题-03-AI编排上下文与质量评测实现规范.md)):引用能否唯一定位、哈希是否绑定、`unknown` 是否带 gapReason——确定性断言;"claims/事实冲突 verdict"——LLM 判定。 - **正文离线实验**(owner [专题-04 §10](专题-04-生成质量门控与创作健康度设计方案.md)):双盲双评流程、"单维差 >0.5 加第三评""取稳定配对中位数""样本 <5 判证据不足"——确定性规则;五维打分——盲评大模型。 - **知识回放**(owner [专题-07 §4](专题-07-知识消费契约与质量闭环.md)):冻结第 N 章、按契约组装、对照第 N+1 章——确定性框架;"台阶命中/设定一致/错误检出"——对照评分。 ## 4. 确定性合同主干(高 ROI,优先铺) 以下六类全部可从现有 SoT 直接生成用例,是回归主干,最先落地: 1. **错误码枚举稳定**:业务错误码取自 [后端-05 §5](后端-05-统一API契约-v1.md) 枚举;特定失败不得压缩为泛化码(如来源阻断必须返 `SOURCE_BLOCKED` 而非 `STATE_CONFLICT`)。 2. **乐观锁**:Block 写入必带 `expectedRevision`,冲突必拒且 revision 单调递增(owner [架构-04 §4.6](架构-04-状态机与约束清单.md))。 3. **Accept 事务原子**:候选接受 8 步(校验→写 revision→归因→归档→审计/outbox)任一步失败整体无副作用;outbox/投影异步失败不回滚已提交正文(owner [后端-03 §4](后端-03-关键流程实现与接口契约.md))。 4. **幂等**:同 `commandId` 重提返回首次结果、不重复写/确认/绑定/导出;同键不同语义必报 `IDEMPOTENCY_CONFLICT`(owner [后端-05 §2.5](后端-05-统一API契约-v1.md))。 5. **鉴权矩阵 / 入口隔离**:`/admin-api/**` 改不了用户正文,`/app-api/**` 碰不到系统配置;系统内部调用不得复用用户 token;越权 `FORBIDDEN`、无身份 `UNAUTHENTICATED`(owner [后端-02 §4.3](后端-02-工程结构与模块职责.md),ArchUnit 包级隔离)。 6. **双轨写路径审计**:AI 任务/候选/智能体绝不能直写正文事实层;来源传播只能限制/标记/作废,不得改写已确认正文(owner [架构-02 §1.1](架构-02-核心数据结构与双轨模型.md)、[架构-04 §11](架构-04-状态机与约束清单.md))。 补充确定性主干(同优先级):状态机迁移图遍历(通用版本/任务/候选/来源)、唯一约束与快照不可变、SSE 框架合同与重连续传、`X-API-Version` 废弃期/410 行为、不丢稿不变式(崩溃后 `max(本地缓存, 服务端)` 可恢复、零丢失)。 ## 5. 语义评测方法论 语义部分最大的坑是"测了个寂寞"(跑一次、看着行、就过)。三套机制,铁律先行:**n=1 不下结论;两臂必须对等、控住混淆变量。** ### 5.1 LLM 评委(双盲双评)——给单条产出打分 - 两个评委独立打分、互不知结果;分差超阈值([专题-04 §10.1](专题-04-生成质量门控与创作健康度设计方案.md) 用 0.5)自动引入第三评。 - 评委 fresh 进程隔离、匿名样本,不告知"AI 写还是人写"。 ### 5.2 对照实验(A/B 两臂对等)——回答"新策略是否真的更好" - 两臂对等:同一批章节、同一模型、同一预算,只改变被测变量。 - 样本不足不下结论:[专题-04 §10.1](专题-04-生成质量门控与创作健康度设计方案.md) Gate A——样本 <5 或五场景不全 → `insufficient_evidence`(判"证据不足",**不是**"通过")。 - **通过线必须是硬数字**。全仓范本 = [专题-04 §10.1](专题-04-生成质量门控与创作健康度设计方案.md) Gate B:试验臂相对对照臂,文风或张力**不退化**,且设定保真均值 **≥0.25**、且 **≥60%** 样本为正 → `passed`。这是"语义质量落成确定性判定"的唯一现成范本,所有新语义门补标准时照此范式。 ### 5.3 回放评测——回答"知识/上下文策略有没有用" 拿参考书当标准答案:冻结到第 N 章,按消费契约组装上下文去生成第 N+1 章,对照真实第 N+1 章(owner [专题-07 §4](专题-07-知识消费契约与质量闭环.md))。铁律:**没跑过回放,不许声称有改善。** ## 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](专题-04-生成质量门控与创作健康度设计方案.md))。 **测试合同(混合)**: - 确定性外壳:量表步长、双盲流程、"分差 >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`](../.agents/rules/verification-and-anti-false-green.md)——测试必须真驱动被测流程并观察行为,禁止只跑 typecheck/空断言冒充通过。 - **阻断规则**:CI 中 L1–L3 测试失败阻断合入;L4 语义评测以"证据不足/退化"为失败信号,不以单次分数为失败信号。 - **语义门上线门禁**:任何语义质量门,要么持有 §5.2 范式的硬通过线,要么书面标注"只展示不阻断";二者皆无 → 测试侧拒绝背书,需求视为未闭合。