この記事は、 ギルドワークス アドベントカレンダー の三日目の記事です。
テスト駆動開発は難しい
テスト駆動開発とは、もう殆どの皆さんには説明の必要はないでしょうが、 テストを先に書き、その後に実装を行う という開発方法です。テスト駆動開発を行うことで、素早いフィードバックを得ながらコードを書き、そして洗練させていくことができると 言われています 。
ですが、テスト駆動開発を取り組むにあたって、いきなりうまく回していくのは、かなり難しいです。
一体どれくらいの粒度のテストを書けばいいのか? テストが通らない「レッド」状態をどう抜け出せばいいのか? リファクタをどんなタイミングでどんな規模でやっていけばいいのか?
こういった疑問や不安が、TDDをやり始めると浮かんでくると思います。
TDD Kata をやろう!
そこで、TDD Kata です。
Kata とは 「方」、すなわち、武道などで行われる「形稽古」のことです。
形稽古では、決められた動きを決められた手順でトレースすることで、動きを体に覚え込ませます。そこに一切のアレンジを入れてはいけません。守破離の「守」を徹底的に行う稽古ですね。
同様に、TDD Kata とは、TDDの基礎的なプラクティスを、守るべき「方」として定義しています。
しかし、プログラミングの方ってどういうものか、ちょっとわからないですよね?それでは、いくつか例を見てみましょう
TDD Kata の実例
今回取り上げるのは、TDDの父の一人でもある、”アンクル・ボブ” Bob Martin氏が公開している、以下のTDD Kata を見ていきましょう。
-
BowlingGameKataという名前のとおり、ボウリングのスコア計算を行うものです。
Kataというからには、本当に一挙手一投足まで、細かく定義されています。例えば、このような具合です。
はじめに
- BowlingGameKata という名前のProjectを作成する
- BowlingGameKataTest というテストクラスを作成する
- この時点で、まずテストを実行すると、”No tests found in BowlingGameTest” というエラーが発生する
このように、プロジェクトの名前だけでなく、 どのタイミングでコンパイルを行い、どのタイミングでテストの実行を行うのか といった、プログラミングの所作まで定義しています。コードそのものについては、どこを消すか、どこを増やすかというのを各ステップごとに分かるように、ステップごとのコード全体を以下のように表示しています。

このように、各ステップその通りにコードを書いていくことになります。この例だと、「この段階ではテストが失敗する」ということも示されていますね。
TDDの悩みの一つである、リファクタリングをいつ行うかについても、ステップの中で行うタイミングや行うポイントをわかりやすく示しています。以下のような場面でリファクタリングが行われています。
- 重複処理をまとめてメソッド化する
- setup メソッドにテストの初期化処理を集約する
- 説明的なコメントを含む処理をメソッドに切り出す
最後に
ここまで紹介してきましたが、実際には自分で手を動かしてみるのが一番です。本家であるJava版は パワーポイントをダウンロードできます ので、是非それを参考にKataをやってみてください。
また、他の言語についても、 Githubに様々なポーティングが投稿されています。
是非、試してみて下さい。
ただし、大切なことは、「方」を守ること。そして、繰り返し行うこと。慣れてくれば30分で終わる方です。私はお昼休みに一ヶ月間解き続けて、TDDの呼吸がなんとなく掴み取れたかな、と思っています。
これからTDDする方も、一度諦めた方も、いまやっている方も、ぜひ一度形稽古を!
この記事もどうですか?
-
「俺のエクストリームプログラミング入門 」を合宿で聞いた
先日、ギルドワークスの合宿の一コマで永和システムマネジメントの 木下 史彦さん に「俺の エクストリームプログラミング入門 」と題して「 木下さんなりのアジャイルについての考え 」を話してもらいました。 木下さんと言えば「エクストリームプロ…
-
月と、人狼。 第07回「チーム作りの四方山」
月と、人狼。 第07回「チーム作りの四方山」 の話です。 「月と人狼。」の背景は 市谷と中村洋の2人が、毎回テーマを決めて語り合う場を始めました。 に書いているので、よければ読んでみてください。 第8回は 「チーム作りの四方山(続編)」 を…
- 正しいものを正しくつくる
-
現場コーチがよく使う会議のアジェンダ
状況 アジェンダがない会議。 困り事 その会議の目的が果たせない。 果たすまでに余計な時間がかかったりする。 こう考えて、やってみる まず、その会議をやる必要があるか考える。情報を共有するだけであれば集まらなくてもいい。 また決めることが目…
- ミーティング