結合テストとは?
結合テスト(IntegrationTest, IT)とは、単体テストを終えた複数のプログラムやモジュールを組み合わせ、意図した通りの動作・挙動が起きるか確認するテストです。
開発の現場で一般的に使われる「ウォーターフォールモデル」の中では、プロジェクト中盤から終盤にかけて実施します。
どのような画面/機能を組み合わせてテストするかは企業やチームによっても異なりますが
・ログイン画面が表示される(画面A)
・パスワードは伏せ字で表示される(機能A)
・パスワードが一致したらログインできる(機能B)
このように、画面と機能の挙動の組み合わせが仕様通りになっているか確認していきます。
結合テストとシステムテストの違い
結合テスト | 単体テストの後に行われる。複数のプログラムやモジュールを組み合わせ、意図した通りの動作・挙動が起きるか確認する |
システムテスト | 結合テストの後に行われる。全ての機能が揃った状態で、当初の要件定義の内容に沿っているかを確認する |
結合テストとシステムテストの大きな違いは、目的です。
結合テストは単体テストが完了したプログラムを対象に「正しく機能するか」テストをしますが、システムテストでは、セキュリティ・ユーザビリティなどを始め「エンドユーザーが心地よく使えるか」という視点でテストを行います。
結合テストと単体テストの違い
結合テスト | 単体テストの後に行われる。複数のプログラムやモジュールを組み合わせ、意図した通りの動作・挙動が起きるか確認する |
単体テスト | プログラムを組んだモジュール/コンポーネントなどの動作を、機能単位で確認する |
結合テストと単体テストの大きな違いは、テストの実施範囲です。単体テストではモジュール/プログラムなどの機能単体の挙動を確認しますが、結合テストでは、その機能を組み合わせた結果問題なく動作するか確認します。
結合テストの重要性
システム開発において、結合テストは非常に大きな役割を持っています。ここからは、結合テストの重要性について詳しく紹介します。
モジュールを結合した際の挙動を確認する
「単体テストを無事にクリアしたのに、他のモジュール/プログラムと組み合わせたら動作不良が見つかった」というケースは、実は多くあります。
当初の要件定義通り動作するかを確認するためにも、実際にモジュール/プログラムを結合してテストすることが大切です。
バグや不具合に効率的に対処する
結合テストは比較的狭い範囲から行えるため、不具合やバグが発生した場合でも、システムテストや受け入れテストより簡単に原因を特定できます。
結合テストを通して小さな不具合やバグに効率的に対処しておくことで、スムーズに後の工程へ繋げることが可能です。
結合テストの種類
一口に「結合テスト」と言っても、目的や内容によっていくつかの種類に分けられます。ここからは、結合テストの種類を紹介します。
インターフェーステスト
「インターフェース」とは、異なるモジュール/プログラム同士でデータをやりとりする仕組みのこと。
インターフェーステストは「1つ1つのモジュール/プログラムを連携させ、動作を確認する」手法で、結合テストの中で最も基本的なテストです。
ブラックボックステスト
ブラックボックステストとは、システムの内部構造が分からないまま操作し「一定のインプットに対してアウトプットが正しく行われるか」を確認するテストです。
単体テストでも「ブラックボックステスト」を行いますが、単体テストの場合は1つ1つのモジュール/プログラムに対してテストするのに対し、結合テストでは単体テストを通過したモジュール/プログラムを組み合わせた状態でテストを行うため、内容が若干異なります。
業務シナリオテスト
業務シナリオテストとは、実際の業務を想定した何十種類もの操作を行い、動作・挙動を確認するテストです。通常業務で使う基本的な操作だけでなく、開発者が想定していないような操作を行なった場合の挙動もテストしていきます。
業務シナリオテストの目的は、ユーザーがシステムの不具合に直面しないようにすること。そのため、品質の担保に欠かせない、大切なテストだと言えます。
負荷テスト
負荷テストとは、システムに限界まで負荷をかけた状態で、システムダウンやパフォーマンス低下などの不具合が発生しないかを確認するテストです。
システムのリリース後は、アクセスが集中したり、重たい処理が重なったりすることもあります。限界性能や安全性を確保しておくためにも、リリース前に負荷テストを行なっておくことが大切です。
結合テストの手法とは?
結合テストには、大きく分けて2種類あります。それぞれテストの内容や特性が異なるため、実施の前に違いを理解しておきましょう。
トップダウンテスト
トップダウンテストは、上位モジュールから下位モジュールの順番でテストを進めていく手法です。
システムの中でより重要な役割を持つ上位モジュールからテストしていくため、より早く致命的な不具合を発見できるほか、テストを進めていく中で上位モジュールを繰り返し確認することになるため「見つけにくい重大な欠陥に気づきやすい」というメリットがあります。
デメリットは「スタブ」の作成に手間がかかることです。
下位モジュールが未完成の場合は、通常、下位モジュールの機能を代替する「スタブ」というモジュールを作成して代用します。未完成の下位モジュールが多い場合は、スタブを多く制作しなければいけないため、多く手間がかかってしまいます。
ボトムアップテスト
ボトムアップテストは、トップダウンテストとは逆で、下位モジュールから上位モジュールに向かって順番にテストを進める手法です。
特定の機能や実装の詳細などの比較的小さな機能から順番にテストを行うことでトップダウンテストよりも不具合やバグを素早く特定できるほか、スタブを作成する必要がないためテスト環境の構築も簡単に行えるというメリットがあります。
ただし、ボトムアップテストでは、最後までシステム全体の動作を確認することができません。そのため、早い段階で「エンドユーザーが心地よく使えるか」という要件定義を満たしているかを確認できないというデメリットも抱えています。
結合テストのメリット
結合テストの効果を最大限に発揮するには、開発者側と依頼者側がメリット・デメリットを正しく理解していることが大切です。ここからは、結合テストのメリットを紹介します。
単体テストの欠点をカバーできる
1つめは、単体テストの欠点をカバーできることです。
単体テストでは、1つ1つのモジュール/プログラムの動作を確認することしかできません。「モジュールを組み合わせたときに正しく挙動するかは、結合テストを行ってみないと分からない」という意味で、単体テストの欠点をカバーすることが可能です。
大きなトラブルを防止し、スムーズにプロジェクトを進められる
2つめは、結合テストを行うことで、モジュール/プログラムの細かな動作不良やバグを確認・修正できることです。
この段階でシステムの品質が担保されれば、後の工程での大きなトラブルを回避できます。手もどりを回避してスムーズにプロジェクトを進めるという意味でも、結合テストは重要な役割を担っていると言えるでしょう。
結合テストのデメリット
ここからは、結合テストのデメリットを紹介します。
システムの規模によっては大きな負担になる
1つめは、大きな工数がかかることです。結合テストではモジュール/プログラム同士をさまざまなパターンで組み合わせて動作を確認するため、モジュール単体の機能をテストする単体テストよりもたくさんの時間と労力がかかります。
システムの規模が大きければ大きいほど負担が増大するため、プロジェクトのスケジュールを検討する際は、ある程度余裕を持たせて組む必要があります。
単体テストと比べると、詳細な検証ができない
2つめは、単体テストと比べると詳細な検証ができないことです。
結合テストはモジュール/プログラムを組み合わせてテストを実施するため「1つ1つの機能が正しく動作しているか」という検証を正確に行うことはできません。
そのため、結合テストを行う前に、対象となるモジュール/プログラムを単体テストにかけておくことが大切です。
結合テストを行う際のポイント
結合テストは、開発するシステムの品質を担保するという意味で、非常に大きな役割を持っているテストです。ここからは、結合テストをスムーズかつ確実に実行するためのポイントを紹介します。
①重要な機能は優先的にテストする
システム開発に当てられる時間や費用は有限です。その中で効率よく品質の良いシステムを開発するためには、よく使われる機能や重要な機能を優先的にテストすることが大切です。
例えば、顧客管理ツールの場合「顧客のデータ登録機能」と「メールの配信機能」を比較すると、顧客のデータ登録機能の方がより重要度が高いと言えます。
これは、そもそも顧客のデータを登録できていなければ、メールを正しく送ることができないからです。また、メールの配信数はデータ登録数よりも少なくなる上、他のツールで代替することもできるため「顧客のデータ登録機能」をより優先する必要があります。
②狭い範囲からテストを開始する
関係するモジュール数が多い箇所からテストを始めると、不具合が発覚したとき、原因を究明するまでに膨大な工数がかかってしまいます。そのため、結合テストを行う際は、狭い範囲からスタートして、細かな不具合を解消した後にテスト範囲を広げることが大切です。
例えば、顧客管理ツールの場合「売上目標の計上機能」と「案件管理機能」を比較すると、案件管理機能のテストの優先度が高いと言えます。
これは「案件管理機能」で1案件ごとの収益の計算に不具合が発生している場合、売上目標計上機能にもズレが生じてしまう上、その原因を究明するために工数を費やしてしまうためです。
狭い範囲からテストを実施することでこういったロスをなくし、より効率的にシステム開発を進めることができます。
③本番と同じ環境でテストする
システムの動作はかなり環境に左右されるため、端末・周辺機器・使用する時間帯・ブラウザなど、できる限りの要素を本番環境に寄せる必要があります。
本番環境を再現して結合テストを行うことで、事前に不具合を解消したり、システムリリース後に不具合が出る可能性を低くしたりすることが可能です。
システム開発時は、結合テストまで綿密に行いましょう
ここまで、結合テストの目的や実施のポイントについて紹介してきました。結合テストは、開発の中で発生した不具合を早期に発見・解消するために大切な役割を持っています。
限られた時間で質の良いシステム開発を行うためには、最適なテストを最適なタイミングで丁寧に行う必要がありますが「なかなか信頼できる開発会社と出会えない」とお悩みを持っている方も多いようです。
弊社BLUEWIND ASIAは、フィリピンのセブ島でオフショア開発の支援を行っております。
海外で開発を行うため、国内で開発するよりも安価にプロジェクトを進めることが可能です。
日本の大手企業さまとのお取引実績はすでに50件以上。コスト面だけではなく、実績面・技術面でも安心をお届けすることができるかと考えております。
「他社に開発の見積もりをしているが、金額が妥当か相談したい」など、小さなことからでも構いません。
システム開発に関するお話なら、お気軽にお問い合わせください!