https://spectrum.ieee.org/aerospace/aviation/how-the-boeing-737-max-disaster-looks-to-a-software-developer
航空機業界の話ではありますが、ソフトウェア・エンジニアには是非とも読んで欲しい文章です。少々長いので、時間のある時を見つけてじっくりと読むことをお勧めします。
要約すると、
1960年代に作られたボーイング 737 は、当時の技術では最高に安全な飛行機でした。特に羽の形とエンジンのバランスが素晴らしく、パイロットが思った通りに操縦できる、とてもシンプルで理想的な設計でした。
737 は、その性能ゆえにロングセラーとなり、ボーイングは最新の技術を取り入れながら、より安全な飛行機とするべき改定を繰り返して来ました。
しかし、2016年に発表された 737 Max は、その流れから逸脱するものでした。航空業界から強く求められる燃費の向上のために、巨大なエンジンを搭載することにしたのです(エンジンは大きいほど燃費が良くなります)。
しかし、そのままエンジンを入れ替えると、大きすぎて着陸した時に地面に近すぎるという問題があり、やむなくエンジンの場所を羽の根元に近づけるという短絡的な解決方法をボーイングは選んだのです。
結果として、せっかくのバランスが崩れ、低速でエンジンをふかした時に、機首が上がりすぎて失速しやすいという安全上の欠陥を持つ飛行機になってしまったのです。
本来であれば、大きなエンジンに合わせて羽の形を大幅に変更して全体のバランスを調整すべきだったのですが、そうするともはや 737 とは呼べず、全く新しい機体として FAA から認可を受けなければならなくなり、莫大なコストがかかるので、それはやりたくなかったのです。
そこでボーイングとしては、失速しそうな状況を感知し、自動的に機首を下げて失速を防止する MCAS (Maneuvering Characteristics Augmentation System)というシステムを導入することにより、安全性の欠陥をソフトウェアで補うという手段に出たのです。ソフトウェアを作っている人間であれば、そんなシステムがいかに危ういものかが分かると思います。
60年代のFAAであれば、決してそんな飛行機を認可しなかったのですが、最近の FAA は複雑になったシステムについて行けなくなった上に、人員不足があるため、認可のプロセスの大部分を飛行機の製造会社に任せてしまうという情けない状況で、こんな飛行機を認可してしまったのです。
実際の事故は、センサーの故障により MCAS が失速状態だと誤解して機首を下げてしまった上に、それをパイロットが修正しようとしても、操縦桿そのものが今やソフトウェアでコントロールされているために、修正が効かないという状況に陥って墜落してしまったのです。
今回の事故は、安全性よりも経済性を重視した経営判断と、ソフトウェアに頼りすぎた設計に根本的な問題があり、単にソフトウェアをアップデートしたから大丈夫、というような簡単な話ではないのです。
Boeing’s 737 Max Software Outsourced to $9-an-Hour Engineers – Bloomberg
It remains the mystery at the heart of Boeing Co.’s 737 Max crisis: how a company renowned for meticulous design made seemingly basic software mistakes leading to a pair of deadly crashes. Longtime Boeing engineers say the effort was complicated by a push to outsource work to lower-paid contractors.
ボーイング社の 737 Max の欠陥は、同社がコストカットのために、低賃金の契約社員にソフトウェアをアウトソースしたからだ、という同社で働くベテランエンジニアの発言を大きく取り上げた記事です。
The Max software — plagued by issues that could keep the planes grounded months longer after U.S. regulators this week revealed a new flaw — was developed at a time Boeing was laying off experienced engineers and pressing suppliers to cut costs.
なんだかいつの間にか、「737 Max の欠陥はソフトウェアにあった」ことになっていますが、これはボーイング社の策略です。
737 Max の1番の問題は、燃費を向上させるために、無理やり大きなエンジンを搭載し、その結果、全体のバランスが崩れてしまったことにあります。本来ならば、機体や羽の形を大きく変えて安定した飛行が出来る飛行機を作るべきだったのですが、それをすると、もはや 737 とは呼べなくなってしまいます。そうなると、FAA(米国連邦航空局)の認可を最初から受けることになり、何年もかかってしまいます。
それを嫌がったボーイングの経営陣が、結果的に飛行バランスが悪く失速しやすい飛行機を作ってしまい、それを補うための仕組みが「Max Software」だったのです。失速しそうな状況をセンサーで感知してソフトウェアで自動的に機首下げを行い、失速を免れようという仕組みです。
今回の事故は、センサーの故障によりそのソフトウェアが失速もしていない飛行機の機首下げをため起こったのです。ボーイングは、「センサーの故障とソフトウェアの欠陥が原因」として、ソフトウェアのアップデートで誤魔化そうとしています。
ソフトウェア・エンジニアの私から言わせれば、そのアプローチは根本的に間違っています。今回の問題は、そんなソフトウェアがなければ安定して飛行できない飛行機の設計そのものにあり、そこにメスを入れずに、ソフトウェアのアップデートやセンサーの多重化で誤魔化そうとするのは根本的に間違っていると思います。
ボーイングでの会話
このメルマガでは、何度かボーイング 737 Max 問題について触れきました。ちょうど、エンジニアからの内部告発の記事も出たところなので(参照:Boeing 737 Safety System was Vetoed, Engineer Says)、ボーイング内部でどんな会話がされたのかを、ドラマの脚本風に仕上げてみました。
技術部長:今朝、経営陣から、次世代 737 の開発プロジェクの正式な予算の承認が降りた。名称は 737 Max に決まった。737 がカバーしている、乗客150人前後、航続距離3000マイル強は、航空業界のスイート・スポットだ。737 を世界で最も売れる航空機にすることが今回のプロジェクトの命題だ。何よりも重要なのは、燃費だ。より大きなエンジンを搭載し、燃費でエアバスに大きな差をつける。737 Max の Max は、燃費が最大という意味だ。
技術主任:部長、737にこれ以上大きなエンジンを搭載することが無理なことは前回お伝えした通りです。翼と地面の間に十分なスペースがないんです。
技術部長:しかし、君はエンジンの取り付け場所を、より前方に、かつ、上にすれば可能だとも言っていたじゃないか。
技術主任:確かにそうです。しかし、その場合、重心の位置が変わってしまうため、ボディと翼をゼロからデザインし直す必要があり、もはや 737 とは呼べません。それでも良ければ、可能だと申し上げただけです。
技術部長:それは無理だ。新機種となると FAA からの認可を取るのに少なくとも3年はかかる。そんな時間はない。あくまで 737 の改良版という形で、FAAの認可を素早く通す必要がある。
技術主任:それであれば、大きなエンジンの搭載はあきらめていただく必要があります。
技術部長:今の形状のまま、エンジンをより前方に取り付けることにどんな問題があるのか説明してくれないか?
技術主任:その場合、本来の設計とは異なる部分にエンジンからの力がかかる様になるため、出力を上げた時に、機首が急激に上がって失速しやすくなってしまいます。安全性を考えれば、そんな変更をするべきではありません。
技術部長:それはパイロットが技術でなんとか出来るんじゃないのか?
技術主任:技術的には可能ですが、各航空会社のパイロットは、既存の 737 の飛行特性に慣れているため、大きく特性が異なる機種を、同じ名前の 737 として提供することは、パイロットの間に混乱を招きます。
技術部長:その違いはソフトウェアで吸収出来るだろう。出力を上げた際に、機首が上がらない様に自動的に補正することにより、パイロットには、既存の 737 を操縦している時と同じ様な体験を提供するんだ。
技術主任:そんなことやるべきじゃ、ありませんよ。パイロットを欺くことになります。
技術部長:欺くことにはならないよ。より、安全に運転できる様に補助するだけだ。
技術主任:安全を重視するのであれば、失速しやすくなる様な場所にエンジンの位置を動かすべきではありません。
技術部長:だから失速しない様に、自動的に機種を下げる仕組みを入れようと言っているんだ。
技術主任:部長、本気でそんなことを言ってるんですか!
技術部長:そうだ。大きいエンジンを取り付けて、737 の燃費をエアバス以上のものにすることは上からの絶対命令だからね。それが出来なければ 737 Max の存在意義はないんだ。
技術主任:私はそんなデタラメな仕事をするために、ボーイングに入ったんじゃあありません。
技術部長:そこまで言うなら、他のエンジニアに頼むだけだ。君のポジションを欲しがっている連中はいくらでもいるんだ。
解説
結果的に導入されたシステムは、MCAS(Maneuvering Characteristics Augmentation System)というシステムで、機首に取り付けられたセンサーが、失速を未然に防ぐ様に(パイロットからの指示がなくても)自動的に機首下げをする様に作られていました。737 Max が起こした二つの事故は、どちらもセンサーの故障によるもので、実際には失速状態を起こしていないにも関わらず、失速したと勘違いした MCAS が、パイロットの指示に反して機首下げを行ったため、墜落してしまったのです。
参考文献:Must Reads: How a 50-year-old design came back to haunt Boeing with its troubled 737 Max jet
引用:週刊 Life is beautiful