「(正しく)動けば良い」

「動けば良い」と言う人はエラーが起きてから「動かないじゃないか」と文句を言う。仮令、その人の操作が間違っていたとしても言う。ある「動けば良い」と言う人が酷いバグで右往左往しているのを見て(少なくともその人の)原因に思い当たった。
その人はコードをデバッガで追うのが大好きだ。で、どこでSEGVが出たかを突き止めて、SEGVの箇所にエラーチェックを追加して修正完了とする。その結果、次々と別の箇所でSEGVが発生したり、エラー時のリカバリに失敗したりしている(ここで右往左往)。
NULL参照のエラーが出たということは、NULLであるべきでない変数にNULLが入っている、という状態になっているはずだ。この場合、NULLが代入された変数を参照した箇所は落ちるべくして落ちたに過ぎない。本当のバグはNULLであるべきでない変数にNULLを代入した箇所にある。
つまり、変数が取り得る値は何か、という観点が抜けている。もちろん、状態遷移図を描いたとしても、それぞれの状態のときに変数の値がどうなっているべきか、という点が定まらない。その結果、設計と実装とが完全に独立してしまう。動くわけがない。
「動けば良い」というのは「(正しく)動けば良い」であって「(間違っていても)動けば良い」ではない。「(正しく)動いている」と「(間違って)動いている」とを区別しない限り「動けば良い」と言うことには意味がない。

〆。

実はhttp://d.hatena.ne.jp/kilrey/20090910#p1の続きだったりする。