なべひろBlog

プログラミングをメインに仕事に関するアレコレを発信しています。

常にワーストケースを考える

これ以外と抜けてる事が多いです。

特に経験が浅い人とか普段から色んなケースを想定できない人に多いですね。

ソフト的な話で見た事のあるのが戻り値がBOOL型のWindowsAPIの戻り値を見ないケースが多いです。

実行したWindowsAPIが成功するとか失敗した時の戻り値などに利用されています。

そう、製作者は「これ失敗する事なんか無いな」という判断をして手抜きしてしまうのです。

まあ、実際にWindowsAPIが失敗したケースを見た事がないので無視しても支障がないような気もしますが、もし失敗したら次の命令で正しい処理ができず、何か知らないがアプリケーションエラーが起きてアプリが強制終了したりするので利用者は困ります。

製作者に不具合を伝えるにしても「何かよく分からないけど落ちた」としか伝えられません。

こんな事にならないように、あり得ないだろうと思う所もちゃんとエラー処理を入れる癖をつけた方が後々困る事になりません。

上記の手抜きを注意した事がありました。

指摘された当人は「後で入れるつもりだった」と言ってましたが、後から莫大な対策を入れるのは入れ忘れがあったりプログラムの流れが大幅に変わったりで苦労しているようでした。

後から起こるミスや修正を考えたら最初から見越したプログラムを作った方が品質の高いプログラムが作れます。

電気的な話だと「非常停止ボタン」が分かりやすいです。

非常停止ボタンは知っている人であればb接点(ボタンを押さない時は接点がONしていてボタンを押すと接点がOFFする)を使用します。

b接点の逆はa接点でボタンを押してない時は接点がOFFしていてボタンを押すと接点がONします。

非常停止ボタンに関わるワーストケースでは断線やボタンの接触不良が考えられます。

もし非常停止ボタンをa接点で使い断線したら...非常停止ボタンを押しても何も入力されず停止できません。

※a接点では接点がONしている事で非常停止がONしたと考えます。

b接点で断線していたらボタンを押さなくても断線は「ボタンを押した」と同じ振る舞いになるので装置は動かず装置を止められないという最悪の事態は避けれます。

※b接点では接点がOFFしている事で非常停止がONしたと考えます。

エアー配管に問題がありエアー供給が絶たれエアーシリンダーが動作しない事を想定する場合はPLCのタイマーを使用し一定時間経過してもエアシリンダーに取り付けられた近接センサーがONしなければエラーにすればOKです。

モータを動かしている場合も同じようにチェックは可能です。

手法は何でもかまいませんので想定できる不具合の対処(安全な動作)は全てにおいて施せばワーストケースな事態が発生しても危険になる事はありません。