價值1.35億美元的BUG
譯者按: 一橫值千金啊!
原文: Mariner 1’s $135 million software bug
譯者: Fundebug
為了保證可讀性,本文采用意譯而非直譯。
今天,我們有豐富的開發工具可以使用,在寫代碼的時候自動幫助我們識別拼寫錯誤,類型錯誤和其它容易犯錯的地方。即使不借助開發工具,也可以慢慢地一行一行的reivew代碼。然而,當年連這樣的福利都沒有。
在打孔時代,工程師手動將代碼翻譯成一張張被打孔的卡片或則使用一個專用的打孔機器來輔助翻譯和打孔。
如果不小心敲錯了、輸入了不正確的命令,沒有一個屏幕顯示剛剛輸入的字符以便查驗。如何確保打出來的卡片是否正確呢?再打一張卡片出來,然后使用一個叫做卡片驗證器的工具。驗證器外觀和打孔器幾乎一模一樣。
史上最嚴重的BUG就是由於在打孔的時候的一個失誤,最終造成了1962年的水手一號的發射失敗。
水手1號探測器是美國發射的第一個水手系列探測器,該探測器原計划探測金星,但因出現故障而被摧毀,它是美國“水手計划”發射的第一個空間探測器。
水手一號在當年耗資1850萬美元,相當於現在的1.35億美元。
水手一號飛船在1962年的7月22號從弗羅里達的卡納維拉爾角發射基地升空。在發射之后的幾分鍾內,阿特拉斯(antenna)導航系統失敗,切換到后備的雷達系統。然而該雷達系統有一個很嚴重的軟件BUG:在使用打孔機編寫代碼的時候,忽略了公式中的一個上橫線,導致導航系統對偏差過度修正,最終偏離正確的軌道。
根據推算,如果不及時阻止,水手一號很有可能墜落在居民區。為了防止造成安全威脅,在發射后293秒,一名區域安全主管主動發送命令摧毀了該飛船。
此次水手一號發射失敗不僅僅是因為軟件BUG,實際上在此前的兩次發射中,使用相同的系統並沒有出問題。因為只有當硬件導航系統失敗之后,才會啟動有BUG的后備雷達系統。當然,這個BUG是導致發射失敗的主要原因。幸運的是,該BUG很快被修復,一個月之后,水手二號成功發射去完成水手一號的任務,飛往水星。
如果當年的代碼可以像如今一樣展示在屏幕上被我們review, 是否可以提早排除呢?依然不確定,畢竟有人的因素在里面。事實上,類似的事情在時隔30年之后還是有發生。我們不知道當年NASA使用了什么樣的手法去review代碼,我只能猜測代碼驗證器看來沒有發揮多大作用。
關於Fundebug:
Fundebug專注於JavaScript、微信小程序、微信小游戲、支付寶小程序、React Native、Node.js和Java實時BUG監控。 自從2016年雙十一正式上線,Fundebug累計處理了7億+錯誤事件,得到了Google、360、金山軟件、百姓網等眾多知名用戶的認可。歡迎免費試用!
版權聲明: 轉載時請注明作者Fundebug以及本文地址: https://blog.fundebug.com/2017/06/05/worst-software-bug-series-1/