ボウリングでスペアを取得した場合のテストケースを考える

2014年10月15日(水)
吉谷 愛
  1. [高梨] おっ、わかりましたか?
  2. [古谷] 1ピンずつ倒していったら、5フレーム目の第2投球で10点になります。多分それをスペアだと勘違いしているからです!

図7: スペア取得ボーナス誤加算の原因(クリックで拡大)

  1. [高梨] なるほど! それではどうしましょうか?
  2. [古谷] そうですね…… つまり、今までの「合計が10になった時点」でフラグをセットするのではなくて、前回倒したピン数を覚えておいて、「前回と今回倒したピン数の合計が10ピンの時」だけスペアフラグをセットするようにするのはどうでしょう?
  3. [高梨] よさそうですね! やってみてください。
  4. [古谷] は、はい…… あっ、うまくいきました♪

図8: @last_pinsによる前回の投球結果の記録(クリックで拡大)

  1. [高梨] 素晴らしいです!
  2. [古谷] やったあ! では、次はいよいよストライクの仕様を……
  3. [高梨] おっとすみません、その前に念のため、もう1つテストケースを追加してください
  4. [古谷] えっ? スペアのテストですか?
  5. [高梨] そうです。お願いしたいのはこのパターンです。
第1投目2ピン倒す
第2投目5ピン倒す
第3投目5ピン倒す
第4投目1ピン倒す
残り16投全てガタ—
  1. [古谷] これは…… 第2投目と第3投目の合計は10点になりますが、フレームが違いますから、スペアにはならないですよね?
  2. [高梨] その通りです!
  3. [古谷] ちょっと嫌な予感がしますがやってみます…あ、やっぱり……
  4. [高梨] どうなりましたか?
  5. [古谷] このケース、スペアではないはずなのにスペアだと認識されてしまいました。うーん、なぜでしょうか?

図9: 今の実装の死角をテストする(クリックで拡大)

  1. [高梨] それはまさに、先程古谷さんが言っていた通りだと思います。2投目と3投目の合計は10点ですが、フレームが違うのでスペアにはなりません。ですが、今のプログラムでは、その判断を行っていません。

図10: スペア取得ボーナス誤加算の原因2(クリックで拡大)

  1. [古谷] そうか…… であれば、投球がフレームの2投目かどうか判断させて、2投目の時だけスペア判断をさせるようにする必要がありますね。
  2. [高梨] なるほど! それでは、そのようにプログラムを追記してください。
  3. [古谷] うーん…… こんな感じですか?

図11: スペア判定のために@shot_noで何投目かを覚えておく(クリックで拡大)

  1. [高梨] 大丈夫です! かなりプログラムが進化してきましたね。 そして古谷さん自身も、だいぶTDDに慣れてきたようですね。
  2. [古谷] そうですね、慣れてきたというのもありますが、少しずつ自信がついてきたような気がします。
  3. [高梨] それではそのよい状態のまま、次回は「ストライクを取得したときのテストケース」に進みましょう。連続ストライクの場合など、より複雑になっていきますので、頑張ってください!
  4. [古谷] はい!

<協力:株式会社ハウインターナショナル

フロイデ株式会社 代表取締役

「最新のアーキテクチャを追及し続ける技術者集団」を目指す、フロイデ株式会社代表取締役社長。現在は、自身のCOBOLからRailsまでの非常に幅広い開発経験や、学生や未経験社員への技術指導経験を糧に、技術講師としてソフトウエアエンジニアの育成に注力している。2013年06月より、初心者向けの「はじめようRuby on Rails開発!」シリーズを考案。“技術者の立場にたった、技術者の心に火をつける”熱い講義をモットーとしている。

連載バックナンバー

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています