ソフトウェアテスト技法練習帳「同値分割法と境界値分析#1」


初めまして。最近コロナの影響で外出自粛をしているため、今までやりたくてなかなか出来なかった
「ソフトウェアテスト技法練習帳 知識を経験に変える40問」
を会社の同期と取り組むことにしました。練習帳を解いて間違えた部分や、重要だと感じたこと、疑問点などを備忘録として残そうと思います!ご意見お待ちしております(^^♪
※色々な問題があるため、本に記載されている問題は記載しません!ご興味ありましたら是非購入してみてください。

「ソフトウェアテスト技法練習帳 知識を経験に変える40問」とは?


本書は、ソフトウェアテストを学びたい人が、ソフトウェアテスト技法の練習問題を解いて、以下のソフトウェア技法を身に着けられるようにとの願いを込めて作成したものです。
・同値分割法と境界値分析
・デシジョンテーブル
・状態遷移テスト
・組合せテスト

本書はテスト技法についての説明は無い為、テスト技法をある程度勉強し、実践してみたいと思っている方向けだと思います。
では早速始めます(/・ω・)/

1.2 キッチンスケールの動作検証(同値分割法と境界値分析)

問題イメージ
・食材や調味料の計測が可能なキッチンスケールの液晶表示
・規定値を超えたりマイナスの場合はエラー表示
・同値分割法・境界値分析を用いて表示内容のテストケース作成する

画像1

今回二人で実施したところ、二人の結果に違いが発生!なぜこのような結果の違いが発生したのか整理していった。

導出方法の整理

A氏の考え
・同値分割として W<0 , 0≦W≦100 , W>100 に分割 
・境界値として 0 100 を設定
・その境界値に対して「3ポイント境界値分析法」を適用

B氏の考え
・同値分割として W≦-1 , 0≦W≦100 , W≧101 に分割
・境界値として -1 , 0 , 100 , 101 を設定
・それぞれの境界値に対して「3ポイント境界値分析法」を適用

◇無効同値パーテーションのとらえ方に差が発生
・A氏は有効同値の値に対して「未満」や「超」で無効同値をとらえた
・B氏は有効同値の値に対して「隣接する値以下」「隣接する値以上」で無効同値をとらえた

◇境界値の設定方法に差が発生
・A氏は境界値を有効同値に着目して設定
・B氏は有効同値と無効同値に対して境界値を設定

議論で出た意見

◇同値分割について
・W≦-1 , 0≦W≦100のようにとらえると -1と0の間は本当に考えなくていいのか気になる。
→今回の問題文には1g単位との記載があったため、テストに漏れはなさそうだが、開発初期の仕様が固まっていないタイミングの時は無効同値の値を決めてしまうのは危険と感じた。
→表示上は1g単位だが、プログラムの内部処理としては小数点以下を扱っている可能性もあるため、W≦-1 ではなく W<0 として記述し、実装仕様を確認したうえで境界値分析するのが良さそう。

◇境界値分析について
・B氏は有効同値と無効同値に対して境界値分析を行ったが、それぞれの境界値に対して3ポイントとらえると4点出てきた
→A氏の方法より広い範囲をテストできるため、基本的には有効同値と無効同値のそれぞれに対し境界値分析を行うほうが良い。(←JSTQB FL教科書では推奨されている方法)
→有効同値と無効同値に対して境界値分析を行うと考えが少し複雑になるので注意。

・B氏は境界値分析をする際に、IF文の≦と=の記述ミスなどがテストで拾えるか などプログラムの中身まで想像して導出していた。
→例えば無効同値のIF文の条件を「101≧W」と記載すべきところ「101=W」と記載してしまったエラーをA氏のテストケースでは拾うことができない。(入力として101gを入れてもPassしてしまう)
→A氏は機械的に境界値分析をしていたため、記述ミスを拾うことを考えていなかった。

ドリルの解答例

◇同値分割のクラス分け
・B氏と同じく、W≦-1 , 0≦W≦100 , W≧101とクラス分け
・同値クラスの代表値もテストケースに含めている。
◇境界値分析
・自分たちのように境界値に対して3ポイント境界値分析をしているわけではなく、有効クラスの境界値に対する下限値/上限値や無効クラスの境界値という分け方をしている。

まとめ

◇同値分割について
・議論の結果、同値分割の方法はドリルの解答例ではなく、W<0 , 0≦W≦100 , W>100ととらえたほうが実装仕様に柔軟に対応できる為、あくまで有効同値の値にフォーカスしてクラス分けしたほうが良さそうという結論になった。

◇境界値分析について
・有効同値と無効同値に対して境界値分析を行ったほうが抜け漏れの確立は低くなる。
・基本的に3ポイント境界値分析を実施し、工数やテストレベルによってどのテストケースを優先的に実施するか決める運用が良い。
・ドリルの解答のように有効クラスの境界値に対する下限値/上限値や無効クラスの境界値で考えて導出したほうが複雑にならないため、最初はこの方法が良いかも。
・境界値にどれを採用するか迷う場合は、同値パーテーションを区切る境界値は1つととらえたほうが良さそう。JSTQB FLの教科書にも下記のような記載がある。

P212
無効同値パーテーションを「0歳以上~20歳未満」と捉えずに「0歳以上~19歳以下」を境界値と19を境界値だと誤ってとらえてしまう場合があります。2ポイント境界値分析法では、分析結果は「0歳、19歳、20歳」と20歳を境界値にした場合と同じになるので、解釈の誤りに気づきません。しかし、3ポイント境界値分析法では以下のように境界値の捉え方で導き出された結果が異なってしまいます。
「0歳以上~19歳以下」
0歳、1歳、18歳、19歳、20歳
「0歳以上~20歳未満」
0歳、1歳、19歳、20歳、21歳
隣接する同値パーテーションを区切る境界値は1つです。18はテスト不要です、気を付けるようにしましょう。

◇その他
・テストケース導出の際に機械的に導出するだけでなく、「プログラム内のどのようなエラーをテストで拾うか」を考えながらテスト技法を適用する事が重要である。

 以上、同値分割と境界値分析について問題を解き、議論した結果をまとめました!長くなってしまいましたが此処までご覧いただきありがとうございます(^^♪
 テスト技法を学び始めた時は同値分割法と境界値分析は他より簡単だと思っていましたが、単純な問題でも人によって考え方が異なり、導出されるテストケースも変わってくることが分かりました。
 今回は同値分割法と境界値分析について書きましたが、次回はまた違うテスト技法について書こうと思います!
 皆さんの様々な意見お待ちしております!

いやー奥が深い(;´・ω・)

いいなと思ったら応援しよう!