ソフトウェアテストの品質・効率を高めるうえでは、「テスト技法」の活用が欠かせません。テスト技法とは、テストケースを作成するうえでのテクニックです。テスト技法を活用すれば、テストケースを効率よく作成できるうえに、テストケースの抜け漏れの防止にもつながります。
この記事ではテスト技法の主な種類や、ソフトウェア開発に取り入れるポイントを紹介します。
- もくじ
1.テスト技法には3種類のカテゴリーが存在する
さまざまなテスト技法が存在しますが、大まかには以下3種類のカテゴリーに分けられます。
- ブラックボックステスト技法
- ホワイトボックステスト技法
- 経験ベースのテスト技法
まずは、それぞれの概要や特徴についてご紹介します。
ブラックボックステスト技法
ブラックボックスとは、内部の構造が把握できない仕組みのことです。つまりブラックボックステスト技法とは、テスト対象の内部構造ではなく、入出力(外から見た振る舞い)に着目するテスト技法を指します。
内部の構造が複雑であっても、入出力だけに着目すればよい分、テストケースを効率的に作成可能です。ただし、内部処理の網羅性は保証できません。
ホワイトボックステスト技法
ホワイトボックスとは、内部の構造が明らかである仕組みのことです。つまりホワイトボックステスト技法とは、テスト対象の内部構造に着目するテスト技法を指します。ここでいうテスト対象は、「関数」「モジュール」「コンポーネント」といったプログラムレベルの要素が中心です。
内部構造まで正確にテストするためには欠かせませんが、手動のテスト設計・実行では人的ミスや手間が増えやすいといえます。
経験ベースのテスト技法
経験ベースのテスト技法とは名前の通り、テスト担当者の経験にもとづくテスト技法です。過去のテスト結果から得た知見や、経験から磨かれた直感など、テスト担当者自身が持つ情報や能力を活用します。
仕様や設計にはないテストケースを作成できるものの、テストの熟練者でないと高い成果は得られにくいでしょう。
2.ブラックボックステスト技法の主な種類
ここでは、主なブラックボックステスト技法を5種類紹介します。
同値分割法
同値分割法とは、出力結果が同じ値となるテストケースを同等と見なし、グループ化するテスト技法です。各グループ(同値パーティション)から1つずつ代表ケースを選んで実施すれば、すべての出力結果を網羅できます。
たとえば出力結果が「OK」または「NG」の場合、OKが出力される1ケース・NGが出力される1ケースを選びます。膨大な入力パターンからテストケースを絞り込めるのがメリットです。
境界値分析・同値クラス分割の基本の「き」
テスト技法「境界値分析」と「同値クラス分割」について解説しているミニ冊子です。技法の概要から使い方とポイントなど、初心者にもわかりやすく解説しております。
同値分割法について詳しく知りたい人は、以下の記事を参考にしてください。
境界値分析
境界値分析とは、出力結果の境界部分をテストケースとして選定するテスト技法です。たとえば「18歳以上は500円、18歳未満は300円」という仕様があった場合、17歳と18歳で出力結果が変わることになります。このとき、入力データが「17歳のケース」「18歳のケース」を選定するのが、境界値分析です。
一般的に、仕様の境界部分で不具合は発生しやすいといわれています。そのため、境界値分析を使うことで効率的に不具合リスクの高いテストケースを選定できるのです。境界値分析について詳しく知りたい人は、以下の記事をご覧ください。
デシジョンテーブル
デシジョンテーブルとは、入力条件と出力結果(動作)の対応関係を表にして整理するテスト技法です。
以下の図表は、タクシーの割増料金の発生有無をデシジョンテーブルにしたものです。
曜日・時間の各条件について、満たす場合(Y)・満たさない場合(N)の組み合わせを列挙し、対応する出力結果を記載しています。
複数の条件を組み合わせた場合の動作がデシジョンテーブルによって可視化されるため、テストケースの漏れに気づきやすくなるのがメリットです。
デシジョンテーブルの作り方を知りたい人は、以下の記事を参考にしてください。
状態遷移テスト
状態遷移テストとは、ソフトウェアの状態遷移に着目するテスト技法です。一般的には、ソフトウェアの取りうる状態や遷移条件を「状態遷移図」や「状態遷移表」といった形にし、それらの遷移を網羅するようにテストケースを作成します。
たとえばストップウォッチの制御システムの場合、「待機中」「計測中」「一時停止中」といった状態が考えられます。これらの状態から、別の状態へ遷移する条件やパターンを考え、それらを網羅するのが状態遷移テストです。
状態遷移テストについて詳しく知りたい人は、以下の記事をご覧ください。
組合せテスト
組合せテストとは、複数の条件を組み合わせたテストケースを作成するテスト技法です。組合せテストによって、単体の条件では検出できない不具合を検出することが可能です。たとえば、特定OSと特定ブラウザを組み合わせた際に初めて発生する不具合が考えられます。
ただし、条件数が増えるほどテストケースの組み合わせも膨大となり、テスト担当者の負担は大きくなります。そのため、2因子間網羅など組合せ方を工夫してテストケース数を抑えるようにしていきます。
組合せテストを効率的に実施するためには、組合せの条件が容易に設定でき、テストケース作成を効率化できる「Qumias Plus」などのツールを活用しましょう。
組合せテストについて詳しく知りたい人は、以下の記事をご一読ください。
3.ホワイトボックステスト技法の主な種類
続いて、ホワイトボックステスト技法の主な2種類を紹介します。
制御フローテスト
制御フローテストとは、プログラムにおける処理の流れを可視化した「フローチャート」にもとづくテスト技法です。まず、ソースコードをもとにフローチャートを作成し、入力条件による処理の分岐を明確にします。作成したフローチャートから、プログラムの内部構造を網羅するテストケースを考えていきます。
なお、主な網羅方法は次の4種類です。下に書かれたものほど網羅性は高くなります。
網羅の種類 | 網羅の対象 |
---|---|
命令網羅(ステートメント・カバレッジ) |
すべての命令文を網羅する |
判断網羅(デシジョン・カバレッジ) |
条件分岐におけるすべての判断結果を網羅する |
条件網羅(コンディション・カバレッジ) |
条件分岐内における個々の条件の判断結果を網羅する |
複合条件カバレッジ(マルチコンディション・カバレッジ) |
条件分岐内における個々の条件の組み合わせを網羅する |
データフローテスト
データフローテストとは、プログラムにおけるデータ(変数)の流れを確認するテスト技法です。プログラム内で変数が使われる流れを図で可視化し、適切な使われ方かどうかを確かめます。変数が定義される前に参照されていないか、不要な変数が定義されていないか、などをチェックすることが可能です。
データフローテストによってデータの流れを最適化することは、潜在的な不具合の防止にもつながります。
4.経験ベースのテスト技法の主な種類
次に、経験ベースのテスト技法の主な2種類を紹介します。
エラー推測
エラー推測とは文字通り、テスト担当者がエラーを推測するテスト技法です。過去の不具合やソフトウェアの性質など、テスト担当者が経験や知識を活かして考えられるエラーを推測し、リスト化します。リストに記載されたエラーの発生が懸念されるテストケースを作成することで、不具合を効果的に検出しやすくなります。
ただし、テスト担当者の経験や知識に依存する部分が大きく、不具合を検出しきれないリスクもあります。
探索的テスト
探索的テストとは、テストケース作成とテスト実行を並行して実施するテスト技法です。テスト状況や過去の経験などを考慮して、テスト実行をしながら次に実行するテストケースを作成します。テスト仕様書などの文書を作成せずに実施するため、熟練者であれば工数をかけずに効率よく不具合検出が可能です。
ただし、テスト担当者に豊富な経験や知識がないと、テスト成果を上げることは難しいでしょう。
実践!探索的テスト
皆さんは「探索的テスト」というテスト手法をご存知でしょうか?本資料では、そのような実務上の試行錯誤で培われた探索的テストの知見について、詳しくご紹介したいと思います。
探索的テストについて詳しく知りたい人は、以下の記事を参考にしてください。
5.テスト技法をソフトウェア開発に取り入れる際のポイント
テスト技法は上手く取り入れないと、成果にはつながりません。最後に、テスト技法をソフトウェア開発に取り入れる際のポイントを紹介します。
複数種類のテスト技法を組み合わせる
それぞれのテスト技法には、メリットだけでなくデメリットもあります。こうしたデメリットをカバーするために、複数種類のテスト技法を組み合わせましょう。
たとえば、同値分割法に境界値分析を組み合わせることで、テストケース増加を抑えつつ、不具合が発生しやすい箇所をピンポイントに確認できます。
テスト技法に合ったツールを活用する
テスト技法に合ったツールを活用することで、テストケース作成をより効率化できる場合があります。たとえば組合せテストを取り入れる場合、テストケースが膨大になってしまうでしょう。しかし、先ほど紹介した「Qumias Plus」を使えば、組み合わせのテストケースを瞬時に生成でき、大幅にテスト設計を効率化できます。
まとめ:テスト技法の種類を知ることがソフトウェア品質向上の第一歩
テスト技法にはブラックボックス・ホワイトボックス・経験ベースの3つのカテゴリーがあり、それぞれに複数の技法が存在します。各テスト技法には、メリットがあればデメリットもあるため、それぞれの特徴を知って正しく取り入れることが重要です。
高品質なソフトウェアを開発するためには、高品質なテストが欠かせません。テストの品質を高めるうえでは、テスト技法の活用がカギとなります。今回紹介したテスト技法を参考にして、ソフトウェア品質の向上を実現してみてはいかがでしょうか。