UMLを使った安全設計の可視化
安全ソフトウェアが他の機能モジュールからアイソレートされ、危険を制御するメカニズムがシンプルなデザインで実現できていることを示すにはUML(Unifid Modeling Language)の表記法を用いることが有効です。UMLを使ったモデルデザインを使えば、ソフトウェアシステムの静的構造や動的な振る舞いを階層的に表現することができるため、設計者がシステムに込めた設計の意図を大きな視点から実装に近い粒度の細かい視点へ段階的に眺めていくことができます。
図3は、例外処理を追加する前のエレベータの昇降に関する安全機能をUMLのクラス図で描いています。図4はクラス名を日本語の別名に入れ替えたものです。どちらか見やすい方を眺めてください。
以下に、このモデルで着目して欲しいポイントを挙げます。
- センサから外部の状態を取り込むクラス(DoorOpenSenser:ドア開閉センサ)とモータ駆動やブレーキを制御するアクチュエータクラス(MotorDriver:モータドライバ、BreakActuator:ブレーキアクチュエータ)は、エレベータを昇降させる機能(責務)と安全監視システム(責務)から独立している。
- エレベータ安全システム(ElevatorSafetySystem)クラスと、かご巻き上げコントローラ(HoistingCageController)は、同じセンサクラスとアクチュエータクラスに関連を持っている。同一のセンサから状態を取り込み、同一のモータやブレーキを制御する。
- エレベータマネージャ(ElevatorManager)クラスはかご巻き上げコントローラ(HoistingCageController)を持っている(所有している)が、エレベータ安全システム(ElevatorSafetySystem)クラスとは関連がまったくない。
- エレベータ安全システム(ElevatorSafetySystem)クラスを所有しているのは、エレベータシステム(ElevatorSystem)であり、センサやアクチュエータとの関係を除けば、エレベータの昇降と関係しているのは、エレベータマネージャ(ElevatorManager)クラスのgetElevatorStatus()関数を呼んでいるときだけである。
- エレベータ安全システム(ElevatorSafetySystem)は、異常を察知したらすぐにエレベータを止めるstopElevatorImmediately()関数と異常を知らせるnotifyAlarm()関数を持っており、この2つの関数は外部に対して公開していない(クラス外部からアクセスできない)。


