この記事は、 ギルドワークス アドベントカレンダー の三日目の記事です。
テスト駆動開発は難しい
テスト駆動開発とは、もう殆どの皆さんには説明の必要はないでしょうが、 テストを先に書き、その後に実装を行う という開発方法です。テスト駆動開発を行うことで、素早いフィードバックを得ながらコードを書き、そして洗練させていくことができると 言われています 。
ですが、テスト駆動開発を取り組むにあたって、いきなりうまく回していくのは、かなり難しいです。
一体どれくらいの粒度のテストを書けばいいのか? テストが通らない「レッド」状態をどう抜け出せばいいのか? リファクタをどんなタイミングでどんな規模でやっていけばいいのか?
こういった疑問や不安が、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する方も、一度諦めた方も、いまやっている方も、ぜひ一度形稽古を!
この記事もどうですか?
- 
                                    
                                        Elixr + GraphQL + Ionic 4で作るWebアプリケーション【ギルドカンファレンスコンテンツ紹介】 ギルドワークスでの最近の技術への取り組み ギルドワークスでは、前回新技術の取り組みについて、共有する場を持ちました。 『新しい技術を取り入れるための実験のやり方 〜サーバーレス・機械学習・PWAを実戦に投入するまで〜』を開催しました | G… 
- 
                                    
                                        ユーザーインタビューのスタイルを学べる、かもしれないテレビ番組3選 ギルドワークスの佐々木です。 はじめに ユーザーエクスペリエンスデザインや仮説検証を進めていこうというチームが増えてきています。 そんな中、インタビューをやったことがない、インタビューをどう進めていいか分からない、といった声をよく聞きます。… - 仮説検証
 
- 
                                    
                                        人の思いをコードの一行一行に仕立てていく。 ※注意:この記事は2015年7月10日に GuildWorks Blog で公開したエントリをリライトしたものです。 市谷です。 何気なく気づいたのですが、私たちがやっていることは 事業会社様の事業戦略の立案や実施を仮説検証のアプローチでお… 
