この記事は、 ギルドワークス アドベントカレンダー の三日目の記事です。
テスト駆動開発は難しい
テスト駆動開発とは、もう殆どの皆さんには説明の必要はないでしょうが、 テストを先に書き、その後に実装を行う という開発方法です。テスト駆動開発を行うことで、素早いフィードバックを得ながらコードを書き、そして洗練させていくことができると 言われています 。
ですが、テスト駆動開発を取り組むにあたって、いきなりうまく回していくのは、かなり難しいです。
一体どれくらいの粒度のテストを書けばいいのか? テストが通らない「レッド」状態をどう抜け出せばいいのか? リファクタをどんなタイミングでどんな規模でやっていけばいいのか?
こういった疑問や不安が、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する方も、一度諦めた方も、いまやっている方も、ぜひ一度形稽古を!
この記事もどうですか?
-
Vue連載その1 まずはVueに触れてみよう〜最初に実施するコマンド〜
目次 はじめに Vue.jsとは なぜVue.jsなのか まずはVueに触れてみよう まとめ はじめに 最近、ギルドワークスでは Vue.js を活用して、フロントエンド開発を進めているプロジェクトが増えてきています。本記事から連載形式で、…
-
Amazon S3を利用して超低額でサイトを公開(設定編)
上野です。 Amazon S3を利用して超低額でサイトを公開する でS3でコーポレートサイトを公開するメリットを書きました。 今回は具体的な設定方法について書いていきます。 ※注意:この記事は2014年9月5日に GuildWorks Bl…
-
キャンバス・マップをまとめてみる(後半)
ギルドワークスの佐々木です。 IT業界に出回っている様々な「 キャンバス 」や「 マップ 」をまとめてみたいと思います。 前半の記事 では◯◯キャンバスについてまとめました。今回は後半として◯◯マップをまとめてみたいと思います。 目次 以下…