公開: 2019年7月13日
更新: 2024年10月26日
今から50年ほど前、航空機の作り方は大変革を遂げました。それは、それまでの飛行機が全て機械部品の組み合わせで作られていたのに対して、それ以後の飛行機は、たくさんの機械部品がコンピュータに接続されていて、コンピュータの指令で個別に動作するようになったことです。機械同士が相互に作用しあって動作することはなくなりました。これによって、飛行機の動きや操縦は大きく進歩しました。そして、航空機を安く作れるようになりました。しかし、その反面、そのコンピュータの動作を決めているソフトウェアに誤りが残っているとき、その誤りを発見し、取り除くことは、極めて難しくなりました。
1970年代に入って間もないころ、有人宇宙船の作り方が大きく変わりました。その原因は、宇宙船の開発費用が莫大だったことでした。この問題を解決するため、米国宇宙航空局(NASA)は、それまでの宇宙船とは違って、1回限りの宇宙飛行の度に、使い捨ての宇宙船を開発するのではなく、1台の宇宙船を何回もの宇宙飛行に利用する、スペースシャトル方式に変え、さらに、スペースシャトルに装備するさまざまな機器を、コンピュータに接続して利用できるプラグイン方式に変えました。これによって、宇宙船の開発期間は大幅に短縮されました。特に、地上での動作検証は、全ての機器と制御用コンピュータを接続して、過去の宇宙飛行の時に記録されたデータを使って、シミュレーションを行い、確かめることができるようになりました。
この有人宇宙船開発方式が導入されて、10数年ぐらいたったころ、同じようなやり方を航空機の開発に応用すると言う試みが、ヨーロッパの航空業界で、実験的に導入され、大成功しました。とくに、航空機開発のコスト削減におけるフライ・バイ・ワイヤー方式の導入には、大きな意味がありました。このフライ・バイ・ワイヤー方式の航空機開発が第2世代に入ると、その応用目的は、旅客航空機の安全運航や乗り心地の改善に移ってゆきました。このことによって、旅客航空機の制御に使われているソフトウェアの規模は、開発行数で、数百万行から10倍の1千万行を超える規模にまで、拡大したのです。工学的な経験から言えば、作成される1万行のプログラムには、少なくとも数個の誤りが残ります。誤りがあっても、システムは、まるで間違いなどないかのように動作します。その誤りは、長期に利用されて初めて、利用者に気付かれ、発見されるのです。
さらに旅客航空機の開発にフライ・バイ・ワイヤー方式が応用されてから10数年の年月が経過したころ、似たようなやり方で自動車を開発する試みが試されるようになりました。今や、ほとんどの自動車が、この方法で開発されています。これによって、市販乗用車の維持は、コンピュータを診断用テスターに接続するだけで、特別な教育訓練を受けた修理技術者でなくても、簡単に行えるようになりました。その反面、診断用テスターか無ければ、故障があっても、その原因を突き止めることはほとんどできなくなりました。さらに、テスターの診断プログラムに登録されていない故障は、見つけられなくなりました。現在の自家用自動車には、数千万行から数億行のプログラムが搭載されていると言われています。つまり、少なく見積もっても、数万個の未発見の誤りを持ったまま、車は運転されているのです。
そのような自家用自動車を運転するのは、ほとんど構造を知らない、普通の人々です。旅客機のパイロットや、特別な訓練を受けた宇宙飛行士ではありません。運転中に、システムに異常が発生しても、その異常を感知し、その異常の原因を突き止めて、正しい対応をとれる人は、ほとんどいないでしょう。そのような問題に対応するため、国際標準機構(ISO)では、機能安全規格と呼ばれる国際規格を制定し、自動車製造メーカなどに、その国際規格に適合することを勧告しています。これに対する各国の対応には、少しずつ、違いはありますが、全体としては、その規格に準拠した自動車の開発・製造を行うような政策を実施しています。しかし、自動車開発の現場では、開発コストの増加が障害となって、対応は順調に進んでいません。
十数年前、日本の自動車メーカや部品メーカの技術者に同行して、ドイツの自動車関連産業を訪問した時、あるドイツの有名部品メーカの研究所の開発責任者から、日本の自動車関連会社の技術者たちに対して、「日本人の技術者たちは、機能安全の国際規格をどう考えているのか? とても真剣に考えているとは思えない。ドイツの技術者・研究者にとっては、それを守らないことは、技術者・研究者としての倫理に反する行為である。」との指摘がありました。残念ながら、この指摘に対して、日本人技術者からは、反論の弁がありませんでした。ドイツ人の目には、日本人技術者の功利的な面が印象に残ったと思いました。
モノづくりが著しく進歩して、「考える機械」を多用した製品の開発が増加している現在、ソフトウェアを「可能な限り誤りを少なく実現」する努力は、その開発に関わる技術者、個人個人に求められます。そのような技術者・研究者の使命を、日本の専門高等教育では教えてきたでしょうか。日本の大学では、技術教育も、技術者倫理教育も、不十分なまま、準技術者の養成しかしてこなかったのではないでしょうか。
筆者が米国IBM社に勤務していたころ、巨大な基本ソフトウェア開発では、開発したソフトウェアの千行当たりに、2個程度の誤りが残ることが分かっていました。その程度の誤りは、残っていても、その存在を検知することはほとんどできません。10年を超えて、数万のユーザに利用されても、発見されないからです。しかし、それほど多くのユーザに使われなくても、そして、プログラムを作成する技術者が、コンピュータ科学系の学部学科の卒業生でなくても、千行当たりで数行、もしくはそれ以下の数の誤りにまで、少なくできる例はありました。それは、スペースシャトルのソフトウェア開発プロジェクトでした。
私たちがそのプロジェクトにおける仕事のやり方を詳細に分析すると、その違いは、各技術者が仕事に立ち向かうときの真剣さに大きな違いがありました。スペースシャトルのソフトウェア開発担当者の場合、自分たちの仕事で、誤りを見逃すと、その結果、命を危険にさらしたり、最悪の場合、その命を落とすのは、自分の伴侶であったり、隣人であったり、顔を知っている人であり、自分たちの子供と同じ学校に通う子供の親であったりします。つまり、自分の仕事の失敗は、知人の一生や、その家族の将来に多大な影響を与えるのです。私たちは、物を動かすブログラムを考え、書くとき、そこまでの意識を自覚しているでしょうか。