譯者按: 一橫值千金啊!安全
原文: 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/