はじめに言っておきますと、テストは重要ですよ。テストしないなんてありえない。
でも、テストコードを書いて当たり前という昨今の論調には、同意できないのです。テスト熱中症になんて到底なれません。そう思うのは私だけではないようで、Rails の作者も書きまくればいいってものではないと言っています。
なぜ同意できないのか、理由を書き連ねて鬱憤を晴らすことにします。
コスト対効果が悪いから
もうこれに尽きる。尽きすぎる。テスト書いてもほとんど不具合なんて見つからないです。
なぜって? なぜでしょうね。知りませんが、ほとんど不具合ないんですもの。 typo の類はコンパイル時に修正されてますし。
コンパイル型言語じゃない? コンパイル型言語使えばいいんじゃないですか :-p
難しいバグは見つけられないから
テストコードでさらっとみつかる不具合はそもそも簡単・単純なものが多いです。 再現しやすければ、改修もしやすいわけで。たやすい。
仕込んじゃいけないバグ、難しいバグっていうのは、滅多に再現しない類のものです。 高負荷時にのみ発生するレース系の不具合や、レアな条件でのデータ構造破損などですね。 クラッシュ時のコンシステンシ問題なんかもそう。
テストコードでいちいちマシンをクラッシュさせたり、超負荷かけたりしないでしょ?
単純作業で面白くないから
インフラ系の開発なんてしていると、上に挙げたような難しい問題に取り組む仕事が多いわけです。
レース、コンシステンシ、アトミシティなどなどを設計時点で考慮して問題を潰していくわけですが、 仕事の半分以上は設計段階で片が付いているといって過言でない。
それに比べて。それに比べて、テストコード? あくびが出ますよ。誰でもできる仕事じゃない? 単純作業でやる気がでないから、かえって時間もかかるという悪循環。
プログラマに単純作業をさせちゃいけないってどっかの偉い人が言ってませんかね。 誰も言ってないなら、私が言います。プログラマに単純作業はさせちゃいけません! 少なくとも俺の生産効率はガタ落ちになります。
それでも書くべきときがある...
こんな鬱憤晴らしの記事を書いたのは、ええ、テストコードを書いていたからです。
なんでもは書きませんよ。こんなにテストが嫌いなのに書いたのは、以下の理由です。
入力が自由すぎる場合
まあパーサーの類ですね。入力が制限されていれば、ほとんどバグなんか仕込まない私ではありますが、なんでもこいな関数はさすがにきっちり試験したくなります。
手入力が面倒・無理な場合
バイナリ系の入力はテストコード書かないと試験できないので、これは仕方がない。
書いてないとレガシーコードとかいって笑われるから
そこ、笑っちゃいけません。結構気にしているんです。。
パッチを書いてくれる人のため
パッチを投げる側の気持ちにたつと、テストをパスしたパッチを投げたいですよね~
お目汚しな記事で失礼しました。それじゃ今日もハッピーテスティング!