安定性のあるソフトウェアの効率的なコーディング手法について

Radium Softwareさんの

Pike らは, Sawzall が扱うような種類のデータに限って言えば,そのような「狂ったデータ」を無視してやるだけでシステムの安定性を確保することができると主張する。

そう。これからWriting Secure Code
http://www.amazon.co.jp/exec/obidos/ASIN/4891004460/studiokingyo-22
に書いていたことを思い出した。



不正なデータを排除するようにコーディングをするのではなく
正当なデータのみを処理するようにコーディングする

との事。


擬似コードにすると


if(error == arg) return エラー値;
処理
よりは

if(success == arg){
処理
return 成功値;
}
return エラー値;
ということだ。*1
私の書いているライブラリは複雑なデータを扱っていないので「不正なデータを排除する」ように書いているが、実際は「正当なデータのみを処理する」方が理想的なのだ。
この方が正当なデータとして判断されてチェック処理から漏れる事を防ぐことができるとの事だ。
ちなみに、経験的に両方の考え方でチェック処理を書き下すと頭の中が混乱してテストではなかなかチェックできないようなバグを生んでしまうのでこれは止めたほうがいいと思う。

*1:success条件は単純であるほど頭の中でビジネスロジックが整理されやすい。