結合テストはテスト工程の1つで、単体テストの後に実施されるテストです。単体テストはモジュールごとにテストするのに対し、結合テストは複数のモジュールを組み合わせて動作確認を行います。結合テストを実施するときは、どのようなポイントに注意すれば良いのでしょうか。今回は結合テストの手法と役割、テストを実施する際のポイントについてご紹介します。
結合テストの役割
ソフトウェアテストで担保すべきものは、システムや製品の品質です。さまざまな人が目を通し、異なる観点で幅広い検証を行うことで、想定するユーザーの利用に耐えうる高品質な成果物を作成することができます。
結合テストでは、モジュール間のインターフェースの構造自体に問題がないか、モジュールを結合した状態でデータのやり取りや動作が適切に行われるかなどについて確認します。
結合テストの主な種類
主な結合テストとしては、インターフェーステスト、モジュールを結合した状態でのブラックボックステストの2種類が挙げられます。以下でそれぞれの特徴について見ていきましょう。
インターフェーステスト
インターフェーステストは結合テストとして一般的にイメージされることが多く、「連結テスト」とも呼ばれます。インターフェースとは、異なる機器やモジュールを接続したときに、データのやり取りを仲介する回路や仕組みのことで、インターフェーステストでは、異なる機能やモジュール間で引き渡すべきデータを適切な形で引き継ぐことができているかを確認します。
モジュールを結合した状態でのブラックボックステスト
ブラックボックステストとは、テスト対象の内部構造を把握せずに、入力に対して正しい出力が得られるかを確かめるテストです。結合テストでは、単体テストを終えたモジュール同士を結合してブラックボックステストを実施し、モジュールの動作順序やタイミングを含めて動作確認を行います。
結合テストの実施方式
結合テストの実施方式には、トップダウンとボトムアップの2つのアプローチがあります。両者の違いは、上位モジュールからテストを行うのか、それとも下位モジュールから行うのかという点です。
トップダウンテスト
トップダウンテストとは、上位モジュールを呼び出した後に下位モジュールヘと移行してテストを進めていく方式です。上位モジュールから順番にテストをしていくことで、致命的な不具合を早期発見しやすいというメリットがあります。
結合テストはシステムテストを行う前段階に実施されることが多く、テスト対象以外のモジュールが開発途中である場合もあります。テストに関わる全ての下位モジュールの開発を待たずに結合テストを実施しなければならない事態も避けられません。このような場合には、「スタブ」と呼ばれる下位モジュールの機能を代替するモジュールを作成し、テスト対象を動作させるために必須なモジュールのみを呼び出してテストを行います。
ボトムアップテスト
ボトムアップテストとは、プログラムの下位階層にあるモジュールから優先的にテストを進めていく方式です。下位モジュールが検索や計算処理などシステムの根幹に関わる機能を担う場合、優先度の高い機能から順番にテストを進められるメリットがあります。
トップダウンテスト同様、上位モジュールのインターフェースやメイン機能が完成しないうちにテストを行わなければならない場合があります。このように上位モジュールが開発しきれていない場合には、「ドライバ」と呼ばれる上位モジュールの機能を代替するモジュールを作成し、下位モジュールの動作に必要な値を出力させてテストを進めます。
実施のポイント
開発規模や対象システムなどによって、結合テストの種類や実施方式は変わってきます。しかし、結合テストの内容にかかわらず、共通して気を付けたいポイントもあります。
テストスケジュールに余裕を持たせる
結合テストは単体テストをクリアしたモジュールに対して実施されますが、設計上のミスや単体テストのケース漏れなどの理由から、統合テストを実施して初めて問題が発覚することも少なくありません。その他、顧客の要求の変更や機能追加の依頼に応じて、仕様変更を行うことも考えられます。この場合、手戻りによって大きな時間的ロスが発生します。
結合テストの工程では、このような突発的なトラブルが起こりやすいという特徴があります。結合テストの遅延はプロジェクト全体の遅延につながるため、テストスケジュールに余裕を持たせることが重要です。
データベースのデータを直接書き換えない
単体テストでは、データ準備コストを削減するため、データベースを直接編集してテストデータを作成するケースがよく見られます。これは、モジュールやメソッド単位での動作確認を行う際には有効かもしれませんが、複数機能やモジュール間のデータのやり取りについて確認する結合テストでは推奨できません。
テスト環境のデータベースを直接編集してしまうと、人的ミスで必要なデータを削除してしまう、システムでは作成しえない不正データを作ってしまうリスクがあります。リスクが現実化した場合、テスト環境下で行ったテスト結果の信頼度が下がり、最悪の場合テストのやり直しが発生します。
ソフトウェアの品質を確実に担保するため、テスト環境のデータベースの書き換えは避けるようにしましょう。安易にデータを編集できないように権限を設定することも1つの方法です。
まとめ
今回は、結合テストの役割や種類、テストを実施する際に気を付けたいポイントについてご紹介しました。結合テストは、開発に関わっていると見落としがちなユーザー目線で実施するテストです。テスト対象を機能単体ではなく1つのシステムとして包括的に捉え、インターフェースやシステムのパフォーマンスの品質を保証することができます。
複数のテスト手法がありますが、いずれもユーザーの利用状況を考慮した上で実施することが重要です。今回ご紹介した内容を踏まえて、今一度チーム内での結合テストのあり方を再考してみてはいかがでしょうか。