TroubleShooting方法论
程序员的编程时间分布也符合二八原则,20%时间Conding, 80%时间调Debugging. 相比编码水平, TroubleShooting的能力可能更影响效率.
本文旨在把工作中的定位错误的思路整理为文字, 便于后期不断的优化和规范.
0. 写在前面
一般而言,当我们发现程序的运行不符合我们的预期时,我们就会认为有不好的事情在发生。“不符合预期”可严谨的描述为我的程序及其依赖的第三方程序在运行中产生了不是我所预期的结果。此处有三个主体:1)我本人;2)我写的程序;3)依赖的第三方程序。
由此得出三种产生非预期结果的原因:
1)程序运行正确,但是我本人对其运行机制不清楚导致对其结果误判;
2)我自己写的程序逻辑有问题;
3)我依赖的第三方程序有问题;
1. 思维定势
- 问题提问者的说辞不一定是对错误的正确描述, 需要自己去判断
- 问题发生的时间和发现的时间可能差距很大。当前发现的错误有可能新引入的,也有可能是触发了之前粗心留下的彩蛋。
- 在解决问题时,要大胆想象问题空间和小心的求证。
- 任何错误的认定,都会使后面的探索徒劳。如同走迷宫,错误的路径只会让你困在死胡同,最终回到原点。
- 之前类似问题的原因,不一定是本次问题的原因。
2. 通用策略
1 | 1. 重现问题 |
3. 场景策略
- 日常开发场景
1 | 定义: 开发场景为研发人员在着手解决自己书写或他人遗留的代码的情景. |
- 线上运维场景
1 | 定义: 开发场景为研发人员要定位正在线上环境运行的代码的情景. |
- 测试运维场景
1 | 定义: 开发场景为研发人员要定位正在测试环境运行的代码的情景. |
4. 优先定位路径中耗时较短的片段
在日常的定位问题时,二分法有时候不是首选,有时候通过粗略的评估整个调用路径中各个片段定位的耗时,优先挑拣容易定位的片段可能会起到事半功倍的作用。例如:有些片段只需要通过一个简单的命令,例如ping,telnet就可以定位问题出现在上游还是下游。
5. 如何提升
- 规范自己
- 帮助他人