xUTP Topics: 第二回 xUnit Test Patterns の世界観「テストコードの不吉な臭い」

書いた人
@yujiorama(id:yujiorama)

目次

  • 目的
  • はじめに
  • テストコードの不吉な臭い一覧
  • 逆引きテスティングパターン
  • さいごに

目的

この連載記事の目的は次のような感じです。

  • xUTP読書会で得られた知見を整理する
  • xUnit Test Patterns に書かれている内容を分かりやすい形で広める

英語の壁も、難しさの壁も、読書会の有志による努力によって取り払われました。

軽い気持ちで、xUnit Test Patterns に挑戦してみましょう。

はじめに

私見ですが、分量の多い本なので、全体像を掴んでから興味のありそうなところを つまみ読みするのがよいのではないか、と思っています。

前回は表紙の裏に記載されている、「テスティングパターンの一覧」について示しました。

今回は裏表紙の裏に記載されている、「テストコードの不吉な臭い一覧」と「逆引きテスティングパターン」 を紹介したいと思います。

例によってリンクはxUTP読書会Wikiから辿れるようになっています。 リンクの無いものは、独立した章にはなっていないものの、文中で触れられているキーワードとなります。

テストコードの不吉な臭い一覧

「テストコードの不吉な臭い」とは、マーティン・ファウラーのリファクタリングでも触れられている 「リファクタリングが必要であるような腐ったコード」のテストコード版です。

例えば、テストコードが増えてくるにつれて、プロダクトコードと合わせて修正する対象が増えてしまい、 結果として生産性が低下してしまうという経験はよくあることでしょう。

xUnit Test Patterns では、そういった傾向を「不吉な臭い」と呼び、パターンとして分類しています。

「テストコードはあるのに何故かうまくいかない」という状況になったら、見直してみる価値はあると思います。

  • Assertion Roulette
    • テストが失敗した際、どのアサーションで失敗したのか分かりにくいテストメソッド。
  • Buggy Tests
    • バグが定期的に見つかるような自動化テスト。
  • Conditional Test Logic
    • 条件によって実行されたり、されなかったりするコードが含まれているテスト。
  • Developers Not Writing Tests
    • 開発者が自動化テストを書いてくれない。
  • Erratic Test
    • あるときは成功したりまたあるときは失敗したりといった不安定なテスト。
  • Fragile Test
    • SUT のテストに関係のない部分を変更したはずなのに、テストがコンパイルできなくなったり失敗するようになったりする。
  • Frequent Debugging
    • テストが失敗する原因を調べるのに手動のデバッグが必要なテスト。
  • Hard-to-Test Code|
    • テストを書くのが難しいコード。
  • High Test Maintenance Cost
    • メンテナンスしていくのに大きな手間のかかるテスト。
  • Manual Intervention
    • 実行するたびに人が何かの操作をしなければならないようなテスト。
  • Obscure Test
    • 一瞥して理解できないくらい難しいテスト。
  • Production Bugs
    • 形式的なテストや商用環境で検出された多くのバグ。
  • Slow Tests
    • 実行にとても長い時間のかかるテスト。
  • Test Code Duplication
    • 同じようなコードが繰り返し書かれているテスト。
  • Test Logic in Production
    • テストのときだけ実行されるロジックをプロダクションコードに埋め込んでしまったテスト。

逆引きテスティングパターン

私達の開発するシステムは、規模も複雑さもまちまちです。

しかし、本質的には同じような構造を有しているものが多くあります。

これは、テストコードにも同じことが言えます。

そこで、直面している問題について本質を見抜き、適切なテスティングパターンを選択することで、 良いテストコードを書くことができるようになるでしょう。

なお、SUT とは System Under Test の略語で、本文で頻出する単語です。 具体的には、開発しているシステムを構成するコンポーネントの中で、テストコードが対象としているものを指します。

さいごに

次回以降の方向性として、目次を概観するか、テスティングパターンランゲージの領域ごとに概観していくか、少し迷っています。

「全体像はいいから、ここの説明を詳しく!」などのご意見などいただければ、検討させていただきたいと思います。

ご意見、叱咤、反論などはいつでも承りますので、お気軽にどうぞ。

長いリスティングにお付きあいいただき、本当にありがとうございました。

修正履歴

  • 2011/12/01
    • 「不吉な匂い」は有名な誤訳であるとのご指摘をいただいたため「不吉な臭い」に修正
Last modified:2011/11/30 22:40:31
Keyword(s):
References:[xUTP Magazine 0002号] [ぺけま]