---
name: qa-critical-thinking
description: >-
  当需要挑战已有假设、挖掘隐含约束、发现"所有人都没想过"的测试场景时使用此技能。测试中最常犯的错误是接受了需求文档里的隐含假设——比如"用户一定会有网络"、"输入一定有内容"、"操作顺序一定正确"。用「如果不呢」的深度质疑方式反向思考，暴露那些被默认为"正常"的异常场景。每一个测试场景都应该走一遍"如果这个假设不成立呢"的质疑流程。 触发场景：还有什么、如果...会怎样、逆向思考、你怎么看、这样够吗、质疑、挑战需求、有没有漏、需要怀疑和深度分析时。 Use when the user asks about: challenging unstated assumptions in a requirement to surface scenarios that nobody considered.
license: MIT
allowed-tools: Read Grep Glob
metadata:
  display-name: "Critical Thinking"
  version: "1.8.0"
  when-to-use: "用户说\"还有什么\"、\"如果...会怎样\"、\"逆向思考\"、\"你怎么看\"、\"这样够吗\"、\"质疑\"、\"挑战需求\"、\"有没有漏\"、需要怀疑和深度分析时"
  related-skills: "{\"upstream\":[],\"downstream\":[\"qa-req-deconstruction\",\"qa-scenario-tree\",\"qa-boundary-deep-dive\",\"qa-requirement-review\"]}"
  references: "[\"references/thinking-exercises.md\"]"
  input-format: "{\"required\":[{\"name\":\"需求描述\",\"type\":\"string\",\"description\":\"功能需求的详细描述\"},{\"name\":\"测试用例\",\"type\":\"array\",\"description\":\"待审阅的测试用例列表\"}],\"optional\":[{\"name\":\"业务背景\",\"type\":\"string\",\"description\":\"业务目标和用户角色\"}]}"
  output-format: "{\"traceability\":[\"本技能质疑思维，不产出唯一ID；发现的假设挑战关联到需求ID或场景ID\"],\"structure\":[{\"thinking_gaps\":\"思维盲区清单\"},{\"assumption_challenges\":\"假设挑战列表\"},{\"alternative_scenarios\":\"替代场景建议\"},{\"risk_reevaluation\":\"风险重评估\"}]}"
  error-recovery-guidance: "{\"on_failure\":\"质疑流未能暴露假设时回退到需求解构补充上下文\",\"retry_behavior\":\"补充业务背景后重新质疑\"}"
  categories: "[\"Development\",\"Testing\"]"
  depth-requirement: "{\"reference_value\":\"根据需求复杂度调整质疑深度：简单×3/中等×5/复杂×7\",\"minimum\":\"至少挑战3个隐含假设\"}"
---
> ⚠️ 本技能单独使用效果有限，建议配合完整技能集（12 步工作流）使用。安装：npx skills add Kokxi/qa-test-skills

> **⚠️ 安全警告**：本技能的示例可能涉及订单号、支付金额、截图、身份证、手机号等敏感数据。
> 实际使用时请勿粘贴真实生产数据、客户信息或财务凭证；测试前应脱敏/掩码处理。
> 本技能仅在 workspace/ 输出评估文件，不持久化、不外传、不跨会话复用。

# 测试批判性思维

## 核心原则

对每个"正常"都问"异常呢？"；对每个"确定"都问"假设呢？"
本技能适用于测试用例查漏补缺、需求深度分析和风险评估等需要逆向思考的场景。

## 质疑框架

### 5W1H 质疑法

```text
What（是什么）：
├─ 这个功能是什么？
├─ 这个规则是什么？
├─ 这个约束是什么？
└─ 如果不是这样会怎样？

Why（为什么）：
├─ 为什么要有这个功能？
├─ 为什么要有这个规则？
├─ 为什么是这样实现？
└─ 如果没有这个为什么会怎样？

Who（谁）：
├─ 谁在用这个功能？
├─ 谁负责这个模块？
├─ 谁会影响这个功能？
└─ 如果换一个人会怎样？

When（什么时候）：
├─ 什么时候用这个功能？
├─ 什么时候触发这个规则？
├─ 什么时候会出问题？
└─ 如果换个时间会怎样？

Where（在哪里）：
├─ 在哪里使用这个功能？
├─ 在哪里存储这些数据？
├─ 在哪里会出现问题？
└─ 如果换个地方会怎样？

How（怎么做）：
├─ 怎么实现这个功能？
├─ 怎么触发这个规则？
├─ 怎么处理异常情况？
└─ 如果换个方式会怎样？
```

### 逆向思维

```text
正常 → 异常
├─ 正常输入 → 异常输入（空值、超长、特殊字符）
├─ 正常流程 → 异常流程（中断、失败、超时）
├─ 正常数据 → 异常数据（空、脏、大量）
└─ 正常环境 → 异常环境（断网、高负载、硬件故障）

确定 → 假设
├─ 用户会正常操作 → 用户会误操作
├─ 网络会正常 → 网络会异常
├─ 数据会正确 → 数据会错误
└─ 服务会正常 → 服务会故障

存在 → 不存在
├─ 数据存在 → 数据不存在
├─ 服务可用 → 服务不可用
├─ 权限足够 → 权限不足
└─ 资源充足 → 资源不足
```

