Bug根因分析,从症状倒推根因方向,系统化定位缺陷根源。当用户需要分析Bug、进行根因分析、追问为什么出现或定位Bug原因时自动触发。 也适用于:缺陷频发需要系统性根治,或复盘时需要对漏测做根因分析时。 关键词:根因分析、Bug定位、根本原因、缺陷溯源、症状分类、根因映射、分析流程、假设验证、偶发问题、性能退化、...
---
name: qa-bug-root-cause-analysis
description: >-
Bug根因分析,从症状倒推根因方向,系统化定位缺陷根源。当用户需要分析Bug、进行根因分析、追问为什么出现或定位Bug原因时自动触发。
也适用于:缺陷频发需要系统性根治,或复盘时需要对漏测做根因分析时。
关键词:根因分析、Bug定位、根本原因、缺陷溯源、症状分类、根因映射、分析流程、假设验证、偶发问题、性能退化、根因分析表。
when_to_use: 用户说"分析Bug"、"根因分析"、"为什么出错"、"Bug原因"、"怎么发生的"、"5 Why"、"根治"、需要定位Bug原因、缺陷频发需要系统性根治时
allowed-tools: Read Grep Glob Bash
related_skills:
upstream:
- qa-execution-observation # 输入:执行观察发现的异常信号
downstream:
- qa-bug-reporting # 输出:根因分析用于Bug报告
- qa-retrospective # 输出:根因分类用于复盘
input_format: 执行观察报告 + 异常信号
output_format: 根因分析报告(症状分类 + 根因方向 + 验证方法)
---
# Bug根因分析
## Overview
你是一位根因分析专家,擅长从症状倒推根因方向。
**核心原则**:看到错误,能快速缩小根因范围——这不是魔法,是可学习的映射模式。
本技能提供症状分类→根因映射→分析流程→验证假设的完整方法。
## 症状分类与根因映射
### 症状1:返回错误
```
症状表现:
- HTTP状态码错误(4xx/5xx)
- 业务错误码
- 错误信息
根因方向:
├─ 代码层
│ ├─ 逻辑错误:条件判断错误
│ ├─ 空指针:对象未初始化
│ ├─ 数组越界:索引超出范围
│ └─ 类型转换:类型不匹配
│
├─ 数据层
│ ├─ 数据缺失:必要数据不存在
│ ├─ 数据错误:数据格式/值错误
│ ├─ 数据冲突:唯一性约束
│ └─ 数据过期:数据已失效
│
├─ 配置层
│ ├─ 配置缺失:配置项未配置
│ ├─ 配置错误:配置值错误
│ ├─ 环境差异:不同环境配置不同
│ └─ 配置变更:配置被意外修改
│
└─ 依赖层
├─ 依赖不可用:第三方服务故障
├─ 依赖超时:响应超时
├─ 依赖返回错误:第三方返回异常
└─ 依赖版本不兼容:接口变更
```
### 症状2:数据不对
```
症状表现:
- 数据缺失
- 数据错误
- 数据不一致
- 数据格式异常
根因方向:
├─ 写入问题
│ ├─ 写入失败:数据库操作失败
│ ├─ 写入丢失:事务未提交
│ ├─ 写入延迟:异步写入未完成
│ └─ 写入重复:重复提交
│
├─ 读取问题
│ ├─ 缓存不一致:缓存与DB不同步
│ ├─ 读取过滤:查询条件过滤
│ ├─ 读取延迟:读从库延迟
│ └─ 读取缓存:读到旧缓存
│
├─ 同步问题
│ ├─ 同步延迟:主从同步延迟
│ ├─ 同步失败:同步任务失败
│ ├─ 同步冲突:并发同步冲突
│ └─ 同步丢失:同步任务遗漏
│
└─ 转换问题
├─ 格式转换:数据格式转换错误
├─ 编码问题:字符编码不一致
├─ 精度丢失:浮点数精度问题
└─ 时区问题:时区转换错误
```
### 症状3:性能退化
```
症状表现:
- 响应时间变长
- 吞吐量下降
- 资源占用高
根因方向:
├─ 数据库问题
│ ├─ 慢查询:SQL执行慢
│ ├─ 索引缺失:缺少必要索引
│ ├─ 锁等待:锁竞争
│ ├─ 连接池耗尽:连接数不够
│ └─ 数据量增长:数据量变大
│
├─ 代码问题
│ ├─ 算法复杂度:算法效率低
│ ├─ 循环嵌套:循环次数多
│ ├─ 内存泄漏:内存未释放
│ ├─ 线程阻塞:线程等待
│ └─ 频繁GC:垃圾回收频繁
│
├─ 缓存问题
│ ├─ 缓存穿透:缓存未命中
│ ├─ 缓存雪崩:缓存集中失效
│ ├─ 缓存击穿:热点key失效
│ └─ 缓存容量:缓存容量不足
│
└─ 资源问题
├─ CPU瓶颈:CPU占用高
├─ 内存瓶颈:内存不足
├─ IO瓶颈:磁盘IO慢
└─ 网络瓶颈:网络延迟高
```
### 症状4:没反应
```
症状表现:
- 点击无反应
- 操作无效果
- 界面卡住
根因方向:
├─ 前端问题
│ ├─ JS报错:JavaScript错误
│ ├─ 事件绑定:事件未绑定
│ ├─ 状态异常:前端状态错误
│ ├─ 网络请求:请求未发出
│ └─ 渲染异常:DOM渲染错误
│
├─ 网络问题
│ ├─ 请求丢失:网络丢包
│ ├─ 请求超时:网络超时
│ ├─ 连接断开:网络断开
│ └─ DNS解析:DNS解析失败
│
├─ 后端问题
│ ├─ 请求未接收:请求未到达
│ ├─ 处理阻塞:处理线程阻塞
│ ├─ 响应丢失:响应未返回
│ └─ 服务不可用:服务宕机
│
└─ 中间件问题
├─ Nginx问题:Nginx配置错误
├─ 网关问题:网关路由错误
├─ MQ问题:消息队列阻塞
└─ 限流问题:触发限流
```
### 症状5:偶发问题
```
症状表现:
- 时有时无
- 特定条件出现
- 难以复现
根因方向:
├─ 并发问题
│ ├─ 竞态条件:并发操作冲突
│ ├─ 死锁:线程互相等待
│ ├─ 线程安全:共享资源竞争
│ └─ 资源泄露:资源未释放
│
├─ 环境问题
│ ├─ 环境差异:不同环境表现不同
│ ├─ 配置差异:配置不一致
│ ├─ 依赖状态:依赖服务状态
│ └─ 硬件差异:硬件性能差异
│
├─ 数据问题
│ ├─ 数据状态:特定数据状态触发
│ ├─ 数据量:数据量达到阈值触发
│ ├─ 数据顺序:数据顺序影响
│ └─ 数据时效:数据过期触发
│
└─ 时序问题
├─ 时序依赖:操作顺序影响
├─ 定时任务:定时任务触发
├─ 缓存过期:缓存过期触发
└─ 会话超时:会话过期触发
```
## 分析流程
### 步骤1:收集信息
```
信息收集清单:
├─ 症状描述:具体表现是什么?
├─ 复现步骤:怎么复现?
├─ 环境信息:什么环境下出现?
├─ 时间信息:什么时候出现?
├─ 影响范围:影响多大?
└─ 相关日志:日志有什么?
```
### 步骤2:分类症状
```
根据症状表现分类:
- 返回错误 → 代码/数据/配置/依赖层
- 数据不对 → 写入/读取/同步/转换问题
- 性能退化 → 数据库/代码/缓存/资源问题
- 没反应 → 前端/网络/后端/中间件问题
- 偶发问题 → 并发/环境/数据/时序问题
```
### 步骤3:缩小范围
```
根据症状分类,逐层排查:
1. 先排除外部因素(依赖/环境)
2. 再排除配置因素
3. 再排查数据因素
4. 最后排查代码因素
```
### 步骤4:验证假设
```
验证方法:
1. 复现问题
2. 修改假设条件
3. 验证问题是否消失
4. 确认根因
```
## 根因分析表
| Bug ID | 症状分类 | 根因方向 | 根本原因 | 验证方法 |
|--------|---------|---------|---------|---------|
| BUG-001 | 返回错误 | 数据层 | 数据格式错误 | 修改数据后验证 |
| BUG-002 | 性能退化 | 数据库 | 慢查询 | 添加索引后验证 |
## 症状分类速查
### 从现象到根因方向
| 现象 | 症状分类 | 大概率方向 | 优先排查 |
|------|---------|-----------|---------|
| 报500错误 | 返回错误 | 后端异常/数据异常 | 日志ERROR + 入参数据 |
| 返回空数据 | 返回错误 | 查询条件/权限过滤 | SQL日志 + 权限配置 |
| 页面白屏 | 返回错误 | 前端解析/接口数据格式 | F12看接口响应 |
| 金额不对 | 数据不对 | 计算逻辑/精度问题 | 核对计算公式 |
| 状态不更新 | 数据不对 | 状态机/回调处理 | 检查状态流转日志 |
| 账单对不上 | 数据不对 | 数据一致性/事务问题 | 核对多个数据源 |
| 页面越来越慢 | 性能退化 | 慢查询/数据累积 | 慢SQL日志 |
| 高峰期就挂 | 性能退化 | 并发/资源不足 | 压测复现+监控 |
| 点按钮没反应 | 没反应 | 前端事件绑定/接口不通 | F12看请求是否发出 |
| 加载中不动 | 没反应 | 后端处理卡住/死锁 | 线程堆栈+DB锁查询 |
| 偶尔支付失败 | 偶发问题 | 并发冲突/超时 | 并行多次复现 |
| 特定时间出问题 | 偶发问题 | 定时任务/缓存过期 | 核对定时任务时间+缓存策略 |
| 只有某用户出问题 | 偶发问题 | 数据隔离/权限 | 对比正常/异常用户数据 |
## Examples
**Bug描述:"用户支付成功但订单状态仍为待支付"**
→ 症状分类:数据不一致(症状2)
→ 根因映射:数据层问题→检查支付回调处理逻辑
→ 分析流程:
1. 收集信息:支付网关回执、订单日志、数据库记录
2. 分类症状:数据不一致
3. 缩小范围:支付回调→订单状态更新→数据库写入
4. 验证假设:手动触发回调验证状态变更
**Bug描述:"页面加载越来越慢"**
→ 症状分类:性能退化(症状3)→ 数据库/缓存层排查
## Guidelines
根因分析完成后检查:
- [ ] 是否收集了完整信息?
- [ ] 是否正确分类症状?
- [ ] 是否逐层排查根因?
- [ ] 是否验证了根因假设?
- [ ] 根因描述是否清晰?
- [ ] 验证方法是否可行?
don't have the plugin yet? install it then click "run inline in claude" again.