软件历史上致命Bug

我罗列一下历史上让人们目瞪口呆的Bug,算是给大家普及一下

  1. 千年虫事件

千年虫并不是一种虫子,而是一种电脑系统漏洞。

在1957年,一名工程师在开发COBOL语言时,为了节省存储空间,将4位数的年份只用两位数来存储,比如1970存储为“70”,节省了两个字节的空间。

看上去节省了空间,但当到了2000年时,计算机存储“00”,那么系统就无法识别,到底是“1000”还是“2000”呢?

在2000年以前运行正确的程序,在2000年时出现了错误,导致一些计算结果出现了偏差,这一偏差影响了全球几百万的用户。

由于千年虫作怪,瑞典有超过10万多的网上银行客户无法登录账户,一些网上银行客户进入经常使用的银行服务网页时,却得到提示:“许用权已无效”,网上银行账户还有存款,账号却已失效。

  1. 光大证券“乌龙指”事件

“乌龙指”是指在2013年8月16日11时5分左右,上证综指突涨5.96%,中石油、中石化、工商银行、中国银行等权重股均触及涨停,在这惊魂一刻,巨量订单仅在2秒钟之内发出。

最后经证监会核查,光大证券自营的策略交易系统,包含订单生成系统和订单执行系统两个部分,存在程序调用错误、额度控制失效等设计缺陷,并被连锁触发,导致生成巨量市价委托订单,直接发送至上交所,累计申报买入234亿元,实际成交72.7亿元。

原来交易员使用了“重下”按钮,本应该买入24只股票却被执行为“买入24组ETF一篮子股票”,正是这个缺陷使交易量严重被放大,违背了交易的本意。

该事件最终以光大证券被罚5.2个亿结束。

  1. 1962年的Mariner Bug

航空软件中,一名程序员将公式错误的写入到计算机代码中,导致程序错误的计算了火箭的运行轨道。

这个Bug导致Mariner 1号火箭在发射不久后就偏离了预期的运行轨道,在发射293秒后,任务控制中心就摧毁了火箭。

该Bug使这次发射损失1850万美元。

  1. 1982年苏联石油管道事件

当时苏联从加拿大秘密购买了一个用来控制跨西伯利亚石油管道的计算机系统,据说CIA发现该系统存在Bug,决定对苏联人的设备进行一次事与愿违的破坏,该系统一旦启动将会失败,据说这件事在历史上造成了最大的非原子破坏。

  1. Therac-25医疗加速器事件

1985-1987年,因一个放射疗法的设备故障,造成了几个医疗设备发出了致命的射线。Therac-25是在前人设计的基础上进行改进的医疗设备,该设备可能会发出两种射线: 一种低功耗的电子束或者是X射线。

Therac-25的X射线是通过猛烈的高能电子束撞击到一块位于电子枪和患者之间的金属目标而产生的。第二项改进是对于更旧的Therac-20电动保险联动装置采取软件控制的方式代替,做这项改进是因为软件被认为更加可靠。

然而工程师不知道的是20和25型号都是建立在一个没有经过正规培训的程序员所开发的操作系统上。这个不易察觉的叫做"race condition"的Bug,一个快速的打字员很可能会很偶然的配置Therac-25,从而导致电子束会在高能模式下启动。但是强烈的X射线偏移了目标,最后直接导致了五名患者死亡,其余患者受到了严重伤害。

  1.  AT&T网络瘫痪

1990年1月15日,利用一个新发布的软件Bug,可以控制AT&T #4ESS远程交换机,在邻近计算机之间发送信息引起大型计算机瘫痪,机器恢复时发送信息又导致邻近计算机宕机。 一天纽约的一台交换机宕机并且重启,引起它邻近交换机瘫痪,由此及彼,一个连着一个,114台交换机每六秒宕机重启一次,六万人九小时内不能打长途电话。当时的解决方式:工程师将软件进行退版。

  1. Intel奔腾浮点指数除法事件

1993年,一个硅片上的错误导致Intel高性能奔腾芯片在一段范围内计算浮点指数除法时发生错误。例如4195835.0/3145727.0产生的是1.33374而不是1.33382,产生了0.006偏差。尽管该Bug仅仅只影响几个用户,然而却成了整个公众的噩梦。估计流通中的三百万到五百万的芯片存在着这样的缺陷,起初Intel仅为那些能够证明他们确实有高精度计算需求的用户提供了取代奔腾的芯片。最后,Intel公司只好妥协为任何投诉的人提供替代芯片。该Bug给Intel最终造成了4亿7千5百万损失。

  1.  501航天飞机爆炸事件

1996年6月4日,对于Ariane 4火箭的代码在Ariane 5中被重新使用,但是Ariane 5更高速的运算引擎在火箭航天计算机中的算法程序中触发了一个Bug。该错误产生的原因是:64位浮点数在转换为16位带符号的整数时发生了错误,更快的运算引擎导致了 Ariane 5中的64位数据要比Ariane 4中更长,直接产生了溢出,最终导致了航天计算机的崩溃。

首先是501航天飞机的备份计算机崩溃,然后0.05秒之后,主计算机也崩溃。这些计算机崩溃直接导致了火箭的主要处理器运算引擎过载,造成火箭在发射40秒后解体破碎。

  1. 巴拿马市国家肿瘤中心事件

2000年11月,由一家美国公司—Multidata Systems International所开发的治疗软件,错误的计算了正处于放射治疗中的病人所应该使用的合适剂量。

Multidata的软件允许放射治疗师利用计算机屏幕的一个叫做"blocks"的金属装置来保护健康组织以免受射线的伤害。但是该软件仅仅允许治疗师使用4个屏蔽块,但是巴拿马的医生希望用5块来保护。

医生发现他们可以通过将所有的屏蔽块画成一个在中间有孔的大块来欺骗该软件。然而医生们没有意识到的是Multidata软件在这种配置中根据该空画法的不同,给出了不同的答案:如果该孔是在一个方向绘制的,则给出正确的计算剂量,如果是在另外不同的方向绘制,软件就会推荐出比需要暴露的射线多两倍剂量。至少有8个病人在这次事故中丧生,同时接受了过多剂量放射的20个病人产生了严重的健康问题。被要求手动两次检查计算机的计算的医生被以谋杀罪起诉。

  • 22
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值