Calabash-AndroidによるBDDの実践とJenkinsによる「Living documentation」スマホ向け無料システムテスト自動化ツール(6)(2/4 ページ)

» 2015年03月05日 18時00分 公開
[伊藤宏幸,テスト自動化研究会(STAR),楽天株式会社]

表形式の活用による仕様の発見

 ここでは、CustomerPreviewActivity画面の「区分」欄(マーケティング区分)の仕様を、「SpecifyByExampleTable.feature」の表形式を活用した対話から引き出していく例を紹介します。

 なお、B)はビジネスステークホルダーを、D)は開発者、テスターを指すこととします。

D)まず女性の場合、どのような区分がありますか?

B)成人女性の場合、「F1層」「F2層」「F3層」の3つの区分があります。

D)これらの区分は、何によって決まるのでしょうか?

B)年齢で決まります。「F1層」は20〜34歳、「F2層」は35〜49歳、「F3層」は50歳以上の女性です。

D)ということは、このようなイメージで合っていますでしょうか?

|name        |email                    |gender|age|previewGender|division|
|暁美 ほむら|homura.akemi@example.com |female|20 |女性         |F1層    |
|鹿目 まどか|madoka.kaname@example.com|female|34 |女性         |F1層    |
|美樹 さやか|sayaka.miki@example.com  |female|35 |女性         |F2層    |
|佐倉 杏子  |anko.sakura@example.com  |female|49 |女性         |F2層    |
|百江 なぎさ|charlotte@example.com    |female|50 |女性         |F3層    |

B)はい、合っています。

D)ちなみに、この場合20歳未満だと、どうなるのでしょうか?

B)あぁ、その場合ですと、「T層」になりますね。

D)「T層」ですか! なるほど、このような感じですかね。

|name        |email                    |gender|age|previewGender|division|
|巴 マミ    |mamiru@example.com       |female|19 |女性         |T層     |

B)なお「T層」は、13〜19歳の男女が該当します。……あっそうそう、4〜12歳の男女「C層」と呼んでいました。

D)それは重要な情報ですね! 書き足しておきましょう。

|name        |email                    |gender|age|previewGender|division|
|牧瀬 紅莉栖|christina@example.com    |female|12 |女性         |C層     |
|桐生 萌郁  |shiningfinger@example.com|female|4  |女性         |C層     |

※男性もデータ例として追加してみたところ見づらくなったため、今回の例では女性だけに絞っています。以下同様。

D)ちなみに、これですと4歳未満の場合は、どうなりますか?

B)4歳未満については、考えなくていいです。画面で入力できる年齢は4歳以上とします。

D)なるほど、画面で入力できるのは4歳以上と……。なお年齢が未指定だった場合は、どうしますか?

B)その場合は「分類外」としましょう。

|name        |email                    |gender|age|previewGender|division|
|漆原 るか  |rukako@example.com       |female|   |女性         |分類外  |

D)まとめますと、次のイメージで合っていますでしょうか?(※注

When I enter customer information and preview it as follows:
|name        |email                    |gender|age|previewGender|division|
|暁美 ほむら|homura.akemi@example.com |female|20 |女性         |F1層    |
|鹿目 まどか|madoka.kaname@example.com|female|34 |女性         |F1層    |
|美樹 さやか|sayaka.miki@example.com  |female|35 |女性         |F2層    |
|佐倉 杏子  |anko.sakura@example.com  |female|49 |女性         |F2層    |
|百江 なぎさ|charlotte@example.com    |female|50 |女性         |F3層    |
|巴 マミ    |mamiru@example.com       |female|19 |女性         |T層     |
|椎名 まゆり|mayucy@example.com       |female|13 |女性         |T層     |
|牧瀬 紅莉栖|christina@example.com    |female|12 |女性         |C層     |
|桐生 萌郁  |shiningfinger@example.com|female|4  |女性         |C層     |
|漆原 るか  |rukako@example.com       |female|   |女性         |分類外  |

B)はい! まさにこれです!

 このように、実際に例を書いて一緒に見ながら対話を繰り返すことで、どのような仕様なのかを明確にしていくことができます。また、この対話で漏れを極力なくす形で例を埋めていくことで、漏れのないテストケースを作り上げることもできます。

 さらに表形式は、ビジネスステークホルダーら非技術系ステークホルダーにとっても読みやすいものなので、協力を得やすく、また対話もしやすいです。

※注:年齢が未入力のケースを最初にテストする理由

 ちなみにサンプルプログラムで実際に公開している「SpecifyByExampleTable.feature」では、年齢が未入力のケースを最初にテストするようにしています。

 これは、以下の理由によります。

  • 現状、CustomerPreviewActivity画面からCustomer Detail画面へ戻る処理を、(「press_back_button」メソッドで)端末/エミュレーターの「戻る」ボタンを押して実現している
  • 上記の方法だと、「NumberPicker」に先に入力した値が残ってしまう
  • 現時点では、「NumberPicker」に先に入力した値をクリアする方法がない

 本来であれば、テスト結果はテストの実行順序によって変わらないようにすべきです。しかし本稿の執筆に際しては、前回の「NumberPicker」の課題を締め切りまでに解決できなかったため、応急処置としてこの方法を採用しました。

 これこそ、まさに、「技術的負債」が生まれた瞬間です。「技術的負債」は、プロダクトの成長に反比例してプロダクト開発全体の効率を下げるため、できるだけ早い段階で解決するようにしましょう。

 なお今回のサンプルプログラムについては、「com.nowsprinting.hellotesting.app.models.Division」に「マーケティング区分」の仕様がまとめられています。

public enum Division {
DivisionM1,     //M1層(男性20〜34歳)
DivisionM2,     //M2層(男性35〜49歳)
DivisionM3,     //M3層(男性50歳以上)
DivisionF1,     //F1層(女性20〜34歳)
DivisionF2,     //F2層(女性35〜49歳)
DivisionF3,     //F3層(女性50歳以上)
DivisionC,      //C層(男女4〜12歳)
DivisionT,      //T層(男女13〜19歳)
DivisionNone    //分類外

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。