本ブログでは、ソフトウェアテストにおける「境界値テスト(境界値分析)」についてご紹介します。まずは「境界値テストとは何か?」について解説し、同値分割法との違いを理解した上で、検証の進め方や必要性について、各テスト工程とともに説明していきます。
今回はテスト未経験者の方にもわかりやすく、図解を用いて解説。本ブログを読み終わる頃には、境界値テストに関する知識がより深まることでしょう。
境界値テストとは
境界値テスト【境界値分析・限界値分析/boundary value analysis】とは、ソフトウェアテストにおけるテストケース作成方法のひとつです。
具体的には、出力が同様になる入力値を各グループにまとめ、グループが隣接する境界やその前後の値を入力値として検証作業を行います。
ここでの境界値とは、
「ある範囲の最小値」もしくは、「最大値などの同値分割した領域の端となる値」を指します。
境界値テストでは、出力結果が変化する境界付近を重点的に検証することで、それらに潜む不具合・ミス(ヒューマンエラーなど)を効率的に検出し、プロジェクトに応じたテストケースを作成します。
境界値テストは後に解説する「同値分割法」が実施された後に、実行されることが多々あります。
以上をふまえ、今回は境界値テストと同値分割法の概要・相違点をご紹介した後、境界値テストの進め方・必要性について詳しく解説します。
同値分割法とは
同値分割法【同値分析/equivalence partitioning】 もまた境界値テスト同様、ソフトウェアテストにおけるテストケース作成方法の1つであり、より少ないテスト回数で、広範囲での効率的なテストを可能にします。
具体的には、出力が同様になる入力値を各グループ(同値クラス)にまとめ、そのグループから代表値を1つ選択し、テストを実行します。同値分割によるテストケース設計フローは以下の通りです。
- 同値クラスを作成
- 同値クラスを有効・無効に分類
- 代表値を選択する
- テスト条件を決定する
- テスト条件を見直す
同値分割法の例を「ログインパスワード」に置き換えた場合、同値クラスの振り分けは以下の通りになります。
●パスワードの文字数:8文字以上、15文字以下」という仕様
この場合の同値クラスは、以下3種類の抽出が可能です。
- 有効同値クラス:8文字以上、15文字以下
- 無効同値クラス:0文字以上、 6文字以下
- 無効同値クラス:16文字以上
併用で実行されることの多い「境界値テスト」と異なる点は、
「テストデータとして用いる値」です。
同値分割法では「同値クラス内の代表値」、一方で境界値テストでは「出力が切り替わる境界となる値(境界値)」がテストデータとしてそれぞれ抽出され、テストが実行されます。
以上をおさえた上で次は、境界値テストの基礎知識(必要性・手順など)について、更に深掘りしていきましょう。
なぜ境界値テストが必要なのか
そもそも、境界値テストはなぜ必要なのでしょうか?
それは「出力が切り替わる境界付近で、不具合・ミスが起こる可能性が非常に高い」からです。
境界付近仕様・設計書の「以下」と「未満」、コーディングの「≧」と「>」など記載ミスがないか、注意して確認が必要です。
そのため、境界値テストはこれらのミスを効率的に早期検出し、ソフトウェア品質向上に繋げるために必要不可欠な作業工程であると言えます。
●境界値付近にて不具合・ミスが起こる可能性が高い理由
- 担当者によって仕様の記載方法が異なり、認識の相違・誤解が発生する
- コーディング時の記載ミスなど、ヒューマンエラーが起こりやすい
上記の理由は「境界値テストを行う目的」にも該当します。
境界値テストの実行においては、これらを防ぐ意識を常に持ちながら、丁寧にテスト作業を進めていきましょう。
効果的でスムーズなテスト作業を実行するためにも、これらのポイントは必ずおさえておきましょう。
境界値テストの手順
つづいて、ここまでの内容を把握した上で「境界値テストの手順」について解説します。
境界値テストの手順は以下の3段階に大別されます。
- 境界を見つける
- 境界値を決める
- テストする値を決める
ここからは、各フェーズの作業内容について解説します。
境界値テストの手順を正確に把握し、実際のテスト作業に役立てましょう。
境界を見つける
境界テストを行う際にはまず、
同値分割法などを用いて「出力が切り替わる境界」を見つける必要があります。
ここでの重要なポイントは、
「仕様・設計書などを基に、境界値となる部分を数直線などで図解すること」です。
前述の通り、仕様・設計書の「以下」と「未満」、コーディングの「≧」と「>」などの記載は、担当者によって認識の相違・誤解が生じ、思わぬミスに繋がることもあるのです。
テストを行う際にはできる限り曖昧な表現・記載を避けるよう心がけましょう。
以上をふまえ、見つけた境界値の図を作成し、
「具体的にどのような境界値を検証すべきなのか?」を正しく把握・整理することが大切です。
境界値を決める
冒頭でも述べた通り、
境界値=「ある範囲の最小値」、もしくは「最大値などの同値分割した領域の端となる値」です。
境界を見つけた後は、境界値を正式に決定します。
決定する境界値は主に、「有効同値クラスの最小値と最大値」に該当します。
これらはテストケース作成の要となるため、ミスや抜け漏れのないよう注意しましょう。
テストする値を決める
境界値の決定後は、テストする値を決めます。
テストする値の候補は、以下の3つです。
- 境界値
- 境界値の1つ下の値
- 境界値の1つ上の値
上記の中でも「境界値」と「境界値の1つ上の値」を省略せずにテストすれば、不具合・バグ抽出の確率が高くなります。しかし、業務効率化の一環で省略されるケースもあるため、留意しておきましょう。
ブラックボックステストとホワイトボックステスト
つぎは、テストの分類について解説します。
ソフトウェアテストに用いられる動的なテスト手法は、
「ブラックボックステスト/ホワイトボックステスト」の2種類に大別されます。
ここまで、ご紹介した「境界値テスト/同値分割法」は、いずれもブラックボックステストに該当します。
ブラックボックステストとは、開発者以外の第三者によって、システムの内部構造を考慮することなく、外部から見た機能や振る舞いが正確であるかを確認するテスト手法です。
製品・サービスのユーザビリティや機能面などに関して、利用者に近い目線で客観的にテスト結果を解析することが可能です。
一方で、ホワイトボックステストとは、システムの内部構造を理解している開発者が、それらが全て仕様通りに動作しているかを網羅的に確認するテスト手法を指します。
ホワイトボックステストは、個々の機能よりも内部構造の整合性を重視したテストです。
そのため、「過程」に着目したテストを実施します。
その網羅性の高さからレアケースな事態も動作確認できるという利点を持ち合わせています。
効率よく境界値テストを実行するには
境界値テストを効率的に実行するためのポイントをご紹介します。
前述で解説した動的テスト技法の分類の中でも、ホワイトボックステストはコーディング時における不等号の記載ミスを見つけることができません。
そのため、境界値テスト実行に際しては、「ブラックボックステストとホワイトボックスを組み合わせてテストケースを作成すること」が不具合・ミスの発見に繋がります。
また、テストの網羅性向上・業務効率化にも寄与するため、製品・サービスの品質確保においても重要なオペレーションのひとつであると言えるでしょう。
まとめ
いかがでしたでしょうか?
今回は「境界値テストとは何か?」について、手順や必要性をまじえて解説しました。
テストの手順・分類を理解することは、テストの成否でなく、ソフトウェア品質を考える上でも非常に重要です
境界値に潜む不具合・ミスを上流工程にて検出することで、業務効率化がなされるだけでなく、安心安全の製品・サービス提供を実現することができます。
本ブログを通して境界値テストに関する理解が深まり、ソフトウェア品質向上、業務効率化について見直すきっかけとなれば幸いです。