京セラコミュニケーションシステムの要谷(かなめや)です。
ソフトウェアテストに関することを業務としております。
今回はテストケースを考えるときに使えるテクニックについてお伝えします。
対象の読者
今回の記事は実際にソフトウェアテストするときに 「全部のパターンを試すなんて無理…」
といった場面に遭遇している方を対象としています。
先輩や上司から「どうしてこのテスト項目数なの?ほかの項目はテストしなくても大丈夫なの?」と聞かれたときに、論理的に 根拠を示すことができるテクニックの1つです。
初めに
システム開発の現場で、テストに悩むことも多いです。そんな時のためにぜひ知ってほしいのが、ブラックボックステストの代表的なテクニック、「同値分割」と「境界値分析」です。
この2つの技法を理解すれば、テストの品質を落とさずに、効率的にバグを発見できるようになりますし、テストフェーズに限らずコーディングの際の実装ミスも減らすことができます。
ブラックボックステストとは?
まず、ブラックボックステストについてです。
これは、システムの内部構造(コード)を見ずに、入力と出力だけに着目して、仕様通りに動くかを確認するテストです。
まるで中身が見えない「黒い箱(ブラックボックス)」を外側からテストするイメージですね。ユーザーの視点に近いテスト方法と言えます。
同値分割:同じ扱いのグループでテストを効率化
同値分割 は、テストすべき値を「同じように扱われる値のグループ(パーティション)」に分け、各グループから代表値を一つ選んでテストする手法です。
これにより、膨大なテストケースを大幅に削減できます。
具体例:年齢入力フォーム
例えば、「20歳以上、100歳以下」のユーザーだけが登録できる会員サイトを考えてみましょう。
この場合、入力される年齢は次のようなグループに分けられます。
- 無効同値クラス①: 19歳以下(例:10歳)→ エラーになるはず
- 有効同値クラス: 20歳以上、100歳以下(例:50歳)→ 正常に登録できるはず
- 無効同値クラス②: 101歳以上(例:120歳)→ エラーになるはず
このようにグループ分けすれば、0歳から120歳まで全ての年齢を試す必要はありません。
「10歳」「50歳」「120歳」の3つのケースをテストするだけで、このシステムの年齢制限機能が正しく動くかを効率的に確認できるのです。
境界値分析:バグが潜みやすい「境界」を狙い撃ち
境界値分析は、その名の通り、仕様の境界となる値とそのすぐ隣の値を重点的にテストする手法です。
「以上」「以下」「未満」「まで」といった条件の変わり目は、プログラマーが実装時に「<」(未満)と「<=」(以下)の記述を間違えるなど、バグが紛れ込みやすいポイントだからです。
具体例:同じく年齢入力フォームで考える
先ほどの「20歳以上、100歳以下」の例で見てみましょう。
境界となるのは「20」と「100」です。
-
下限の境界:
-
19
(無効な値の最大値) -
20
(有効な値の最小値) -
21
(有効な値の最小値のすぐ上)※
-
-
上限の境界:
-
99
(有効な値の最大値のすぐ下)※ -
100
(有効な値の最大値) -
101
(無効な値の最小値)
-
※より厳密に境界値を3点で調べる場合に採用する
これらの値をテストすることで、「20歳は登録できるか、19歳は弾かれるか?」「100歳は登録できるか、101歳は弾かれるか?」といった、仕様のギリギリのラインを正確にチェックできます。
『同値分割 + 境界値分析』の組み合わせ
実務では、この2つを組み合わせるのが一般的です。
- 同値分割で、テストすべき値の全体像を把握し、グループ分けする。
- 境界値分析で、各グループの境界部分を狙ってテストケースを作成する。
- さらに、各グループの代表値(境界から離れた典型的な値)をテストケースに加える。
先ほどの年齢入力の例なら、テストケースは以下のようになります。
テストケース | 入力値 | 期待結果 | テスト技法 |
---|---|---|---|
1 | 19 | エラー | 境界値(無効) |
2 | 20 | 成功 | 境界値(有効) |
3 | 50 | 成功 | 同値分割(代表値) |
4 | 100 | 成功 | 境界値(有効) |
5 | 101 | エラー | 境界値(無効) |
※状況によっては以下の2つを加えることもあります(原則にある通り テストは状況次第です )。
入力欄の「文字数」、「数値以外を受け付けないか」といった確認でも同値分割を利用することができます。
テストケース | 入力値 | 期待結果 | テスト技法 |
---|---|---|---|
追加1 | 9 | エラー | 同値分割(下限より下の無効となる代表値でかつ1桁) |
追加2 | 120 | エラー | 同値分割(上限より上の無効となる代表値) |
追加3 | x | エラー | 同値分割(数値以外で無効となる代表値かつ1桁) |
追加4 | xx | エラー | 同値分割(数値以外で無効となる代表値) |
このように組み合わせることで、テストの網羅性を高めつつ、ケース数を最適化できます。
今回は年齢の入力で検討しましたが、日付や時間といった入力確認についても、この技法によりテストケースを検討することができます。
まとめ ✏️
今回は、ブラックボックステストの基本技法である「同値分割」と「境界値分析」をご紹介しました。
- 同値分割: 同じ扱いのグループに分け、代表値でテストして効率化
- 境界値分析: バグが潜みやすい仕様の境界を狙い撃ち
これらの考え方は、開発やテストの初心者にとって強力な武器になります。
まずは身の回りにある入力画面などを題材に、「どうやってグループ分けできるだろう?」「境界はどこだろう?」と考えてみるのはいかがでしょうか。
次回は「デシジョンテーブル」についてご説明したいと思います。
きちんとテスト技法を身につけて、自信を持ってソフトウェア開発に取り組んでいきましょう。
所属部署について
ITエンジニアが活躍する地方拠点「長崎 Innovation Lab」
長崎 Innovation Labでは、IT技術を活用して、工場などものづくりの現場で活用できるシステムの開発に取り組んでいます。自由な発想でこれまでにない社会に役立つ製品・サービスを生み出し、長崎から発信していくことを目指しています。