システム開発3:テスト

開発技術

システム開発ではプログラミングが完了すると、プログラムの不具合や設計ミスがないかテストをします。

基本的にテストは単体テスト、システムテスト、ユーザ受け入れテストの順で実施し、これらは前工程の詳細設計、基本設計、要件定義に対応するテストとなっています。

各テストのやり方について説明します。

単体テスト

単体テスト(unit test)とは、プログラムの一部分について、正しく動作するかを確認するテストです。
つまり、単体テストは1つの関数(メソッド)や、クラス単位でのテストとなります。

原則、コーディングをしたプログラマ自身が単体テストを実施します。

ホワイトボックステスト

ホワイトボックステストはプログラムの内部構造に注目したテストケースです。

テストケースは、「命令網羅」、「分岐網羅」、「判定条件網羅」、「複合条件網羅」などがあり、各々の説明をします。

命令網羅

命令網羅はすべての命令を網羅するテストケースです。

判定条件網羅(分岐網羅)

判定条件網羅(分岐網羅)は分岐(フローチャートのひし形の出口)を全て試すことです。

条件網羅

条件網羅は分岐(ひし形内)の各条件が少なくとも1回はtrueとfalseになるようにすることです。
条件網羅は、下の例のように命令網羅されない可能性があります。

複合条件網羅

複合条件網羅は分岐(ひし形内)の条件の組み合わせを全て網羅することです。

ブラックボックステスト

ブラックボックステストはプログラム内部の構造は考慮せず、プログラムのインタフェース(プログラムに与える入力と出力)や仕様に着目してテストをすることです。

ブラックボックステストは仕様書に基づいてテストをするので、仕様書をもとにテストケースを作成します。

同値分割

同値分割法は出力が同じになる入力値をクラスというグループで識別してテストケースを作成します。

例えば下のような入力:点数によって3パターンの出力があるプログラムの場合、出力3パターンと無効パターンをクラスとしてテストケースを作成します。

境界値分析

限界値分析は、有効同値クラスの境界値をテストデータとして分析する方法です。
テストケースは有効値の最小値-1、有効値の最小値、有効値の最大値、有効値の最大値+1です。

原因結果グラフ

入力値と出力値の論理関係をグラフ化した「原因結果グラフ」を作成してから、決定表(デシジョンテーブル)を作成して、テストケースを作成する手法です。

原因結果グラフの作成は、複数の入力値を∧(AND条件)または、∨(OR条件)の関係でグラフ化します。

ユーザログインの例で原因結果グラフ、決定表を作成してみます。

エラー推測

経験を駆使し、エラーを予測してテストケースを作成する。


結合テスト

結合テストは、単体テストで合格したプログラム同士を結合してテストをすることです。
つまり、結合テストはモジュール間やサブシステム間のテストをすることです。

トップダウンテスト

トップダウンは上位モジュールからテストを始めて、下位モジュールにテストを進めていく方法です。

トップダウンテスト方式では、下位モジュールが未完成の場合は代わりのテスト用モジュールを用意しますが、これをスタブと言います。
スタブはテスト対象モジュールからの条件に合わせて値を返すように作成します。

トップダウンテストのメリットは次の通りです。

  • 上位モジュールのテスト頻度が多いので上位モジュールの信頼性が高くなる。
  • 上位モジュールからテストを行うため、システムの制御構造や全体の論理的な流れの不具合を早期に発見可能

続いてトップダウンテストのデメリットは次の通りです。

  • 未完成の下位モジュールが多い場合、スタブの作成に手間がかかる。

ボトムアップテスト

ボトムアップテストは下位モジュールから上位モジュールの順でテストをすることです。

上位モジュールが未完成の場合はドライバというモジュールを用意します。

ボトムアップテストのメリットは次の通りです。

  • ドライバは単純な呼び出しで済むことが多く、スタブより作成が容易な場合が多い。

ボトムアップテストのデメリットは次の通りです。

  • 全体が完成するまでプログラムが正しく作られているかが分かりにくい。
  • 後で上位モジュールで修正が必要となると、全ての下位モジュールに修正が入る可能性がある。

サンドイッチテスト

サンドイッチテストはトップダウンテストとボトムアップテストの両方を実施することです。
最下位モジュールと最上位モジュールから開始していき、中間モジュールでぶつかるところまでテストします。
上位と下位のモジュールを並行してテストできるため、テスト効率が良いです。

コメント

タイトルとURLをコピーしました