血淋淋的 BUG:波音在軟件開發上錯在哪裡?

血淋淋的 BUG:波音在軟件開發上錯在哪裡?

到了 2019 年,新飛機還會從天上掉毀,是一件讓人不可想象的事情。然而這樣的事情,最近接連發生了兩起。

去年 10 月,一架波音 737 Max 8 噴氣式客機撞向印度尼西亞的爪哇海,造成 189 名乘客和機組人員死亡。調查人員稱該飛機的飛行控制軟件出現“故障”。

今年 3 月 10 日,也就是上週,埃塞俄比亞航空公司一架波音 737 MAX 8 客機在飛往肯尼亞首都內羅畢途中墜毀。飛機上載有 149 名乘客和 8 名機組人員。兩次飛機出事的事故症狀非常類似,所以有理由懷疑埃航這架飛機發生了同樣的“軟件故障”。

在經歷了兩次空難之後,波音公司承諾,最遲在下個月,針對全球所有波音 737 Max 型飛機進行軟件更新。

遲遲修正不了的 BUG

在獅航事故記錄和波音發佈的分析裡,失事前幾分鐘,由於高攻角傳感器(AOA)錯誤數據傳給了飛控系統,導致飛機在正常情況下開始不斷下壓機頭。飛行員在 11 分鐘內連續手動拉昇 20 餘次終告失敗,墜海罹難。

這個自動控制下壓機頭的系統,名叫 MCAS,意為自動糾正失速系統,這是波音 737 MAX 的一種操縱輔助系統。它有幾個特點:

  1. 發現失速後,程序只相信主傳感器,不與備份傳感器核實。(同樣的情況空客的飛機則會交給飛行員處理。)
  2. 一旦相信,不通知飛行員,直接操縱機翼。
  3. 飛行員手動操作後,仍舊會每五秒自動執行,讓飛行員不得不與飛機較勁。
  4. 程序開關非常隱蔽。

獅航事故後,波音表示正在進行軟件修復,以降低風險。

Boeing is working on a software fix, according to industry and government officials, that would likely mitigate risks. On Saturday, the company went further than before in spelling out dangers pilots can face if they misinterpret or respond too slowly to counter automated commands.

從技術角度來說,這是個很容易修正的低級錯誤。全球幾百架運行著的波音 737 MAX 8/9 等著打這個補丁。然而,這個修復被拖延了好幾個月,直到埃航事故發生。

延誤的原因,其中之一是聯邦官員和波音公司安全專家對於需要進行多大改動,有意見分歧。波音公司認為更新這個 BUG 很簡單,減少下壓幅度就行。而聯邦官員 189 條人命是大事情,必須大改,確保單個傳感器錯誤信號不會觸發 MCAS 系統。加上波音公司和美國政府的低效,這個性命攸關的 BUG,硬生生被拖到四個月後。

但顯然因為這次全球停飛事件,波音才很快決定“Make Key Change in 737“,並宣佈將在 4 月份交付。

血淋淋的 BUG:波音在軟件開發上錯在哪裡?


波音 737 MAX 的交付

對於安全要求嚴格的航空軟件,波音要求每個需求都能追溯到相應的代碼行。反之亦然。也就是說每行代碼發生變化,必須能追溯到軟件的設計文檔。但是獅航事故後,媒體披露航空公司的管理層和飛行員並不知道飛機上還有這麼一套輔助系統。APA 航空發言人 Dennis Tajer 曾表示,MCAS 系統的細節“對我們而言是新信息”,“我們的手冊中沒有提到它”。而且該航空還沒有相應模擬器,他說他從舊的 737 NG 駕駛艙到新的 737 MAX,只在 iPad 上進行一小時訓練。

血淋淋的 BUG:波音在軟件開發上錯在哪裡?


軟件外包和成本壓縮

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

血淋淋的 BUG:波音在軟件開發上錯在哪裡?


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

使用 Ada 語言達到 99%

在Ada 文檔中的最佳案例上,有一個案例是講波音 777 上的軟件 99% 是用 Ada 完成,其中制動系統完全用 Ada 來完成。Ada 語言最早是針對嵌入式和實時系統設計的,屬於 80 年代的編程語言,也是美國軍方的專用計算機語言。但之後並沒有被普及,甚至可以說 Ada 在“平民層”的推廣很糟糕。一個普遍的關於歐洲空間局阿麗亞娜 5 型運載火箭失敗的說法是,因為 Ada 語言在編譯過程的檢查失敗導致的。那麼有一個疑問是外包企業中,如何蒐集到合適數量的精通 Ada 的程序員呢?

血淋淋的 BUG:波音在軟件開發上錯在哪裡?


從求職網站前僱員對波音公司的評價中,除了抱怨 Ada 不好用,我們還得到了好幾條令人驚訝的信息:

  1. 波音公司沒有技術面試。
  2. 採購軟件可能需要非常長時間。被多人抱怨技術過時,“使用古老的技術,該公司根本不重視升級或現代化工程,因為這些不能直接幫助他們銷售飛機”。
  3. 管理層不懂 IT 技術,脫節明顯,甚至有的視工程技術人員為累贅。

波音公司具有上百年的歷史,具有 7000 多種自主開發軟件,有非常多的經驗可以供人參考,當然也有很多教訓可讓人汲取。作為傳統企業數字化轉型的先驅,它出現的每一個問題都值得我們去思考。那麼你認為波音在軟件開發中犯的致命錯誤是什麼呢,不妨在文章後留言討論。

參考鏈接:

  1. http://archive.adaic.com/projects/atwork/boeing.html
  2. https://economictimes.indiatimes.com/industry/transportation/airlines-/-aviation/boeing-doubles-outsourcing-from-india-to-500-million-in-a-year/articleshow/51009175.cms
  3. https://www.forbes.com/sites/stevedenning/2013/01/21/what-went-wrong-at-boeing/#301f3c947b1b
  4. https://www.theatlantic.com/technology/archive/2019/03/boeing-737-max-8-safe-how-faa-tested-its-software/584848/
  5. https://www.indeed.com/cmp/Boeing/reviews?fcountry=ALL&fjobtitle=Software+Engineer


分享到:


相關文章: