結合テストとは? 種類や目的・実施方法を解説!
更新:2024.5.16
著者:Sky株式会社
結合テストとは?
結合テストとは、複数のプログラムやモジュールを組み合わせた際に、意図したとおりに動作するかどうかを検証するテストです。挙動を確認するだけでなく、動作する機能と操作の組み合わせが適切かどうか、機能間の連携が仕様書に沿って正しく行われているかどうかなど、さまざまな観点で複数回にわたって確認します。
なお、結合テストはシステム開発におけるテスト手法の一つであり、「統合テスト」とも呼ばれます。個々のモジュールが正しく動作することを確認する「単体テスト」が適切に完了した後に行われ、結合テストの後にはシステム全体の動作を確認する「システムテスト(総合テスト)」を行います。
システムテスト(総合テスト)について詳しくは、こちらの記事をご覧ください
https://www.skygroup.jp/software/quality/article/03/結合テストの目的
ソフトウェアテスト技術者の国際的な資格認証団体であるISTQBでは、以下の5つを結合テストの目的として定義しています。
- リスクの軽減
- インターフェースの機能的/非機能的振る舞いが設計および仕様通りであることの検証
- インターフェース品質に対する信頼の積み上げ
- 欠陥の検出(インターフェース自体、コンポーネントに内在、またはシステムに内在)
- 欠陥がより高いテストレベルまで見逃されることの防止
参考:ISTQB「テスト技術者資格制度Foundation LevelシラバスVersion 2018V3.1.J03」
結合テストで確認する範囲は比較的狭いため、後に行う「システムテスト」と「受け入れテスト」よりも不具合の発生箇所や原因の特定をしやすい傾向があります。結合テストによって早期に効率良く不具合を解消することで、円滑に後のテスト工程へとつなげることができます。
単体テスト・システムテストとの違い
結合テストは、「テストを実施する範囲と目的」が単体テストやシステムテストと大きく異なります。
単体テストは、単一の機能やモジュールに対して動作の確認を個別に行います。それに対して結合テストは、単体テストをクリアした複数のモジュール同士を組み合わせ、互いが連携して正常に動作するかどうかを確認します。
また、システムテスト(総合テスト)は、結合テストですべての機能の動作を確認した後、実際の使用状況を想定した環境でシステム全体が正常に動作するかどうかを確認します。開発したシステムがクライアントの要件定義から逸脱していないかなど、システム全体を評価する目的があります。
結合テストの種類
結合テストは、検証する内容や目的に応じていくつかの種類に分類されます。ここでは、代表的な結合テストを4種類ご紹介します。各テストの意義を理解し、目的に合ったテストを選択することが大切です。
インターフェーステスト
インターフェーステストとは、個々のプログラムやモジュールを連携させた際の動作を確認するテストです。結合テストの中で最も基本的なテストとして知られています。「インターフェース」とは、一般的に複数の異なるモノ同士をつなぐ「接点」を意味するため「連結テスト」とも呼ばれています。
インターフェーステストは、プログラムやモジュール同士の接続時に、データの引き渡しを仲介する仕組みが正しく機能し、設計したとおりに挙動するかどうかを確認するために実施します。例えば、モジュール間でデータを引き渡すときに「必要なデータをすべて引き渡せているか」「データの値が意図せず変更されていないか」など、仕様書通りに問題なく動作するかを検証します。
負荷テスト
負荷テストとは、システムに限界まで負荷をかけた場合に、意図しない動作の停止やパフォーマンスの低下が発生しないかを検証するテストです。例えば以下のような検証をします。
- アクセスの集中が起こったときに、あらかじめ定めていた最大アクセス数までは反応に乱れが生じず、正しい処理ができるか。
- システムを連続で動かし続けて想定していた連続稼働時間を上回ると、どのような挙動を見せるのか。
新たなシステムを公開するときには、アクセスの集中や想定外の操作によるエラーが発生し、システムへの負荷が大きくなりやすいです。スムーズにシステムを運用するために、システムの限界を事前に把握しておくことは極めて重要といえます。
ブラックボックステスト
ブラックボックステストとは、テスト対象を「中の見えない箱」と捉え、入力に対して正しい出力が行われるかどうかを検証するテストです。性能だけでなく、使い勝手やデザインなども対象として、「仕様を満たしているかどうか」をユーザー目線で確認します。システムの内部構造を考慮しないため、開発に関わっていない第三者でも対応しやすいという特徴があります。
ただ、システムの仕様自体に誤りがある場合、本来不具合として扱われるべき動作でもこのテストでは「仕様通り」と判断されるため、不具合を見逃してしまいます。また、入出力のみを確認するため、誤った内部処理が行われていても、出力への影響が小さければ見逃す恐れがあります。こういった欠点を補うためには、内部構造に焦点を当てた「ホワイトボックステスト」と組み合わせて実施することが重要です。
業務シナリオテスト
業務シナリオテストとは、実際の業務を想定して、ユーザー目線で動作確認を行うテストです。開発中に何度もチェックされているような、業務を進めるための基本操作だけでなく、開発者が想定していないような例外的な操作も行い、細かく挙動を検証します。
例えばホテルのオンライン予約システムの場合、部屋の予約を取り消すことができるかどうか、同じ部屋を2つのアカウントで同時に予約できないよう制御されているかどうかなど、あらゆる状況を考慮して検証する必要があります。
業務シナリオテストは、ユーザーが想定外の不具合に見舞われないことを目的としており、システムの品質を担保する上で欠かせません。
結合テストの実施方法
結合テストの実施方法は、主に「トップダウンテスト」と「ボトムアップテスト」の2種類に分けられます。いずれも、テストが完了したモジュールに対してテスト未完了のモジュールを追加し、徐々にテスト範囲を広げていく点では同じですが、「上位モジュールと下位モジュールのどちらから順にテストを進めていくか」に違いがあります。
なお、上位モジュールにはシステム内で下位モジュールを呼び出す役割があります。スマートフォンに例えると、スマートフォン本体が上位モジュール、アプリが下位モジュールに該当するイメージです。
トップダウンテスト
トップダウンテストは、上位モジュールから下位モジュールへと向かって順にテストを進めていく方法です。より重要な役割を持つ上位モジュールのテストから実施するため、致命的な不具合を早期に発見しやすいというメリットがあります。また、テストの課程で結果的に上位モジュールを繰り返し確認することになるため、埋もれている重大な欠陥に気づきやすいというメリットがあります。
テストに関わる下位モジュールに未完成のものがある場合には、「スタブ」と呼ばれる下位モジュールの機能を代替するモジュールを作成して代用します。未完成の下位モジュールが多い場合には、テストごとに必要となるスタブの作成に手間がかかる点がデメリットです。
ボトムアップテスト
ボトムアップテストは、トップダウンテストとは逆に、下位モジュールから上位モジュールに向かって順番にテストを進めていく方法です。開発とテストを並行して行えるためモジュールの機能を調整しやすいほか、モジュール単位での機能を細かくチェックできるというメリットもあります。また、重要な計算処理など、下位モジュールがシステムの根幹を担う場合には、優先度の高い機能からのテストが可能となります。
一方で、テストの終盤で上位モジュールに修正箇所が見つかった場合には、修正の手間が増大する恐れがあるので注意が必要です。なお、トップダウンテストにおける「スタブ」と同様、必要となる上位モジュールが開発されていない場合には「ドライバ」と呼ばれる代替モジュールを用います。
目的別に分類されたテストタイプ
結合テストでは、目的に応じてさまざまなタイプのテストを実施します。すべてのテストタイプを行うのが理想ではありますが、実際にはシステムごとの優先順位に応じて選択するのが一般的です。ここでは、6種類に分類してテストタイプをご紹介します。
疎通テスト
疎通テストとは、モジュールの状態に問題がないかどうかを、アプリケーションとネットワークの2つの観点で確かめるテストです。モジュール同士をつないだときに正常に動作するか、ネットワークを通じて互いにデータの行き来ができるかどうかを検証し、結合テストを実施する土台を整えます。
疎通テストの実施によって、結合テストの初期に発生しやすいモジュールの接続に関連する問題を取り除き、後の工程での手戻りを減らせます。
機能テスト
機能テストとは、システムの機能が仕様通りに動作するかどうかを検証するテストです。例えば転職アプリの場合、「会員登録をする」「求人の詳細を企業に問い合わせると返信が来る」といった基本的な機能が正常に動くかどうかを確認します。
機能テストによって不具合を見つけておくことで、さらに後の工程であるシステムテストや受け入れテストでの手戻りを減らせる可能性が高くなります。機能テストは、先述した疎通テストと併せて、結合テストにおいては特に重要なテストタイプであるといえます。
性能テスト
性能テストとは、ユーザーが実際に利用しても問題がないことを検証するテストです。例えばシステム内のボタンを押下したときにエラーが起こらず適切に画面遷移が行われるかどうかなど、想定時間内に要件定義書通りのレスポンスが返ってくることを確認します。
あらかじめ基本的な性能が担保されていなければ、負荷テストを行う際に「高い負荷のない状態では正常に動く」という前提が崩れてしまい、テストの意味が薄れてしまいます。そのため、性能テストによる問題の発見と修正は非常に重要です。
回帰テスト
回帰テストは、不具合の改修や新機能の追加をした際に、変更を加えていない既存の機能が意図せず悪影響を受けていないかを確認するテスト手法で「リグレッションテスト」とも呼ばれます。同じ手順で繰り返しテストを行うため、正確性の向上やコスト削減のために自動化するのが一般的です。
なお、変更があった箇所を中心にシステム全体の挙動を確認するのが理想ですが、工数やコストが膨大になり現実的ではないため、特に影響が出そうな範囲に絞ってテストを実施するのがほとんどです。効率的に回帰テストを実施するためには、テストを行うタイミングと範囲を適切に判断することが大切です。
リグレッションテスト(回帰テスト)とは? 目的や重要性、自動化について解説
https://www.skygroup.jp/software/quality/article/03_03/セキュリティテスト
セキュリティテストは、悪意ある第三者にシステムを攻撃されても大丈夫かどうか検証し、情報セキュリティ上の欠陥を明らかにするテストです。例えば、システム全体の脆弱性を網羅的に検査する「脆弱性診断」や、実際の攻撃を想定したシナリオを用いてシステムへの侵入を試みる「ペネトレーションテスト」と呼ばれる手法があります。
特に近年、不正アクセスによる個人情報の漏洩やデータの改ざんといったセキュリティ事故が増加しています。ユーザーからの信頼を損なわないためにも、セキュリティテストの重要性は一段と高まっています。
ユーザビリティテスト
ユーザビリティテストとは、実際の業務を想定し、ユーザー目線でシステムの操作性や問題を確認するテストです。システムの実物や開発中のプロトタイプをユーザーに近い条件の人に使用してもらい、その実行過程を検証します。ユーザーからの信頼を高める上で大切なテストといえます。
ただ、結合テストにおけるユーザビリティテストでは、あくまでもシステムの一部しか扱いません。後のシステムテストで、あらためてシステム全体を確認し直す必要がある点には注意が必要です。
結合テストを行う際のポイント・注意点は?
実施するべき結合テストは、開発するシステムの規模や仕様によって大きく異なります。どのようなシステムにも適した万能な結合テストは存在しません。しかし、結合テストを実施する際のポイントや注意点は、システムの種類に関わらずある程度共通しています。
重要な機能を先にテストする
システム開発に充てられる予算や時間は有限です。そのなかで効率良くシステム開発をするためには、より重要度が高い機能から順にテストを実施していくことが大切です。万が一、重要な機能のテストが不十分な状態でテストが打ち切られた場合、ほかの派生する機能にも影響を与えかねず、大きなリスクを背負うことになってしまいます。
例えば、ECサイトの開発の場合、「注文機能」と「キャンセル機能」を比較すると重要度が高いのは「注文機能」になります。なぜなら、注文機能に不備があればそもそもECサイトとして機能せず、キャンセルはおろかほかのあらゆる機能も意味を成さないからです。また、キャンセル件数は注文件数よりも少なくなるはずであり処理の難易度も低いため、「注文機能」のテストを優先する必要があります。
範囲は徐々に広げる
テスト範囲は徐々に広げていくことが大切です。もし関係するモジュール数が多いテストから実施した場合、問題が発生した際に原因を探り出すのは容易ではありません。まずは狭い範囲からテストして不備を解消し、ある程度の問題がすでに解決された状態で広い範囲のテストをすることで、不具合の検出がしやすくなります。
例えばECサイトの開発における「支払いページ」と「決済手段の登録」のモジュールを比べると、先に決済手段の登録のテストを行うのが望ましいといえます。なぜなら、もし先に支払いページのテストをして不具合が見つかった場合、決済手段の登録を含む、ほかの複数の下位モジュールに不具合がある可能性も考慮しなければならなくなるからです。
一方、先に決済手段の登録をテストして不具合があった場合は、クレジットカード決済のAPI連携の不備を疑うなど、狭い範囲で問題の原因を探ることができ、不具合解消に動き出しやすくなります。
本番と同じ環境でテストする
テストを実施するときには、可能な限り実際にシステムを運用する本番環境に近い環境を用意することが大切です。なぜなら、同じ環境でしか発見できない問題が潜んでいる可能性があるためです。例えばWebブラウザの場合、Google Chromeでは正常に動作してもMicrosoft Edgeでは動作しない、といったケースがあります。
システムに利用する端末やOSといった動作環境だけでなく、データや利用時間帯も本番環境と同様であることが望ましいです。特に、扱うデータ数に変動がある場合は注意が必要です。例えば、あらかじめ設定した処理を一日に一度行う「日次バッチ処理」が原因で、特定の時間になると複数の処理が重なり動作が止まってしまうといった不具合が考えられます。このような問題を発見するためにも、想定される状況はすべてテストしておく必要があります。
まとめ
ここまで、結合テストの目的や種類、実施する際のポイントについてご紹介しました。結合テストは、開発の早期に不具合を発見・解消し、システムテストに備えるという重要な役割を担っています。余計な手戻りを防ぐためにも、扱うシステムに適したテストの選択や注意点を踏まえた緻密なテスト設計が大切です。
Sky株式会社は、システム開発に関する豊富な経験で培った技術を生かし、幅広い分野でテスト業務の支援サービスを提供しております。システム検証についてお悩みの際には、ぜひSky株式会社にご相談ください。
Sky株式会社のソフトウェア評価/検証についてはこちらから
https://www.skygroup.jp/software/quality/著者 Sky株式会社
Sky株式会社は、家電のシステム開発を手掛けたのをきっかけに、デジタル複合機やカーエレクトロニクス、モバイル、情報家電、さらに自社商品として教育分野における学習活動ソフトウェアや、公共・民間向けクライアント運用管理ソフトウェアなど、幅広い分野でのシステム開発を展開しております。