SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

安全ソフトウェアの設計

【第2回】エレベータの安全ソフトウェア設計


例外処理の追加

 組込みシステムに求められる機能が多様化してくると、安全設計にも例外処理が求められることがあります。図4のように、かごと乗り場の床に数センチの誤差が生じた場合、その差を自動的に解消する必要が発生します。高層ビルなどのエレベータは、かごをつり下げているロープが非常に長く、人が続いて乗り降りするだけでわずかな段差が生じる可能性があると考えられます。発生した段差をそのままにしておくと、つまずいたりして危険です。

図4:追加の例外仕様
図4:追加の例外仕様

 このため、かごや乗り場側の扉が開いているときでも、この段差を解消するためのモータをわずかに動かす例外処理を入れる必要がでてきます。

 この例外処理は「かご側の扉と乗り場側の扉が両方とも閉まっているとき以外は電磁ブレーキを解除しない、そしてモータを動かさない」という安全設計のコンセプトを崩す可能性があるため、装置の安全性の面を考えると非常に大きな変更要求となります。ソフトウェアの世界ではちょっとした変更がこれまでの設計思想を大きく変えてしまう可能性があるため、プロダクトマネージャは自分が知らないうちに、ソフトウェアシステムの設計コンセプトが崩れていないかどうか常に気を配っておく必要があります。

 この例外処理のケースでは、かごの着床レベルが再床合わせゾーンにあるときだけ実施してよいという条件を付けることで当初の安全設計の思想を継承することになります。では、図5にもどってこの例外処理を実装するとどうなるでしょうか。図5をご覧ください

図5:追加仕様の実装
図5:追加仕様の実装

 図5では、driveMotorSlowly()という関数を新たに作成しています。しかし、この関数を作ったところで、この先どうやってこの例外処理を安全に追加し、これまで作り上げた基本機能を壊さずに実装すればいいのか悩んでしまいました。実際、組込みソフトの安全設計を進めるに当たってソースコードレベルで考えを巡らすのは非常に危険です。仮に完璧なロジックを実装することができたとしても、次に修正する際にも完全性を保つことができるかどうかまったく保証できません。ほとんどの変更要求は現在のプログラムをさらに複雑にするため、安全設計に漏れや抜けがないことを証明することはどんどん難しくなってしまいます。

次のページ
安全設計の基本に立ち戻る

この記事は参考になりましたか?

安全ソフトウェアの設計連載記事一覧

もっと読む

この記事の著者

酒井 由夫(サカイ ヨシオ)

1987年よりクリティカルデバイスのソフトウェア開発に20年間従事する。おもに16bitのワンチップマイコンを使った信号処理、リアルタイム組込みシステムの開発を行い、製品の仕様立案からソフトウェア開発のプロセス管理、プロジェクトマネージメント、安全性・信頼性の検証、保守、ソフトウェア技術者教育など組...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/3697 2009/03/16 18:36

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー