ソフトウェアの多重化による信頼性の向上はどうだろうか?
ソフトウェアの信頼性が問題になることが増えていますが、「テストが十分でなかった」ことが原因とされ、「もっとテストを十分にやる」ということが解決方法になるケースがあります。しかし、現在のソフトウェアはサイズが膨大になり、論理も複雑になっているため、すべての組み合わせをテストすることは不可能だということは、認識しておく必要があります。そのため、「テストが十分でなかった」というのは、テスト担当者が手抜きをしたわけではなく、「テストにかけるコスト(時間も含む)が十分でなかった」という意味だと考えた方が、理解としては正しいと言えます。そうすると、「もっとテストを十分にやる」としても自ずと限界があり、テストにさらにコストをかけることでトラブルの確率は減らすことができても、トラブルは必ず発生します。そして、品質が上がれば上がるほど、さらに品質を上げるためのコストは莫大にふくれあがります。
航空機のコンピュータ化の歴史は結構古く、航法支援のシステムではかなり前からコンピュータが使われていました。当然、当時のコンピュータは、今のコンピュータほどの信頼性があるわけもないのですが、航空機の場合人の命に関わるシステムなので、コンピュータを3重化していたという話を聞いたことがあります。ハードウェアを3重化しただけではなく、ソフトウェアも3つ別々に開発していたので、そのうち一つのソフトウェアにミスがあっても、他の2つが正しく動作していれば問題ないということです。
この多重化という方法は、ある程度品質が向上した段階で、さらなる品質向上の必要があるときに有効な手段になります。テストに莫大なコストをかけるよりも、同じ仕様で2つのソフトウェアを作って、同時に両方を稼働させておくという方が、コストは低くできる可能性があると思います。また、多重化の仕組みだと、ソフトウェアの問題だけではなく、ハードウェアの故障にも対応できるというメリットもあります。
多重化という方法をとるときに気をつけなければいけないのは、ソフトウェアも完全に2つ別々に作らなければいけないということです。以前、羽田空港の航空管制システムがダウンしたことがありました。クリティカルなシステムなので、バックアップシステムが用意されていて、それを立ち上げたそうですが、ソフトウェアは同じ物が入っていたため、バックアップシステムも同じソフトウェアの問題でダウンしてしまったそうです。このシステムは、ハードウェア視点の2重化は考えられていたが、ソフトウェア視点の2重化になっていなかったということです。
すでにソフトウェアの多重化を実施している分野もあると思いますが、ソフトウェアの信頼性向上が求められる中、より広い分野で2重化を検討しても良いように感じています。テストを2倍にするよりも高い投資対効果が得られると思います。