ルール2バグは伝染する
バグってやつは、早期に見つけるほど修正しやすくなる。プログラミングについての、そんな当たり前の話がある。この話は、一般的にはその通りだ……でも、「バグを見つけるのが後になればなるほど直すのがウザくなる」っていう方が、ずっと正確なんじゃないかって思う。
いったんバグが存在するようになると、そのバグに依存したコードを、みんな意図せず書いてしまう。バグに依存したその手の不安定なコードが、バグがあるシステム内でバグの近くに存在することもある。そういうコードが、バグの近くに存在しないことだってある。つまり、対象のシステムを呼び出し、そのシステム内のバグが発生させる不正な結果に依存する、下流に存在するかもしれない。そうでなかったら、バグに依存するコード部位は、上流に存在する。つまり、バグのせいで特定の方法で呼び出されるようになっており、そのおかげで動作しているものの、バグが消えると動作しなくなるような、上流にあるコードの塊だ。
こういうのは自然の成り行きで、避けようがない。ぼくらが気づくのは、うまくいかない物事であって、うまくいく物事じゃない。うまくいかない時は、ぼくらは原因を探る。でも、物事がうまくいかない時以外は、調査しない。コードが動作する、あるいは動作しているように少なくとも見える場合、自分が想定している方法で動作していると思い込む、自然な習性がある。でもほとんどの場合は、全然想像もしなかった理由で動作していたりする。そして調査しないので、コードが偶然動作する原因となった、こんがらかった状況の数々を発見することは、決してない。
これは、自分で書いたコードにも言えるし、自分のコードを呼び出す、他者が書いたコードにも言えることだ。チームのコードベースにバグをコミットすると、そのバグに依存する他のコード部位がゆっくりと、しかし必然的に、コードベース内に蓄積されていく。明白に現れているバグを修正し、プロジェクトのどこか他の部分が不思議なことに動作しなくなった時に初めて、それまで隠れてたこんがらかってる部分が目に入るようになる。 ...