- 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 留回放基线(待执行)
158 lines
14 KiB
Markdown
158 lines
14 KiB
Markdown
# 专题-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 范式的硬通过线,要么书面标注"只展示不阻断";二者皆无 → 测试侧拒绝背书,需求视为未闭合。
|