译者按: 一横值千金啊!安全
原文: Mariner 1's $135 million software bug工具
译者: Fundebug开发工具
为了保证可读性,本文采用意译而非直译。翻译
今天,咱们有丰富的开发工具可使用,在写代码的时候自动帮助咱们识别拼写错误,类型错误和其它容易犯错的地方。即便不借助开发工具,也能够慢慢地一行一行的reivew代码。然而,当年连这样的福利都没有。debug
在打孔时代,工程师手动将代码翻译成一张张被打孔的卡片或则使用一个专用的打孔机器来辅助翻译和打孔。blog
若是不当心敲错了、输入了不正确的命令,没有一个屏幕显示刚刚输入的字符以便查验。如何确保打出来的卡片是否正确呢?再打一张卡片出来,而后使用一个叫作卡片验证器的工具。验证器外观和打孔器几乎如出一辙。图片
史上最严重的BUG就是因为在打孔的时候的一个失误,最终形成了1962年的水手一号的发射失败。开发
水手1号探测器是美国发射的第一个水手系列探测器,该探测器原计划探测金星,但因出现故障而被摧毁,它是美国“水手计划”发射的第一个空间探测器。 get
水手一号在当年耗资1850万美圆,至关于如今的1.35亿美圆。it
水手一号飞船在1962年的7月22号从弗罗里达的卡纳维拉尔角发射基地升空。在发射以后的几分钟内,阿特拉斯(antenna)导航系统失败,切换到后备的雷达系统。然而该雷达系统有一个很严重的软件BUG:在使用打孔机编写代码的时候,忽略了公式中的一个上横线,致使导航系统对误差过分修正,最终偏离正确的轨道。
根据推算,若是不及时阻止,水手一号颇有可能坠落在居民区。为了防止形成安全威胁,在发射后293秒,一名区域安全主管主动发送命令摧毁了该飞船。
这次水手一号发射失败不单单是由于软件BUG,实际上在此前的两次发射中,使用相同的系统并无出问题。由于只有当硬件导航系统失败以后,才会启动有BUG的后备雷达系统。固然,这个BUG是致使发射失败的主要缘由。幸运的是,该BUG很快被修复,一个月以后,水手二号成功发射去完成水手一号的任务,飞往水星。
若是当年的代码能够像现在同样展现在屏幕上被咱们review, 是否能够提前排除呢?依然不肯定,毕竟有人的因素在里面。事实上,相似的事情在时隔30年以后仍是有发生。咱们不知道当年NASA使用了什么样的手法去review代码,我只能猜想代码验证器看来没有发挥多大做用。
欢迎加入咱们Fundebug的全栈BUG监控交流群: 622902485。
版权声明:
转载时请注明做者Fundebug以及本文地址:
https://blog.fundebug.com/2017/06/05/worst-software-bug-series-1/