テストケース設計手法
テスト時には、起こり得るさまざまな状況(ケース、場合)を想定して、各状況に該当するデータをプログラムに与えます。この時に想定する各状況、及びその状況を実現するために用意するデータと結果の組み合わせのことをテストケースといいます。
テストケースの設計技法には、ホワイトボックステストとブラックボックステストがあります。
ホワイトボックステスト
ホワイトボックステストは、モジュール(プログラム)の内部に注目して(つまり、プログラムの中身を見て)テストを行います。

・命令網羅
命令網羅では、プログラム中にあるすべての命令を最低1回実行するようなテストケースを考えます。

・分岐網羅・判定条件網羅
命令網羅では、プログラム中にあるすべての分岐を最低1回は通るテストケースを考えます。
例えば、下のフローチャートで表されるプログラムの場合、
A and B
が真のときに通る分岐A and B
が偽のときに通る分岐
の2つが確かめられていればOKです。

・条件網羅
条件網羅は、コード内の個々の条件について、すべての真偽が少なくとも1回は出現するようなテストケースを考えます。
例えば、下のフローチャートで表されるプログラムの場合、
A
が真になるときA
が偽になるときB
が真になるときB
が偽になるとき
の4つが確かめられていればOKです。

・複数条件網羅(複合条件網羅)
複数条件網羅は、コード内の判定文におけるすべての条件で、とり得る真偽のすべてのパターンを(最低1回は)網羅するようなテストケースを考えます。

ブラックボックステスト
ブラックボックステストは、モジュール(プログラム)の内部をブラックボックスとして(内部を意識せず外部に注目して)テストする手法です。(利用者視点で行われるテストです。)
与えられた入力(テストデータ)に対して、正しく出力が得られるかをチェックします。
ブラックボックステストでは、主に「同値分割」、「境界値分析(限界値分析)」と呼ばれる方法でテストをする入力の種類(テストケース)を作成します。
・同値分割
同値分割とは、データをある一定の範囲ごとにグループ化し、グループの中で代表的な値を1つ選ぶ方法です。
例えば、月(1~12)を入力するモジュールを考えましょう。この場合グループは、
- 有効値のグループ(1以上12以下が入力された場合)
- 有効値を超えた値を入力して無効になるグループ(12を超えた値が入力された場合)
- 有効値未満の値を入力して無効になるグループ(1未満の値が入力された場合)
の3つのグループに分けることができます。
この場合、
- 有効値のグループの代表例:8
- 有効値超過のグループの代表例: 17
- 有効値未満のグループの代表例: -5
のように代表的な値を取ることで同値分割が行えます。

・限界値分析(境界値分析)
境界値分析とは、データをある一定の範囲ごとにグループ化したときのグループの境目付近(境目+1 or 境目-1が多い)を重点的にチェックします。
先ほど同じ月(1~12)を入力するモジュールを例に考えましょう。この場合グループは、
- 有効値のグループ(1以上12以下が入力された場合)
- 有効値を超えた値を入力して無効になるグループ(12を超えた値が入力された場合)
- 有効値未満の値を入力して無効になるグループ(1未満の値が入力された場合)
の3つのグループに分けることができます。
この場合、境目は
- 有効値未満と有効値の部分 (0月と1月)
- 有効値と有効値超過の部分 (12月と13月)
にあるため、テストケースを
- 有効値未満と有効値の境目:0, 1
- 有効値と有効値超過の境目:12, 13
とすることで境界値分析(限界値分析)が行えます。

信頼度成長曲線
テスト工程が「順調に進んでいるかどうか」を評価するため、エラーの出現頻度を基にしたグラフを利用する場合があります。
エラーの出現頻度には、あるパターンがあることが知られています。時間を横軸に、エラーの「累計数」を縦軸にグラフ化すると、テストが順調に進んでいる場合には次のようなS字のグラフとなります。この曲線を信頼度成長曲線と呼んでいます。数学の世界ではゴンベルツ曲線・ロジスティック曲線と呼ばれています。

信頼性成長モデルでは、下の1~3の流れでバグが発見されることを表しています。
- 最初はバグが緩やかに発見される
- 途中から急激にバグが発見される
- 最終的にバグの発見は緩やかになり、頭打ちになる
累積バグ件数とテスト項目消化件数に対する図(バグ管理図)が下のようなグラフになってしまう(信頼性成長モデルに従わない)場合は、まだバグが残っている(十分な品質ではない)可能性が高いです。

解釈は2通りあります。
①テスト対象が高品質のため、エラーが少ない
②テストケースに不備があるため、エラーを検出できない
①であれば対処は不要ですが、②であればテストを一旦中止し、テストケースのレビューをやり直す必要があります。
エラー数の予測
エラー数の予測には、ソフトウェアテスト中にわざとエラーを埋め込む「エラー埋め込み法」や、複数のテストチームの検出結果から総エラー数を推定する「二段階エディット法」などの手法があります。これらは品質管理に役立ち、ソフトウェア開発の工程や品質を評価・改善するために使用されます。
- エラー埋め込み法(バグ埋め込み法)
- あらかじめ意図的にバグをプログラムに埋め込みます。
- テストで発見された人工的なバグと、実際のバグの発見率の比率から、プログラム全体のバグ数を推計します。
- 式:総エラー数N=(埋め込んだエラー数 × テストで発見されたエラー数)÷ 埋め込んだエラーがテストで発見された数
- 二段階エディット法
- 2つの異なるテストグループが並行してテストを実施します。
- 両グループで共通して発見されたバグの数(共通バグ)と、それぞれのグループが検出したバグの数から、システム全体の総バグ数を推定します。
- 式:総エラー数 N = (グループAが検出したバグ数 × グループBが検出したバグ数) ÷ 共通して検出されたバグ数。