无论工程师做了多少枯燥的测试工作,无论他们熬了多少不眠之夜在编程,但最终他们得到的是:会导致软件彻底出问题的 bug。你知道吗,由于软件故障(bug),美国经济每年在浪费生产力、返工和实际毁坏上损失了数十亿美元,软件故障背后的常见原因有:
        · 错误的结构定义和底层设计;
        · 脱离大量可靠数据和分析的强制性计划或里程碑日期;
        · 没有考虑和调整需求增长;
        · 整合过量员工去实现不现实的进度压缩;
        · 利益相关者基于直觉或情感的谈判;
        · 沟通不畅、自负以及消极的态度;
   本文列举了一些由软件 Bug 引发重大事故,其结果是大量金钱损失,甚至人员死亡。如果你有任何建议或者其他案例,欢迎提出。

1、英国护照系统(1999年)

英国护照办事处启用了一种新的计算机系统,而这种新系统无法及时向超过 50 万公民发放护照。后来办事处赔偿了数百万,员工也加班为在雨中排队等候护照的人们提供雨伞。
  损失:1400 万美元,故障原因:办事处没有经过适当的测试,没有对员工进行有关新系统的培训,就推出他们的软件。另外,(与新系统同时发布的)新法律要求所有 16 岁以下的儿童在出国旅行时都要拥有一个护照密码。这就导致了护照需求瞬间激增,从而致使新软件系统负载过重。

2、水手一号探测器(1962年)

1962年,发射往金星的水手一号探测器在发射 293 秒后偏离了预定轨道。它的任务在 5 个星期后由成功发射的水手二号完成。
  损失:1900 万美元,故障原因:两个故障:探测器制导天线的硬件故障,还有板载制导系统的软件故障。制导天线并没有达到应有的标准。因此,探测器不得不依靠一个有 Bug 的制导系统。

  一个程序员将某个公式转换成了计算机代码转错了,漏了一个下标。这个下标原本是半径 R 的第 N 次平滑时间导数值。由于缺少数据光滑化处理功能,制导系统把正常速度当成错误处理,并造成了修正不精确,最终探测器偏离航向的。

3、Mydoom 病毒(2004年)
  Mydoom 是一种计算机病毒,于 2004 年 1 月 26 日首次出现。病毒出现第二天,SCO 组织悬赏 25 万美元,以奖励提供病毒作者信息的人。据 MessageLabs 称,当时每十二封电子邮件中就有一封携带这种病毒。

  损失:380 亿美元,故障原因:该病毒能够在操作系统中创建一个后门,让未经授权的用户访问您的个人数据。同时,它可以欺骗邮件,使其源头很难被跟踪。和其他病毒一样,Mydoom 可以搜索电子邮件里的联系人,并将请求发送给所有的搜索引擎。

4、哈特福德体育馆倒塌

1978 年 1 月 18 日,(美国康涅狄格州的)哈特福德市中心体育馆在近 5000 名观众离开后的几个小时内轰然倒塌。其钢网壳组成的屋顶在雪的重压下崩塌。
  损失:7000 万美元 + 当地经济的 2000 万美元损失,故障原因:有很多相互冲突的失败原因,包括设计流程、结构以及编程错误。CAD 程序员假设屋顶支撑结构仅需要面临纯压缩,从而做出错误的设计。

  此外,计算机模型假设所有的顶部弦杆进行了横向支撑,但实际上只有内部框架符合标准。固定荷载被低估了超过 20%。当顶部其中一个支架被大雪意外压弯时,便引发了屋顶其他部分的连锁反应。

5、火星气候探测者号

  火星气候探测者号是由美国宇航局于 1998 年发射的一个空间探测器,用于研究火星的大气层、气候以及表层变化。发射后第 286 天,进入火星轨道时失去了通讯。导航故障让火箭过于靠近火星大气层,从而导致燃烧并解体。
  损失:1.25 亿美元,故障原因:任务失败的主要原因是人为失误。火星气候探测者号上的飞行系统软件使用公制单位牛顿计算推进器动力,而地面人员输入的方向校正量和推进器参数则使用英制单位磅力。这个因计量单位混淆的错误在此后的所有任务中被 NASA 小心地避免。

6、IRS:缺少欺诈检测系统

