ソフトウェアが世界を支配する──。そんな言葉は、テクノロジー界隈の人たちにとって心地よく感じるかもしれない。

マーク・アンドリーセンが『ウォール・ストリート・ジャーナル』に「ソフトウェアが世界を飲み込む理由」と題したコラムを寄稿したのは、2011年8月のことだった。あれから8年が経ち、さまざまな分野で急速に進行する“ソフトウェア化”には、深刻な弊害があることが明らかになっている。

ソフトウェアを巡る問題では、ボーイングの新型旅客機「737MAX」の事故が記憶に新しい。昨年10月と今年3月にインドネシアとエチオピアでそれぞれ墜落事故が起き、合わせて346人が犠牲になった。

事故原因はまだ特定されていないが、自動制御のためのプログラムの不具合だったとみられている。ただ、米連邦航空局（FAA）、国家運輸安全委員会、およびインドネシアとエチオピアの関係当局による調査は続いており、どのような措置が必要かについて結論が出るまで、世界中の航空会社が同型機の運航を停止している。

関連記事：「空飛ぶタクシー」の実用化への道のりは、ボーイング737MAXの相次ぐ事故で険しくなる

こうした状況で、FAAは6月末、737MAXに新たな「潜在的リスク」が見つかったと発表した。このため運航再開は早くても9月か10月にずれ込む見通しだ。潜在的リスクというのが具体的に何を指すのかは明らかになっていないが、一部メディアはバックアップ手段の欠如が問題になっていると報じている。

勝手に機首を下げてしまうバグ

新たな問題は、自動制御ソフトウェアの修正版のシミュレーション中に明らかになった。飛行管理システムをつかさどるコンピューターの半導体チップが機能停止すると、尾翼の水平安定板が機首を下げる方向に動いてしまう可能性があるという。シミュレーションでこうした問題が生じたのはかなり特殊な状況だったようだが、FAAはボーイングにソフトウェアの追加修正を命じている。

ボーイングはFAAの決定を受けて出したプレスリリースで、「FAAからの承認取得に必要なすべての条件を満たし、安全な運航が再開できるようになるまで、737MAXの再度の承認申請は実施しません」と説明している。報道によると、ボーイングは今回の問題にはソフトウェアを変更するだけで対応可能であると考えているが、これに疑問を呈する専門家もいる。ボーイングにコメントを求めたが、回答は得られなかった。

一方、インドネシアの航空当局は3月、昨年10月に起きたライオン・エアの墜落事故に関する予備報告書を公表した。ここでは、事故原因として「操縦特性補助システム（MCAS）」と呼ばれるプログラムの誤作動が挙げられている。

737MAXは「737」シリーズの従来型機と比べてエンジンの位置が高く、また主翼の前方に突き出している。このため、特定の状況では機首が上がりすぎて失速する可能性があった。MCASはこの不必要な失速を防ぐために開発されたシステムで、機首の仰角を自動的に調整するようになっている。ただ、センサーの誤作動などによって、本来なら必要ない状況でソフトウェアが勝手に機首を下げてしまうことがあった。

この場合、パイロットは手動で機体の角度を戻すことができるのだが、MCASの解除方法がわからなかったため、最終的に墜落につながったという。言い換えれば、完璧なソフトウェアを構築するのは困難であり、テストによって不具合を発見するのは非常に複雑な作業が必要なのだ。

カーネギーメロン大学教授で電気エンジニアリングの専門家フィリップ・コープマンは、「あらゆるソフトウェアについてテストでバグを見つけるのは困難です。航空機向けソフトウェアでは特にそうだと言えるでしょう」と話す。

安全性が最重要課題だが…

それでもこの分野の開発者たちは、かなりよくやってきた。国際航空運送協会（IATA）の統計では、2018年の航空機事故の発生率はフライト74万便ごとに1回だ。死亡者の出るような深刻な事故に限ると、確率は540万分の1になる。実際、ソフトウェアの欠陥は航空機事故より自動車事故で問題になることのほうが多い。

コンサリティング会社アリックスパートナーズの調査によると、電気系統やソフトウェアの欠陥による自動車のリコールは、2012年から2016年までは年間30パーセントの割合で増加している（ただ、国の統計では自動車の安全性は高くなっているという）。

カーネギーメロン大学のコープマンは737MAXの事故調査にはかかわっていないが、航空機でも自動車でも、ソフトウェアの問題は特定の原則から生じるのではないかと考えている。エンジニアリングにおいては、ある要素が重要であると考えられれば、開発やテストには十分な注意が払われる。逆に言えば、安全上で非常に重要な部分について、エンジニアが「これはそれほど重要ではない」と誤った判断を下したときに問題が起きるのだ。

航空機では一般的に、すべてのもので安全性が最重要課題となっている。なにか間違いがあれば墜落する可能性が大きいからで、だからこそ自動車と比べると事故が起こりにくい。また、航空機は自動車と比べてはるかに数が少ないのと、航空機の操縦免許は取得が難しく、訓練も厳しいことも関係しているはずだ。

ソフトの欠陥に見られる共通点

それでも、航空機と自動車のソフトウェアの欠陥には、ある種の共通点が存在する。

テスラの「オートパイロット」やゼネラル・モーターズ（GM）の「スーパークルーズ」のような高度運転支援システムは、人間のドライヴァーの存在を前提に設計されている。車線変更を自動化するシステムや衝突防止機能に不具合が生じれば、ドライヴァーが運転を引き継ぐ仕組みになっていて、ドライヴァーが道路に注意を払っているか確認するシステムも組み込まれているのだ。

しかし、737MAXのように人間への引き継ぎがスムーズにいかないと、致命的なことが起きてしまう。コープマンは「最悪の場合は死亡事故につながります」と言う。

幸いなことに、ボーイングは737MAXの安全性やエンジニアリングで徹底した見直しを実施する方針を示している。輸送分野のソフトウェアには、すべて同じ対策がとられるよう願ってやまない。