テスト駆動開発(TDD)とは何か?


この記事の内容について

この記事は私が『テスト駆動開発』を読み、テスト駆動開発(以下TDD)について理解したことをまとめたものです。
『テスト駆動開発』からの引用と意訳を多く含みます。引用元は注釈をご確認ください。

TDDとは何か?

TDDはテスト技法ではない。
分析技法であり、設計技法であり、実際には開発のすべてのアクティビティを構造化する技法。1

TDDのTは「テスト」の一部。ではTDDのテストとは何か?

それは Checking である。2

テストと確認(Check)は違う。
確認(Check)は思ったとおりに動くことを確認する行為。つまり期待値との比較なので、機会が得意とするところ。
テストとは対象を壊しにいく行為。これは人間が得意とするところ。3

TDDのテストは、思ったとおりに動くことを確認するものなので、確認(Check)にあたる。

TDDは実際には何で駆動されているのか?

ここまででTDDとは「テスト」という言葉から抱くイメージとは、かなり違うものだとわかる。
では、実際にはどういった言葉が適切なのだろうか?

それは「振る舞い(Behavior)」である。4

テスト駆動開発(TDD)改め振る舞い駆動開発(BDD)は、テストやアサーションといった語彙の先入観による誤解を避け、強みを最大限に引き出すために生まれた。

TDDは誰でもできるのか?

TDDはスキル5

練習によって獲得できる技術。
しかも「個人スキル」なので、状況に依存することなく始められる。

TDDを使ったほうが良いのか?

自分が活用できるテクニックとして加わればよく、最終的には使わなくてもよい。6

優れたエンジニアリングがプロジェクトの成功に占める割合は20%といったところ。
この観点では、TDDを使うと業界の標準的な指標以上になるので「やりすぎ」といえる。7

まとめ

最初は「TDDはテストを最初に書く」くらいのイメージしかなかったのですが、『テスト駆動開発』を読んでその認識は正されました。

教条主義化や意味の希薄化8 が起こっているという話からは、「アジャイル」や「技術的負債」にも同じものがあると感じています。
不安から開放してくれるはずの技法が、他人を攻撃するモノになったり、正しく活用されないのは残念なことです。
とはいえ、それを避けるために生まれたBDDの「振る舞い(Behavior)」という言葉は「テスト」よりも馴染みのないと思われるので、浸透するのはまだ時間を要しそうですね。

それはさておき、私個人としてはTDDは魅力的なスキルです。
プロダクトやビジネスを加速させるためのテクニックとして、積極的に身につけていきたいですね。

書籍について

テスト駆動開発
著:Kent Beck
訳:和田卓人
出版:オーム社


  1. p.278 名前の由来は 

  2. p.293 TDDのTは「テスト」の一部に過ぎない 

  3. t_wadaさんの解説より LAPRAS公開設計レビュー 「t_wadaさんにこのテストでサバンナを生き抜けるか聞いてみた」 

  4. p.296 TDDからBDDへ 

  5. p.306 TDDはスキル 

  6. p.307 自分のスタイルを 

  7. p.274 TDDは誰のためのものか 

  8. p.300 教条主義化と意味の希薄化