【转】史上著名bug

主要收集自:程序调试思想与实践
当时看这本书觉得很有意思,也就直接记录下来了,分享一下

最早的bug应当是mark 2上的那只飞蛾,由于它飞到了继电器上造成了短路。这个飞蛾后来被弄走并且粘在了项目的日志上,oh,很具有历史性的一刻。
1.千年虫
忘了什么年代看的一部电视剧了,大概叫做<<力克千年虫>>,所谓的千年虫问题源于远见的缺乏。上世纪的人们在软件中普遍采用两位数表示年份,但是到世纪末问题便出现了,这样的软件仍在大量运行中,如何区分2008和1908变出现了问题,当2000年年份突然从99变到00时会出现何种问题呢?

2.Therac-25可能是近年来损失最大的一个bug。
在1985-1987年间,有6个病人被它治疗过,其中三人死亡,死于过量治疗。该系统是由加拿大自动能源公司开发的放射治疗仪器。

这是因为该仪器工作在光子或电子两种模式,光子的默认能量水平是25meV。当操作员选择光子模式,之后发现错误,再修改,但是由于模块中的一个逻辑错误,使得系统在模式能量在初始输入8秒钟内无法发现编辑的变化,于是会导致输送过剂量的射线。

在该机器的生命里出现了两个bug:
1.一个逻辑错误,使得操作员修改了机器状态后,并没有升级机器参数
2.当一个8位的参数溢出变为0时,安全检查便被跳过了

如果采用必要的硬件防护措施,或许就不会造成那么坏的影响了
所以不要对你的软件总是充满信心,当有问题时,说明是真的有问题,不是别的。。。

3.intel浮点处理器bug
1993年intel推出了奔腾芯片,后来Nicely教授用它来寻找素数三元偶(连续三个奇数都是素数),由于他还采用了另一套验证程序,发现运算结果出现了问题,经过半年的努力,最终将错误定位的intel的浮点运算单元。并报告给了intel,起初intel极力维护,并声称该bug出现的概率为90亿分之一。后来一位Stanford大学的教授指出他可以将这个bug每30毫秒触发一次,而且看起来比较平常的一个运算4.999999/14.999999结果将是0.00000407。后来ibm也发表报告,质疑intel的宣称。

导致最后intel不得不将其所有的有问题的芯片召回。这个bug是很隐秘的,如果不是大规模的科学运算,估计很难被发现。该bug的原因在于一个脚本错误忽略了查找表中的一些项。

有一点可以注意到,实际上不止你的代码可能有bug,即便是调试器,编译器,操作系统乃至硬件都可能存在bug

4.鱼雷
早期鱼雷设计时,为了防止发射后破坏本方潜艇,被设计成这样"当发生180度转向时自毁"。一天一个潜艇上尉决定发射一颗鱼雷,但是不幸的是,鱼雷被卡在发射舱。于是上尉决定让潜艇返港以进行修理,当潜艇自身进行180度转弯时,那颗鱼雷暴了。。。

5.Ariane操作数错误
这是一个将64位浮点数转换为16位的有符号整数的时候,因为一个未被解决的异常而引起的事故。

Ariane5火箭在它1996年6月4日首次发射的40秒之后爆炸了。对飞行数据分析显示,在爆炸之前一切正常包括天气。最终错误的来源于重用自Ariane4的模块,可见不合适的重用会是一个灾难的开始。

而它之所以通过了测试,是因为测试人员在飞行软件的功能模拟测试中并没有加入实际的惯性制导系统。

人们一直以为当软件没有表现出错误的时候,就可以认为是正确的。实际上在软件被验证正确之前,我们应当把它看成错误的。这就是不同的软件测试哲学。

6.火星气象卫星

这是美国火星探测计划的一部分,该计划准备在未来的10年内,平均每年发射一个飞行器。头两个飞行器在1996年发射,火星气象卫星在1999年1月3日发射,但是在它和"火星极地登陆者"到达火星不久之后便消失了。这两个飞行器大约化了NASA3亿三千万美元,原因在于某个数值本应该使用公制单位牛顿,但是却被错误的使用了磅。

7.AT&T电话中断
1990年1月15日,AT&T发生了全国范围内持续9个小时的电话中断。原因就在于switch-case里的break语言并非按照期望的地方跳转。

8.缓冲区
在c中,很容易出现的bug,c的字符串表示法以及scanf,strcpy等函数极易出现该错误,唯一的方法就是使用更为安全的strncpy等函数。
比如ms的outlook,1999年的“ILOVEYOU”病毒都是这方面的例子。
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值