2006 年,美国国内税收系统(IRS)缺少自动还款欺诈检测系统,无法监测返还申报资金时的潜在欺诈案件,损失了数百万。
  损失:3 亿美元的损失,21 美元修复,故障原因:在 2005 年 1 月,计算机科学公司本应交付电子欺诈系统(EFDS)。然而在 2004 年 10 月,IRS 担心他们的 2100 万个系统将无法按时准备好,这也是为什么他们决定在 2005 年的归档阶段使用旧系统。
  据 IRS 局长 Mark Everson 称,IRS 及其承包商在提高自动还款欺诈检测系统方面管理不足,不可接受。

7、阿丽亚娜 5 型运载火箭

1996 年,阿丽亚娜 5 型运载火箭首次飞行,搭载发射星群航天器(欧洲航天局的四大航天器之一的星座)。然而由于运载火箭无法到达指定轨道,任务以失败告终。

  损失:3.7 亿美元,故障原因:阿丽亚娜5型运载火箭基于前一代4型火箭开发。在4型火箭系统中,对一个水平速率的测量值使用了16位的变量及内存,因为在4型火箭系统中反复验证过,这一值不会超过16位的变量,而5型火箭的开发人员简单复制了这部分程序,而没有对新火箭进行数值的验证,结果发生了致命的数值溢出。因此,飞行器在发射后 37 秒便从原始路径偏移。最终不得不启动了火箭自毁程序。

8、奔腾的长除法

1994 年,英特尔的奔腾微处理器芯片的浮点计算单元出现了一个 Bug。对于精确计算,处理器将返回不正确的十进制值。当时有大概 500 万个缺陷芯片在流通,英特尔最终决定为所有投诉的人更换芯片。这之后,英特尔把他们的故障处理器做成了钥匙链。
  损失:4.75 亿美元 + 品牌名誉受损,故障原因:在奔腾浮点单元的分频器中有一个有缺陷的除法表,在约一千个条目中丢失了五条纪录。然而,这个错误在 90 亿随机浮点小数的除法中仅可能出现一次。例如,将 4195835.0 除以 3145727.0 得出 1.333739068902037589,而不是 1.333820449136241002,有 0.006% 的误差。

9、1987 年的华尔街崩盘

1987 年 10 月 19 日(也被称为黑色星期一),道琼斯工业平均指数(DJIA)下跌了 508 个点,损失了总价值的 22.61%,且标准普尔 500 指数下跌了 20.4%。这是华尔街一天之内见过的最大损失。
  损失:一天 5000 亿美元,故障原因:问题出在交易程序和估价程序。在交易程序中,计算机基于外部输入执行快速股票交易,如相关证券的价格。该交易程序理应实施投资组合保险策略,并试图从事套利。

  1987 年初,美国证券交易委员会针对内幕交易开始了一系列的调查。直到 10 月,投资者决定搬出华尔街。随着人们开始大规模外流,计算机交易程序出现了大量的销售订单至 DOT(订单转送及成交回报系统),于是系统超出负载、市场崩溃以及所有的投资者懵逼了。

10、千禧危机

  千年虫(千年问题)是计算机系统的编码问题,在从 1999年 12 月 31 号过渡到 2000 年 1 月 1 号时,这个错误将在计算机网络和软件中引发一场浩劫。
  损失:5000 亿美元,故障原因:为了节省计算机存储空间,大多数传统软件使用两位数字来存储日期中的年份,例如,用“97”来代表 1997 年。这导致了 2000 年 1 月之后日期相关程序的错误操作。

  此外,有些程序没有考虑到 2000 年是闰年。甚至在 2000 年到来之前,人们都在担心一些软件可能在 1999 年 9 月 9 号(表示为 9/9/99)无法工作,因为早期的开发人员常使用一系列的 9 来表示一段程序代码的结束。

11、癌症治疗与致死性放射治疗

  1985 年到 1987 年期间,Therac-25 医疗放射治疗装置让成百上千的患者暴露在大量过量的辐射之中,少数患者接受了高达预期 100 倍的放射剂量。2000 年,巴拿马城也发生了同样的辐射剂量误差。

  损失:10 余人死亡,20 人重伤,故障原因:基于输入数据的顺序,治疗计划软件计算出并提供双倍剂量的辐射。

