back
loading skill details...
将需求解构的结果系统化转化为主路径、备选路径、异常路径、业务规则四类测试场景。当业务流程复杂、涉及多个页面跳转或状态变化、需要确保关键路径和异常路径都有覆盖时,应当使用此技能。不要只测"正常流程"——场景树的核心价值是暴露那些"用户可能不会按你预期操作"的分支和异常路径。每个场景带唯一 ID(SC-{模块缩写}-{序号})并关联回需求 ID(REQ-)。 触发场景:构建场景、测试场景、场景树、场景设计、测试路径、场景覆盖、业务流程复杂需要系统化梳理时。 Use when the user asks about: building a test scenario tree — main path, alternate path, exception path, and data flow scenarios with traceable SC-/REQ- IDs.
---
name: qa-scenario-tree
description: >-
将需求解构的结果系统化转化为主路径、备选路径、异常路径、业务规则四类测试场景。当业务流程复杂、涉及多个页面跳转或状态变化、需要确保关键路径和异常路径都有覆盖时,应当使用此技能。不要只测"正常流程"——场景树的核心价值是暴露那些"用户可能不会按你预期操作"的分支和异常路径。每个场景带唯一 ID(SC-{模块缩写}-{序号})并关联回需求 ID(REQ-)。
触发场景:构建场景、测试场景、场景树、场景设计、测试路径、场景覆盖、业务流程复杂需要系统化梳理时。 Use when the user asks about: building a test scenario tree — main path, alternate path, exception path, and data flow scenarios with traceable SC-/REQ- IDs.
license: MIT
allowed-tools: Read Grep Glob
metadata:
display-name: "Scenario Tree"
version: "1.8.0"
when-to-use: "用户说\"构建场景\"、\"测试场景\"、\"场景树\"、\"场景设计\"、\"测试路径\"、\"场景覆盖\"、完成需求解构后需要设计测试、业务流程复杂需要系统化梳理时"
related-skills: "{\"upstream\":[\"qa-req-deconstruction\"],\"downstream\":[\"qa-boundary-deep-dive\",\"qa-combination-strategy\",\"qa-state-transition\",\"qa-ai-context-engineering\",\"qa-ai-output-critique\",\"qa-domain-modeling\",\"qa-execution-observation\",\"qa-exploratory-testing\",\"qa-test-case-design\"]}"
references: "[\"assets/scenario-template.md\",\"references/scenario-types.md\"]"
input-format: "{\"required\":[{\"name\":\"需求解构表\",\"type\":\"object\",\"description\":\"来自qa-req-deconstruction的输出,包含需求ID、显性/隐性/衍生需求\"}],\"optional\":[{\"name\":\"风险评估\",\"type\":\"object\",\"description\":\"来自qa-risk-intuition的输出,包含高风险区域\"}]}"
output-format: "{\"traceability\":[\"每个场景带唯一ID:SC-{模块缩写}-{序号}(如 SC-LOGIN-001)\",\"关联需求ID:REQ-{需求模块缩写}-{序号}(REQ- 才是需求前缀,SC- 是场景前缀,TC_ 是用例前缀——三者不可混用)\"],\"structure\":[{\"scenario_tree\":\"场景树:按 主路径/分支路径/异常路径/数据流 四类组织,场景ID树内连续\"},{\"scenario_block\":\"单场景描述块:路径类型|关联需求|前置条件|触发条件|操作步骤|预期结果|数据变化|风险等级\"},\"数量:需求数 ×3(简单)/ ×5(中等)/ ×7(复杂);分支=需求×2、异常=需求×1.5、数据流=需求×0.5,非整数时向下取整\",\"本技能不产出 9 列用例表 —— 用例由 qa-test-case-design 分配 TC_ 编号并生成\",\"覆盖率:标注口径(基于现有需求解构表),禁止\\\"全覆盖/100%\\\"绝对化表述;未覆盖路径标注\\\"未覆盖+原因\\\"\"],\"happy_path\":\"主路径场景\",\"alternative_path\":\"分支路径场景\",\"exception_path\":\"异常路径场景\",\"data_flow\":\"数据流场景\"}"
error-recovery-guidance: "{\"on_failure\":\"场景树遗漏异常路径时回退到需求解构补充\",\"retry_behavior\":\"补全异常需求后重新构建场景树\"}"
categories: "[\"Development\",\"Requirements\"]"
depth-requirement: "{\"reference_value\":\"见正文「场景数量要求」表:以需求数为基准,简单=需求数×3 / 中等=×5 / 复杂=×7(绝对倍数)\",\"minimum\":\"四类路径(主路径/分支路径/异常路径/数据流)至少覆盖3类;未覆盖的类必须标注原因\"}"
---
> ⚠️ 本技能单独使用效果有限,建议配合完整技能集(12 步工作流)使用。安装:npx skills add Kokxi/qa-test-skills
> **⚠️ 安全警告**:本技能的示例可能涉及订单号、支付金额、截图、身份证、手机号等敏感数据。
> 实际使用时请勿粘贴真实生产数据、客户信息或财务凭证;测试前应脱敏/掩码处理。
> 本技能仅在 workspace/ 输出评估文件,不持久化、不外传、不跨会话复用。
# 场景树构建
## 核心原则
用树结构组织测试场景,确保覆盖完整、层次清晰。
**不要只测正常流程**——场景树的核心价值是暴露那些"用户可能不会按你预期操作"的分支和异常路径。
## 1. 四类路径速查
| 路径类型 | 覆盖目标 | 数量 | 最容易漏 |
|---------|---------|------|---------|
| **主路径** | 核心业务流程完整性 | 需求数 ×1 | 多角色主路径不同 |
| **分支路径** | 条件分支、用户选择 | 需求数 ×2 | 配置项组合、权限分支 |
| **异常路径** | 各类异常处理 | 需求数 ×1.5 | 第三方超时后的**恢复能力** |
| **数据流** | 数据 CRUD + 跨模块一致性 | 需求数 ×0.5 | 跨模块数据同步断链 |
> 非整数时**向下取整**(5 条需求 → 异常 7 条、数据流 2 条),不要为凑数造半条场景。
> 四类至少覆盖 3 类,未覆盖的类必须写明原因——四类全上的场景树在真实项目里很少。
## 2. 场景数量要求
**关键指标**:以需求数为基准,按项目复杂度放大。
| 复杂度 | 倍数 | 示例(需求 5 条) | 复杂度判断标准 |
|--------|------|-----------------|--------------|
| 简单项目 | ×3 | 场景 15 个 | 单模块、低风险、无并发 |
| 中等项目 | ×5 | 场景 25 个 | 多模块、中风险、少量并发 |
| 复杂项目 | ×7 | 场景 35 个 | 跨模块、高风险、高并发 |
## 3. 编号规则
| 对象 | 格式 | 示例 | 说明 |
|------|------|------|------|
| **场景 ID** | `SC-{模块缩写}-{序号}` | `SC-LOGIN-001` | 树内连续,不按类别分段 |
| **需求 ID** | `REQ-{需求模块缩写}-{序号}` | `REQ-AUTH-001` | 每个场景**必填**关联 |
| ~~用例 ID~~ | ~~`TC_{模块}_{功能}_{序号}`~~ | — | **本技能不用**,用例由 `qa-test-case-design` 分配 |
> 三者不可混用。历史版本本技能的 traceability 把"关联需求ID"写成了 `TC_` 前缀,
> 已修正为 `REQ-`。
## 4. 加载时机
**需要时才读,不要一上来全读**:
| 什么时候读 | 读哪个 |
|-----------|--------|
| 展开某一类场景的完整覆盖清单,或按四步法逐类构建 | [`references/scenario-types.md`](references/scenario-types.md)(四类详解 + 构建方法 + 漂移处理) |
| 写场景树或场景描述块 | [`assets/scenario-template.md`](assets/scenario-template.md)(树骨架 + 描述块 + 填写要求 + 自检) |
## 5. 产出
**场景树骨架**:
```text
登录功能
├─ 主路径
│ ├─ SC-LOGIN-001:用户名密码登录成功
│ └─ SC-LOGIN-002:手机号验证码登录成功
├─ 分支路径
│ ├─ SC-LOGIN-003:记住我
│ ├─ SC-LOGIN-004:第三方登录
│ └─ SC-LOGIN-005:多因素认证
├─ 异常路径
│ ├─ SC-LOGIN-006:用户名不存在
│ ├─ SC-LOGIN-007:密码错误
│ ├─ SC-LOGIN-008:验证码过期
│ ├─ SC-LOGIN-009:账号被锁定
│ └─ SC-LOGIN-010:网络中断
└─ 数据流
├─ SC-LOGIN-011:登录状态存储
├─ SC-LOGIN-012:Token 生成与刷新
└─ SC-LOGIN-013:登录日志记录
```
**单场景描述块**:
```markdown
### SC-LOGIN-014 — 支付回调超时后的订单状态
- **路径类型**:异常路径
- **关联需求**:REQ-PAY-003
- **前置条件**:订单处于"支付中"已 30 分钟;回调地址注入 3 秒延迟
- **触发条件**:用户点击支付,网关响应超时
- **操作步骤**:1) 发起支付注入延迟 2) 等待超时 3) 查订单状态 4) 手动补发回调
- **预期结果**:超时后订单进入"支付中"而非判失败;补发后转"已支付"不二次扣款;
30 分钟无回调则自动关单并释放库存
- **数据变化**:订单 支付中→已支付;支付单唯一无重复;库存净扣减 1
- **风险等级**:高(资损)
```
> 完整模板与填写要求见 `assets/scenario-template.md`。
**本技能不产出 9 列用例表**——场景到用例的转换由 `qa-test-case-design` 完成。
## 6. 交付前自检
- [ ] 四类路径都有场景;某类不适用时写"不适用 + 原因"
- [ ] 场景 ID 唯一、树内连续、格式 `SC-{模块}-{序号}`,无 `TC_` 混用
- [ ] 每个场景关联到 `REQ-` 需求 ID,无孤儿场景
- [ ] 场景数达到数量要求;小数维度已向下取整
- [ ] **异常路径均验证了恢复能力**(报错后状态、能否重试、重试有无重复副作用)
- [ ] 数据流场景逐个数据对象写了前后状态
- [ ] 无主路径/异常路径混排
- [ ] 覆盖率已标注口径,无"全覆盖/100%"绝对化表述
don't have the plugin yet? install it then click "run inline in claude" again.