Categories
程式開發

波音再陷事故風波:軟件測試走捷徑導致載人飛船首飛失敗


2月28日,據外媒報導,此前波音公司為美國宇航局(NASA)研發的載人飛船“星際客機”(CST-100Starliner)發射升空失敗的消息終於有了實錘:波音公司承認失敗原因在於他們對“星際客機”的軟件測試不充分,導致一個明顯Bug未被檢測出來。

這是這家擁有百年曆史與強大工程實力的航天巨頭,在737MAX空難風波後遭受的最新打擊。

此前波音公司在軟件設計、軟件外包、研發管理等方面暴露出的問題不僅再一次被詬病,而且這次在軟件測試上的錯誤又成了新的焦點。

一次被寄予厚望的飛行

北京時間12月20日19時36分,波音公司的新一代載人飛船“星際客機”自卡納維拉爾角發射升空,執行該飛船的第一次飛行測試任務。按照計劃,飛船在這次無人試飛中將與國際空間站對接,為宇航員送上聖誕禮物。

火箭的發射本來一切正常,飛船按計劃被送入了遠地點192千米、近地點77千米的亞軌道。

但是就在與火箭分離後,“星際客機”飛船上的一個關鍵設備出現了異常,我們可以簡單理解為飛船的一個時鐘錯誤,讓飛船誤以為自己正處於提升近地點的變軌過程中。

在預設程序裡,變軌是需要很高精度的姿態和軌道控制的,因此“星際客機”飛船的48台姿軌控推力器開始瘋狂工作,在短時間內消耗了大量燃料。

在下面的直播畫面截圖中,我們能清楚地看到飛船的多台推力器正在工作。

波音再陷事故風波:軟件測試走捷徑導致載人飛船首飛失敗 1

(任務控制中心直播截圖)

在發現異常後,任務控制人員第一時間嘗試向飛船注入正確指令,手動消除影響,但不湊巧的是,當時飛船正好處於兩顆TDRS中繼衛星的覆蓋交接區,因此指令沒有註入成功。

由於“星際客機”消耗了過多的燃料,與國際空間站的對接試驗不得不取消,原定於12月28日返回的飛船不得不提前到22日返回地球。

波音再陷事故風波:軟件測試走捷徑導致載人飛船首飛失敗 2

(工作人員正在回收“星際客機”飛船)

最終,國際空間站的宇航員們沒有等來2019年的聖誕禮物,“星際客機”也於北京時間12月22日20時58分在著名的白沙導彈靶場著陸。

小小計時器引發大問題

美國宇航局(NASA)局長佈裡登斯廷在隨後的新聞發布會上總結說,原本飛船將通過“入軌點火”改變其行進軌道,與空間站會合,但當時用來控制飛船活動的自動計時器錯估了任務階段,導致飛船提早消耗了過多燃料,地面控制中心曾試圖發出指令覆蓋計時器的程序,但由於又出現了通信延遲,該指令最終沒能追上燃料的消耗速度,與空間站的對接任務因此擱淺。

波音太空發射部門高級副總裁奇爾頓表示,問題出在軟件上,而非飛船機體本身,飛船的推進、航行及生命保障系統也都運行如常。

儘管這次任務從隔熱板到環境控製到著陸,許多項目都進展順利,但由於這個小小的計時系統的問題,導致了這次飛行任務的失敗。而且在實驗室測試軟件的過程中,工作人員主要關心的是確保載人飛船和運載火箭兩部分能夠正確通信。測試小組證明了沒有通信問題,但是他們走了捷徑,所以從未發現載人飛船讀取錯誤時間的問題。

奇爾頓說,公司將集中精力尋找“失敗的根本原因”,但他說,“我們不知道為什麼計時器會報錯,公司一直在尋找軟件編碼上的問題,但是我們還沒有找到問題出在哪裡。”

軟件測試不能走捷徑

為了解開謎團,波音公司和美國宇航局在去年12月底組織了獨立調查小組,分析這次失敗的原因,並於2月中旬發出調研報告。

這份報告顯示,飛船和火箭助推器的時間存在偏差,而飛船的Mission Elapsed Timer提前輪詢了火箭助推器的時間,從而進行了錯誤的計時並進入了錯誤的軌道。在發現這個問題之後,波音繼續搜尋了可能存在的未被發現的其他問題。他們很快的發現了第二個Bug,該問題可能導致在將服務艙與機組成員艙分開時發射錯誤的推進器。

