第十讲 — 12维场景探索
L01 > L02 > L03 > L04 > L05 > L06 | L07 > L08 > L09 > [ L10 ] L11 > L12
"快乐路径只是12个维度中的一个。" — 每次迭代覆盖一个维度,直到所有情境都被探索。
本讲核心:
/autoresearch:scenario如何用12个维度框架,把"随机想场景"变成系统性全覆盖。
代码示例:code/
配套项目:项目五 — 安全审计流水线
问题
功能通常只为"快乐路径"而设计和测试。边界情况、并发、滥用、恢复——这些往往只在生产环境出了问题才被发现。
手动场景编写的问题不是懒,是系统性盲点:你不会主动想到"两个用户同时结账最后一件商品",除非你有意识地思考"并发"维度。
解决方案
功能/系统描述
|
v
12个维度框架
┌─────────────────────────────────┐
│ 1.正常路径 │ 2.错误条件 │ 3.边界情况 │
│ 4.滥用情况 │ 5.规模压力 │ 6.并发 │
│ 7.时间性 │ 8.数据变体 │ 9.权限差异 │
│ 10.第三方 │ 11.恢复场景 │ 12.状态转换│
└─────────────────────────────────┘
|
每次迭代生成一个维度的一个场景
(有条不紊,不随机)
|
v
输出格式按需适配:
--format test-scenarios → pytest/jest 测试用例
--format user-stories → 敏捷用户故事
--format threat-scenarios → 安全威胁场景工作原理
12个维度,各有侧重
| # | 维度 | 你容易忘记的场景 |
|---|---|---|
| 1 | 正常路径 | 基础用例(但要明确写出来) |
| 2 | 错误条件 | 数据库超时、网络断开 |
| 3 | 边界情况 | 空列表、最大值、零值 |
| 4 | 滥用情况 | 恶意输入、超速调用 |
| 5 | 规模压力 | 10x 流量时会怎样? |
| 6 | 并发 | 两个用户同时操作同一资源 |
| 7 | 时间性 | 定时任务、会话过期、时区 |
| 8 | 数据变体 | 中文字符、null、超长字符串 |
| 9 | 权限差异 | 普通用户 vs 管理员 vs 未登录 |
| 10 | 第三方集成 | 支付 API 超时、OAuth 失败 |
| 11 | 恢复场景 | 崩溃后重启、部分写入 |
| 12 | 状态转换 | 订单从"待付款"到"已取消" |
领域特定维度优先级
python
# 不同领域重点不同
软件开发 = [错误条件, 并发, 规模, 恢复] # 高优先
安全审计 = [滥用情况, 权限, 数据变体, 第三方] # 高优先
产品测试 = [正常路径, 用户故事, 权限, 时间性] # 高优先链式到下游命令
bash
# 场景 → 测试
/autoresearch:scenario --format test-scenarios --chain debug
# 场景 → 安全审计
/autoresearch:scenario --format threat-scenarios --chain security变更内容
| 方式 | 手动场景编写 | 12维系统探索 |
|---|---|---|
| 覆盖保证 | 无,取决于当天灵感 | 12个维度每个都有场景 |
| 并发/时间性 | 容易忘 | 强制维度,不会漏 |
| 输出格式 | 固定 | 按需适配测试/故事/威胁 |
| 与工具链接 | 手动 | --chain debug/security |
试一试
运行场景优先级计算器,看不同领域的维度权重:
sh
cd docs/zh/lectures/lecture-10-twelve-dimension-scenarios/code
python scenario_priority.py software
python scenario_priority.py security思考题:
- 对比
software和security的输出,哪些维度排序最不同?为什么? - 选一个你最近开发的功能,在"并发"维度下能想到什么场景?
- "两个用户同时删除同一条记录"属于哪个维度?你的代码处理了这个情况吗?
- 如果你的项目是一个支付系统,你会优先覆盖哪3个维度?
下一讲:第十一讲 — 通用发布流水线