[コラム] TDD のパターン: Assert First
"Assert First" (Assert 文を最初に) は、 TDD するときのパターンのひとつとして Kent Beck の 「テスト駆動開発入門」 に出てきます。
最初のテストメソッドを書くときには、 これから実装する製品コードのメソッドのシグネチャ(名称、引数、型など)や置き場所、 それから肝心なテストケースとして与える刺激と期待される反応に、 製品コードを呼び出すために準備すべきことなどと、 たくさんの事柄を決断しなければなりません。 いっぺんに考えきれないようなら… そうです、 小分けにしてちょっとずつ進みましょう。
Assert 文を最初に書けば、 まず製品コードのメソッドのシグネチャを決断し、 最初のテストケースとしてふさわしい刺激と期待される反応を決めることができます。 それからおもむろに頭を切り替えて、 「この Assert 文をコンパイルして実行できるようにするには、 どんな準備をすればよいかな?」 と、 そこだけに集中して考えることができます。
最初に Assert 文を書いて、 それから段々と上へ書いていくようにすると楽だよ、 というのがこのパターンの言わんとするところです。 準備をするコードも含めて、 全部いっぺんに考えても苦にならないような簡単なテストなら、 頭から書き下しても構いません。
このパターンは、 テストの準備が複雑な時に有効で、 実際 「テスト駆動開発入門」 においても、 テスト対象のメソッドを呼び出す前にサーバーと接続してソケットを開かねばならないという例が載せられています。
Assert First について述べている原文を挙げておきます。
Assert First
When should you write the asserts? Try writing them first.
私なりの翻訳を次に示します。
Assert 文を最初に:
いつ Assert 文を書くべきですか? 最初に書いてみてください。
※ assert は、 本来は動詞です。 名詞として使われているここでは、 Assert 文を示しています。 なお、 assertion は名詞で、 assert すること。
※ "the asserts" (Assert 文たち) と複数になっていることにも注意。 "One Assertion per Test" (テストごとに、ひとつのアサーション) も良く言われますが、 Assert 文がひとつでなければならないという意味ではありません。 (ひとつのアサーションのために、 複数の Assert 文が必要なこともある。)
なお、 訳本ではこうなっています。 (p.126)
アサートファースト
アサートをいつ作成すべきなのか。 → 最初に作成すべきである。
原文に should も must も無いのに 「~すべきである」 と訳されたので、 かなりニュアンスが変わってしまいました。
ちなみに、 Assert First の直前に掲載されているパターンは Test First です。
原文はこうです。
Test First
When should you write your tests? Before you write the code that is to be tested.
私の訳
テストを最初に:
いつテストを書くべきですか? テストされるコードを書く前です。
Assert First とは違って、 こちらでは "Before you write" と断定しています。
訳本 (p.125)
テストファースト
いつテストを作成すべきか。 → テスト対象のコードを作成する前である。
これは上手な訳ですね。 私では、 "the code that is to be tested" を 「テスト対象のコード」 と簡潔に訳すことはできそうもありません。
なお付け加えておくならば、 ここは Part 3 です。
Assert First の翻訳がいまひとつだとしても、 Part 1 (Money オブジェクトの例) を写経した後で読んだのなら、 「常に Assert 文から書き始めなければならない」 などと誤解することはないと思います。
| 固定リンク
「*コラム」カテゴリの記事
- [コラム] Visual Studio 11 に統合できるテスティング フレームワーク(2012.03.22)
- [コラム] TDD のパターン: Assert First(2012.02.09)
- [TDD Advent Calendar jp: 2011] TDD とアジャイルを支えるバックボーン #TddAdventJp(2011.12.25)
- [コラム] TDD の原点 ~ Kent Beck による定義(2011.12.13)
- [コラム] TDD は止めて、 DbE (例示による設計) と呼ぼう!(2011.11.03)



コメント