【bug传奇】12个bug个个成经典,最后一个毁了一个帝国

1996年6月4日,阿丽亚娜5型运载火箭的首次发射点火后,火箭开始偏离路线,最终被逼引爆自毁,整个过程只有短短30秒。
经挖掘真相为:
阿丽亚娜5型运载火箭基于前一代4型火箭开发。在4型火箭系统中,对一个水平速率的测量值使用了16位的变量及内存,因为在4型火箭系统中反复验证过,这一值不会超过16位的变量,而5型火箭的开发人员简单复制了这部分程序,而没有对新火箭进行数值的验证,结果发生了致命的数值溢出。发射后这个64位带小数点的变量被转换成16位不带小数点的变量,引发了一系列的错误,从而影响了火箭上所有的计算机和硬件,瘫痪了整个系统,因而不得不选择自毁,4亿美金变成一个巨大的烟花。
点评:
“复制、粘贴”可谓程序猿“搬砖”神技。但搬完砖,不要天真认为“以前没有出bug,现在也不会有bug”,否则可能丢的是老板的钱,要的是用的人的命!

9、宰赫兰导弹事件,毫秒的误差

在1991年2月的第一次海湾战争中,一枚伊拉克发射的飞毛腿导弹准确击中美国在沙地阿拉伯的宰赫兰基地,当场炸死28个美国士兵,炸伤100多人,造成美军海湾战争中唯一一次伤亡超过百人的损失。
经挖掘真相为:
当时,负责防卫该基地的爱国者反导弹系统已经连续工作了100个小时,每工作一个小时,系统内的时钟会有一个微小的毫秒级延迟,这就是这个失效悲剧的根源。爱国者反导弹系统的时钟寄存器设计为24位,因而时间的精度也只限于24位的精度。在长时间的工作后,这个微小的精度误差被渐渐放大。在工作了100小时后,系统时间的延迟是三分之一秒。侯赛因飞毛腿导弹空速达4.2马赫(每秒1.5公里),这个“微不足道的”0.33秒相当于大约600米的误差。在宰赫兰导弹事件中,雷达在空中发现了导弹,但是由于时钟误差没有能够准确地跟踪它,因此基地的反导弹并没有发射。
点评:
这个bug太(gan)糟(de)糕(piao)了(liang)!数据精度导致的bug屡见不鲜,这个事件充分告诉我们,招聘国防系统的程序猿一定谨慎招以前做过应用软件的,数据精度处理往往惨不忍睹。

10、差点引发第三次世界大战的bug

前苏联政府的报警系统错误的报出美国发射了五枚弹道导弹,幸运的是苏联值勤员推断如果真的是美国政府袭击他们的话,发射的导弹肯定不止5枚,所以他推断这只是一场虚惊。
经挖掘真相为:
前苏联软件的一个Bug,因阳光反射云顶,给出了错误的报警信息。
点评:
感谢苏联值勤员睿智的推断能力,否则碰到一个“缺心眼”,想想小心肝就一颤一颤的。极端场景测试,狠狠地说明了它的存在感。

11、一串代码,毁掉了一个空中帝国

一串代码毁掉了一个空中帝国!157名遇难者,令世人痛心!波音公司的一夜崩溃(波音股市两日暴跌11.15%,市值蒸发210亿美金)。

经挖掘真相为:
737系列都是延续的737机型设计。尽管737MAX这些机型出现后对设计提出更多需求,但波音不想重新设计,打补丁应对。后果就是飞机气动变得不稳定,有抬头倾向,容易导致失速。面对50年前的气动布局,波音同样不想重新写飞控,而是采用打补丁去防止失速。只要机翼上的空速管探测到失速,就自动俯冲加速。这个补丁叫做MCAS。

一串代码,毁掉了一个空中帝国

历史上,大飞机打补丁本来挺常见的,但神奇的地方就在于,美国把737max的补丁交给了开挂的阿三,重点来了:
①空速管本来有两个,一边一个。但神奇的阿三程序员逻辑很神,两边空速管的数据没有交叉检查,只要有一个空速管故障,飞机就发疯一样的俯冲。
②阿三上场之前,飞行员只要拉杆,就自动取消俯冲。但是把在737MAX上,阿三程序员把自动俯冲的逻辑改了,必须手动在触摸屏上关掉一个设置才能取消俯冲。但是MCAS一旦解除,恢复不易,严重影响后续的正常飞行。
③软件猜度飞行员的意图和正确表达依然处在自动模式的功能。如果飞行员发现异常,就只能和俯冲的飞机拼体力。拉不起来,就只能高速撞地球。
点评:
此后,阿三的程序梦毁了。不妨想想这些场景是否似曾相识?软件打了一个又一个补丁后,最后变得补不胜补。如果补丁不堪烦扰,是否可以考虑推倒重来了?

12、坐等,求一个世界级传奇bug(后面求来答案再补充)

上一页12下一页


留言