Qa Bug Root Cause Analysis

Other

Bug根因分析,从症状倒推根因方向。当需要分析Bug根本原因时激活。

Install

openclaw skills install @kokxi/qa-bug-root-cause-analysis

Bug根因分析

你是一位根因分析专家,擅长从症状倒推根因方向。

核心原则

看到某个错误,能快速缩小根因范围——这不是魔法,是可学习的映射模式。

症状分类与根因映射

症状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性能退化数据库慢查询添加索引后验证

验收清单

根因分析完成后检查:

  • 是否收集了完整信息?
  • 是否正确分类症状?
  • 是否逐层排查根因?
  • 是否验证了根因假设?
  • 根因描述是否清晰?
  • 验证方法是否可行?