這些明顯的錯誤完全可以被提前“測試”出來。於是調查小組對測試的流程進行了檢查,發現測試人員為了縮短測試時間,走了捷徑。他們將整個飛行過程分成了幾個小單元分別進行測試,但最後卻沒有做完整的、端到端的集成測試。也就是說根本沒有進行時長為25個小時的整體測試。

美國宇航局載人航天業務負責人道格·洛夫羅表示,波音公司的問題是“根本性的”和廣泛的“軟件過程故障”。波音的這種軟件質量控制,還不知道會導致系統中到底存在多少個Bug,“到底只有這兩個還是會有幾百個”。

波音公司表示將重新對代碼進行審核,這涉及到一百萬行代碼,波音公司官員說,審查需要多長時間還不確定。

波音曾經的鮮血教訓

“星際客機”載人飛船的失敗正值波音公司遭遇100多年曆史上最黑暗的時期。波音一直因空難事故醜聞纏身。 2018年10月,一架獅航波音737 MAX客機發生墜機事故,造成189人喪命。幾個月後,一架埃航波音737 MAX客機也墜毀,機上157人罹難。目前波音737 MAX機型仍處於停飛狀態。

回顧波音737 MAX的兩次致命飛行,一個自動控制下壓機頭的名為 MCAS 的自動糾正失速系統受到最大的詬病。

前波音公司資深軟件工程師 Mark Rabin 認為最重要的一個原因就是軟件外包,而將軟件外包的起因則是波音裁撤資深研發以削減成本。

《彭博社》在一則報告中指出:波音737 MAX 把軟件系統外包給了印度外包公司HCL 和Cyient 的軟件工程師,比起美國正職軟件工程師每小時35 至40 美元的工資,印度外包的時薪只需要9 美元。更進一步,波音的分包商與供應商同樣選擇將工程外包到印度,降低成本以保證利益最大化。

波音公司在 2010 年曾發布了 1000 份裁員通知,而這些被裁減的人大部分在 IT 部門。該公司當時擁有 158,500 名員工,其中包括 18,000 名工程和技術人員,但他們計劃是削減 10,000 個工作崗位。一位前波音軟件工程師在 2015 年表示,企業將裁掉 90% 經過了熟練培訓的員工,用“外包”來代替他們,從而縮減開支。

軟件外包是一個需要發包方和承包方高度協作的過程。服務週期長、可變因素多,這使得公司在軟件外包過程中面臨重大風險。波音的787 型飛機計劃 70% 使用外包,最終導致了延期三年還交付不了,波音表示:“我們同時在技術、工具和供應鏈上做了太多改變,超出了我們的管理能力。”

同時波音的組織結構也存在較大的問題。在波音公司,高級工程師主要向各型號飛機的業務主管匯報工作,然後才向技術端的總工程師匯報。這種模式造成的問題是:工程師一旦發現問題,因為可能造成飛機的研發進度滯後,通常會首先面臨來自高管的壓力,因為這些高管的工作就是保證在 Deadline 前完成任務。

從民用到航空 軟件測試有多重要?

波音公司發言人戈登·約翰德羅(Gordon Johndroe)在電子郵件中說,“星際客機”載人飛船發生的故障與兩起致命的波音 737 MAX客機墜毀事故之間“無法直接對比”。約翰德羅說,“鑑於任務要求和條件的特殊性”,航天軟件開發“採用了不同的方法和人員”。

但航空安全網站AirSafe.com航空安全分析師、前波音工程師托德·柯蒂斯(Todd Curtis)說,人們肯定會質疑波音的各個部門是否可能因為共享設計、測試和評估方法,從而導致不同軟件出現相同的問題。

柯蒂斯說:“雖然它們是不同部門開發的,但它們屬於同一家公司。公司一部分的資產完全可以用在公司完全不同的地方。”他回憶說,當自己在波音的商用飛機部門工作時,有時會被要求幫助解決軍用航空部門的問題。

“公司不同部門之間可以共享文檔、共享流程、共享員工,或者共享其他資源。”柯蒂斯說,“儘管這是一個太空領域的事件,但737 MAX的問題一直存在於人們的記憶中。 ”

與波音及其部分競爭對手合作的防務分析師洛倫·湯普森(Loren Thompson)認為,波音 737 MAX客機的問題將不可避免地影響到波音的其他業務。

很顯然,波音需要更穩健、更規範的軟件測試流程,以及更優質的軟件測試團隊,來避免引起更嚴重的飛行事故。