プロが教えるわが家の防犯対策術!

概要
プログラムやシステムの設計構築において”エラーやミスがあることを前提とする思想”と何という?


詳細
教えてください。
単体プログラムなどのごく小規模のプログラムコーディングや開発の場合はたいして気にすることは
ありませんが、結合プログラム以上のシステム構築する場合において
「前関数から引き渡された引数が間違っているはずがない。いちいちデータ型や内容をチェックする必要はない」
「データ位置はメモリのXXXX番地から始まっている。そこには必ずデータがあるはずであり、
データが無いなんてことはありえない。ましてやこのプログラム実行時に
”そのメモリ番地にアクセス権限が与えられていない”
などということは絶対にありえない」
などと過信してプログラムを動かすと、必ず”痛い目”に遭います。

 そのためにどうするかというと、慎重なプログラマ、SEならば、
前関数から渡された引数は、必ず正しい型であるか? 正しい内容か? 必要なだけ引数が揃っているか?
処理すべきデータは必ず存在しているか? データが無い、或いは処理すべき以上のデータがある、といった
異常は発生していないか?
詰まるところ、このままこのプログラムを動作させても大丈夫か?
といった、
「前処理までの結果を過信せず、正常動作する保証は今現在動かすプログラム自身に行わせる」
当然
「次の関数や次の処理に動作を引き渡す場合も、必ず正しい状態で権限を引き渡す」
という慎重さをもった設計思想で構築します。

そして当然ながらそれらプログラム動作に必要な条件がそろわない場合は、
「プログラム動作させずにエラー表示して停止させる」
「正常の処理可能なところまでは動作させるが、エラーデータは処理せずに飛ばす、
あるいは処理停止する」
などの対策をします。
間違っても
「プログラムは正しく動作させましたが、データが間違っているから予期しない結果が起きました。
悪いのはデータであって、プログラムではありません」
といった終了のさせ方はしません。
(ま、それでも不具合が出るときは出ますが)

このような
「前の処理は過信しない。
動作開始前にデータの信頼性やハードソフト、その他、
”プログラム動作に必要な前提条件は満たされているか?”
を必ずチェックしてからプログラムを実行させる」
というような設計思想、構築思想の事を、何というでしょうか?

情報処理試験の初歩的問題とかで出てきそうな内容なんですが、忘れました。

あと、この質問、おそらく
「それってフェイルセーフでしょ?」
「デッドマン問題の事?」
と言われそうですが、
フェイルセーフやデッドマンはどちらかというとパッシブな対応策(人間が操作ミス、入力ミスを犯してから初めて発動する)
であり、私が問うているのはどちらかというとアクティブな対応策なんで、フェイルセーフはちょっと違うんじゃないかな?
と思うんですが、どうでしょうか?

A 回答 (1件)

設計概念としては「フェイルセーフ」で良いのでは無いでしょうか。



 PDFファイルでこういった情報があるようです。

フールプルーフとフェイルセイフ
http://pub.maruzen.co.jp/index/kokai/oyoshinri/5 …


>「前関数から引き渡された引数が間違っているはずがない。いちいちデータ型や内容をチェックする必要はない」
 これはコンパイル段階での型チェックですかね。


>「前処理までの結果を過信せず、正常動作する保証は今現在動かすプログラム自身に行わせる」
 オブジェクト指向プログラミングで対応可能な話の様です。

 メソッドを呼び出すときに与えた引数が適切かどうかを判断させる機能を中に実装する技術がある。
    • good
    • 0
この回答へのお礼

早速のご回答ありがとうございます。
ご提示のPDFを見てみましたが、私が求めているのはどちらかというとフールプルーフのようですね。ただし、ご提示のPDFでの記載には「人間は間違いを起こすもの、という前提に基づいての未然防止策」という事ですが、私が問うているのは人間によるIOは関わらない部分での話です。
「人間は間違いを起こすもの、という前提に基づいての未然防止策」というより
「プログラムは間違いを起こすもの、という前提に基づいての未然防止策」
です。まあ、そのプログラムを作るのも人間ですけどね。

ご回答ありがとうございます。

お礼日時:2015/12/03 19:09

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!