安全設計の基本に立ち戻る
ここで、安全設計の基本を思い出してもらいたいと思います。
安全設計の基本
- リスクの高いモジュールは他のモジュールから独立させて切り離す(アイソレーション)
- 安全はシンプルな構造、処理で確保する(シンプルデザイン)
リスクの高いモジュールを他のモジュールから独立させて切り離し(アイソレーションし)、単純な構造、処理で安全を確保する(シンプルデザイン)ためには、ソフトウェアシステムの安全アーキテクチャの考え方が必要です。
安全アーキテクチャが実現できているかどうかは、機器の安全を担っているソフトウェアモジュールが他のモジュールとアイソレーションされており、かつ、安全設計がシンプルデザインで実現されていることを可視化することで確認します。
安全アーキテクチャは必ずしもソフトウェアだけに限ったことではありません。1930年代のエレベータでは乗り場側の扉を閉めないと電流が流れずエレベータを昇降させることができないインターロック機構が施されていました。これは電気と機械で実現した安全アーキテクチャであり、シンプルでかつフェイルセーフ性の高い安全機構でした(図6)。現在でもインターロック機構で安全設計を施したエレベータはあります。
シンプルな安全アーキテクチャ
メカニカルなインターロック機構は「設計が間違っていないか」「壊れていないか」「問題が発生しないか」を目で見たり、さわったりすることで確認できます。正常使用におけるテストや繰り返し負荷テストもやりやすいと言えます。
電気的な部品や回路によるインターロック機構は、メカニカルなインターロック機構よりは見えない部分が多いのですが、完成された部品、回路の組み合わせであるためテストの組み合わせも有限であり、一度十分に検証を行えば、後は部品の故障や生産組み立てのチェックを行うことで安全性を担保できます。
ところが、ソフトウェアを使って安全設計を行った場合は、インターロックの機能だけを切り離して検証することが難しいだけでなく、もし仮に安全機能を分離できたとしても、同じCPUで動いている他の機能モジュールがメモリリークを繰り返したりすると、独立性の高い安全ソフトウェアが正常に動作できなくなるかもしれません。
電気的に設計したインターロック回路も、配線がショートしていたり電流がリークしたりしていれば安全装置が働かなくなるかもしれません。しかし、電気回路で初期の設計が悪い場合は、このような問題が試作品の試験や商品化の試験、生産時の試験で見つかります。どこを検査すれば問題が見つかるかというテクニック、ノウハウも既に確立していると言えるでしょう。
ところが、ソフトウェアの場合は、設計時点で危ない設計になっていたとしても、その危なさが外に見えてきません。また、安全機能のソフトウェアを徹底的に検証したとしても、深く考えずに誰かが修正したたった1行のプログラムコードがその安全機能に影響を与えてしまう危険性もあります。ソフトウェアの場合は、確度の高い検証を行った後にプログラムをさわれなくするような仕組み(構成管理ツールと変更管理ツールの連携や部門内の運用ルール)が徹底していないと、ソフトウェアを修正しやすいという特性から、意図しない変更が紛れ込んでしまう可能性があります。
次回は、このソフトウェアにおける安全アーキテクチャの可視化について見ていきます。

