2007-07-08

TDD のアンチパターン

訳した. 元ネタは TDD Anti-Patterns. ネタ元は reddit (だったはず). いつもどおり YukiWiki にお世話になります. 適当に直してやってくださいませ. 内容は思いあたりすぎて節々が痛いです. 解決策とセットになっていないのが悲しいところ. 続編を stay tuned しております.

以下愚痴.

私の中で最近深刻なのは "Excessive Setup". 最初に書いたセットアップコードをついコピペしてしまい, ノイズに加えて重複も増えている. コピペすら面倒がって "Free Ride" してしまうこともよくある. セットアップを再利用するコツがわかっていない弊害だなあ. しばらくコピペを禁じ手にしようか... ネットワークを使う単体(じゃないけど)テストだと, サーバのセットアップと同期する必要があったりで一筋縄じゃいかないんだよなー.

"The Secret Catcher" もありがち. とりあえずオブジェクトをテスト下に置くべく excessive に初期化コードを書いて動かし, でも動いたあたりで挫けてしまうパターン. インスタンスを作ってメソッドを呼んでいるのに, 何もアサーションがない. 素通りのテストコードと, バグがあれば落ちるだろうという淡い期待 だけが空しく取り残されている.

細かいところでは "The Loudmouth". システムに用意されている 無効化可能なログ出力を使えばいいのに, つい printf を使ってしまい, そのまま放置. よくない. 最近は気がついた時に消している. "The Sequencer" は以前はよくあったけれど, 最近はないな. 発生頻度はアプリケーションに依存しそう. データベースが絡むと多そうだね.

"The Operating System Evangelist". 以前は別に OS 依存してもいいじゃんと思っていたが, クロスプラットホームのコードを書いていると 各環境毎に同じテストを動かしたくなってくる. 環境毎の挙動差に影響を受けやすい部分は特にそう思う. うまい手はないものかと考えているこの頃. (環境依存の時点でもう厳密な単体テストではなくなっているけれど, 厳密に単体であることよりはテストするのを優先している.)

以前 テストで手を抜く 話を書いたけれど, 手抜きが過ぎるとやがてアンチパターンに埋もれてしまう. 少しずつ改善していきたい.

あと似たような話題として Test Smells なんてのもあった. (読んでない.)