ソフトウェアテストの種類について

動的テストと静的テスト

動的テスト(dynamic testing)

動的テストとは、プログラム(ソースコードをコンパイルしたもの)を実行して行うテストのことです。
実際に動作させて、製品仕様を満たしているか、パフォーマンスやユーザビリティなどの非機能要件を満たしているかを確認することができます。
動的解析(dynamic analysis)とも呼ばれ、IT業界でテストといえば大抵この動的テストが該当します。


静的テスト(static testing)

静的テストとは、静的解析(static code analysis)とも呼ばれ、プログラムを実行せずに欠陥の有無を検証するテストのことです。
具体的な手法としては、「静的解析ツール(static code analysis tool)による分析」と「第三者によるコードレビュー」の2つがあります。
・解析ツールによる分析は、解析用ソフトウェアを利用してソースコード解析や文法チェック、規約違反は無いかなどを調べる手法です。
・コードレビューは、主に人間(開発者以外の第三者)がソースコードを読んで問題がないか調べる手法です。


開発フェーズによるテストの分類

検証テストと妥当性確認テスト

ソフトウェア開発プロセス(JIS X 0160)には「検証プロセス」と「妥当性確認プロセス」が定義されています。
それぞれのプロセスで実施するテストは「検証テスト」と「妥当性確認テスト」になります。

検証テストは、「製品が正しく作られたこと」を判断するテストとなります。
ソフトウェアが仕様と要件を満足しているか検証(ソフトウェア適格性確認)するために、単体テスト、統合テスト、検証テストを実施します。

妥当性確認テストは、「正しい製品が作られたこと」を判断するテストとなります。
システムが利用に適しており、要件を満足することを確認するために、受入れテスト、妥当性確認テストを実施します。


開発フェーズによるテストの分類

テスト種別 説明
単体テスト(Unit Test) ソフトウェアユニット(モジュールやコンポーネントなど)の単体の機能単位で確認するテストのこと。
統合テスト(Integration Test / 結合テスト) 2つ以上のソフトウェアコンポーネントやソフトウェアユニットを組み合わせて、機能要件を動作検証するテストのこと。
機能テスト(Function Test)とも呼ばれ、製品要件で定義された機能を動作検証します。
検証テスト(Verification Test) ソフトウェア(システム)が仕様通りに作成され、仕様通りに動作することを確認するテストのこと。
システムテスト(System Test)とも呼ばれ、システム全体で動作検証します。
受入れテスト(Acceptance Test) システムがユーザが設定した受入れ基準を満たしているか確認するテストのこと。
発注者による製品の検収テストとなります。
妥当性確認テスト(Validation Test) ビジネス目標やステークホルダ要件を達成することを確認するテストのこと。
運用を通して行われるテストとなります。


統合テストの手法について

トップダウンテストとは

トップダウンテストとは、上位モジュールから下位モジュールへと順番に結合しながらテストをしていく手法です。
この手法では、上位モジュールから先に検証していくので、未完成の下位モジュールの代わりとして動作する「スタブ」が必要になります。
スタブとは、上位モジュールからの呼び出しに対して適切な値を返す役割を持つダミーモジュールのことです。

トップダウンテストは、上位モジュールが何度もテストされるため、テスト序盤から品質が安定する特徴があります。
スタブを置き換えた時点で不具合を検出できるので、早期の不具合発見が可能となり、修正コストを抑えることも可能です。

トップダウンテストのデメリットは、スタブを作る必要があることです。
事前に十分な設計を実施して、仕様を確定させていないとスタブが作成できないこともあります。
安定的な製品開発ができる分だけ、コストや開発難易度が上がることになります。


ボトムアップテストとは

ボトムアップテストとは、下位モジュールから上位モジュールへと順番に結合しながらテストをしていく手法です。
この手法では、下位モジュールから先に検証していくので、未完成の上位モジュールの代わりとして動作する「ドライバ」が必要になります。

