back
loading skill details...
将需求解构的结果系统化转化为主路径、备选路径、异常路径、业务规则四类测试场景。当业务流程复杂、涉及多个页面跳转或状态变化、需要确保关键路径和异常路径都有覆盖时,应当使用此技能。不要只测"正常流程"——场景树的核心价值是暴露那些"用户可能不会按你预期操作"的分支和异常路径。每个场景都应有唯一ID(SC-XXXX)并关联回具体需求。
---
name: qa-scenario-tree
slug: qa-scenario-tree
displayName: Scenario Tree
version: 1.7.0
description: >-
将需求解构的结果系统化转化为主路径、备选路径、异常路径、业务规则四类测试场景。当业务流程复杂、涉及多个页面跳转或状态变化、需要确保关键路径和异常路径都有覆盖时,应当使用此技能。不要只测"正常流程"——场景树的核心价值是暴露那些"用户可能不会按你预期操作"的分支和异常路径。每个场景都应有唯一ID(SC-XXXX)并关联回具体需求。
when_to_use: 用户说"构建场景"、"测试场景"、"场景树"、"场景设计"、"测试路径"、"场景覆盖"、完成需求解构后需要设计测试、业务流程复杂需要系统化梳理时
allowed-tools: Read Grep Glob
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
input_format:
required:
- name: 需求解构表
type: object
description: 来自qa-req-deconstruction的输出,包含需求ID、显性/隐性/衍生需求
optional:
- name: 风险评估
type: object
description: 来自qa-risk-intuition的输出,包含高风险区域
output_format:
structure:
- scenario_id: "SC-XXXX"
- requirement_ids: ["REQ-XXXX"]
- happy_path: "主路径场景"
- alternative_path: "分支路径场景"
- exception_path: "异常路径场景"
- data_flow: "数据流场景"
traceability:
- 每个场景带唯一ID(SC-XXXX)
- 关联需求ID(REQ-XXXX)
depth_requirement_quantification:
reference_value: "根据需求复杂度调整场景深度:简单×3/中等×5/复杂×7"
minimum: "至少构建3层场景树(主路径+分支+异常)"
categories: ['Development','Requirements']
error_recovery_guidance:
on_failure: "场景树遗漏异常路径时回退到需求解构补充"
retry_behavior: "补全异常需求后重新构建场景树"
---
> **⚠️ 安全警告**:本技能的示例可能涉及订单号、支付金额、截图、身份证、手机号等敏感数据。
> 实际使用时请勿粘贴真实生产数据、客户信息或财务凭证;测试前应脱敏/掩码处理。
> 本技能仅在 workspace/ 输出评估文件,不持久化、不外传、不跨会话复用。
# 场景树构建
## 核心原则
用树结构组织测试场景,确保覆盖完整、层次清晰。
## 场景数量要求(参考值)
**关键指标**:根据项目复杂度调整
| 复杂度 | 倍数 | 示例(显性5条) |
|--------|------|----------------|
| 简单项目 | ×3 | 场景15个 |
| 中等项目 | ×5 | 场景25个 |
| 复杂项目 | ×7 | 场景35个 |
**复杂度判断标准**:
- 简单:单模块、低风险、无并发
- 中等:多模块、中风险、少量并发
- 复杂:跨模块、高风险、高并发
## 场景树结构
```text
根节点:功能模块
├─ 主路径(Happy Path) → 数量:需求数量 × 1
│ ├─ 场景1:正常流程1
│ ├─ 场景2:正常流程2
│ └─ ...
├─ 分支路径(Alternative Path) → 数量:需求数量 × 2
│ ├─ 场景A:分支条件1
│ ├─ 场景B:分支条件2
│ └─ ...
├─ 异常路径(Exception Path) → 数量:需求数量 × 1.5
│ ├─ 场景X:异常情况1
│ ├─ 场景Y:异常情况2
│ └─ ...
└─ 数据流(Data Flow) → 数量:需求数量 × 0.5
├─ 场景α:数据创建
├─ 场景β:数据流转
└─ ...
```
## 场景类型覆盖清单
### 主路径场景
- [ ] 核心业务流程是否覆盖?
- [ ] 正常用户操作路径是否覆盖?
- [ ] 主要功能点是否覆盖?
### 分支路径场景
- [ ] 不同用户角色是否覆盖?
- [ ] 不同业务规则是否覆盖?
- [ ] 不同配置选项是否覆盖?
- [ ] 不同数据状态是否覆盖?
- [ ] 不同环境条件是否覆盖?
### 异常路径场景
- [ ] 输入异常是否覆盖?(空值/超长/格式错误)
- [ ] 状态异常是否覆盖?(非法状态转换)
- [ ] 网络异常是否覆盖?(断网/超时/延迟)
- [ ] 依赖异常是否覆盖?(第三方服务故障)
- [ ] 并发异常是否覆盖?(数据冲突/资源竞争)
- [ ] 资源异常是否覆盖?(内存不足/磁盘满)
### 数据流场景
- [ ] 数据创建是否覆盖?
- [ ] 数据读取是否覆盖?
- [ ] 数据更新是否覆盖?
- [ ] 数据删除是否覆盖?
- [ ] 数据同步是否覆盖?
- [ ] 数据一致性是否覆盖?
```text
## 构建方法
### 第1步:识别主路径
**问**:用户从开始到结束,最正常的操作路径是什么?
```
主路径识别:
1. 用户起点:用户从哪里开始?
2. 核心步骤:必须执行的步骤有哪些?
3. 用户终点:用户在哪里结束?
4. 成功标志:怎么算完成?
示例(电商下单):
用户浏览商品 → 加入购物车 → 选择地址 → 选择支付 → 确认支付 → 支付成功 → 生成订单
```text
### 第2步:识别分支路径
**问**:在主路径的每一步,有什么条件分支?
```
分支识别方法:
1. 条件判断:if-else条件是什么?
2. 用户选择:用户有哪些选择?
3. 状态分支:不同状态走不同路径?
4. 配置分支:不同配置走不同路径?
示例(电商下单):
- 选择地址:有地址/无地址/新增地址
- 选择支付:微信支付/支付宝/银行卡
- 使用优惠券:有/无/过期
```text
### 第3步:识别异常路径
**问**:在每个步骤,可能出什么问题?怎么恢复?
```
异常识别方法:
1. 输入异常:用户输入错误
2. 系统异常:系统故障
3. 网络异常:网络问题
4. 依赖异常:第三方服务问题
5. 并发异常:并发操作问题
示例(电商下单):
- 加入购物车:库存不足
- 选择地址:地址不存在
- 支付:支付失败
- 支付:网络中断
```text
### 第4步:识别数据流
**问**:数据在模块间怎么流转?在哪创建/更新/删除?
```
数据流识别:
1. 数据创建:在哪里创建数据?
2. 数据读取:在哪里读取数据?
3. 数据更新:在哪里更新数据?
4. 数据删除:在哪里删除数据?
5. 数据一致性:数据在各模块间是否一致?
示例(电商下单):
- 订单数据:创建订单 → 更新库存 → 生成支付单
- 用户数据:读取地址 → 使用优惠券 → 更新积分
```text
## 场景描述模板
每个场景应包含:
```markdown
### 场景SC-001:[场景名称]
**路径类型**:主路径/分支路径/异常路径/数据流
**前置条件**:
- 条件1
- 条件2
**触发条件**:
- 用户操作/系统事件
**操作步骤**:
1. 步骤1
2. 步骤2
3. 步骤3
**预期结果**:
- 结果1
- 结果2
**数据变化**:
- 数据A:[变化描述]
- 数据B:[变化描述]
**风险等级**:高/中/低
```text
## 场景树示例(登录功能)
```
登录功能
├─ 主路径
│ ├─ SC-001:用户名密码登录成功
│ └─ SC-002:手机号验证码登录成功
├─ 分支路径
│ ├─ SC-003:记住我功能
│ ├─ SC-004:第三方登录
│ └─ SC-005:多因素认证
├─ 异常路径
│ ├─ SC-006:用户名不存在
│ ├─ SC-007:密码错误
│ ├─ SC-008:验证码过期
│ ├─ SC-009:账号被锁定
│ └─ SC-010:网络异常
└─ 数据流
├─ SC-011:登录状态存储
├─ SC-012:Token生成与刷新
└─ SC-013:登录日志记录
```text
## 场景类型速查表
| 场景类型 | 覆盖目标 | 数量参考 | 典型遗漏 |
|---------|---------|---------|---------|
| 主路径 | 核心业务流程完整性 | 需求数 ×1 | 多角色主路径不同 |
| 分支路径 | 条件分支、用户选择 | 需求数 ×2 | 配置项组合、权限分支 |
| 异常路径 | 各类异常处理 | 需求数 ×1.5 | 第三方超时、并发冲突 |
| 数据流 | 数据CRUD + 一致性 | 需求数 ×0.5 | 跨模块数据同步 |
## 输出示例
**场景:测试电商下单流程**
→ 主路径:浏览→加入购物车→下单→支付→完成
→ 分支路径:未登录下单→跳转登录→继续支付
→ 异常路径:下单时库存不足、支付超时、并发下单
→ 数据流:商品信息→订单数据→支付记录→物流信息
**场景:测试用户注册**
→ 主路径:填写信息→验证手机→注册成功
→ 分支路径:手机号已注册→提示已有账号
→ 异常路径:验证码错误、手机号格式不对、网络中断
## 检查清单
场景树构建完成后检查:
- [ ] 主路径是否完整?
- [ ] 分支路径是否覆盖所有条件?
- [ ] 异常路径是否考虑全面?
- [ ] 数据流是否清晰?
- [ ] 场景间是否有重叠?
- [ ] 场景优先级是否标注?
## 场景漂移与处理
场景树常见失控现象及对策:
| 漂移类型 | 表现 | 处理方式 |
|---------|------|---------|
| 场景爆炸 | 分支路径衍生过多,树过于庞大 | 按优先级裁剪,只保留P0-P1分支 |
| 路径遗漏 | 某条分支的关键场景被跳过 | 用需求解构表逐一对照检查 |
| 深度失衡 | 某条分支挖很深,其他分支太浅 | 设定每条分支最大深度 = 主路径深度 ×1.5 |
| 层次混乱 | 主路径里混了异常路径的节点 | 强制按四类重新归类,不允许混排 |
don't have the plugin yet? install it then click "run inline in claude" again.