2006-06-17

シンドラーの事故を再発防止するためにエンジニアは何をすべきか

シンドラー社のエレベータで痛ましい事故が起きた。この事故との関係は今のところ否定されているが、シンドラー社のエレベータの不自然な挙動の原因の一つがエレベータ制御ソフトウェアの構成管理の失敗であることがわかった。

【毎日新聞2006年6月17日朝刊より引用】

問題があったのは同社が国内で1991年から1993年までに製造したもので、この間、同一の制御プログラムを搭載した49基を出荷したが、扉が開いたまま「かご」が昇降する欠陥が一部で起きていることが1993年に分かった。

欠陥は、扉が閉まった瞬間から0.25秒以内に「開」ボタンを押した場合、扉が開いた状態でかごが昇降を始める。モーターに作動指令の電気信号を誤って伝えるプログラムミスで、1993年中に49基すべてを正常なプログラムへ交換した。

ところが、同社は49基のうち東京都八王子市、豊島区、名古屋市、静岡県沼津市にある計6基で、その後に行った別の修理の際にミスのあるプログラムを誤って再設定。49基とは別に、千葉県浦安市と神奈川県相模原市の計3基は、1993年にプログラムミスのまま誤って出荷した。

【引用終わり】

SESSAMEの中級技術者向けセミナーでソフトウェア構成管理の講義(SESSAME e-Learning Series 構成管理Ⅱに収録)を担当したとき、構成管理に失敗するとどのような事故が起こりうるのか、また、不具合が発生したときに構成管理の情報はどのように使うのかについて解説した。

ソフトウェア構成管理について最近感じるのは「ソフトウェア構成管理ができている」ということと「構成管理ツールを使っている」ことがイコールだととらえられることだ。

構成管理Ⅱの講義スライドを作るときも、『組込みソフトエンジニアを極める』の原稿を書くときも、特に気をつけたのが「その施策はなんのために行っているのか」を説明するということだ。

ソフトウェアシステムは日々の技術者の活動を積み重ねた成果物である。そして、生来、過ちを犯しやすい人間はうっかり大事なファイルを上書きしてしまったり、安易にコピー&ペーストして一部修正し忘れたりする。

過ちを犯しやすい人間の活動が積み重ねられた成果物であるソフトウェアは、規模が大きくなってくるとどれとどれを組み合わせれば不具合の修正が確認された正しいシステムになるのかよく分からなくなってくる。

また、いろいろなバージョンのソフトウェアが存在すると、今回のシンドラー社のエレベータ制御ソフトのように間違ったバージョンのソフトウェアを製品にインストールしてしまう問題が発生する。(最新のバージョンをリリースしたつもりが、もとの問題があるバージョンにしてしまうことをデグレードという)

不具合の特定と修正および修正の確認がなされたソフトウェアソースのバージョンの関連を管理された状態にし、ユーザーや営業サイドからの不具合の問い合わせにスムーズに回答したり、問題を解決するためのバージョンを速やかにリリースできるようにしておくことがソフトウェア構成管理を行う最大の目的である。

安全な装置を世に送り出すためには、過ちを犯しやすい人間-リスクマネージメント-構成管理 この3つをセットで考えないといけない。

シンドラー社のエレベータの制御ソフトのケースでは、扉が閉まった瞬間から0.25秒以内に「開」ボタンを押した場合、扉が開いた状態でかごが昇降を始め、モーターに作動指令の電気信号を誤って伝えるプログラムミスがあったという。

どんなエレベータでも、各階のドアが閉まっている状態でなければかごは昇降をしないようなプログラム設計をするはずだ。設計者が意図しない状況が発生したということは、扉が閉まった瞬間から0.25秒以内に「開」ボタンを押したという行為が、実際のドアやかごの動作の状態と、制御盤内で認識し管理している状態との間に不整合を発生させたと考えられる。

エレベータの制御だけでなく、何かの動作をしたことである状態からある状態へ遷移する際、わずかな時間がかかることはある。リアルな環境で状態遷移が起こっているこのわずかな期間に、別な操作をしたことによって、コンピュータが認識するシステムの状態とリアルシステムの状態に不整合が起こることはある。このような魔の瞬間に状態遷移の不整合は起こりやすい。

状態遷移の不整合が起こる魔の瞬間をなくすには、コンピュータ内での状態遷移が完了したと判断する際に、実際のシステムの状態を確認するか、もしくは、状態遷移中という状態を作って状態が完全に切り替わってから次の状態に移るようにする。このとき、システムの状態を確認するセンサーが用意されている場合は、センサーの入力を確認することになる。センサーが用意されていないと、コンピュータは暗闇の中で頭の中の地図を頼りに歩いているようなことになり、ひとつ判断を誤ると自分がどこにいるのかわからなくなる。

したがって、安全確認のためのハードウェア(たとえばセンサーなど)をコストダウンのための省いてしまうと、システムとしての安全性は低くなる。『組込みソフトエンジニアを極める』では、システムの安全性に関する商品価値ことをカタログスペックに書かれる顕在的価値(Real Value)に対して、安全性や信頼性を確保し、使いやすさ、安心感を保証するという意味で潜在的価値(Potential Value)と呼んでいる。

顕在的な価値だけを意識し、潜在的な価値のことを考慮せずにコストダウンをしようとすると、結果として事故が起こる確率が高まる。

安全性を高める取り組みとしては、リスク分析を行いリスクをできるだけ小さくするようなハードウェア、ソフトウェアを配置する方法がある。また、故障が発生したときに安全側に倒れるような設計を行うことをフェールセーフ設計を行うという。

エレベータにおける最大のリスクは「各階のドアまたはかごのドアが開いたまま昇降してしまう」ということだ。このリスクが起きる原因を考え、その障害・危害(ハーム)が起こらないような対策を積み重ねることが商品の潜在的価値を高めることにつながる。

リスクをできるだけ低くするためにはFMEA(潜在的故障モード影響解析:Failure Mode and Effects Analysis)が有効となる。この FMEAを使ったリスク分析については『組込みソフトエンジニアを極める』の第4章-品質の壁を越える-で解説した。

リスク分析を行う際のポイントは2つある。ひとつめは潜在的な価値を高めるために準備したハードウェアやソフトウェアが正しく動かないという一次故障が起こった場合のことを考えておくこと。ふたつめは、せっかく用意した安全装置の検出精度の問題があり危険がないのにアラームを鳴らすという「オオカミ少年」状態が発生し、本当の危険と間違いアラームとの差異がわからなくなるような事態を避けるということだ。

そして、フィールドで問題が発生した際には、二度と同じ不具合が発生しないように、リスク分析とその対策を追加し、対策が実施されたソフトウェアのバージョンを管理し、確実にそのバージョンをリリースするシステムを作り上げることが組込み機器メーカーに求められている。

組込み機器や組込みソフトを作り上げる組織は、商品の顕在的な価値だけでなく、潜在的な価値を高めるには、どのような取り組みをしなければいけないのか常に考えている必要がある。

また、組込みソフトエンジニアは自分たちが作り上げた組込み機器を安心して使ってもらうためには、日々どんな活動をしなければいけないか考えなければならない。

0 件のコメント: