1. Shuji Watanabe
  2. tddbc-sap-2.3

Wiki

Clone wiki

tddbc-sap-2.3 / Home

TDDBC 札幌 2.3

TDDBCは、テスト駆動開発を手を動かし学ぶイベントです。 http://atnd.org/events/21722

札幌では、2ヶ月に1回程度のペースで実施しており、少しずつテスト駆動開発の文化が根付き始めて来ました。

今回のTDDBCでは、札幌2.1の時に好評だった、1つ上のレイヤーからテスト駆動開発にアプローチする、すなわち振る舞いや受入テストを意識したテスト駆動開発を実践します。今回も3〜5名程度のチームに分かれ、1つのプログラムを作成していきます。参加者の中には今回が初めてのテスト駆動開発かもしれませんが、少しずつ教わりながら体験してみてください。

尚、今回のTDDBCでは「アジャイル開発におけるテスト」がテーマです。アジャイル開発では、1つの機能やフィーチャを「ストーリー」として抽出し、その「ストーリー」が完了することが1つのサイクルです。完了させるにはテストが必要です。どんなテストをどのようにする事が望ましいかを考えていきましょう。

ボーリングのスコア計算

ボーリングは、各プレイヤーが10回のフレームで投球をし、倒したピンの数からスコアを計算します。第10フレーム以外は最大で2回投球が可能で、第10フレームは最大で3回の投球を行えます。スコアの計算方法は次の通りです。

1. フレームにおいてスペア・ストライクがない場合(オープンフレームと呼ぶ)、2回の投球で倒したピンの本数がそのフレームの得点となる。
2. スペアを出した場合、倒した本数である10点に加え、次の1投球で倒したピンの本数がこのフレームの得点に加算される。
3. ストライクを出した場合、倒した本数である10点に加え、続く2投球で倒したピンの本数が加算される。つまり次の投球もストライクだった場合は、さらにその次の投球(2フレーム先の第1投球)で倒したピンの本数まで加算される。
4. 第10フレームのみ、スペア・ストライクを出した場合、3投して倒したピンの総数を第10フレームの得点として計算する。
5. 各フレームの得点の合計が1ゲームの得点となる。最高得点は300点となる。

Wikipedia#ボーリング#スコア計算

ストーリー

我々は、ボーリングのスコア計算システムを開発しますが、システムはスコア計算を中心に様々なフィーチャ(特徴)を持つ事が期待されています。しかし、最も重要なフィーチャはスコア計算であるため、最初にスコア計算を行うストーリーを選択し、開発を進める事になりました。 ストーリーとは、「顧客の言葉で説明した要求」であり、アジャイル開発における開発の基本単位です。このストーリーを実現することが目標になります。

ボーリングのプレイヤーとして:
ゲームのスコアを確認するために、スコア計算ができる

しかし、このストーリーは具体的ではないため、なにをもって「スコア計算ができる」と判断するか解りません。それが解らなければ、「ストーリーを実現した」つまり完了とする事ができないのです。

具体的な例に落とし込む

はじめに行う事は、ストーリーを具体的な例に落とし込む事です。例えばどのような点数と成り得て、どんな点数となるのでしょうか?具体的な例に落とし込むことで、それは具体的なゴールとなります。また、具体的な点数について、顧客も確認ができます。 さらに、この具体的な例は、プログラムとして動くテストコードとなることがベストです。プログラムとして実行できるようになれば、繰り返し実行できるようになり、素早いフィードバックを得ることができます。例えば、次のようなスコアとフォーマットでテストコードが動くようにしてみましょう。

Input: [[5,3],[7,2],[8,/],[X],[7,1],[9,-],[6,2],[X],[6,/],[8,-]]
Output: 126

[]: 1フレーム n: 倒したピンの数 X: ストライク /: スペア -: ミス 各言語で実行しやすい(そして読みやすいコードとしてください)。また、この例は様々なルールが絡み合った例です。

テスト駆動開発

最終的なゴールを決めたならば、小さく少しずつ開発を進めていきます。

Next Step

ゴールまで達したチームは、次のストーリーを実現する前に、様々なテストを実行してみましょう。特殊なデータやエラー処理は万全でしょうか?

ボーリングのプレイヤーとして:
ゲームのスコアを確認するために、リアルタイムにスコアを入力できるインターフェイスが欲しい

Updated