「境界値分析」は、ソフトウェアのバグを効率よく検出するために有効なテスト技法です。しかし、境界値分析について理解せずに活用すると、適切なテストケースを作成できず、重要な不具合を見逃す恐れがあります。
本稿では、ソフトウェアテストにおける境界値分析とは何か、その基本事項をまとめてお伝えします。境界値分析の具体例や大まかな手順も紹介しますので、ぜひ参考にしてください。
境界値分析とは
境界値分析とは、仕様における「境界値」に着目するテスト技法です。境界値とは、その値を境にソフトウェアの挙動が変わる値です。たとえば「入力されたパスワードが8文字未満の場合はエラーを表示」という仕様の場合、境界値は「8文字」です。
詳細は後述しますが、バグは境界値付近に混入されやすい傾向があります。そこで、テスト対象の境界値を把握し、その付近を重点的にテストするのが境界値分析です。境界値分析を活用することで、バグを検出しやすいテストケースを効果的に絞り込めます。
1-1 「同値分割法」と密接に関わるテスト技法
境界値分析は、基本的に「同値分割法」と併用されます。同値分割法とは、テスト対象の出力結果が同じになる入力値を「同値パーティション」としてグループ化するテスト技法です。
たとえば前出の仕様では、パスワードの入力文字数が6でも7でも「8文字未満」に該当し、エラーが表示されることは変わりません。そのため、出力結果が同じとなる6や7といった入力値を「同値パーティション」としてグループ化して扱うのが同値分割法です。
同値分割法では、同値パーティション の中から代表的な入力値をピックアップしてテストケースを作成します。そのため、数多くの入力値からテストケースを効果的に絞り込めます。
そして、境界値分析においては、同値パーティションの端にある入力値が「境界値」です。つまり、同値分割法により同値パーティションを明らかにした後、その境界値に着目して境界値分析を行うのが基本的な流れです。
1-2 境界値分析の具体例(2値/3値)
境界値分析には、値の取り方に「2値」「3値」の2種類があります。それぞれの方法について、具体例を交えて見ていきます。
ここでは、「入力されたパスワードが8文字未満の場合はエラーを表示する」という仕様を例に考えます。
2値の場合は「隣接する2つの境界値」が入力値です。今回の仕様では「0~7文字」「8文字以上」という2つの同値パーティション が隣接しています。
そのため、各同値パーティション の端にある「7文字」と「8文字」の入力値を選出し、次のようなテストケースを作成します。
| ・パスワードが7文字の場合、エラーが表示されること ・パスワードが8文字の場合、エラーが表示されないこと |
一方、3値の場合は「仕様に明記された境界値と、その両側の2値」が入力値です。
今回の仕様では「8文字未満」と明記されているため、境界値「8文字」を基準に、外側の「7文字」と「9文字」の入力値も選出します。
大まかなテストケースは次のとおりです。
| ・パスワードが7文字の場合、エラーが表示されること ・パスワードが8文字の場合、エラーが表示されないこと ・パスワードが9文字の場合、エラーが表示されないこと |
3値のほうがテストケース数は増える分、テスト漏れのリスクをより軽減できます。
このように、2値や3値の境界値分析を理解し、状況に応じて使い分けることが大切です。
境界値分析の大まかな手順
ここでは、境界値分析の大まかな手順を紹介します。境界値分析は、次の4ステップに沿って進めていくと良いでしょう。
- 仕様を確認する
- 同値パーティションに分割する
- 境界値を特定する
- テストデータを決定する
2-1 仕様を確認する
まずは、テスト対象の仕様を確認します。同値分割法や境界値分析を活用する場合、仕様条件の把握が第一歩です。
たとえばパスワードに関するテストを行う場合、パスワードの文字数や文字の種類などに関する条件・制約が仕様に記載されているかチェックします。
テストしたい機能や項目の仕様を正しく把握することで、同値分割法や境界値分析を適切に活用できます。
2-2 同値パーティションに分割する
次に、仕様を踏まえて同値分割法を活用し、入力値を同値パーティションに分割します。
たとえば、パスワードの入力文字数が仕様で次のように定義されていたとします。
この場合、4つの同値パーティションに分割できます。文字の種類による制限はないものとします。
| 入力文字数 | 出力結果 | 同値パーティション |
| 0文字(未入力) | エラー「パスワードを入力してください」 | 同値パーティション 1 |
| 1~7文字 | エラー「パスワードは8文字以上64文字以内で入力してください」 | 同値パーティション 2 |
| 8~64文字 | エラーなし(正常処理) | 同値パーティション 3 |
| 65文字以上 | エラー「パスワードは8文字以上64文字以内で入力してください」 | 同値パーティション 4 |
注意点として、出力結果が同じでも隣接しない入力値グループは別の同値パーティションとして扱うべきです。
このケースでは、「同値パーティション 2」と「同値パーティション 4」は出力結果がまったく同じとなりますが、同値分割法を併用するのであれば、それぞれ1ケースは実施したほうが良いでしょう。
なぜなら、ソフトウェア内部では区別されており、別の処理として扱われるケースも多いためです。
このように、同値パーティションに分割することで、境界値分析を活用できるようになります。
2-3 境界値を特定する
続いて、分割された同値パーティションを踏まえて、境界値を特定します。
前述のとおり、境界値は「同値パーティションの端にある入力値」です。
そのため、今回のケースでは次のように6つの境界値を特定できます。
| 同値パーティション | 入力文字数 | 境界値 |
| 同値パーティション 1 | 0文字 | 0 |
| 同値パーティション 2 | 1~7文字 | 1と7 |
| 同値パーティション 3 | 8~64文字 | 8と64 |
| 同値パーティション 4 | 65文字以上 | 65 |
仕様を数直線などで表現すると、境界値が可視化されて特定しやすくなります。
2-4 テストデータを決定する
そして、境界値を踏まえてテストデータを決定します。
具体的にどの入力値をテストケースに採用するかを検討し、テストケースに落とし込みます。
ここでは、入力値の取り方(2値/3値)の判断も行う必要があります。
| 種類 | 入力値の取り方 | メリット | デメリット |
| 2値 | 隣接する2つの境界値 | テストケースを最小限に抑えられる | 特定の実装ミスを見逃すケースがある |
| 3値 | 仕様に明記された境界値と、その両側の2値 | バグを見逃すリスクを軽減できる | テストケースが増えやすい |
スピードを重視する場合は2値、確実性を重視する場合は3値が良いでしょう。
テストの状況やチームの方針を加味して、適切なテストデータを決定することが大切です。
ブラックボックステストに境界値分析を活用するメリット
境界値分析は、テスト対象の内部構造を考慮せず、入力値・出力値に焦点を当てる「ブラックボックステスト」で特に効果的です。
ブラックボックステストに境界値分析を活用するメリットとして、次の2つが挙げられます。
3-1 不具合を検出しやすい
境界値分析を活用することで、不具合を検出しやすくなります。一般的に、ソフトウェアのバグは境界値付近に集中しやすい傾向があるためです。
たとえば、「パスワードが8文字未満の場合はエラーを表示」という仕様をプログラムに落とし込むとしましょう。この場合、プログラム上では“if (length < 8)”のように「8」を基準にした条件分岐を行うことが通例です。
しかし、このとき”if (length <= 8)”のように「未満」と「以下」を混同することによる実装ミスが現実的に起こり得ます。この場合、本来は問題のない8文字のパスワードがエラー扱いとなってしまいます。
つまり、結果として仕様に明記された「8文字」の周りで不具合が生じるわけです。このように、境界値周りではバグが起きやすいため、境界値に焦点を当てることは合理的といえます。
3-2 テストケース数の増加を防げる
境界値分析を活用すれば、テストケースを最小限に抑えながら効率的に不具合を検出することができます。
すべての入力値を網羅的にテストしようとすると、テストケースの数は膨大になります。
たとえば、パスワードの文字数制限が8文字以上64文字以内の場合、正常パターンを実直にテストすれば8~64文字の計57ケースは必要です。
しかし、境界値分析を活用すれば「7文字」「8文字」「64文字」「65文字」といったテストケースに絞り込めます。
そのため、テスト成果を大きく損なわずにテストケース数の増加を防止できるのです。
境界値分析を活用する際のポイント
境界値分析を活用する際のポイント3つを押さえておきましょう。
4-1 仕様を十分に理解する
境界値を正しく特定するためには、仕様の十分な理解が欠かせません。実装やテスト設計におけるケアレスミスの多くは、仕様の誤解や読み落としによって発生します。
そのため、まずは仕様をしっかりチェックし、正確に理解することが大切です。仕様に関して曖昧な部分、正確性が疑われる部分があれば、早い段階で作成者に確認しましょう。
4-2 設計や実装も確認する
仕様だけを見て境界値を判断すると、思わぬ誤算が発生するケースもあります。
そのため、実装(プログラム)もある程度は確認しておきましょう。
たとえば「1~4が仕様上の正常値」だとしても、if文で範囲指定しているのか、switch文で個別に条件分岐しているかで処理のされ方が変わってきます。
仮にswitch文で正常値ごとにcase分けされていた場合、境界値ではない「2」や「3」もテストしなければ、思わぬバグを見逃しかねません。
こうした事情は仕様だけでは判断できないため、実装も確認しておくと良いでしょう。
4-3 特殊な条件も考慮する
特殊な条件によって境界値が変化するケースにも注意が必要です。
たとえば、同じ機能でも特定のOSに限って文字数の制約が変わることも考えられます。
また、前出の例のように0文字の場合のみエラーメッセージが変わる、といったケースもあります。
こうした特殊な条件を正しく考慮することで、テスト漏れを防ぐことができます。
なお、境界値分析の知識を活用すれば、上流工程のレビューにおいても潜在的なリスクを洗い出しやすくなり、品質の向上につながります。
まとめ
境界値分析とは、仕様における「境界値」に着目するテスト技法です。
境界値分析を活用することで、テストケース数の増加を防ぎつつ、効率的に不具合を検出できます。
境界値分析によりテストの効率・成果を高めるためには、正しい知識を身につけることが大切です。境界値分析を取り入れる際には、今回の内容をぜひ参考にしてください。
テスト技法について詳しく知りたい方はこちらの資料をご活用ください。
なお、テスト技法に関して学習・教育を検討している場合は、オンライン教育プログラム「バルデミー」をご活用ください。
バルデミーでは、ソフトウェアのテストや品質保証に役立つ実践的な学習コンテンツをオンラインで提供しており、体系的に学習できます。