テスト固有の技術について,(1)テスト設計技術,(2)テストの実施を効率化する技術,(3)テスト・ベースをレビューする技術,(4)バグ報告の技術の順に解説します。テスト設計技術においては,「より少ないテスト・ケース」「より多くのバグが見つかるテスト」「漏れがないようにテスト対象を網羅する」という三つのポイントがあります。テストの実施を効率化する技術の骨子は,テスト・ツールの有効活用です。

 Part1後半で触れたテスト固有の技術としては,どんなものが挙げられるでしょうか。大きく分類すると
(1)テスト設計技術
(2)テストの実施を効率化する技術
(3)テスト・ベースをレビューする技術
(4)バグ報告の技術

の四つに分けられます。

 まずは,テスト設計技術について解説しましょう。

 テスト設計には,(a)「より少ないテスト・ケース」で,(b)「より多くのバグが見つかるテスト」を行い,(c)「漏れがないようにテスト対象を網羅」する,という三つのポイントがあります。テストはやろうと思えばきりがありませんから,最小限の労力で最大の効果が得られるように知恵を絞ろうというわけです。

 「より少ないテスト・ケース」にするために必要な考え方として「同値クラス」があります。同値クラスは,テストに使う入力値が同じ結果をもたらす場合,その入力値を「同値」と呼ぶことからきています。例えば,判定の条件になる数値範囲が1~100の場合に,テストするときの値を100個全部入れていたら時間が足りませんよね。100個の値が全部同じ判定をするのならば,代表になる値を何個か選択してテストするほうが断然効率的です。そこでテストする際は,入力値,出力値,判定条件,時間的な範囲,仕様上の範囲などあらゆるものの「同値」を見つけることでテストの数を減らしていこうというわけです。

 「より多くのバグが見つかる」ための代表的な方法として「境界値分析」があります。同値クラスの中から代表を選ぶときに「境目」,つまり境界の値がどこかを分析してテストに使う値とするのです。なぜ,境目の値を狙ったテストで,多くのバグを見つけられるのかというと,境界値は要求分析でも実装でも,勘違いしたり間違えたりしやすいからです。例えばある数字「以下」と仕様書には記載してあるのに,開発者が「未満」だと思い込んで作り込むケースがあったとします。この場合,「境目」の値をテストすれば簡単にバグを見つけることができます。

 「漏れがないようにテスト対象を網羅」する視点としては,要件ベース,設計ベース,コード・ベースの三つの視点があります(表1)。この三つの視点と各テスト工程の関係は図1のようになります。このようにどのテスト工程でも三つの視点をもってテスト設計を行うことで,網羅したテスト設計が行えるようになるわけです。

表1●漏れがないようにテスト対象を網羅するための三つの視点
表1●漏れがないようにテスト対象を網羅するための三つの視点
図1●表1の三つの視点とテスト実施工程との関係
図1●表1の三つの視点とテスト実施工程との関係

コード・ベースと要件ベースのテスト設計をしてみよう

 三つの視点のうち,要件ベースとコード・ベースの二つについて,具体的にテスト設計をしてみましょう。まずは比較的考え方がシンプルなコード・ベースからです。

 コード・ベースの視点では,代表的なテスト設計方法である制御パス・テストでテスト設計を行います。制御パス・テストは関数やメソッドのロジックの処理経路(パス)を動かすテスト方法です。まず図2のようにソースコードをフローチャートなどでモデル化します。その後にプログラムの処理経路を洗い出します。

図2●コード・ベースの視点によるテスト設計の例
図2●コード・ベースの視点によるテスト設計の例
[画像のクリックで拡大表示]

 図2の例では,A,B,Cの処理経路を洗い出しました。この三つの処理経路を通るためのデータは,それぞれ,A(0~80),B(81~99),C(100)の三つになります。この三つのパスのどの値を使うかは,前述した境界値分析の考え方を使います。したがって
A:-1,0,80,(81)
B:(80),81,99,(100)
C:100,101

の値が挙げられるでしょう*1。つまり,7個のテスト・ケースが考えられます。