13 | Bug的时间属性:周期特点与非规律性
胡峰
该思维导图由 AI 生成,仅供参考
在上一篇文章中,我说明了“技术性 Bug 可以从很多维度分类,而我则习惯于从 Bug 出现的 ‘时空’ 特征角度来分类”。并且我也已讲解了 Bug 的空间维度特征:程序对运行环境的依赖、反应及应对。
接下来我再继续分解 Bug 的时间维度特征。
Bug 有了时间属性,Bug 的出现就是一个概率性问题了,它体现出如下特征。
周期特点
周期特点,是一定频率出现的 Bug 的特征。
这类 Bug 因为会周期性地复现,相对还是容易捕捉和解决。比较典型的呈现此类特征的 Bug 一般是资源泄漏问题。比如,Java 程序员都不陌生的 OutOfMemory 错误,就属于内存泄漏问题,而且一定会周期性地出现。
好多年前,我才刚参加工作不久,就碰到这么一个周期性出现的 Bug。但它的特殊之处在于,出现 Bug 的程序已经稳定运行了十多年了,突然某天开始就崩溃(进程 Crash)了。而程序的原作者,早已不知去向,十多年下来想必也已换了好几代程序员来维护了。
一开始项目组内经验老到的高工认为也许这只是一个意外事件,毕竟这个程序已经稳定运行了十来年了,而且检查了一遍程序编译后的二进制文件,更新时间都还停留在那遥远的十多年前。所以,我们先把程序重启起来让业务恢复,重启后的程序又恢复了平稳运行,但只是安稳了这么一天,第二天上班没多久,进程又莫名地崩溃了,我们再次重启,但没多久后就又崩溃了。这下没人再怀疑这是意外了,肯定有 Bug。
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
本文深入探讨了Bug的时间属性,特别是周期特点和非规律性。周期性Bug相对容易捕捉和解决,而非规律性Bug的出现更具挑战性。作者分享了在工作初期遇到的一个周期性Bug,以及在处理非规律性Bug时的经验和挑战。文章以生动的案例和详细的技术分析,展现了解决Bug的过程和技术手段,为读者提供了深入了解和思考的机会。同时,文章也指出了解决非规律性Bug的局限性,强调了采用工具如代码Profiler等性能剖析工具的重要性。海森堡 Bug的出现场景通常与分布式的并发编程有关,其无法进行观测,也就是在生产环境下不经意出现,费尽心力却无法重现的Bug。文章提到了海森堡 Bug 的出现场景和解决方法,强调了预防与埋伏的重要性。总的来说,文章内容丰富,对读者快速了解Bug的时间属性和解决方法提供了有益的参考。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《程序员进阶攻略》,新⼈⾸单¥68
《程序员进阶攻略》,新⼈⾸单¥68
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(13)
- 最新
- 精选
- sunny看得我惊心动魄,以前老是害怕bug出现,现在有点小期待;看看热闹,长长见识,毕竟还在初级,
作者回复: 哈哈,心情平复没
2018-08-319 - liangjf少壮不遇bug,老大徒伤悲
作者回复: 哈哈哈😄
2018-09-074 - 二木🐶第一类bug的查找案例实在是不敢恭维,重要的正式环境这样去不断重启应用,加日志等方式简直就是不可能的
作者回复: 以前写代码都是直接在正式环境编译运行,相当野😂
2018-10-063 - 艾尔欧唯伊最近刚入职组里遇到的问题。。四个应用加一层设备,然后还有硬件资源紧张,合在一起出现的bug表象,基本就是各种展示数据不对。。。 有些提了缺陷,但是问题环境都没了。。复现都很难。。。真不容易。。
作者回复: 是的,现实多是带着一身 Bug 勇敢的上线了😊
2018-08-313 - 心在飞我现在就遇到个海森堡bug, 客户现场出现过一次,在自己的服务器环境里一切正常,只能通过code review的方式做一些防御性编程,结果发现算法是老美算法专家92年写的!乱飞的point、各种业务处理算法,瞬间我就不想看了!
作者回复: 太古老的代码,理解起来没了上下文,全靠想象力了,多半要重写了吧
2018-08-313 - 无聊夫斯基需要这么多的逻辑判断的50ms的程序你是如何优化成3ms的?
作者回复: 因为代码写得实在太糟糕了,可优化空间太大😄
2018-08-3123 - CatTalk生动形象的讲解
作者回复: 😊
2018-08-313 - 香槟之前有遇到一个bug,关于redis序列化和反序列化的。线上有6台服务器,升级了其中一台服务器,内容是增加了调用链监控的程序。升级完先上线看效果。由于机子的aspnet版本需更新,同时更新了内部redis封装的库。前半天运行正常,然后出现部分列表数据不一致的情形。赶紧写了段程序输出值看下。发现值均变为0。看代码是反序列化出值部分。看正常的列表数据,反序列化有值。看库里,发现两者的区别是一种序列化进去有引号,另一种序列化进去没引号。没引号的能在其他5台机子解析,而有引号的只能在升级库中解析。所以定位到了原因。为了顺利上线监控程序,又能平滑升级,选择了调整封装库的序列策略,改为序列成无引号的方式。这才解决不一致的问题。
作者回复: 升级这种基础库,还是要多回归测试,兼容性问题不难,但处理起来很费时间和精力
2019-02-232 - third迟到了。总算解决好学校的事情了。 心得如下 1,bug的时间属性:周期特点和非规律性 2,周期性出现,比如OutOfMemory,内存泄露。 3,非规律性,解决麻烦,采用工具,直接引入代码 Profiler 等性能剖析工具,就可以准确地找到有性能问题的代码段 4,神出鬼没,海森堡 Bug(Heisenbug) 5,bug的解决之道有两种,事前的,事后的。 6,事后,Bug 出现后,捕捉现场并定位解决的 7,事前进行预防和埋伏
作者回复: 不迟😊
2018-09-0122 - 钱目前在优化的一些缓存刷新的定时任务,就属于过几年可能会出Bug的代码(因为这代码就是几年前写的,现在出问题了)原因如下 1:缓存刷新的方式是先删后插 2:我厂的统一规定不允许数据物理删除 3:经久年月,无效数据越来越多,原来缓存刷新没问题,后来就有了空窗期,在空窗期内访问缓存就会出现问题了2018-09-013
收起评论