システム開発において、品質を担保するためにいくつものテストが実施されます。
実際の開発工程では目的の異なる複数の種類のテストを行いますが、その中でも結合テストは厳密に行う必要がある重要な作業です。
システム全体の品質と開発プロジェクトの進捗に対して、重大な影響を与えるためです。
本記事では、結合テストの概要とその手法について解説し、結合テストを進める方法について説明します。
結合テストとは?
ソフトウェア開発において、テストの工程は目的ごとに複数のステップで構成されます。
具体的には、実施する順に単体テストと結合テストがあり、その後もシステムテスト、受入テストと続きます。
まず単体テストでは、機能ごとに独立してコーディングしたプログラムを単体のパーツごとに検証し、個別の機能に異常がないか確認します。
次に、単体テストが完了したパーツはそれらを組み合わせた際に欠陥がないか調べるため、複数のモジュールやコンポーネントが正しく連携していることを確認する結合テストを行います。
例えば、ユーザーIDとログインパスワードを入力してユーザ認証を行う場合、入力フォームの提示→入力したパスワードの表示または非表示化→認証の成功または失敗、という一連の動作を確認します。
その後、システムテストでは本番環境を想定したハードウェアやシナリオを用いてシステム全体の検証を行います。
最後の受入テストでは、システム全体を受入側である発注者視点でテストが実施されます。
結合テストの重要性
結合テストが重視されるのは、以下のような理由があるためです。
モジュール結合時の問題を見出す
何人かのエンジニアでソフトウェアを開発する場合、それぞれの作業者が割り当てられた範囲の業務に取り組みます。
その結果、単体テストでは問題がなくても、パーツを組み合わせた際に機能が仕様を満たさなかったり、あるいは使いやすさに問題が生じる可能性があります。
結合テストにより、複数のパーツが1つのユニットとして適切に機能し、規定の要件を満足できているか確認できます。
単体テストの見落としを発見する
例えば、サードパーティから提供されるAPIを利用した機能を盛り込む場合、パーツ単体では正しく動作するか確認できないことがあります。
この場合、結合テストによって実現したい機能に問題がないか確認することになります。
他にも、不適切な例外処理やデータのフォーマット設定など、単体テストだけでは確認できない項目もあるため、結合テストが重要になります。
後続テストの効率を上げる
ソフトウェア開発では、結合テストの後にシステムテストと受入テストを行い、全体の品質を確認してプロダクトをリリースします。
結合テストは単体のパーツを組み合わせる最初のテストで比較的範囲が狭いため、問題が発生した箇所の特定が容易です。
一方、後続のシステムテストと受入テストではより広範囲を検証するため、問題の発生箇所を特定するのが困難になります。
よって、結合テストの段階でより多くの欠陥を確認しておくことで、後続のテストをスムーズに進められます。
結合テストの種類
結合テストが重視されるのは、以下のような理由があるためです。
インターフェーステスト
インターフェーステストとはコンピューターシステムやソフトウェアのインターフェース(人とコンピューターの接点)についてテストすることを指します。
ユーザーが操作するインターフェースの見た目や振る舞い、およびそのインターフェースを通じてシステムが提供するサービスが正しく動作するかどうかを確認するためです。システムが正しく動作し、ユーザーが理解しやすいものであることを確認するために行われます。
ブラックボックステスト
ブラックボックステストとは、プログラムやシステムの入力と出力の関係をテストするもので、プログラムやシステムの内部構造やアルゴリズムがどのようなものであるかを知る必要はなく、入出力だけに着目することができます。品質管理やデバッグのプロセスにおいて欠かせません。
テストケースは、プログラムやシステムが正しく動作することを確認するために、異なる種類の入力を用いて実施されます。例えば、有効な入力値や無効な入力値、特殊な入力値などがあります。
また、ブラックボックステストは、自動化されることが多く、大規模なプログラムやシステムでも効率的にテストを実施することができます。
業務シナリオテスト
業務シナリオテストとは、システムが実際のビジネス環境で正しく動作するか、ビジネスプロセスに適合しているかどうかを確認するテストです。
また、ユーザーが実際にシステムを使用する際に発生する可能性のある問題を早期に検出することができるため、品質管理やデバッグのプロセスにおいて欠かせません。
負荷テスト
システムが高い負荷がかかる環境下で動作するかどうか確認するためのテストです。システムが実際の用途や利用状況で正しく動作するかどうかこのテストで判断することでシステムのスケーラビリティや信頼性を確保することができます。
結合テストの方式
結合テストの実施方式には以下のようなものがあります。
増加テスト
テストが終わったモジュールを順次結合させていきながら行うテストです。テストが進んでいくにつれてモジュールが多くなることから、増加テストと呼ばれますが、エラー箇所の特定がしやすいことから、大規模開発のテストに利用されます。
上記のシステムの構造を例に図で説明していきます。
ボトムアップテスト
下位レベルのパーツから順にテストする方法です。
テストが完了したパーツは上位レベルのパーツの検証に使用され、この手順を最上位のパーツの検証が終わるまで繰り返します。
下位のモジュールを呼び出す機能をもつドライバを未完成の上位モジュールのかわりに利用してテストを行います。
メリットとして、問題の発生箇所の特定が容易で、すべてのパーツが完成するまで待つ必要もありません。
デメリットとして、システムの制御に重要な最上位パーツの検証が最後になるため、この段階で問題が発生すると修正範囲が広くなってしまいます。
トップダウンテスト
システムの制御フローと同様に、上位パーツから下位パーツへと結合テストを順に行う方法です。
条件に合わせた結果を返却する機能をもつスタブを未完成の下位モジュールのかわりに利用してテストを行います。
メリットとして、最上位パーツから優先的に検証されるため、主要な設計上の問題があった場合に素早く発見し、影響が小さいうちに修正することが可能です。
デメリットとして、下位パーツの代わりとなるダミープログラムを作る必要があり、下位レベルのパーツは十分に検証がされません。
サンドイッチテスト
最上位と最下位のパーツの両方から検証を進め、あらかじめ設定した中間パーツに達したら完了とする方法です。
トップダウンとボトムアップのアプローチの組み合わせであるため、ハイブリッドテストとも呼ばれます。
つまり、最上位に近いパーツはトップダウンテストで最下位に近いパーツはボトムアップテストで行われるということです。
メリットとして、プログラミングの初期から完了時期まで継続的に検証を実施できます。
デメリットとして、テスト自体が複雑なため時間がかかり、効率よく検証を進めるためにはシステム全体にわたる理解が求められます。
非増加テスト
構成する全モジュールを一度に結合してテストする方法です。増加テストとは反対に不具合が起こった時に原因箇所の特定が難しいため、小規模開発のテストに利用されます。
ビッグバンテスト
テスト対象となる全パーツを結合し、1つのユニットとしてテストする方法です。
メリットとしては、テストフェーズの実行時間が少なくて済み、小規模なシステムが対象の場合に便利ということです。
デメリットとして、全てのパーツが完成するまで待たなければならず、未検証のパーツを一度にテストするため問題が発生した箇所の特定が困難になります。
結合テストの進め方
結合テストの方式に関わらず、テストの進め方は次の通りです。
結合テスト計画を立てる
結合テストの範囲・対象機能・検証環境・スケジュールを決定し、計画書にまとめて関係者で共有します。
テスト計画が明確でない状態で検証を開始すると、十分にテストできているか判断できず、ソフトウェアの品質が低下する恐れがあります。
対象となるソフトウェアの目的に応じた綿密な計画を立てられると、手戻りのないプロジェクトの実現や開発コストの削減につながります。
テストケースの作成と実行
テストケースとは、テストの実行手順や条件などを記載したドキュメントです。
検証内容を見落としたり、テストの担当者によって内容が異なることを防ぐ目的で作成します。
対象となるソフトウェアによってテストケースは異なるため、ユーザーの状況を綿密に想定しながら検証パターンを網羅できるように洗い出します。
テストケースが完成したら、結合テスト対象のパーツを結合し、テストケースに従って検証を進めます。
不具合の検出とバグの修正
テストの結果、検出された不具合の原因を究明し、バグを修正します。
不具合の内容によっては、ソフトウェア設計書の定義を再検討するなど上流に遡って対応する必要があります。
修正に時間を要する場合は、修正作業と再検証の工数を見積ってスケジュールに反映し、進捗状況がわかるようにしましょう。
テストサイクルの繰り返し
全ての不具合が修正されるまでテストサイクルを繰り返します。
テスト計画で決めたスケジュール通りに検証を終了させるためには、日々の進捗管理が重要です。
テストの進捗状況とバグの対策状況をグラフ化するなどして、いち早く遅延に気づいてリカバリーするよう心掛けます。
まとめ
システム開発において、安定した品質のシステムを構築するためにテスト工程は非常に大切なステップです。
中でも結合テストは後工程への影響が大きく、目的と内容を明確にして確実に進める必要があります。
本記事の内容を参考に、適切な結合テストの実施方法を検討できるようにしましょう。
また、システム開発の外注先選びでお困りの方は、弊社までお気軽にご相談ください。当社がこれまで支援してきた開発事例の共有、企画・コンサルティング、要件定義や実際の開発支援まで包括的にサポートさせていただくことが可能です。
システム開発を失敗しないために、弊社が相見積もりの取得までをサポートさせていただくことも可能です。むやみな営業電話などは決して行いませんので、まずは無料のご相談をお待ちしております。