結合テスト(統合テスト)は、ソフトウェアテストの工程の一部です。単体のプログラムごとのテスト(単体テスト)の後に行われます。プログラム間の連携が正しく動作するのが、結合テストの役割です。

ただ結合テストには複数の種類や手法があり、初めての方には理解しづらいかもしれません。そこで、この記事では結合テストの概要や種類や手法、実施時の注意点について簡単に解説しています。

結合テスト(統合テスト)とは

結合テスト(統合テスト)とは、複数のプログラム(コンポーネント・モジュール)を組み合わせたときに正常に動作するかを試すテストのことです。このテストで、各プログラムが仕様書の通りに連携・動作するかを確認します。結合テストは、個々のプログラムの動作をチェックする「単体テスト」の後に行います。

結合テストの種類

結合テストは「コンポーネント統合(結合)テスト」「システム統合(結合)テスト」に分類されます。以下、それぞれのテストの概要を紹介します。

コンポーネント結合(統合)テスト

コンポーネント統合テストは、複数のコンポーネント間の連携が想定通りかチェックするためのテストです。より具体的には、コンポーネント間の連携によって生じるインターフェースの表示や処理内容が仕様書の通りかをチェックします。

たとえばRPGゲームを例にとると、「道具屋でのアイテム購入が想定通り動作するか」を確認するテストといえばわかりやすいでしょうか。このテストでは、道具屋でアイテムを販売する機能と、持ち物の機能(購入後に持ち物がどう変化するか)が連携するためです。

システム結合(統合)テスト

システム統合テストは、さらに2種類に分類されます。まず1つ目は、他システムと正しく連携するかをチェックするテストです。こちらもゲームに例えると、アイテムを課金して購入する動作のテストがわかりやすいでしょう。ゲーム内でアイテムを購入する機能と、課金システムの連携が試されるためです。

もう1つはソフトウェアと、そのソフトウェアを動作させるOS・ハードウェアとの連携を試すテストです。この2種類をあわせてシステム統合テストと呼びます。

結合テストの手法

結合テストの主な手法として、トップダウンテスト・ボトムアップテストの2種類があります。「トップダウン」「ボトムアップ」という言葉通り、これら2つはアプローチの仕方が正反対です。以下、それぞれの手法の概要を紹介します。

トップダウンテスト

「トップダウンテスト」という文字通り、より上位のモジュールの連携から試すテストのことです。下位のモジュールが開発途中の際は、ダミー(「スタブ」)を用意することもあります。

トップダウンテストは最上位のモジュールからテストをすることから、システムの重大な欠陥を速やかに発見しやすいのがメリットです。一方で開発と平行してテストを行うような場合に、必要となるスタブの数が増えその準備負担も大きくなるというデメリットがあります。

ボトムアップテスト

こちらも文字通り、より下位のモジュールの連携から試すテストのことです。上位のモジュール開発が完了してない場合は、モジュールを読み出すためのダミー(「ドライバ」)を用意することもあります。

ボトムアップテストでは下位のモジュールからテストすることになるため、開発と並行してテストを行いやすいのがメリットです。また下位のモジュールが検索や計算処理のような重要な機能を担う際は、より優先度の高い機能からテストできる点もメリットと言えます。

たいして、より上位のモジュールでバグが発見され改修が必要となったときは、下位のモジュールも改修が必要となる可能性が高いです。結果、作業量が増えてしまうというデメリットがあります。

結合テストを実施する時の注意点

結合テストの概要をみてきました。それでは結合テストを実施する際は、具体的にどんな点に気を付けるべきでしょうか。ここでは主な注意点を紹介します。

一度に多くを統合しない

結合テストでは効率を上げるために、より多くのプログラムを連携させてテストを行いたくなるかもしれません。しかしバグが発見された場合、連携させるプログラムが多くなるほど、どこに原因があるか見つけにくくなってしまいます。そのため統合テストでは、一度に多くのプログラムを統合させテストするべきではありません。

なお全てのプログラムを組み合わせて1度に行うテストのことを「ビッグバンテスト」と呼びます。ビッグバンテストは結合テストをスピーディーに完了できる反面、バグの原因の発見も難しくなります。そのため、以下にあげるケース以外では推奨されません。

・プロジェクトの進行上、どうしても時間がないとき
・プログラム数が少なくて一度にテストしても不具合の発見が困難でないとき

スケジュールは余裕をもたせる

結合テストでは複数のプログラムを連携させることから、想定以上の数のバグが発見されることも稀ではありません。そのため、あらかじめ多数のバグが発見された場合に備え、そのための改修も含めてスケジュールに余裕を持たせることが推奨されます。

スタブやドライバといったダミーを使ったテストでは正常でも、モジュールがそろったときにバグが発見されるということもあります。

まとめ

結合テストは、複数のプログラム(コンポーネント・モジュール)が正しく連携するかチェックするためのテストです。結合テストは、さらに「コンポーネント統合テスト」「システム統合テスト」に分類されます。

コンポーネント間統合テストとは、複数のコンポーネント間の連携を試すテストです。一方、システム統合テストは、コンポーネントと他システムの連携を試すテストや、ソフトウェアとOS・ハードウェアの連携を試すテストを指します。

結合テストでは、一度に多くのプログラムを連携させて実施するのは避けるべきです。連携するプログラムの数が多いと、バグの原因も探りにくくなります。また想定以上に多くのバグが発見される可能性があることから、スケジュールに余裕を持って行うことが推奨されます。