大規模システム開発の問題 1 -- 航空機のソフト開発

画像に含まれている可能性があるもの:空、雲、飛行機、屋外



画像に含まれている可能性があるもの:空、海、雲、屋外、自然、水


今回は、大規模開発の問題の事例の一回目として、航空機でのソフト開発を取り上げようと思います。

2018年10月29日、インドネシアでライオン・エアのボーイング737MAX が離陸直後に墜落、乗客乗員189名全員が死亡しました。 2019年3月10日には、エチオピアで、エチオピア航空の同じボーイング737MAX 8が、やはり離陸直後に墜落。乗客乗員157名全員が死亡しました。
墜落の原因は、MCASという自動操縦システムの不具合だと言われています。

「MCASを始動させるシグナルは、機首の角度を調べる2個のセンサー(AoA=迎え角センサー)から出る。2個のうち1個は正常だったが、残る1個が故障して異常に高い角度を示していた。MCASは高い角度のほうに反応するので、機首が上がりすぎていると判断し、強制的に下げようとしたのである。」http://bit.ly/2k56eCK
この事故の関連では、ブルームバーグ紙が、ボーイング社は737MAXのソフトウェア開発をインドのHCLという会社に委託していて、その中には大学を出たばかりの時給9ドルの若者がいたことをすっぱ抜いて話題になりました。(ボーイング社は、今回の不具合にこの若者が関わったことを否定しています。)
現代の航空機は、「空飛ぶソフトウェア」と言われるほど、大規模なシステムなのですが、その高価なシステム開発に、時給1000円の人が使われていたのは、ちょっと驚きでしたが、僕が気になったのは、他のところです。
ブルームバーグの記事 http://bit.ly/2k56eCK を読んでも、「仕様」はボーイング社が提供し、HCL社は「コード」を納品したことは書いてあるのですが、先の記事を見ても、不具合の原因が「仕様」の側にあったのか「コーダー」の側にあったのか判然としません。これは大事なところです。
古い、ある意味「ハード」だけで動いていた飛行機には、Fail Safe のノウハウが二重三重に生かされていたと言います。ところが、現在の旅客ジェットは、ソフトウェアの塊であるだけでなく、それ自身が「空飛ぶ大規模分散システム」になっています。
個人的には、二つのセンサーの一方(場合によったら両方)が故障したり、異なる値を返した時の処理に疑問を持っています。ただ、これは分散システムの開発では避けて通れないPartial Fairure (システム全体は生きているが、個々のノードのいくつかは死んでいる)への対応の問題です。「仕様」がどうだったかが気になります。
分散システムには、分散システムの開発手法が必要です。(それについては、稿を改めて触れたいと思います。)
問題は、同じような問題が他でも起きていると言うことです。
1994年、名古屋空港で、中華航空のエアバスA300が着陸に失敗し墜落。乗客乗員271人の内264人が死亡しました。自動システムが、着陸しようとしたパイロットの指示に反して機種を上げ続けたため、失速して墜落しました。(自動モードの解除の方法をパイロットが知らなかったのが原因とされています。)
大量の死者を出すことは、あるいはないと思いますが、同じような問題は、自動車の自動運転でも起こり得ます。
これまでのコンピュータ利用の枠を大きく超えて、コンピュータとソフトウェアの利用が進む中、従来の開発手法の延長で十分なのか、あらためて考えてみる必要はあると思います。

コメント

このブログの人気の投稿

マルレク・ネット「エントロピーと情報理論」公開しました。

初めにことばありき

宇宙の終わりと黒色矮星