ドメイン分析勉強会で学んだこと #NaITE

前回に引き続き、ブラックボックステストの話です。

2月20日の土曜日にドメイン分析勉強会がありました。

nagasaki-it-engineers.connpass.com

発表スライド

www.slideshare.net

1問目

f:id:nihonbuson:20160222093047p:plain

http://www.slideshare.net/mhlyc/ss-58471801/37

問題に対する意見

  • 「Lv.20に到達したとき進化する」というのは、Lv21以降は進化しないのか?
    • 「Lv.21以降も進化する」とのこと
    • つまり、「Lv.20以上は進化する」と訂正されました
  • 「Lv.100に到達した後、なつき度が200を超えた時、進化できるのか?
    • 進化しません。あくまでもLv.100に到達した瞬間になつき度が200を超えていたら進化します
      • すると、テスト対象は「Lv.Xの時に進化するかどうか」ではなく「Lv.X-1からLvXに変化した時に進化するかどうか」がテスト内容ではないか。
        • それならば、「X=1」は有効同値クラスではないのではないか。(Lv0からLv1に変化した時はエラーになるはず)
    • 登場する条件に主従関係があるので、デシジョンテーブルでやった方が良いのでは?

自分が解いた図

f:id:nihonbuson:20160222093145j:plain

f:id:nihonbuson:20160222093200j:plain

  • 赤い部分が進化する場所、青い部分がエラーの場所

解いた結果後の疑問

  • X≧1やY≧0の条件は必要ないのでは?
    • 「進化する」というドメインをテストしたい場合には必要が無さそう
      • 「進化しない」というドメインもテストする場合には、図のL字部分(赤でも青でも無い場所)のテストを行う必要がある
  • Lv.101以上やなつき度256以上をテストする必要が無いのでは?
    • 「進化するかどうか」をテストするという目的ならばテストする必要はなく、別の「範囲外はエラーになるかどうか」という目的のテストで行うべきでは。
    • ポケモンを想像するとエラー前提でテストする必要があるように思えるが、最近のスマホゲームとかは最大Lvの引き上げとかがあるので必ずしもエラーではない
  • XとYの両方がONポイント(カド部分)のテストをなぜ行わないのか?
    • そのテストをして期待値通りの結果にならなかった場合、どちらが原因で期待通りにならなかったか分からないため
      • ドメイン分析は、あくまでも対象の直線(もしくは曲線)の式が正しいかどうかを見るために行っている。
      • なので、傾きなどが正しいか他のテストケースで示すことができれば、XとYの両方がONポイントのテストを行う必要がないはず。
    • 理科の実験と同じで、テストしたい部分以外はできるだけ影響を与えない場所(INポイント)を取った方が良い
      • すると、「傾きが正しいことも同時に確かめられるため、INポイントを固定しないほうが良い」という考え方は、失敗の原因を隠すのではないか?
        • あるテストケースが失敗した場合、それがONポイントが原因なのか、INポイントが原因なのか判断つかなくなるのではないか?

2問目

f:id:nihonbuson:20160222093235p:plain

http://www.slideshare.net/mhlyc/ss-58471801/39

自分が解いた図

f:id:nihonbuson:20160222093300j:plain

f:id:nihonbuson:20160222093310j:plain

  • 赤い部分が対象

解いた結果後の疑問

  • X<30はX≦29と書き換えた方が良いのでは?
    • OFFポイントが有効で、ONポイントが無効になってしまうので分かりづらそう
    • ちょうど、 @akiyama924 さんがドメイン分析で似たような話をしていたので聞いてみました

  • どちらが良いのではなく、統一することが大切なのは、まさしくそうだと感じました。

  • 3次元の図を描く必要は無いのでは?

    • 描くことが必須ではない
    • ONポイントやOFFポイントがどこか分かるために描いたりする

演習問題を解き終えた後の意見

  • 今回の例題2つはそもそもドメイン分析で解かないのでは?
    • 1問目はデシジョンテーブル、2問目は境界値分析で十分
    • ドメイン分析を行うのは、4次元以上だったり、2変数以上を組み合わせた条件があった場合
  • テスト設計技法を考える前に、そのテストの目的は何なのか考えることが大切
  • テストケースを具体的に考えることで、そもそもの仕様の不透明部分が分かったりするので、今回のように考えることは実装前のレビューとして有用

終わりに

  • 内容はドメイン分析の勉強会ながら、テスト目的やレビューなどにも話が及んで大変参考になる勉強会でした!