2011年04月19日

プログラムにおける想定外への対処

原発の運用において今回の大地震は想定外だったという報道をテレビで見ました。
今後はマグニチュード10以上や50m以上の津波であっても
今回のような事態とならないよう策を講ずることが、
想定内にするという事でしょうか。。?

プログラムでも想定外の状況は起こりえます。
プログラムはむしろ、常に想定外の状況を想定して開発するとも言えます。
プログラム開発とは、あみだくじを設計し、そのすべてのルートについて
処理を記述することとも言えます。
恐らく正常と言えるルートは1〜2割で、残りは想定外でしょう。

プログラムにおける想定外への対処とは、
起こることは想定できていても実際起きたらどうにも出来ない、
あるいは、想定すら出来ていないことが起きたときに、
出来るだけ影響の範囲が広がらないようにすることだと思います。
具体的には、
その想定外によってデータの更新が中途半端に終わってしまったり、
メモリの解放をし損じたり、データを掴みっぱなしとなって
他のアプリケーションの動作へ悪影響を及ぼしたり、はたまた、
コンピュータ自体が動かなくなってしまって再起動が
必要になったりしないようにすることです。

プログラム開発における「想定外」は、「例外」という表現が相当します。
具体的な例として、ファイルを読もうとした時に、
ファイルを問題なく読めたときが正常な状態がとした場合、
ファイルが存在しないために読めないときはトラブル発生ですが、
これを想定していれば「想定内」であり、
読めなかった理由をメッセージボックスでユーザーに通知の上、
処理をキャンセルするか、もしくは、
メッセージとともに別のファイルを選択する機会を示すなどが考えられます。
もし、ファイルが存在しないことを想定せずに処理を続行した場合、
不正なメモリを参照するなど、
事態がより深刻になる可能性を内在することとなります。

プログラム開発における想定外への対処とは、
1つでも多くのトラブルを想定して具体的な対処を組み込んでおくことと同時に、
個別の対処のしようがないトラブルすべてに対しては、
影響がゼロ(または限りなくゼロ)になる対処を組み込んでおくこと
だと思います。

今回の原発において、地震の大きな揺れの検知は、想定外の検知でもありました。
プログラムでいえば、例外(=想定外)の検知に相当します。
影響を最小限に抑えるための最後の機会は与えられていたとも言えます。

このタイミングで原子炉の運転の停止はできました。
続けて緊急冷却装置を動かして冷やす必要があり、その工程に入るはずが、
その電力が通常電源、非常電源のどちらからも得られない事態になった。
「非常電源も含め、もし全く電力が得られなかったら?」
という事態を想定した対処が組み込まれていなかったようです。
もし、今後は想定して対処するとした場合、
電力を得るルートをさらに確保しておくのでしょうか。あるいは、そもそも
電力に頼らない方法で原子炉の安全を確保出来るようにするのかもしれません。

プログラムにおける想定外への対処といっても、
ファイルにデータを保存中に、急にパソコンの電源を抜かれた状況までを
想定して対処していません。
(実際には、OS、あるいはハードウェアのレベルで策を講じます。)
…原発と比較するのはプログラムではなく、ハードを含めたシステム全体
 とするのが正しかったです。

原発についてはここ一カ月の報道で知り得た範囲の知識しかないため、
これ以上、私には想像できないのですが、
「もしこんなことが起きちゃったら!?」、「もしこれが使えなかったら!?」
という想定をし尽くして、策を講じることなのだろうと感じました。
もし、
「いや! これ(例えば電力)が無ければどうにできない!!」
という
リカバリーしきれない状況が想定でき、
その結果が許容しうるものでないことが想定出来た場合、
その人間の作りしものは、存在自体が危ういように感じますが、
今もこうして原発から供給される電力で暮らし、この文章をタイプしている私が
あれこれ言うのは、偽善的でしょうか。。

機会があればまた考えてみたいと思います。
posted by shibuta1218 at 07:20| Comment(65) | 日々雑感