译者 | 薛命灯
软件错误监控系统每天让成千上万的开发者免受软件错误所带来的尴尬,有些错误甚至是灾难性的。如果没有了这些自动化错误监控系统会怎样?我们收集了多年来发生的一些重大的灾难事件,看看因为软件错误导致的混乱会给这个世界带来多大的麻烦!
1美国宇航局的火星气候探测器
1999 年,美国宇航局搭载火星气候探测器的飞航在执行任务时在太空中“走丢”了。这个问题困扰了工程师一段时间,后来发现,这是因为工程团队里的一名合同工忘记将一个英制单位转换为公制单位。这一令人尴尬的失误导致这艘造价 1.25 亿美元的飞船在接近火星表面并尝试稳定轨道时因为轨道过低,出现了致命的后果。飞行指挥员认为,探测器在坠入火星大气层后,相关的压力导致通讯中断,然后在围绕太阳的轨道上高速飞行。
参考链接:
https://sma.nasa.gov/docs/default-source/safety-messages/safetymessage-2009-08-01-themarsclimateorbitermishap.pdf?sfvrsn=eaa1ef8_4
2阿丽亚娜 5
欧洲最新的无人卫星发射火箭阿丽亚娜 5 重用了其前身阿丽亚娜 4 的系统软件,不幸的是,阿丽亚娜 5 的发动机遭遇了在之前的型 中没有被发现的漏洞。在火箭首次发射后的三十六秒内,出现了多次计算机故障,工程师不得不按下自毁按钮。原来,系统软件试图将一个 64 位的数字塞入 16 位的空间。由此产生的溢出导致主计算机和备份计算机(它们都运行完全相同的软件系统)崩溃。
阿丽亚娜 5 的开发成本接近 80 亿美元,并携带了造价 5 亿美元的卫星,然而它们都化为灰烬。
参考链接:
https://en.wikipedia.org/wiki/Cluster_(spacecraft)
3EDS 儿童支持系统
2004 年,EDS 向英国儿童支持机构(CSA)推出了一个高度复杂的 IT 系统。与此同时,工作和养老金部门(DWP)决定对整个机构进行重组。然而,因为两个软件系统完全不兼容,引入了一些不可逆转的错误。系统超额支付了 190 万人,少支付了另外 70 万人,有 70 亿美元的子女抚养费未收回,积压了 239,000 个案件,有 36,000 个新案件“滞留”在系统中,迄今为止已经花费了英国纳税人超过 10 亿美元。
参考链接:
http://news.bbc.co.uk/2/hi/uk_news/3235394.stm
4苏联天然气管道爆炸
苏联天然气管道因为太过复杂,需要使用先进的自动化控制软件。美国中央情 局(CIA)在得知苏联企图窃取控制系统的计划后,与设计管道控制软件的加拿大公司合作,让设计师故意在程序中留下缺陷。1982 年 6 月,苏联窃取了该软件后,其中留下的缺陷导致苏联部分天然气管道发生大规模爆炸,造成地球历史上最大的非核爆炸。
参考链接:
https://en.wikipedia.org/wiki/At_the_Abyss
5Mt. GOX 的比特币攻击
尽管大约有 200,000 个比特币被收回,但 Mark Karpeles(前首席执行官)承认,“我们的系统存在缺陷,导致我们的部分比特币消失了”。
参考链接:
https://en.wikipedia.org/wiki/Mt._Gox#Bankruptcy;_stolen_bitcoin_(2014%E2%80%93ongoing)
6希思罗机场 5 航站楼
在接下来的 10 天里,约有 42,000 个行李被滞留机场,超过 500 个航班被取消。
参考链接:
http://news.bbc.co.uk/2/hi/uk_news/7314816.stm
7水手 1 航天器
1962 年,在一次飞跃金星的任务中,这艘飞船几乎没能飞出卡纳维拉尔角。当时的一个软件编码错误导致火箭偏离轨道,几乎要撞回地球。惊慌失措的美国宇航局地面工程师发出了自毁指令。审查委员会后来确定,由于计算机指令中少了一个连字符,导致可能向航天器发送错误的制导信 。据 道,当时火箭的造价超过 1800 万美元。
参考链接:
https://www.edn.com/electronics-blogs/edn-moments/4418667/Mariner-1-destroyed-due-to-code-error–July-22–1962
8莫里斯蠕虫病毒
1988 年,康奈尔大学的一名学生开发了一个程序,他说这个程序本来应该是无害的,但由于编码错误导致数千台计算机崩溃。这是互联 上第一次出现广泛的蠕虫攻击。这名学生(Robert Tappan Morris)被判犯有黑客入侵罪,并被判处罚款 10,000 美元。莫里斯的律师在审判中称,这个程序实际上有助于提高计算机安全性。
清理这个烂摊子的成本可能高达 1 亿美元。有趣的是,莫里斯还和其他人共同创立了创业孵化器 Y Combinator,现在是麻省理工学院的教授。带有蠕虫源代码的磁盘现在被波士顿大学收藏。
参考链接:
https://en.wikipedia.org/wiki/Morris_worm
9爱国者导弹
有时候,软件故障导致的成本无法用美元来衡量。1991 年 2 月,美国在沙特阿拉伯部署的爱国者导弹防御系统未能侦测到对一处军营的攻击。一份政府 告指出,一个软件问题导致跟踪计算不准确,系统运行的时间越长,这个问题就越严重。事发当天,该系统已经运行了 100 多个小时,而且不准确度严重到足以导致系统在错误的地方侦测入侵导弹。袭击造成 28 名美国士兵丧生。但其实在攻击事件发生之前,军方已经修复了这个问题,只是修复后的软件是在发生攻击事件的第二天才到达基地。
参考链接:
http://www-users.math.umn.edu/~arnold//disasters/patriot.html
10奔腾处理器的浮点数除法错误
1994 年,一位数学教授发现并公布了英特尔颇受欢迎的奔腾处理器的一个缺陷,英特尔的反应是根据用户的要求更换芯片,只要用户能够证明他们确实受到了影响。英特尔表示,由缺陷引起的错误很少会发生,绝大多数用户都不会注意到。但愤怒的用户要求英特尔为所有提出要求的人更换芯片,英特尔同意了。这一事件让英特尔公司损失了 4.75 亿美元。
参考链接:
https://en.wikipedia.org/wiki/Pentium_FDIV_bug
11股票做市商的 4.4 亿美元错误
美国最大的股票做市商之一在 30 分钟内因软件故障导致 4.4 亿美元损失。该软件故障导致市场出现大量意外交易,这家公司股价在两天内下跌 75%。据 道,这家公司的交易算法导致近 150 支不同股票的不稳定交易,使它们陷入痉挛状态。
参考链接:
http://www.businessweek.com/articles/2012-08-02/knight-shows-how-to-lose-440-million-in-30-minutes
12NOA-19 卫星
虽然这不是软件错误,但在 2003 年 9 月 6 日,这颗卫星在洛克希德·马丁太空系统工厂严重受损。当技术人员试图将卫星转向水平位置时,卫星却倒在了地上。事故调查表明,这是因为整个设施缺乏程序性纪律。事实证明,虽然翻转操作有被记录下来,但一名技术人员拆除了 24 个用于固定适配器板的螺栓,这个操作没有被记录下来。技术人员随后使用推车转动卫星,但在试图移动卫星之前,没有按照程序规定检查螺栓。
修复卫星花费了 1.35 亿美元。
参考链接:
https://www.nasa.gov/pdf/65776main_noaa_np_mishap.pdf
https://raygun.com/blog/costly-software-errors-history/
Q 言 Q 语时刻
你还知道哪些因为程序故障导致的重大事故吗?
请在评论区为大家科普~
没出问题的时候,你永远也不知道代码质量有多重要。范学雷老师教你如何写出安全高效的代码,请关注极客时间《代码精进之路》专栏。
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!