节后第一天上班,正式回归修炼节奏,今天说调试的最后一个话题,有罪假定。
提示 33 “select”没出问题。
这个提示没有这么直白,是select这些看上去不容易出错的地方可能也是错误的原因,用文中的原话解释一下:
如果你“只改变了一个东西”,然后系统就不工作了,那么这个东西就最可能直接或间接地负有责任,不管看起来多么牵强。
这句话就比较好理解,就是当你改了一个东西导致了问题时,改动引起的可能性最大,这时候就要用有罪假设,我们先假设问题是改变带来的,从这个角度出发,去证明是或者不是。
有无数的例子证明了这一个tip的正确性,比如说每周二客户新报的问题,很大概率是我们新发布的版本带入的。即使看上去这个版本没有直接相关的story改动。
拿这个tip也可以继续套我前几篇举的接口问题的例子,周二客户发现的接口问题出在我们这边的概率超过八成(平时发现的类似问题,出在我们这里的概率可能小于五成)。在这种情况下必须要找到确切的事实证据才能够甩锅给对方。
在昨天的事实说话这个原则里,专门提到了一个tip叫不要假设,要证明。表面上看今天这个tip有点反过来了。实际上并不矛盾,假设是查找问题的第一步,找到事实证据是第二步。从一个可能性更大的假设出发找事实证据肯定是一种事半功倍的调试方式。
所以今天这个tips实际上是提供了一个调试的入口,以变化入手,从历史经验来看是一个首先应该查看的点,即使改动的东西有时候看上去应该挺稳定。比如framework的升级,数据库的补丁,一些依赖jar包的升级等等。不过一切的一切还要靠事实来证明。
小结一下,这个tip提醒我们在调试的时候重点关注最近的变化点,首先排除他的嫌疑,是一种快速定位问题的经验之谈。最终还是要回到找到事实来说话。
网友评论