你當前所在位置:首頁 > IT行業動態 > 盤點那些造成“大災難”的Bug

盤點那些造成“大災難”的Bug

對于程序員來說,從寫代碼開始,Bug幾乎就是一個如影隨形的東西。正如Bug的英文原義——小蟲子,在我們的生活中無所不在。

 

一個小小的Bug,輕則影響和戶體驗,重則會“勞民傷財”,甚至造成死傷的“大災難”。

 

接下來,就讓我們來盤點下那些曾經造成“大災難”,讓人追悔莫及的Bug。

 


一、0.000000095帶來的愛國者之殤

 

盤點那些造成“大災難”的Bug(1).jpg

 

1991年2月25日,海灣戰爭期間,在沙特阿拉伯的達蘭,美國的“愛國者”系統未能追蹤并攔截一枚伊拉克飛毛腿導彈。

 

“愛國者”導彈防御系統工作流程是:探索階段、驗證階段、跟蹤階段,在跟蹤階段會等對方的導彈進行攔截。但如果“愛國者”持續工作超過8小時,射程就會偏離正常位置20%;這雖然是個已知的bug,但美國軍方不認為“愛國者”導彈會持續工作超過8小時,但那時實際運行時間已持續約100小時。

 

系統每1/10秒就進行一次乘以1/10的運算,1/10的二進制就是0.00011001100110011001100………,但在愛國者的24位固定小數點寄存器里就只保存到小數點后第24位。每次計算就會舍去0.0000000000000000000000011001100(十進制約0.000000095)。

 

愛國者工作時間約100小時,按0.000000095 x 100(小時)x 60(分) x 60(秒)x 10(每秒進行的除法運算)=0.34秒;飛毛腿導彈速度約1676米/秒,按0.34(秒)x1676(米/秒),導彈飛行距離早就超過了半公里;這點距離已足夠能讓導彈飛到愛國者追蹤攔截的范圍之外了。

 

這枚導彈襲擊了美國軍營,造成了28名士兵死亡,約100人受傷。

 


二、代碼沒有更新,導致火箭墜毀

 

盤點那些造成“大災難”的Bug(2).jpg

 

阿麗亞娜火箭墜毀居然是因為軟件代碼沒有測試、更新?!

 

1996年6月4日,阿麗亞娜5型運載火箭原計劃將運送4顆太陽風觀察衛星到預定軌道,但因軟件問題,火箭在發射后偏軌激活了自我摧毀裝置。就在剎那間,阿5型火箭和其他衛星燃為灰燼。

 

然而事故的原因卻是:代碼重用!

 

在二者的飛行條件截然不同的情況下,阿5型的發射系統代碼仍然直接重用了阿4型的相應代碼。雖然該代碼在阿4型上是完美運行,但卻從未在阿5型上進行過測試。

 

事實證明,阿4型往舊軟件(SRI)輸入的是16位元整數數據,阿5型往SRI 輸入的是64位元浮點數數據,數據轉換時溢出。

 

此次事故損失3.7億美元。

 


三、一個小小的用戶行為造成整個銀行系統崩潰

 

盤點那些造成“大災難”的Bug(3).jpg

 

加拿大信托銀行的ATM機可以接受銀行卡,但是如果你沒有帶卡你也可以鍵入你的賬戶信息,通過這種方式執行你的銀行業務。機器會問你:“您是否攜帶銀行卡?”隨之會有一個按鈕為是,另一個按鈕為否。

 

程序員們花費了幾個月的時間去調試系統,追蹤每一個錯誤,預判每一個客戶可能會做出的每一個稀奇古怪的決定……這一切都是為了要確保系統會在運行時保持穩定。

 

終于到了機器開始運營服務的那一天。

 

運營的第一個小時里,安大略南部某處的某位客戶,對“您是否攜帶銀行卡”這一問題選擇了“否”后,把他的銀行卡強插進了卡槽里。

 

然后,這整個系統,整個安大略的系統,都……崩了。

 


四、一個“/”鍵,損失了30億美元

 

盤點那些造成“大災難”的Bug(4).jpg

 

2010年1月31日,Google 封鎖了整個互聯網。

 

Google 向來都保護著我們免受惡意軟件和病毒感染的網站的侵擾;它與stopbadware合作,監視著危險的惡意軟件/病毒/軟件,并時刻更新標記網站列表。

 

而這一次,將站點添加到標記的列表程序員在本該輸入URL的位置,不小心地輸了“/”。

 

因為這一疏漏,互聯網上所有的網站都被標記為危險。

 

故障持續了40分鐘,損失30億美元。

課程預約

极速1分彩_Welcome