程序员如何做「bug 修复」:不是救火,是系统化
Bug 是程序员生活的一部分。
bug 修得好,下次不会再踩;修不好,一个 bug 引出一堆 bug。
一、Bug 修复的步骤
1. 复现
第一步永远是复现 bug。
能复现才能定位,能定位才能修复。
记录:什么操作、什么环境、什么数据会触发。
2. 定位
找到 bug 的根因,不是表象。
- 看日志
- 看代码
- 断点调试
- 加日志
3. 分析
为什么会出现这个 bug?
- 代码逻辑问题
- 边界条件没处理
- 并发问题
- 数据问题
4. 修复
针对根因修复,不是针对症状修复。
修改后要能覆盖类似的问题。
5. 验证
修复后要验证:
- 原来的 bug 不再出现
- 相关功能没有受影响
- 边界条件也正常
6. 总结
这个 bug 教会了你什么?
- 加测试
- 加文档
- 改进流程
二、Bug 的分类
1. 逻辑错误
代码逻辑本身有问题。
2. 边界问题
空指针、数组越界、除零。
3. 并发问题
竞态条件、死锁。
4. 性能问题
内存泄漏、慢查询。
5. 安全问题
注入、XSS、权限绕过。
三、常见错误
❌ 不复现就修复
"我觉得是这里的问题"——可能是猜的。
❌ 只修表象
- 报错信息:
data is null - 错误修复:
data?.xxx()—— 治标不治本
❌ 不写测试
修完就结束,下次回归不知道有没有影响。
❌ 不总结
踩过的坑,下次还踩。
四、预防 bug 的方法
1. Code Review
代码审查是防止 bug 上线的最后一道关。
2. 自动化测试
单元测试、集成测试、端到端测试。
3. 监控告警
日志、指标、告警——让问题提前暴露。
4. 代码规范
规范的代码减少低级错误。
五、一句话总结
Bug 修复 = 复现 + 定位 + 分析 + 修复 + 验证 + 总结,核心是修复根因而不是症状。