在我博客上专门写过问题分析和解决的文章, 也发过知乎, 可以先阅读下:
问题分析和解决: https://zhuanlan.zhihu.com/p/26126472
今天重点还是想谈下问题分析和解决中的问题定位问题, 很多时候过来的问题一紧急, 我们就越容易慌乱, 胡子眉毛一把抓, 完全找不到具体方向, 导致既浪费了时间又延误了问题的解决也就是说, 越是紧急的问题来了, 你越应该是保持足够的清醒, 这是你开始分析和解决问题的关键
1. 场景还原或复现: 做技术开发的很容易明白这个道理, 一个问题或 bug 来了, 最关键的是能够重现出来, 只有问题能够重现你才容易去 Debug 这个问题如果一个问题不能复现, 有时候遇到, 有时候又不出现, 那么这个时候你解决问题的思路首先应该是如何复现问题? 即需要具备什么样的场景, 什么样的环境下这个问题才能够复现出现, 先复现出问题是解决这类问题的第一步
2. 了解过程 举例来说一个程序不是你写的, 但是这个时候程序运行出现故障了, 那么你的应对思路首先究竟应该是了解这段程序运行过程是如何的? 然后再去考虑问题究竟出在哪里也就是说一个问题出来不能按你原来自己开发经验来臆断这个问题究竟出在哪, 而是应该去了解清楚当前本身的程序运行过程, 再来分析这个问题出在哪里你用你已有的经验积累去应对不是你产生的过程输出, 这个是巨大的经验主义错误
3. 确定边界, 确定边界是我们查找和定位问题的一个相当关键的内容, 而这里面最常用的就是 二分法 , 通过不断的二分不断的缩小范围一段程序可以先定位是数据库的问题还是应用层的问题, 到了应用层又可以进一步定位是前端的问题还是后端逻辑层的问题, 只有这样你才能够快速的找到具体的问题产生点一个过程涉及到甲乙双方协同, 当出现问题的时候本来是乙方的问题, 你却一直在甲方的活动过程里面去找, 这就是最大化的浪费时间和精力这也是我们常说的先定位清楚问题在哪里比解决问题更加重要, 当你定位问题的范围越小, 这个问题就越逼近解决的状态
4. 定位准确度 + 搜索的深度 这个在我前面问题分析和解决的时候没专门拿出来讨论过, 也就是说当我们将问题定位到一个分支的时候, 我们进入到这个问题解决分支的深度究竟应该如何? 是不是搞了很久问题也没有解决掉就应该及时折返, 去寻找其它可能解决问题的分支? 而这里面最关键的点在于刚开始我们定位这个分支的准确度如果从定性的说法来看, 当我们认为定位准度足够高的时候, 我们就需要足够的在这个分支进行深入; 反之, 当我们定位本身就是一种自我经验假设的时候, 在该分支试错后无法解决的时候要及时折返
来源: http://www.tuicool.com/articles/YbeUVbu