12 | Bug的空间属性:环境依赖与过敏反应
胡峰
该思维导图由 AI 生成,仅供参考
从今天开始,咱们专栏进入 “程序之术” 中关于写代码的一个你可能非常熟悉,却也常苦恼的小主题:Bug。
写程序的路上,会有一个长期伴随你的 “同伴”:Bug,它就像程序里的寄生虫。不过,Bug 最早真的是一只虫子。
1947 年,哈佛大学的计算机哈佛二代(Harvard Mark II)突然停止了运行,程序员在电路板编号为 70 的中继器触点旁发现了一只飞蛾。然后把飞蛾贴在了计算机维护日志上,并写下了首个发现 Bug 的实际案例。程序错误从此被称作 Bug。
这只飞蛾也就成了人类历史上的第一个程序 Bug。
回想下,在编程路上你遇到得最多的 Bug 是哪类?我的个人感受是,经常被测试或产品经理要求修改和返工的 Bug。这类 Bug 都来自于对需求理解的误差,其实属于沟通理解问题,我并不将其归类为真正的技术性 Bug。
技术性 Bug 可以从很多维度分类,而我则习惯于从 Bug 出现的 “时空” 特征角度来分类。可划为如下两类:
空间:环境过敏
时间:周期规律
我们就先看看 Bug 的空间维度特征。
环境过敏
环境,即程序运行时的空间与依赖。
程序运行的依赖环境是很复杂的,而且一般没那么可靠,总是可能出现这样或那样的问题。曾经我经历过一次因为运行环境导致的故障案例:一开始系统异常表现出来的现象是,有个功能出现时不时的不可用;不久之后,系统开始报警,不停地接到系统的报警短信。
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
本文通过对程序Bug的起源和分类进行详细阐述,引用医学上的过敏概念,生动形象地阐述了程序在特定环境下产生异常的情况。作者以自身经历为例,详细描述了环境过敏引发的Bug,以及如何应对这类Bug。文章强调了对程序Bug产生原因和解决方法的理解,适合程序员和技术人员阅读。文章内容通俗易懂,有助于提高对Bug问题的认识和解决能力。文章还介绍了应对环境过敏的方法,包括了解环境、收集信息、编写“抗过敏代码”等。总之,本文通过生动的案例和技术概念,帮助读者更好地理解程序Bug的产生原因和解决方法,对技术人员具有一定的指导意义。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《程序员进阶攻略》,新⼈⾸单¥68
《程序员进阶攻略》,新⼈⾸单¥68
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(9)
- 最新
- 精选
- 亚林上联:为系统而生,为框架而死,为debug奋斗一辈子 下联:吃符号的亏,上大小写的当,最后死在需求上!
作者回复: 哈哈哈,还差横批
2018-08-3028 - 钱Bug,会想一下,遇到比较多的基本也是测试测出来的,不过大部分是无害的。最严重还是产品翻译业务需求有误这种危害最大,轻则返工,重则重来。 另外,就是那些没覆盖到的,上线后才发现,电商系统又是核心模块,影响可就大了,分分钟几十万。 空间和时间的划分非常妙,人是三维生物,这两个维度几乎可以划分N多的领域也都贴切。 空间上交互也是容易产生差异和不和谐,与人交互,系统间交互都类似,且交越多越容易产生差异和问题。比如:与数据库交互、与缓存交互、系统间调用、系统间发消息等等。但是不交互是不现实的。
作者回复: 是的,翻译的Bug是最多的,所以在提升技术能力的同时也提升下沟通理解能力,收益更大😄
2018-08-295 - 艾尔欧唯伊不是,是采集硬件设备运行指标的组件。。。客户有大有小,小客户嘛,一台服务器跑一整套软件平台,几十个应用。。我们只是其中一小部分
作者回复: 那估计很多相互干扰的因素呢😓
2018-09-013 - third火车上,一个洞接一个洞,网速有点爆炸。 简略心得 1.我记得曾经看过,bug是被一个非常厉害的女程序员发现的,有兴趣的同学可以搜搜一下 2.我个人对bug的理解和感受是,创造过程中,难免会出现的瑕疵 3.技术性bug 4.技术性bug分为两类 空间:环境过敏 时间:周期规律 5.“程序过敏反应” :“程序将存在问题的环境当作正常处理,从而产生的异常。” 6.应对空间纬度上bug,是理解环境,同时保持检测
作者回复: 火车上还写总结呢,赞👍
2018-08-293 - 逝光无痕其实好多的bug是沟通不明确,翻译出来的问题!
作者回复: 这类占主要部分,不过一般能测试和走查出来
2018-12-062 - 艾尔欧唯伊现在的项目,对内存限制特别大,出现的问题根本不知道,到底是基本配置不满足还是程序优化不够。。。 暴露问题大多有时间属性,还经常没有关键日志。。。定位分析真的想吐血。
作者回复: 硬件嵌入式领域的?
2018-08-312 - 热勇确实,学习了!毕业一年!系统偏向业务!我是不是可以理解成写的大多都是(业务代码)呢?我发现自己的理解能力确实存在较大问题!所以存在很多问题!老师,该如何提升自身沟通理解能力呢?还在摸索学习中…
作者回复: 没有通用的方法,具体情况具体对待,凡事多想一步,多琢磨,多反思
2018-09-201 - Sch0ngJava工作中JVM之上,JVM工作在OS之上,OS工作在硬件之上,硬件工作在物理化学原理之上。 从Java到硬件,都是属于人造的东西,人造的一个特点就是不可靠。 物理化学原理,属于神造的东西,是可靠的。 人造的不可靠不是非黑即白的,而是一个概率事件。 人造的东西不能在设计的时候完全避免bug,只能通过事后测试把问题找出来再解决掉,一般认为所有的测试都通过,就算达标。 经过多年测试验证,产生了一个结果--越是下层越是经历了时间的考验可靠性越高越稳定。 由此可以推出离自己创造的最近一层出问题的概率是最高的。 这与作者“至少必须关心与程序运行直接相关联的那一层环境”是不谋而合的。 软件是一个人造系统,要清醒的认识bug到不能根除的.开发者所做的所有努力都是为了避免bug的发生,努力到成本和收益达到某种均衡为止。 越简单的东西越稳定,所以前面篇章中所说的炫技,对于一个软件来讲无疑是最毒的毒药。2021-02-252
- 戴益波好干,快看不下去了2019-11-19
收起评论