複数のモジュールを組み合わせて連携を確認するテスト。
結合テストとは、複数のモジュールを組み合わせて連携を確認するテストのことです。単体テストを通って単独では正しく動くモジュール(部品)どうしをつなぎ、それらが協調して正しく動くかを確かめます。
部品が1つずつ正しくても、つなぎ合わせると問題が出ることがあります。たとえば、あるモジュールが渡すデータの形式と、受け取る側が期待する形式が食い違っていると、組み合わせて初めて不具合が表面化します。
身近な例で考えると、1つずつ検査した部品で機械を組み立てることに似ています。ネジやギアが単体で正しくても、噛み合わせる段になって寸法が合わないと動きません。上の図解のように、結合テストはモジュールどうしの「つなぎ目」に注目するテストです。
結合テストの対象は、モジュール間のインタフェース(=部品どうしのつなぎ目。データの受け渡し口のこと)です。具体的には次の点を確認します。
・データの受け渡し:呼び出す側が渡す値を、呼び出される側が正しく受け取れるか
・呼び出しの順序:モジュールが正しい順番で呼び出され、想定どおりに連携するか
・戻り値の扱い:返ってきた結果を呼び出し元が正しく処理できるか
・異常時の連携:一方でエラーが起きたとき、もう一方が適切に対応できるか
ここで大切なのは、結合テストが「1つのモジュールの中身」ではなく「モジュール間のつなぎ目」を見るという点です。中身の正しさはすでに単体テストで保証されているので、結合テストでは連携の部分に集中します。
上の図解のように、たとえば「検索」モジュールが返した結果を「表示」モジュールが正しく受け取って画面に出せるか、といった連携の正しさを確認するのが結合テストの役割です。
結合テストは、モジュールをどの順番で組み合わせていくかによって、おもに2つのアプローチに分けられます。
・トップダウンテスト:上位(呼び出す側)のモジュールから順に結合していく。まだ完成していない下位モジュールの代わりに、スタブ(呼ばれると決まった値を返すだけの仮の部品)を使う
・ボトムアップテスト:下位(呼び出される側)のモジュールから順に結合していく。まだ完成していない上位モジュールの代わりに、ドライバ(下位を呼び出すための仮の部品)を使う
覚え方のコツは、「上から下りるトップダウンは、足りない下位をスタブで補う」「下から登るボトムアップは、足りない上位をドライバで補う」という対応です。上の図解で、点線の枠が仮の部品(スタブ・ドライバ)を表しています。どちらも、未完成の部分を仮の部品で代用しながら少しずつ結合していく点は共通です。
大きなシステムは複数のチームが分担して開発するため、すべてのモジュールが同時に完成するわけではありません。結合テストを始めたい段階で、隣のモジュールがまだ開発中という状況はよくあります。そこで登場するのが仮の部品です。
スタブは「呼ばれたら決まった値を返すだけ」の仮の下位モジュールです。本物のような複雑な処理はせず、「はい、正常に完了しました」「値は100です」のようにあらかじめ決めておいた答えを返すだけです。上位モジュールのテストを、下位の完成を待たずに進められます。
ドライバは「下位モジュールを呼び出してくれる」仮の上位モジュールです。本来は上位モジュールが呼び出す側ですが、それが未完成のためドライバが代わりに呼び出します。身近な例で言えば、本番の司会が来るまでリハーサルを進める仮の司会のようなものです。仮の部品を使えば、互いに完成を待たずに並行してテストを進められます。
結合テストは、単体テストの次に行う工程です。テスト全体の流れを4段階で整理すると次のようになります。
・単体テスト:モジュール1つ1つを単独で確認する
・結合テスト:単体テスト済みのモジュールを組み合わせ、連携を確認する(←今ここ)
・システムテスト:システム全体が仕様どおりに動くかを確認する
・受入テスト:実際に使う人が、要件を満たすかを確認する
結合テストが担う役割は、「部品の正しさ」と「全体の正しさ」の橋渡しです。単体テストで部品ごとの正しさを確認したあと、部品を組み合わせたときのつなぎ目の問題をここで見つけます。結合テストで問題を発見・修正しておかないと、システムテストで大きな問題が表面化し、原因を探すのが格段に難しくなります。