如何快速定位现网 BUG

简介: 如何快速定位现网 BUG

“幸福的家庭都是相似的,不幸的家庭却各有各的不幸”,托尔斯泰的名言。在 BUG 定位这件事情上,其实也有类似的现象:”菜鸟们的紧张无措都是相似的,老鸟们的方法却各有各的不同”。

年年过大促,年年定位现网故障。果不其然,今年 9.9 大促再次踩坑。看到组内的新手们排查问题的手足无措,也就有了这篇文档。本文的目的不在于穷举所有排查问题的手段,而在于帮助新手们避雷。

蜻蜓点水

当遇到无法轻易复现,并且缺少有用的日志辅助缺陷排查的时候,新手们的一般会选择去看代码。然而,最关键的点来了,他们并不是在真正看代码,他们只是印证自己”脑海中记忆的代码” 跟代码库里的是一致的。最常见的一个结果,就是得到一个 “代码是这样的呀、没有问题呀” 的结论。看代码过程是轻浮的,是跳跃的。

然而,计算机执行的并不是你脑海中的代码,而是实实在在的代码。计算机是严谨的、会一丝不苟的,从调用入口开始,一行不漏的逐行执行完毕,然后返回结果。任何细微的差异都有可能执行的是路径完全不同,而 BUG 就是因为走了跟预期不一样的执行路径。

看代码需要一行一行的看,一层层调用的展开。无论是自己编写的代码,还是开源仓库的代码,还是服务框架的代码,任何一行代码都不应该被跳过。

脚踏实地,而不是蜻蜓点水。

轻视数据

大型复杂的系统产生了繁多的数据。不同的团队成员看到数据(事实)之后,会加入自己对数据的判断(观点),呈现出二次加工之后的数据。最终可能得到是一份夹杂了观点和事实的数据。

当你听到蹄子声响时,你可以说听到了马蹄声,但实际上也可能是斑马蹄的声音,虽然概率很低。

同时,就会出现以下类型的数据误用:

  • 不对数据数据进行汇总、分析,基于片面的数据进行假设
  • 基于不可靠的数据,导致错误的假设

基于错误的、片面的数据,进行假设,最终大概率是徒劳而无功。

靠谱的使用数据的方式,应当是团队成员把相关的数据汇聚,根据业务架构形成 “马赛克调查墙”,基于 “马赛克调查墙” 确定方向,再进行假设。

轻视逻辑

很多很多人一上来就开始猜答案,基于他们认定的答案来提问,这是特别坏的一个习惯,因为这样找问题几乎就只能凭运气了。

“分治”(Divide & Conquer)是一种非常通用的解决方案。在一个多层系统中,整套系统需要多层组件共同协作完成。最好的办法通常是从系统的一端开始,逐个检查每一个组件,直到系统最底层。这样的策略非常适用于数据处理流水线。在大型系统中,逐个检查可能太慢了,可以采用对分法(bisection)将系统分为两部分,确认问题所在再重复进行。逐项排除、层层递进,才能系统的剥离出真相。

还有一个常见的逻辑误区“相关性 = 因果性”。然而,相关性并不代表因果性。比如:

统计表明,游泳死亡人数越高,冰糕卖得越多,也就是游泳死亡人数和冰糕售出量之间呈正相关性,我们可以由此得出结论说吃冰糕就会增加游泳死亡风险吗?显然不可以!这两个事件显然都仅仅是夏天到了气温升高了所导致的,吃不吃冰糕跟游泳死亡风险根本没有任何因果关系。

同理,跟 BUG 相关的异常数据,不代表数据的操作导致了 BUG。为了论证因果关系,需要更加严密的实证来说明。按照相关理论复现所有 BUG 表现的特性,且只表现这些特征。

本文作者 : cyningsun

本文地址https://www.cyningsun.com/09-13-2021/how-to-locate-bug-in-production-env.html

版权声明 :本博客所有文章除特别声明外,均采用 CC BY-NC-ND 3.0 CN 许可协议。转载请注明出处!

目录
相关文章
|
8月前
|
前端开发 测试技术
你发现一个bug,如何定位这个是前端还是后端缺陷?建议收藏
你发现一个bug,如何定位这个是前端还是后端缺陷?建议收藏
353 0
|
存储 运维 监控
如何定位线上问题?
「你是怎么定位线上问题的?」 这个面试题我在两年社招的时候遇到过,前几天面试也遇到了。我觉得我每一次都答得中规中矩,今天来梳理复盘下,下次又被问到的时候希望可以答得更好。
110 0
|
SQL 网络协议 Java
最佳实践—如何快速定位及解决数据库问题
本文介绍了数据库发生故障时的快速判断方法和解决办法。
120 0
|
SQL BI 数据库
记一次bug分析定位过程
其实很多时候,我们在测试过程中发现的很多bug,并不是由于开发人员编码能力不好,或者粗心大意造成,而是在项目开发实施过程中,没有遵循一些必要的项目流程,没有充分认识到质量的重要性;如果能做好这方面的工作,关注流程,而不是喊口号,人人重视质量,人人为结果负责,那么,会有很多问题、不只是bug,都将“被扼杀在摇篮里”......
记一次bug分析定位过程
|
安全 Windows
计算机系统更新出现你的设备中缺少重要的安全和质量修复
计算机系统更新出现你的设备中缺少重要的安全和质量修复
555 1
计算机系统更新出现你的设备中缺少重要的安全和质量修复
|
运维 监控 数据可视化
不改一行代码定位线上性能问题
性能问题。 大致的现象是: 我们提供出去的一个 OpenAPI 反应时快时慢,快的时候几十毫秒,慢的时候几秒钟才响应。
|
SQL 存储 NoSQL
系统的性能瓶颈,排查该从哪些方面入手,如何定位?
系统的性能瓶颈,排查该从哪些方面入手,如何定位?
系统的性能瓶颈,排查该从哪些方面入手,如何定位?
|
存储 缓存 Java
手机遇到性能BUG怎么解?
目前手机SOC的性能越来越少,很多程序员在终端程序的开发过程中也不太注意性能方面的优化,尤其是不注意对齐和分支优化,但是这两种问题一旦出现所引发的问题,是非常非常隐蔽难查的,不过好在项目中用到了移动端的性能排查神器友盟U-APM工具的支持下,最终几个问题得到了圆满解决。 我们先来看对齐的问题,对齐在没有并发竞争的情况下不会有什么问题,编译器一般都会帮助程序员按照CPU字长进行对齐,但这在终端多线程同时工作的情况下可能会隐藏着巨大的性能问题,在多线程并发的情况下,即使没有共享变量,也可能会造成伪共享,由于具体的代码涉密,因此我们来看以下抽象后的代码。
手机遇到性能BUG怎么解?
|
Arthas 弹性计算 监控
走完线上 BUG 定位最后一公里
因为线上线下环境隔离的问题,线上的输入很多时候难以在日常环境中构造,定位 bug 效率低下。是否有简单快捷的办法呢?
3771 1
走完线上 BUG 定位最后一公里
|
运维 监控 数据可视化
软件质量核武器-LIUDAO系统定位&目标
一、导读 年前在测试交流的微信群里面,看到了关于美军的“宙斯盾”系统的文章(https://mp.weixin.qq.com/s/_0nALr8rJ1Tq5pIFEZAikA),引发了一系列的讨论和思考,同时结合自己在测试十年的文章(https://www.atatech.org/articles/58031)最后一段,关于自己做测试的一个小小梦想,就是想要那样超酷的指挥
249 0