### 假设挖掘

```text
常见假设类型：
├─ 用户行为假设
│   ├─ 假设：用户会按预期操作
│   ├─ 反例：用户误操作、恶意操作
│   └─ 追问：用户不按预期操作会怎样？
│
├─ 环境假设
│   ├─ 假设：环境会正常
│   ├─ 反例：网络异常、服务故障
│   └─ 追问：环境异常会怎样？
│
├─ 数据假设
│   ├─ 假设：数据会正确
│   ├─ 反例：数据缺失、数据错误
│   └─ 追问：数据异常会怎样？
│
├─ 时序假设
│   ├─ 假设：操作会按顺序执行
│   ├─ 反例：乱序执行、并发执行
│   └─ 追问：时序异常会怎样？
│
└─ 依赖假设
    ├─ 假设：依赖服务会正常
    ├─ 反例：依赖服务故障
    └─ 追问：依赖异常会怎样？
```

### "那又怎样" 追问法

```text
发现问题 → 那又怎样？
│
├─ 影响一个功能 → 那又怎样？还影响什么？
│   └─ 示例：登录失败 → 那又怎样？→ 无法访问任何功能
│
├─ 影响一个用户 → 那又怎样？还影响谁？
│   └─ 示例：VIP用户无法支付 → 那又怎样？→ 影响收入
│
├─ 影响一个数据 → 那又怎样？还影响什么数据？
│   └─ 示例：订单数据错误 → 那又怎样？→ 影响库存、财务
│
└─ 影响一个系统 → 那又怎样？还影响哪些系统？
    └─ 示例：支付系统故障 → 那又怎样？→ 影响所有交易
```

## 应用场景

**用户说"帮我测试登录功能"**
→ 应用5W1H质疑法：如果用户名不存在？如果密码错误？如果网络中断？
→ 应用逆向思维：正常登录→异常登录（空密码、超长密码、SQL注入）
→ 应用"那又怎样"追问：登录失败→那又怎样？→无法访问任何功能

**用户说"密码长度至少8位"**
→ 应用规则质疑：如果刚好8位？超过100位？全是空格？包含emoji？
→ 挖掘隐含假设：假设用户不会用特殊字符

**用户说"这个功能看起来很简单"**
→ 触发本技能进行深度质疑，挖掘"简单"背后的隐藏风险

## 加载时机

| 什么时候读 | 读哪个 |
|-----------|--------|
| 想不出新的质疑角度时，取练习集找切入点 | [`references/thinking-exercises.md`](references/thinking-exercises.md) |

> `思维练习`的完整内容已下沉至 `references/thinking-exercises.md`，避免每次触发都占用上下文。

## 常见陷阱

### 陷阱1：确认偏误
```text
现象：只找支持自己判断的证据，忽略反例
示例：认为"登录功能很简单"→只检查正常登录→遗漏异常场景
破解：强制列出5个"反例/异常情况"再开始测试
```

### 陷阱2：锚定效应
```text
现象：被第一个信息锚定，忽略其他可能性
示例：听到"用户量1万"→用例按1万设计→实际要考虑100万
破解：先不看任何限制条件，设计理想用例；再把条件加回来过滤
```

### 陷阱3：可得性启发
```text
现象：只测最近出过问题的地方
示例：上次上线是登录模块出Bug→这次死磕登录→忽略了新功能的核心风险
破解：按风险评估矩阵排序，不要凭印象分配测试精力
```

### 陷阱4：乐观偏差
```text
现象：默认事事顺利，低估异常概率
示例："用户一定会按要求操作"→遗漏误操作场景
破解：对每个正常路径追问"如果在这里出错了呢？"
```

### 陷阱5：框架效应
```text
现象：被问题表述方式限制了思考范围
示例："验证删除功能"→只测删除→忽略了恢复/回收站/级联删除
破解：跳出当前模块问"这个功能的上游是什么？下游是什么？"
```

### 陷阱6：沉没成本
```text
现象：已经做了大量用例就停止质疑
示例：写了50条查询用例→觉得"够多了"→遗漏了关键的并发查询场景
破解：用例数量和质量无关，强制问"还有没有极端场景没覆盖？"
```

## 自检清单

批判性思维应用后检查：
- [ ] 是否对每个"应该"都问了"如果不呢？"
- [ ] 是否对每个"正常"都问了"异常呢？"
- [ ] 是否对每个"确定"都问了"假设呢？"
- [ ] 是否挖掘了隐含假设？
- [ ] 是否应用了"那又怎样"追问？
- [ ] 是否覆盖了反向场景？


## 检查清单

- [ ] 隐含假设是否挑战？
- [ ] 证据是否充分？
- [ ] 逻辑是否自洽？
- [ ] 替代解释是否考虑？
- [ ] 结论是否可证伪？
