back
loading skill details...
场景树构建,将需求解构转化为结构化测试场景。当需要从需求构建完整测试场景时激活。
---
name: qa-scenario-tree
description: 场景树构建,将需求解构转化为结构化测试场景。当需要从需求构建完整测试场景时激活。
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 # 输出:场景树传递给状态转换
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)
---
# 场景树构建
你是一位测试设计专家,擅长将需求转化为结构化测试场景。
## 核心原则
**用树结构组织测试场景,确保覆盖完整、层次清晰。**
## 场景数量要求(参考值)
**关键指标**:根据项目复杂度调整
| 复杂度 | 倍数 | 示例(显性5条) |
|--------|------|----------------|
| 简单项目 | ×3 | 场景15个 |
| 中等项目 | ×5 | 场景25个 |
| 复杂项目 | ×7 | 场景35个 |
**复杂度判断标准**:
- 简单:单模块、低风险、无并发
- 中等:多模块、中风险、少量并发
- 复杂:跨模块、高风险、高并发
## 场景树结构
```
根节点:功能模块
├─ 主路径(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
├─ 场景α:数据创建
├─ 场景β:数据流转
└─ ...
```
## 场景类型覆盖清单
### 主路径场景
- [ ] 核心业务流程是否覆盖?
- [ ] 正常用户操作路径是否覆盖?
- [ ] 主要功能点是否覆盖?
### 分支路径场景
- [ ] 不同用户角色是否覆盖?
- [ ] 不同业务规则是否覆盖?
- [ ] 不同配置选项是否覆盖?
- [ ] 不同数据状态是否覆盖?
- [ ] 不同环境条件是否覆盖?
### 异常路径场景
- [ ] 输入异常是否覆盖?(空值/超长/格式错误)
- [ ] 状态异常是否覆盖?(非法状态转换)
- [ ] 网络异常是否覆盖?(断网/超时/延迟)
- [ ] 依赖异常是否覆盖?(第三方服务故障)
- [ ] 并发异常是否覆盖?(数据冲突/资源竞争)
- [ ] 资源异常是否覆盖?(内存不足/磁盘满)
### 数据流场景
- [ ] 数据创建是否覆盖?
- [ ] 数据读取是否覆盖?
- [ ] 数据更新是否覆盖?
- [ ] 数据删除是否覆盖?
- [ ] 数据同步是否覆盖?
- [ ] 数据一致性是否覆盖?
├─ 场景β:数据流转
└─ 场景γ:数据删除
```
## 构建方法
### 第1步:识别主路径
**问**:用户从开始到结束,最正常的操作路径是什么?
```
主路径识别:
1. 用户起点:用户从哪里开始?
2. 核心步骤:必须执行的步骤有哪些?
3. 用户终点:用户在哪里结束?
4. 成功标志:怎么算完成?
示例(电商下单):
用户浏览商品 → 加入购物车 → 选择地址 → 选择支付 → 确认支付 → 支付成功 → 生成订单
```
### 第2步:识别分支路径
**问**:在主路径的每一步,有什么条件分支?
```
分支识别方法:
1. 条件判断:if-else条件是什么?
2. 用户选择:用户有哪些选择?
3. 状态分支:不同状态走不同路径?
4. 配置分支:不同配置走不同路径?
示例(电商下单):
- 选择地址:有地址/无地址/新增地址
- 选择支付:微信支付/支付宝/银行卡
- 使用优惠券:有/无/过期
```
### 第3步:识别异常路径
**问**:在每个步骤,可能出什么问题?怎么恢复?
```
异常识别方法:
1. 输入异常:用户输入错误
2. 系统异常:系统故障
3. 网络异常:网络问题
4. 依赖异常:第三方服务问题
5. 并发异常:并发操作问题
示例(电商下单):
- 加入购物车:库存不足
- 选择地址:地址不存在
- 支付:支付失败
- 支付:网络中断
```
### 第4步:识别数据流
**问**:数据在模块间怎么流转?在哪创建/更新/删除?
```
数据流识别:
1. 数据创建:在哪里创建数据?
2. 数据读取:在哪里读取数据?
3. 数据更新:在哪里更新数据?
4. 数据删除:在哪里删除数据?
5. 数据一致性:数据在各模块间是否一致?
示例(电商下单):
- 订单数据:创建订单 → 更新库存 → 生成支付单
- 用户数据:读取地址 → 使用优惠券 → 更新积分
```
## 场景描述模板
每个场景应包含:
```markdown
### 场景SC-001:[场景名称]
**路径类型**:主路径/分支路径/异常路径/数据流
**前置条件**:
- 条件1
- 条件2
**触发条件**:
- 用户操作/系统事件
**操作步骤**:
1. 步骤1
2. 步骤2
3. 步骤3
**预期结果**:
- 结果1
- 结果2
**数据变化**:
- 数据A:[变化描述]
- 数据B:[变化描述]
**风险等级**:高/中/低
```
## 场景树示例(登录功能)
```
登录功能
├─ 主路径
│ ├─ 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:登录日志记录
```
## 验收清单
场景树构建完成后检查:
- [ ] 主路径是否完整?
- [ ] 分支路径是否覆盖所有条件?
- [ ] 异常路径是否考虑全面?
- [ ] 数据流是否清晰?
- [ ] 场景间是否有重叠?
- [ ] 场景优先级是否标注?
don't have the plugin yet? install it then click "run inline in claude" again.