結合テスト(統合テスト)とは何か?概要やメリット・デメリットについて解説

結合テストとは

結合テスト(※)は、ソフトウェア開発のテストレベルの一つになります。
※JSTQBでは「統合テスト」と表記されますが「結合テスト」と同じ意味となりますので、本記事では「結合テスト」に統一します。

結合テストはインターフェースやコンポーネント同士の相互処理に着目したテストレベルであり、システムテストを行う前に実施しておきたい重要なテスト工程となります。

本記事では、結合テストの概要、テストベース単体テストとの違い、メリット・デメリット、テスト内容に関して解説します。

結合テストとは

結合テストはインターフェースやコンポーネント同士の相互処理に着目したテストになります
主な確認内容は下記の二点となります。

  • インターフェースの動作が仕様通りであること
  • コンポーネント同士の相互処理が仕様通りであること

ソフトウェア開発モデルの一つ、ウォーターフォールモデルの上流工程(品質を決める工程)と下流工程(品質の確認を行う工程)の関係性を示した「V字モデル」を参照すると、結合テスト(統合テスト)は基本設計に対応していることがわかります。

ソフトウェア開発のV字モデルの結合テストの範囲

上図の通り、結合テストは基本設計の仕様を満たす事を確認することが目的のテストレベルになります。

結合テストと単体テストの違い

結合テストと単体テストは実施のタイミングと内容が異なります。

実施タイミングの違い

ソフトウェア開発モデルの「V字モデル」を参照すると、結合テスト(統合テスト)は単体テスト(コンポーネントテスト)の後に実施するテストとなります。

単体テストと結合テストのタイミングの違い

実施内容の違い

どのようなソフトウェアも、基本的な構成は小規模なプログラム(コンポーネント)同士をつなげてシステム化したものになります。

開発が結合テストの工程まで進んでいると、小規模なプログラム(コンポーネント)の動作確認は単体テスト(コンポーネントテスト)にて実施済みとなっているため、結合テストではコンポーネントをつなげるインターフェースやコンポーネント同士の処理に着目したテストを実施します。

結合テストと単体テストで確認する箇所をざっくりとしたイメージで表すと、下図の通りとなります。

結合テストと単体テストの実施内容の違い

上図の通り、結合テストではコンポーネントをつなぐインターフェースとインターフェースを通したコンポーネント同士の処理を確認します

結合テストと単体テストの違いをまとめると、下記の通りとなります。

  • 結合テスト(統合テスト)
    インターフェースやコンポーネント同士の相互処理に着目したテスト
  • 単体テスト(コンポーネントテストまたはユニットテスト)
    ソフトウェアを構成する小規模なプログラムのまとまり(関数、ユニット、モジュール、クラスなどのコンポーネント)の処理に着目したテスト

結合テストのテストベース

結合テストのテストケースのもととなるテストベースは下記のような情報となります。

  • ソフトウェア設計
  • 通信プロトコル仕様
  • インターフェース仕様
  • 外部インターフェース定義
  • シーケンス図
  • ユースケース

上記以外にも、コンポーネント同士の関係性がわかるような資料や情報も結合テストのテストベースに該当します

結合テストのメリット・デメリット

結合テストには下記のようなメリットやデメリットがあります。

結合テストのメリット

  • コンポーネントをつなぐインターフェースの欠陥や故障を検出できる
  • コンポーネント同士の相互処理に関する欠陥や故障を検出できる
  • インターフェースの機能的、非機能的な振る舞いの欠陥を検出できる
  • 前の工程(単体テスト)の欠陥や故障を検出できる
  • 後の工程(システムテスト)で発生する欠陥や故障を最小限に抑えることができる
  • 後の工程の故障発生のリスクを軽減できる

インターフェースやコンポーネント同士の相互処理の欠陥検知だけでなく、前の工程で見逃していた欠陥の修正や、後の工程の欠陥や故障の発生リスクを軽減できることが結合テストのメリットになります。

結合テストのデメリット

  • 結合テストは基本的に開発者が行うため、開発者の負担が増える
  • テストの実施に必要なスタブやドライバを作成する工数が別途必要になる
  • テストを実施する際には本番環境に近い環境を用意する必要があるため、開発者の負担が増える
  • 本番環境と異なる開発環境でテストを実施すると、本番環境と開発環境でテスト結果に差異が生じて原因の究明に工数がかかる場合がある
  • 一度に多くのコンポーネントを結合してテストを行うと、原因の特定が難しくなり余計な工数がかかる場合がある

単体テストのデメリットと同様となりますが、テストの実施は基本的に開発者が行うため、開発者の負担が増えることがデメリットとして挙げられます。

他にも、本番環境と開発環境でテスト結果に差異が出て原因の究明に工数がかかったり、コンポーネントを結合しすぎたことが影響して欠陥を検出した際に原因の特定に工数がかかるなど、テストの実施方法によっては余計な工数がかかる場合があることもデメリットの一つとして考えられます。

結合テストで実施するテスト(テストタイプ)

結合テストでは下記のようなテストを実施し、主にインターフェースが仕様通りに動くことを確認します。

  • 機能テスト
    機能が仕様通りに実装されていることを確認するテスト
  • 非機能テスト
    性能、使用感、セキュリティ、保守性など、ソフトウェアの特性の評価を目的としたテスト
  • ホワイトボックステスト
    プログラムの構造に着目し、仕様通りに命令文の処理や分岐処理を行うことを確認するテスト
  • ブラックボックステスト
    プログラムの振る舞いに着目し、仕様通りの処理を行うことを確認するテスト
  • リグレッションテスト
    プログラムを変更した際に、既にテストをした他の箇所で不具合が出ないことを確認するテスト

リグレッションテストに関しては、プロダクトによっては数回、数十回と同じテストを繰り返す場合があります。

同じテストを繰り返す箇所は自動化ツールの導入によって効率的にテストを行うことが可能となりますので、今後のテスト活動を考慮して自動化ツールの導入を検討しても良いでしょう。

まとめ

結合テストの概要は下記の通りとなります。

  • 結合テスト
    インターフェースやコンポーネント同士の相互処理に着目したテスト

結合テストは全てのプログラムを結合してシステム化する前の段階のテストとなりますので、後の工程の手戻りを少なくするために重要なテストになります。

結合テストを実施する目的、意味、メリット・デメリットを理解し、正しいテスト工程を意識することで、効率的なテスト活動を実現しましょう。