【単体テスト】
モジュール単体で正しく動作するかどうかテストする。
開発工程では、プログラミングに対応。
【結合テスト】
モジュール単体でのテスト終了後、関連するモジュールを結合して、プログラム単位で動作するか
どうかの確認のためのテスト。
開発工程では、プログラム設計に対応。
テストの方法
・トップダウンテスト
上位のモジュールから順番に結合、テストする。
(スタブが必要)
・ボトムアップテスト
下位のモジュールから順番に結合、テストする。
(ドライバが必要)
・ビックバンテスト
モジュールを一度に結合して行うテスト。
【システムテスト】
結合テスト完了後、すべてのプログラムが実際と同じ動作環境で動くかどうかのテスト。
システムの開発工程の段階を要求定義、外部設計、内部設計、プログラム設計、及び
プログラミングに分けた場合、外部設計の検証を主目的として行うテスト。
外部設計は、ユーザ側の立場に立って行う設計。内部設計は、コンピュータ処理に適した
設計を行う。
ユーザ側に立っているテストは、運用テスト。総合テストと言うときもある。
【運用テスト】
実際の運用を考慮した上でテストを行う。(実際に使用されるものと同等の条件でテスト)
開発工程では、要求定義に対応。
テストの方法
・ブラックボックステスト
アルゴリズムを考慮せず、入出力データから判断
・ホワイトボックステスト
すべてのアルゴリズムパターンを1回は通過するように(=命令網羅)また、
分岐条件をすべて試行するように(=条件網羅)テストする。
【レグレッションテスト (regression test)】
システムの保守時に行うテストのこと。
ソフトウェア保守のために、変更した箇所が他の部分に影響しないかどうかを確認する目的で
行うテストを言う。
問題なく稼動していたシステムでも、一部のプログラムの修正を行うと、予想もしない部分に
影響を与える事がある。
そのため、修正を加えた部分以外も再テストする必要がある。
この再テストのことをレグレッションテスト、もしくは、退行テストとう。
【ビッグバンテスト】
個々のモジュールを独立にテストし、各々のテストが終了した時点で、すべてを結合してテスト
する方法である。
【ブラックボックステスト】
プログラムの内部構造や論理などについては考えず、外部仕様(入出力)に着目し、プログラムの
入力の可能性がある値のすべての組合せをテストする手法。
同値分割、限界値分析、などの技法がある。
【ホワイトボックステスト】
プログラムの内部構造に着目し、ロジックを調べ、すべての経路が実行されるようにテストする
手法である。
命令網羅、条件網羅などの技法がある。
【トップダウンテスト】
上位のモジュールから下位のモジュールへと順に結合しながらテストする方法であり、未完成の
下位モジュールの代わりにスタブが必要である。
重要度の高い上位のモジュールがテストで繰り返し使用されるので、上位モジュールの信頼性が
高くなる。
逆にボトムアップテストでは、下位のモジュールの信頼性が高くなる。
テスト工程の初期段階では並行作業ができない」という特徴がある。
例えば、次のようなモジュール構成のプログラムを想定する。
┌───┐
│ 1 │
└─┬─┘
┌─────┴─────┐
┌─┴─┐ ┌─┴─┐
│ 2 │ │ 3 │
└─┬─┘ └─┬─┘
┌──┴──┐ ┌──┴──┐
┌─┴─┐ ┌─┴─┐ ┌─┴─┐ ┌─┴─┐
│ 4 │ │ 5 │ │ 6 │ │ 7 │
└───┘ └───┘ └───┘ └───┘
まずモジュール1のテストを行う。
┌───┐
│ 1 │
└─┬─┘
┌─────┴─────┐
┌─┴─┐ ┌─┴─┐
│ 2 │ │ 3 │
│スタブ│ │スタブ│
└───┘ └───┘
試験でよく出題されるのがこの「スタブ」というキーワードである。
ここで「スタブ」というのは上位のモジュールから呼び出されるもので、次のような機能を持つ。
・処理は実行されず上位モジュールへ戻るだけである。
・戻り値としては入力パラメータに対応する値を返す。
モジュール1のテストが終わったら次のような構成にしモジュール2のテストを行う。
┌───┐
│ 1 │
└─┬─┘
┌─────┴─────┐
┌─┴─┐ ┌─┴─┐
│ 2 │ │ 3 │
└─┬─┘ │スタブ│
┌──┴──┐ └───┘
┌─┴─┐ ┌─┴─┐
│ 4 │ │ 5 │
│スタブ│ │スタブ│
└───┘ └───┘
以下、これを繰り返す。
開発の初期段階では並行作業ができないという特徴がある。
【スタブの役割】
テスト対象のモジュールからの呼出し命令の条件に合わせて、値を返す。
トップダウンテストで使用される。
トップダウン的にプログラムのテストを行うとき、作成したモジュールをテストするために、
仮の下位モジュールを用意して動作を確認する。
【ボトムアップテスト】
下位のモジュールから上位のモジュールへと順に結合しながらテストする方法であり、未完成の
上位モジュールの代わりにドライバが必要である。
上位のモジュールを代行するドライバの作成が必要になる。
モジュール数の少ない下位部分から開発していくので、開発の初期段階からプログラミングと
テストの並行作業が可能である。
テスト工程の並行作業が初期段階から可能である。
次のようなモジュール構成のプログラムを想定する。
最も下位のレベルのモジュールからテストを行う。
┌───┐
│ 1 │
└─┬─┘
┌─────┴─────┐
┌─┴─┐ ┌─┴─┐
│ 2 │ │ 3 │
└─┬─┘ └─┬─┘
┌──┴──┐ ┌──┴──┐
┌─┴─┐ ┌─┴─┐ ┌─┴─┐ ┌─┴─┐
│ 4 │ │ 5 │ │ 6 │ │ 7 │
└───┘ └───┘ └───┘ └───┘
最も下位のレベルのモジュールからテストを行う。
┌────┐
│ドライバ│
└─┬──┘
┌─────┴─────┐
┌─┴─┐ ┌─┴─┐
│ 4 │ │ 5 │
└───┘ └───┘
モジュール4と5が作成できたら「ドライバ」を使ってテストする。
試験でよく出題されるのがこの「ドライバ」というキーワードである。
ここで「ドライバ」というのは、テストするモジュールを繰り返し呼び出し、テストデータを
与えて、テストの対象となるモジュールが正しく動作することをチェックする一種の
シミュレーションプログラムである。
下位のモジュールのテストが終了すれば下図のようにより上位のモジュールのテストを実施する。
┌────┐
│ドライバ│
└─┬──┘
┌─────┴─────┐
┌─┴─┐ ┌─┴─┐
│ 2 │ │ 3 │
└─┬─┘ └─┬─┘
┌──┴──┐ ┌──┴──┐
┌─┴─┐ ┌─┴─┐ ┌─┴─┐ ┌─┴─┐
│ 4 │ │ 5 │ │ 6 │ │ 7 │
└───┘ └───┘ └───┘ └───┘
テストの最終段階でモジュール間のインタフェース上の問題が生じやすいという特徴がある。
【ドライバの役割】
テスト対象のモジュールを呼出し命令で呼び出す。
ボトムアップテストで使われる。
プログラムを構成するモジュールの単体テストを行うとき、そのモジュールを呼び出す仮の
上位モジュールを用意して、動作を確認する。
《テストツール》
【スナップショットダンプ】
指令した命令が実行されるたびに、レジスタや主記憶の一部の内容を出力することによって、
正しく処理が行われていることを確認する。
【トレーサ】
プログラムの実行中、必要に応じて変数やレジスタなどの内容を検査し、必要であれば
その内容を修正した後、後続の処理のテストを行う。