歷史上代價最高的11個軟體故障
作者 | Nick Harley
譯者 | 薛命燈
軟體錯誤監控系統每天讓成千上萬的開發者免受軟體錯誤所帶來的尷尬,有些錯誤甚至是災難性的。如果沒有了這些自動化錯誤監控系統會怎樣?我們收集了多年來發生的一些重大的災難事件,看看因為軟體錯誤導致的混亂會給這個世界帶來多大的麻煩!
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)
3
EDS 兒童支持系統
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
5
Mt. GOX 的比特幣攻擊
2010 年,日本比特幣交易所 Mt. Gox 推出,是當時世界上最大的比特幣交易所。在 2011 年 6 月遭到黑客攻擊後,Mt. Gox 表示,他們損失了超過 850,000 個比特幣(在撰寫本文時價值約 5 億美元)。
儘管大約有 200,000 個比特幣被收回,但 Mark Karpeles(前首席執行官)承認,「我們的系統存在缺陷,導致我們的部分比特幣消失了」。
參考鏈接:
https://en.wikipedia.org/wiki/Mt._Gox#Bankruptcy;_stolen_bitcoin_(2014–ongoing)
6
希思羅機場 5 號航站樓
就在英國希思羅機場 5 號航站樓開通之前,工作人員測試了他們全新的行李處理系統。這個系統每天需要檢查大量的行李。在向公眾開放航站樓之前,工程師們對系統進行了全面的測試,測試了 12,000 多件行李。所有的測試都很完美,唯獨在航站樓正式開放那一天卻出了狀況。有人認為,在「現實」場景中,如果行李箱中有重要物品,當乘客手動從系統中取出行李時,會導致整個系統產生混亂,進而關閉。
在接下來的 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
12
NOA-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 語時刻
你還知道哪些因為程序故障導致的重大事故嗎?
請在評論區為大家科普~
沒出問題的時候,你永遠也不知道代碼質量有多重要。范學雷老師教你如何寫出安全高效的代碼,請關注極客時間《代碼精進之路》專欄。
點個好看少個 bug
※當我們輸入一條SQL查詢語句時,發生了什麼?
※SQL Server 2019 修複函數內聯 bug,速度提高 1000 倍
TAG:InfoQ |