12、爱国者导弹

1991 年 2 月第一次海湾战争期间,部署在沙特宰赫兰的美国爱国者导弹系统未能成功追踪和拦截来袭的伊拉克飞毛腿导弹。结果飞毛腿导弹击中美国军营。
  损失:28 名士兵死亡,100 多人受伤,故障原因:时间计算不精确以及计算机算术错误导致了系统故障。从技术角度来讲,这是一个小的截断误差。当时,负责防卫该基地的爱国者反导弹系统已经连续工作了100个小时,每工作一个小时,系统内的时钟会有一个微小的毫秒级延迟,这就是这个失效悲剧的根源。爱国者反导弹系统的时钟寄存器设计为24位,因而时间的精度也只限于24位的精度。在长时间的工作后,这个微小的精度误差被渐渐放大。在工作了100小时后,系统时间的延迟是三分之一秒。

  0.33 秒对常人来说微不足道。但是对一个需要跟踪并摧毁一枚空中飞弹的雷达系统来说,这是灾难性的。飞毛腿导弹空速达4.2马赫(每秒1.5公里),这个”微不足道的”0.33秒相当于大约 600 米的误差。在宰赫兰导弹事件中,雷达在空中发现了导弹,但由于时钟误差没能精确跟踪,反导导弹因而没有发射拦截。

灾难仍在继续
       1、微软客户被控诉盗版
       Windows 团队的有个成员不小心在所有的 Windows 服务器上安装了有 Bug 的非成品的软件。在接下来的 19 个小时内,所有正版 XP 用户都被告知他们在运行盗版软件。
       2、被假释的罪犯
       2011 年,由于计算机程序代码中的一个小错误,约有 450 名暴力罪犯从加利福尼亚州监狱被释放。
       3、一触即发的第三次世界大战
       1983 年 9 月 26 日,苏联的核早期预警系统报告了来自美国发射的导弹。苏联的系统错误地接收到太阳光的反射并将其解读为导弹发射;后来,导弹袭击警告被一名苏联防空部队的军官认定为假警报。这一决定阻止了一场核战争以及数以百万计人们的潜在死亡。
       4、黑暗降临(大面积停电事故)
       2003 年,黑暗在美国的八个州蔓延开来,影响了 5000 万人。该问题的源头是一个竞争条件,这是一个单一操作中的两个独立线程使用同一个代码中元素的结果。
       5、洛杉矶国际机场的航班停飞
       2007 年,美国边境和海关控制网络发送了大量错误数据。这导致洛杉矶整个机场关闭了 8 个小时,在问题解决之前,超过 17000 架飞机不能起飞。这件事的罪魁祸首是一段有 Bug 的嵌入式软件。

6、Bug 葬送了日本 18 亿元的最新卫星

      2016年2月17日,被日本寄予厚望的 X 射线天文卫星“瞳”成功发射升空,但仅仅一个月后,“瞳”与地面的通信出现严重故障,经地面光学望远镜测控发现其运行轨迹出现多块太空碎片。4月28日,日本宇宙航空研究开发机构(JAXA)正式宣布,无法恢复对X射线卫星“瞳”的操控,事故原因经初步调查源自底层软件错误。卫星的控制系统在发现飞行姿态失控时,采取了错误的调整,推进器点火时朝向了错误的反方向,导致自身旋转更加严重,最终彻底失控。

