軟體bug可以說無處不在,但在太空當中引發的麻煩(以及經濟損失)卻可能超出我們的想像。
無論何時,遇到軟體bug總會令人頭痛不已;然而在某些情況下,軟體bug造成的麻煩會比其它場景更嚴重——例如在太空當中執行任務。無論宇宙飛船規模多大、噸位多驚人,都需要依賴軟體完成自身的既定目標。然而在編寫代碼時,即使最簡單的人為錯誤也可能讓一次耗資甚巨的太空之旅就此宣告失敗。未能對代碼進行認真檢查往往決定著外空間探索的成功或者失敗,更不用提可能由此帶來的數億美元損失、多年工作付之東流、既定任務無法完成甚至對宇航人員的生命造成威脅。在今天的文章中,我們將通過九項實例了解歷史上真實發生過的太空飛行器軟體bug。自從***進入太空至今,我們一直受到這類問題的困擾,而且相信它們還將繼續陪伴著人類未來的宇宙開拓旅程。
Mariner 1:一條上劃線引發的血案
年份: 1962年
實際問題: 1962年7月22日,Mariner 1飛船從佛羅裡達州卡納維拉爾角起飛,開始執行自己的金星探索任務。然而工程師們並沒有意識到,Mariner 1上所搭載的制導軟體中存在一項致命漏洞:在對打孔卡進行轉譯時,某個議程中缺少了一個上劃線符號(注意,並非連詞符)。因為如此,制導計算機錯誤地對原本正確的運行路線作出了補償性調整,這使得地面控制人員不得不在其開始執行任務後的293秒內將其摧毀。好消息是在Mariner 2中該bug得到了順利修復,而這臺飛行器也在六個月之後成功完成了前往金星的探索任務。
Viking I:軟體更新導致其「變磚」
年份: 1982年
實際問題:早在Spirit、Opportunity以及Curiosity等人造設備之前,Viking登陸器就已經踏出了自己的火星探索步伐。1975年,這臺配備有軌道器與登陸器的飛行裝置向著紅色星球發起衝擊。Viking I於1976年7月20日成功完成火星登陸,而Viking II則緊隨其後被發射入太空。整個工作周期預計為90天,其目標包括拍攝並分析火星靚以尋找生命跡象,而且兩臺登陸器(及其軌道器)都連續運轉了數年之久。Viking II的任務於1980年4月正式結束——原因是電池發生了故障。不過Viking I的使命則中止於1982年11月19號。當時為了解決所搭載電池出現的一項問題,任務控制器向該登陸器發出了一系列用於對新電池進行充電的指令。遺憾的是,這些新指令被寫入到了登陸器的存儲器當中,而該存儲器中還承載著與其高增益天線相關的參數——這意味著其與地面控制器間的通信因此被阻斷。美國宇航局多位工程師在接下來的幾個月中一直努力與其重新建立連接,但最終沒能成功——1983年3月,宇航局正式宣布Viking I任務(以及Viking計劃)失敗。
Phobos 1:單一字符缺失導致悲劇
年份: 1988年
實際問題: Phobos 1為1988年7月蘇聯發射的Phobos與Demios火星及月球探測器之一。不過Phobos 1始終未能成功抵達火星,這是因為某項定向軟體測試出現了意外狀況。在同年8月29日,由於上傳軟體中缺少某個字符,導致定向軟體測試意外開始執行,並最終關閉了該飛行器的姿態推進器。最終結果是,該探測器無法將其太陽能電池陣列繼續準確面向太陽方向,直到電池電量完全耗盡。同年9月2日,Phobos 1與地面控制中心失去聯繫。而探索火星的另一臺探測器Phobos 2同樣遭遇失敗,這一次的問題源自硬體故障。
整數溢出錯誤導致Cluster步入毀滅之路
年份: 1996年
實際問題:在Mariner 1項目的34年之後,另一項存在於制導軟體中的軟體bug再次導致四顆人造衛星(其被統稱為Cluster)以及用於運載它們的Ariane 5火箭走向毀滅。在發射之後不久,該制導軟體嘗試將64位浮點數字轉換為一個16位整數,進而導致了溢出錯誤的發生。本來這項錯誤能夠被軟體檢查所阻止,但技術人員卻選擇了忽略。該制導系統(及其備份,其中同樣存在這一bug)隨後關閉,導致火箭偏離軌道。最終Cluster連同其運載火箭於1996年6月4日啟動自毀程序。四年之後,帶著同樣任務的人造衛星終於搭乘俄羅斯的運載火箭成功完成了自己的使命。
軟體bug導致Milstar人造衛星無法抵達預定軌道
年份: 1999年
實際問題: Milstar由五顆地球同步衛星組成,於1994年到2003年相繼發射完成,並由美國空軍負責操控以提供國防部需要的安全通信機制。1999年4月30日,第六顆人造衛星發射升空,但卻由於Titan IV運載火箭的控制系統軟體存在錯誤而未能抵達預定軌道。這顆衛星無法進入正確軌道,並在十天之後被地面控制中心關閉。
採用英制單位而非公投單位導致Mars Climate Orbiter發生解體
年份: 1999年
實際問題: Mars Climate Orbiter(即火星氣候軌道器)屬於火星探測者98號項目的組成部分,與Mars Polar Lander(即火星極地登陸器)共同構成該項目。軌道器的任務是進入火星軌道,研究氣象與氣候狀況並最終作為登陸器的通信中繼設備。該軌道器於1998年12月11日發射升空,但始終未能進入預定軌道——原因是地距控制系統中存在一項軟體bug。在1999年9月23日嘗試進入火星環繞軌道時,該軌道器的所處位置低於預期,並最終導致其解體。通過分析,技術人員發現該地距控制軟體在發送推力指令時使用了英制(即磅力)而非宇航軟體中所通行的公投單位(牛)。啊哦,好一記烏龍球。
Mars Polar Lander:豬隊友過早慶祝導致誤傷
年份: 1999年
實際問題:作為火星探測器98項目的另一大組成部分,Mars Polar Lander(即火星極地登陸器)也令人遺憾地由於軟體問題而遭遇失敗。在1999年1月3日發射升空之後,該登陸器在同年12月3日嘗試著陸時損毀。最終原因被確認為軟體根據三個著陸器腿傳感器返回的數據而誤以為登陸器已經接觸到地面,並因此關閉了下降緩衝引擎。很明顯,下降過程中某次振動被傳感器錯誤地解釋為已經觸地,導致下降引擎在距地尚有40米遠時即行關閉,並引發了致命的墜機事故。
快閃記憶體記憶體錯誤幾乎令火星Spirit號陷入***重啟
年份: 2004年
實際問題:在Viking登陸器與Curiosity漫遊車之間,另有Spirit與Opportunity兩位探索者向火星這顆紅色星球發起過衝擊。目前Opportunity已經在九年之後繼續保持運轉,而Spirit的命運卻顯得更為坎坷——由於快閃記憶體記憶體管理異常,其幾乎在出發的兩周之後就迎來使命的終點。其由DOS管理的文件系統中存在一項設計缺陷,導致快閃記憶體記憶體被迅速佔滿,而Spirit也因此陷入***重啟的惡性循環當中。自2004年1月21日發生問題後,其電池幾乎被徹底耗盡,由此引發的過熱現象差點毀掉這臺設備。幸運的是,工程師們隨後解決了該問題,對快閃記憶體進行了重新格式化並於2004年2月6日使其恢復正常工作。Spirit在過去六年當中一直保持運作,並順利完成了原計劃中的90天工作周期。
內存分配故障導致Mars Global Surveyor任務失敗
年份: 2006年
實際問題: Mars Global Surveyor(即火星環球探測者)於1996年11月7日發射,旨在立足於火星低空軌道對這顆星球進行為期一年的研究。在軟體bug出現之前,Surveyor已經正常工作了將十年時間。但在曝出問題後,美國宇航局於2006年11月2日失去了與其的聯繫。研究證明,問題出於2006年6月進行的一次軟體更新,導致數據可能被寫入到錯誤的內存地址。內存故障發生於同年11月初,這直接導致Suveyor的太陽能電池板無法正常轉動,最終使得飛行器電池直接暴露在太陽的直射之下、進而因過熱而損毀。
原文標題:Houston, we have a bug: 9 famous software glitches in space
【編輯推薦】
【責任編輯:
藍雨淚TEL:(010)68476606】