概述
在软件开发 过程中,不可避免的会出现软件Bug。在商业软件中,一个小小的Bug可能造成数以百万计的损失,那么在其他高科领域呢?
按照时间顺序,著名网络媒体Wired News列出了到目前为止10个最严重的软件bug。
1962年7月28日, Mariner I空间探测器事件。
Mariner 1航空软件的bug导致火箭在发射时偏离了其的预期轨道。任务控制器在大西洋上空将整个火箭摧毁。在对这起事故进行调查中发现,使用铅笔撰写下的一个公式被不正确的录入到计算机代码中,直接导致计算机错误的计算了火箭的运行轨道。
1982年—苏联的石油管道事件。
根 据CIA(美国中央情报局)的陈述,为其工作的间谍们在苏联购买的用来控制跨西伯利亚石油管道的加拿大计算机系统中种下了一个bug。当时是苏联通过秘密 购买或者偷窃美国的敏感技术来获取到了该系统。据说CIA发现了这个存在bug的程序,决定对可以通过苏联人检查的设备做一个让苏联人事与愿违的破坏,使 得该设备一旦运行起来将会失败。该事件的结果据说在历史上造成了最大的非原子破坏。
1985-1987年间 -- Therac-25医疗加速器事件。
一 个放射疗法的设备故障造成了在几个医疗设备中发出了致命的射线。Therac-25是一个在以前设计的基础上改进的治疗设备,该设备可能会发出两种射线: 或者是一个低功耗的电子束或者是X射线。Therac-25'的X射线是通过猛烈的高能电子束撞击到一块位于电子枪和患者之间的金属目标而产生的。第二项 改进是对于更旧的Therac-20'电动保险联动装置采取软件控制的方式代替,做这项改进是因为软件被认为更加可靠。
然而工程师所不知道 的是20和25型号都是建立在有一个没有经过正规培训的程序员所开发的操作系统上的。由于这个不易察觉的叫做"race condition,"的bug,一个快速的打字员很可能会很偶然的配置Therac-25从而导致电子束将会在高能模式下启动。但是强烈的X射线偏移了 目标。最后直接导致了五名患者死亡;其余患者受到了严重伤害。
1988年--伯克莱UNIX操作系统finger守护进程缓冲器溢出事件。
第 一个网络蠕虫,莫里斯蠕虫利用缓冲器溢出在一天之内感染了2000到6000台计算机,起因是一个标准输入输出库函数gets(),原来设计为从网上获取 一段文本,但遗憾的是,gets()函数没有规定输入文本的长度。过长的文本导致蠕虫入侵任何接入的计算机。程序员们试图用工作码来取代gets()函数 的功能,但是他们拒绝从C语言的标准输入输出库中删除它,直到今天还保留着。
1988-1996年间--Kerberos随机数字发生器事件。
Kerberos安全系统的作者忽略了产生真正的程序随机码时使用恰当的种子,导致长达八年依赖Kerberos验证的计算机可被轻易入侵。如果漏洞不被利用,就一直不会被发现。
1990年1月15日,AT&T网络瘫痪。
利 用一个新发布软件的bug可以控制AT&T #4ESS远程交换机,在邻近计算机之间发送信息引起大型计算机瘫痪,机器恢复时发送信息又导致邻近计算机当机。 一天纽约的一台交换机当机并且重启,引起它邻近交换机瘫痪,由此及彼,一个连着一个,很快,114台交换机每六秒当机重启一次,六万人九小时内不能打长途 电话。当时的解决方式:工程师重装了软件以前的版本。
1993年--Intel奔腾浮点指数除法事件。
一 个硅片上的错误导致Intel高性能奔腾芯片在一段范围内计算浮点指数除法时发生错误。例如4195835.0/3145727.0产生的是 1.33374而不是1.33382,产生了0.006偏差。尽管该bug仅仅影响了几个用户,然而他却成了整个公众的噩梦。估计流通中的三百万到五百万 的芯片存在着这样的缺陷,起初Intel仅仅为那些能够证明他们确实有高精度计算需求的用户提供了取代奔腾的芯片。最后,Intel公司只好妥协为任何投 诉的人提供替代芯片。该bug给Intel最终造成了4亿7千5百万损失。
1995/1996年–致命的ping命令。
由 于缺乏对IP段组装代码的完整性检查和错误的执行使得有可能通过从互联网的任意位置发送恶意的”ping”数据报而攻击多个操作系统。大部分受明显影响的 是运行Windwos的计算机,当他们接受到数据报后,他们就会死锁同时显示所谓的“蓝屏死机”。但是攻击同时也影响很多Macintosh和Unix系 统。
1996年6月4号—501航天飞机爆炸事件。
对于Ariane 4火箭的工作代码在Ariane 5中被重新使用,但是Ariane 5更高速的运算引擎在火箭航天计算机中的算法程序中触发了一个bug。该错误存在于将64位浮点数转换为16位带符号整数的程序中。更快的运算引擎导致了 Ariane 5中的64位数据要比Ariane 4中更长,直接诱发了溢出条件,最终导致了航天计算机的崩溃。
首先501航天飞机的备份计算机崩溃,然后0.05秒之后,主计算机也崩溃了。这些计算机崩溃直接导致了火箭的主要处理器使火箭的运算引擎过载,同时导致火箭在发射40秒后解体破碎。
2000年11月 –巴拿马市国家肿瘤中心事件。
在这一系列事故中,由一家美国公司—Multidata Systems International所开发的治疗软件错误的计算了对于正处于放射治疗中的病人所应该使用的合适剂量。
Multidata的软件允许放射治疗师利用计算机屏幕的一个叫做"blocks"的金属装置来保护健康组织以免受射线的伤害。但是该软件仅仅允许治疗师使用4个屏蔽块,但是巴拿马的医生希望用5块来保护。
医 生发现他们可以通过将所有的屏蔽块画成一个在中间有孔的大块来欺骗该软件。然而医生们没有意识到的是Multidata软件在这种配置中根据该空画法的不 同给出了不同的答案:如果该孔是在一个方向绘制的,则给出正确的计算出的剂量,如果是在另外不同的方向绘制的,软件就会推荐出要比必须需要暴露的射线的两 倍剂量。至少有8个病人在这次事故中丧生,同时接受了过多剂量放射的20个病人产生了严重的健康问题。被要求手动两次检查计算机的计算的医生被以谋杀罪起 诉。
记住这些软件Bug,吸取其中的教训,如果你正在从事一个高科技领域的软件开发,千万要留心潜伏在身边的Bug。
感谢软件定制开发
最后
以上就是自然哈密瓜为你收集整理的软件史上的10大bug的全部内容,希望文章能够帮你解决软件史上的10大bug所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复