ボトムアップテストは、初期段階で開発とテストの同時進行を行うことができるメリットがあります。
しかしながら、全モジュールを結合できるのがテスト終盤となるため、テスト終盤で大きな問題が発覚するリスクがあります。


サンドイッチテスト(折衷テスト)とは

サンドイッチテスト(折衷テスト)とは、上位側と下位側から同時に結合しながらテストをしていく手法です。
つまり、トップダウンテストとボトムアップテストを組み合わせて行うテストのことです。


ビッグバンテストとは

ビッグバンテストとは、すべてのモジュールを一気に繋げてテストを実施する手法です。
「スタブ」や「ドライバ」を使用しないため、コストも作業量も少なく済みます。
小規模開発の場合には有効な手法ですが、大規模開発では大きなリスクを想定すべき手法です。


検証プロセスで実施するテストの種類

ブラックボックステストとは

ブラックボックステストとは、内部構造を考慮せず、実装された振る舞いを確認するためのテスト技法です。
ソフトウェアの要件仕様や基本設計に基づいてテストを設計します。


ホワイトボックステストとは

ホワイトボックステストとは、コンポーネントやシステムの内部構造の分析を基にして動作確認するテスト技法です。
ソフトウェアの設計/実装の詳細仕様に基づいてテストを設計します。


経験ベースのテスト(Experience-Based Test)とは

経験ベースのテストとは、テスト担当者の知識・経験・勘を基づいてテストケースを設計するテスト技法のことです。
過去の同じようなシステムで見つかった欠陥や、過去の事例をテストに反映することで、一般的なテストで見つけられない不具合を検出します。
なお、経験ベースのテストは単体で実施するのではなく、ブラックボックステストやホワイトボックステストなどを補う形で併用して実施すると効果的です。


システムテストの分類

スモークテスト(Smoke testing)

スモークテストとは、ソフトウェアがテストを行うに値する品質であるかを確認するために実施する簡易的なテストのことです。
特に、開発部門とテスト部門が分かれている場合には、テスト側に送る前に開発側が行う動作チェックのことを指します。
元来は、電子回路を組み上げて電源を入れた時に、発火したり煙が出ないことを確認するテストを指していました。


回帰テスト(リグレッションテスト:Regression testing)

回帰テストとは、ソフトウェアに修正や変更が加えられた場合に、既存の機能に悪影響を与えていないことを確認するテストです。
Regression(リグレッション)とは「後戻り、退行、回帰」を意味し、ISTQBおよびJSTQBで定義されている用語です。

なお、日本IT業界におけるよく使われる「デグレードテスト(degrade test)」はリグレッションテストと同義です。
デグレードは日本IT業界における和製英語であり、ISTQBでは定義されていない用語です。


性能テスト(パフォーマンステスト:Performance Testing)

  • レスポンステスト(Response testing)
    • システムに対する負荷が変化していく際の応答時間を確認するテスト
  • ロングランテスト(Soak or endurance testing:耐久性テスト)
    • 長時間の連続稼働によって処理能力や稼働率に問題が生じないかを確認するテスト
  • 負荷テスト(Load Testing)
    • 極端に高い負荷をかけた状況下での動作を確認するテスト
  • スケーラビリティテスト
    • ユーザー数の増加などにより負荷が増加した際に、システム拡張が可能かを確認するテスト
  • キャパシティテスト(容量テスト)
    • システムが対応できる、最大のデータ容量(ユーザー数やデータ数など)を確認するテスト
  • スパイクテスト(Spike testing)
    • 突然のピーク負荷から定常状態に戻るまでの一連の性能を確認するテスト

セキュリティテスト(脆弱性検査)

  • ペネトレーションテスト(ペンテスト・侵入テスト)
    • 攻撃者の視点からシステムを攻撃し、脆弱性を検証するテスト
  • 脆弱性スキャン
    • 自動化されたツールを使用して、脆弱性を検証するテスト

その他テスト

  • チューリングテスト
    • AIがどれだけ人間らしいかを検証するテスト


関連ページ