「それ、どうやってテストするの?」
今日は弟子一号[*1]の作品をリファクタリング。70行にしてすでにスパゲティ+盲腸だらけという状態のコントローラクラスを21行まで減らす。
はてなのブログでは「オブジェクト指向とはなんぞや」「どうやったらオブジェクト指向を習得できるのか」という議論が盛んだけど、自分は「それ、どうやってテストするの?」という視点で考えるようにしている。ここでいうテストとはテストコードで機械的に片付けるテストのことね。手動で操作して「動きました」というのは論外。
もちろん、汚いコードでも頑張れば[*2]テストコードを書ける。でも、汚いコードはテストコードを書くのも大変だし、かなりの確率でテスト漏れが生じる。テストコード作成が楽なコードが即オブジェクト指向的に正しいかというと必ずしもそうではないのだろうけれど、品質でつまづく確率はか〜なり低くなる。
なので私はオブジェクト指向かどうかというのには(それほど)興味はない。おそらくは、美しく設計実装されたクラスというのはテストもしやすいのだろうけどね。
ちゃんとテストできるか? できなければ、どこを修正すればテストしやすくなるのか。 そういう視点で頭を使っている。