Bug 引发的 18 次重大事故相关推荐

  1. 『转』度百死去飞秋一个BUG引发的血案

    作了一篇文章度百死去飞秋一个BUG引发的血案,昨天,度百死去的美国客户发邮件给我,说我的软件出问题了,我查来查去,发现居然是服务器上一个目录无法删除,一删除就报 cannot read from th ...

  2. 软件 Bug 引发的致命事故,程序员责任何在?| 技术头条

    [CSDN 编者按]2018 年 10 月 29 日,印度尼西亚狮航一架波音 737 MAX 8 从首都雅加达起飞 13 分钟后,在附近海域坠毁,机上 189 人无一幸免. 2019 年 3 月 10 ...

  3. 项目纪实丨MySQL Bug引发客户现场升级失败 万里DBA 6小时攻克难关

    上午10:00 某运营商核心报表平台升级前夕 作为万里数据库的战略合作伙伴,某运营商一直密切关注着国产数据库的发展.其系统中一套基于MySQL8.0.11版本的核心报表平台,近期由于存在安全扫描的漏洞 ...

  4. linux内核3.6版本及以下的bug引发的故障--cpu使用率100%

    现象:          旗舰店运价库cpu使用率100%,load升高,导致后续的请求失败.          重启服务器,cpu.load恢复正常. 触发条件:         (1)linux内 ...

  5. 一个BUG引发的灾难:ORA-00600 [kjmchkiseq:!seq]

    对于打工人可能最痛苦的就是被告知的故障,数据库有监控.告警.每天巡检,自己做了一系列数据库的"安保"工作,本以为可以万无一失,中午在安心的睡觉中,被人告知数据库crash了.当时的 ...

  6. 一个bug引发的血案(大爆炸)

    据传,在冷战时期,CIA曾成功向前苏联"输出"一个有设计缺陷的控制软件,该软件用来控制天然气主管道.(KGB从一家加拿大公司窃取该软件.)那个植入的Bug最终引发了1982年的西伯 ...

  7. Java线上问题排障:Linux内核bug引发JVM死锁导致线程假死

    Java本质上还是离不开操作系统,一来Java源码是用C/C++实现的,二来java进程还是需要依附于操作系统和硬件资源,有时候一些问题是操作系统级别导致的,下面的整个事件是源自一则真实的线上案例. ...

  8. Python脚本BUG引发学界震动,影响有多大?

    作者 | beyondma 编辑 | Jane 来源 | CSDN博客 近日一篇"A guide to small-molecule structure assignment through ...

  9. 一个JDK线程池BUG引发的GC机制思考

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 作者:空无 来源:https://urlify.cn/63QrYv ...

  10. 查看redis缓存大小_一个 bug 引发了服务器崩溃,对应 redis 的 key 回收原理你清楚了吗?...

    1 背景 项目中使用了 redis 做旁路缓存.读请求到来时,有以下操作:1.检查缓存,有则返回2.没有则读取数据库,将结果回写到缓存中. 写请求到来时,有以下操作:1.更新数据库 2.更新缓存(实际 ...

最新文章

  1. 这里有最全的k8s初学者指南!!!
  2. android打开项目更换版本,android1.6项目,换成其他包的方法,及修改默认启动虚拟机的版本...
  3. Java8新特性Stream
  4. 新浪微博,请砍掉90%的功能
  5. django restful 请求_Django编写RESTful API(二):请求和响应
  6. spring自定义标签实现
  7. idea @Autowired 注入爆红(无法注入)
  8. 阿里云ESC上的Ubuntu图形界面的安装
  9. 教大家多个域名绑定一个空间的解决办法,原创,自己已经测试过了,完全可以绕过杀毒软件,以及空间商.
  10. 字节跳动入局全网搜索;思科回应中国区裁员;IntelliJ IDEA 新版发布! | 极客头条...
  11. 中国老工业基地吉林对外贸易重回历史高水平
  12. 学生选课系统代码--分析2需求分析
  13. android app 检测是否开启了开发者模式
  14. 计算机视觉项目实战-基于特征点匹配的图像拼接
  15. python图像处理:核磁共振图像(3D)的缩放
  16. 你们现在都用什么软件画原型?
  17. 使用Taro小程序框架开发一个学习、刷题、论坛、聊天交流的微信小程序
  18. ABC161 E - Yutori
  19. 如何让soso百科通过
  20. 字典树 —— 字符串分析算法

热门文章

  1. 特朗普启动美国AI国家计划,人工智能角逐再添新变化!
  2. 2022-2027年中国服装辅料行业市场全景评估及发展战略规划报告
  3. 深度学习Tir-Hi3559A使用unbuntu系统的烧写步骤
  4. Mixly-继电器控制直流电机
  5. 工商管理专业知识与实务(初级)【7】
  6. 关于射频同轴连接器的功率容量探讨
  7. matlab仿真界面设计,基于MATLAB图形用户界面GUI的电路仿真实验的制作
  8. editormd html 转义,Markdown(editormd)语法解析成html(示例代码)
  9. 关系型数据库和主键外键
  10. 计算机二级上机考试试题,计算机二级考试c++上机考试试题.doc