【テストの種類】結合テスト
結合テストとは、システム開発におけるテスト手法の1つです。
システム開発では、結合テストの他に単体、機能、システムテストなどがあり、開発工程によって実施するテストが異なります。
結合テストは複数のプログラムやモジュールを同時に稼働して行う動作テストで、モジュール同士を結合した際に意図した通りに動作するかの検証を行います。
結合テストは、事前にテスト仕様書を作成し、テスト項目を決めてからテストを行います。
結合テストの項目は前段階の単体テストが全て完了していることが前提となります。
結合テスト前に行う単体テストは、個々の機能やモジュールが単体で動作するかを検証するテストになります。
単体テストで行ったテスト項目は結合テストでは殆ど行わないか、簡易的に確認することが一般的です。
結合テストでは、ただ動作するかのテストを行うのではなく操作と機能動作の組み合わせが正しいか、仕様書通りに機能しているかについても検証します。
単体テストによって個々で正しく動作することが確認された機能やモジュールを対象とし、機能間の連携や一連の機能が仕様書通りに正しく動作するのかを確認します。
1. 結合テストの種類
結合テストは、システムやプログラムの規模によって範囲が変わります。
大規模なプロジェクトであればあるほど、システムの数も多いため結合テスト工程を分けて検証するのが一般的です。
1-1. インターフェーステスト
結合テストの中で定番のテスト。
インターフェーステストでは、個々の機能が正しく連携するかどうかを検証します。
機能間やモジュール間でデータを引き渡した際、データの型が異なることによってデータの値が変わらないか、引き渡されるべきデータがすべて引き渡されているか、連携元と連絡先のモジュールは仕様書通りに問題無く動作するかなどの検証を行います。
1-2. 業務シナリオテスト
業務テストとは、実際の業務を想定したテストです。
内容は目的の業務や対象システムによって異なりますが、実際に業務で行う工程や1日の流れをテスト仕様書として作成します。
テストを行う際は、イレギュラーケースを必ず含めることです。
基本的に正しい動作はシステム開発中に何回もチェックしているため、問題なく動作することがほとんどです。
しかしイレギュラーケースを含めてテストを行う事で、正常に動作しない箇所などを見つける事が出来ます。
業務などで発生する可能性があるイレギュラーなシナリオは必ず検証する必要があります。
1-3. 負荷テスト
システムリソースの限界まで操作し、意図しないシステムのパフォーマンス低下や停止が発生しないかを検証するテストです。
同時にアクセスが集中した際にも、定められた最大アクセス数までレスポンスが低下せずに正しく処理できるかどうかなどの検証をします。
また、予想される連続稼働時間までシステムを動かし続け、意図せず停止しないかを検証します。
稼働テストの問題点として、例えばエラーログの保存領域が少なく見積もられていた結果、100時間の稼働には問題無くとも、200時間稼働した場合エラーログの保存領域が無くなり意図しない動作を起こしてしまうことも考えられます。
2. 結合テストの実施方式
結合テストには、トップダウンテストとボトムアップテストの2つの実施方式があります。
2-1. トップダウンテスト
上位のモジュールから呼び出して、下位へとテストを行う方式です。
トップダウンテストの特徴は上位モジュールから順番にテストを行うため、より重要な上位モジュールに対して早期段階からテストが可能となる点が特徴となります。
重要な上位のモジュールを繰り返しテストすることによって重大な潜在バグを発見しやすいというメリットがあります。
しかし、上位のモジュールから順にテストを行うため、下位モジュールまで、ある程度開発が進まなければテストを進められません。
開発初期段階では、テストしながら開発を行うのは難しいです。
2-2. ボトムアップテスト
トップダウンテストとは反対に、下位モジュールから上位に向かって順に行うテスト方式です。
ボトムアップテストは開発初期から同時にテストを行うことが可能で、テストケースやテスト仕様書の作成、結果のチェックが簡単であるというメリットがあります。
下位モジュールからテストを行うため、最終的に上位モジュール部分にバグが見つかった場合、修正量が肥大化する恐れがあります。
3. 結合テストを実施するとき
結合テストは、システム開発の規模や対象のシステムなどによって、テスト内容が大きく変わります。
そのため、どんなシステムにも対応する万能な結合テストはありません。
しかし、結合テストを実施する際のポイントは、ほとんど共通している。
3-1. 本番環境と同じ環境・データでテストをする
可能な限り、実際に運用する本番環境と同じ環境をテスト環境でも準備をする。
システムを利用するクライアント端末やWebブラウザも「テスト環境では問題無く動作、操作出来るが、
本番環境では動かない」といった問題が出てきてしまう可能性があります。
同じミドルウェアやサーバーを活用することは勿論、バージョンも同じであれば、より品質の高いテストが可能となります。
また、環境だけでなくデータやスケジュールも本番環境と同様であることが望ましいです。
自動的に実行されるジョブを本番環境で予定していれば、テスト環境の方にも本番環境と同じ内容の物を用意しておく事が大切です。
3-2. DBのデータを直接書き換えないようにする
テストを簡易的に済ませようとして、DBに保存されているデータを直接追加、変更、削除してしまう事があります。
しかし、データを変更する場合には、必ずシステム上の機能を利用して変更するようにした方が良い。
システム上の機能を駆使してデータを変更することによって、漏れていたイレギュラーな操作によるバグを発見出来る可能性もあります。
4. 結合テストの観点
結合テストは要件定義に基づいて機能要件や非機能要件の観点からテスト項目を洗い出します。
単体テスト同様にコスト、納期、品質のバランスの観点からテスト項目を選定することが大切です。
単体テストとは違い、結合テストではシステムの全体的なデータの流れを把握が出来る技術が必要となります。
*非機能要件...「機能以外全ての要件」のこと
機能要件が「システム構築にあたり、顧客が必要とする機能の要件」であるのに対し、非機能要件は「必要とする機能以外の要件」を指します。構築したシステムが顧客の希望する機能全てを実装していたとしても、処理性能があまりにも悪かったり障害から復旧するのに時間がかかったりするようでは、運用に耐える事が出来ないため要件をきちんと定義することが大切となります。
顧客によっては、実装する機能の要件に時間を費やしてしまい、非機能要件が決められないまま進めてしまい、十分な性能が発揮されないシステムが出来上がる事も少なくありません。
非機能要件も機能要件と同じくらい大切なものとなります。
5. まとめ
・結合テストはシステム開発におけるテスト手法の1つ
・結合テストは、システムやプログラムの規模によって範囲が変わる。
・大規模プロジェクトになればなるほど結合テスト工程を分けて検証を行う
・トップダウンテストとボトムアップテストの2つの実施方式があり、トップダウンテストは上位モジュールから呼び出して下位モジュールのテストを行う方式、ボトムアップテストはその逆で下位から上位に対してのテストを行う。
・結合テストを行う際は、開発環境であっても本番環境と