この記事は、 ギルドワークス アドベントカレンダー の三日目の記事です。
テスト駆動開発は難しい
テスト駆動開発とは、もう殆どの皆さんには説明の必要はないでしょうが、 テストを先に書き、その後に実装を行う という開発方法です。テスト駆動開発を行うことで、素早いフィードバックを得ながらコードを書き、そして洗練させていくことができると 言われています 。
ですが、テスト駆動開発を取り組むにあたって、いきなりうまく回していくのは、かなり難しいです。
一体どれくらいの粒度のテストを書けばいいのか? テストが通らない「レッド」状態をどう抜け出せばいいのか? リファクタをどんなタイミングでどんな規模でやっていけばいいのか?
こういった疑問や不安が、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する方も、一度諦めた方も、いまやっている方も、ぜひ一度形稽古を!
この記事もどうですか?
-
関西ITベンチャーの憂鬱と魅力
関西のエンジニア不足 大手IT企業の多くが首都圏に拠点を構えています。その結果、エンジニアとしての就職を目指し上京する地方出身の方や、「情報の最先端である東京で働きたい!」と思い上京する方を多く見てきました。 一方、近年では大阪の産業構成に…
-
遠くへ、早く行くために欠かせないこと。
※注意:この記事は2014年11月4日に GuildWorks Blog で公開したエントリをリライトしたものです。 市谷です。 開発のスピード感を高めるものとは何でしょうか。アジャイルな開発プロセスの導入。凄腕プログラマーのチームへの加入…
-
課題をより深く掘り下げていく質問のやり方
ギルドワークスの 現場コーチ では、色々なクライアントの現場、チームのふりかえりに、アドバイザーやファシリテーターとして参加しています。 ふりかえりでは様々な手法、フレームワークを使いますが、代表的なものにKPT(Keep/Problem/…