結合テスト(けつごうてすと)情報マネジメント用語辞典

integration testing / joint testing

» 2011年11月07日 00時00分 公開
[@IT情報マネジメント編集部,@IT]

 システムやプログラムの結合段階で行われるソフトウェアテストのこと。システムを構成するモジュールやサブシステムが設計どおりに相互連携するかどうかを検証する。

 ソフトウェアプログラムは通常、モジュールの組み合わせとして作られる。ソフトウェア開発では、部品であるモジュールが出来上がってきたら、それらを組み立てて正しく動作するかどうかを確認する必要がある。これが結合テストである。

 結合テストの主たる目的はモジュール間のインターフェイスやデータの受け渡しをチェックすることで、モジュールの呼び出しや戻り、メソッド間のメッセージ交換に食い違いがないか、メモリや外部ファイル、データベースを通じたデータの受け渡しに問題はないかを確認する。

 結合テストは、言葉のうえでは「単体テストを終えたモジュールを結合して行うテスト」と定義できるが、近年は開発者が行う単体テストの範囲が広がったこともあり、単体テストと結合テストの区別を一般化することが難しくなっている。単体/連結の区分は実際のところ、個々のプロジェクトの管理方針や事情によって変わる。

 ソフトウェアは階層的に設計されるが、規模が大きくなればそれだけ階層数も増え、各階層で結合テストが行われる。メソッドや関数の呼び出し関係の確認も結合テストだが、会計システムが営業システムとインターフェイスを介して接続できるかを検証するテストも結合テストと呼べる。現場では混乱を避けるために「モジュール結合テスト」「機能結合テスト」「サブシステム結合テスト」というように粒度や目的を明示するテスト名称を付ける工夫がされている。

 結合テストの位置付けは、SLCPで見れば単体テストとシステムテストの間にあるテスト工程であり、Vモデルで見れば設計を検証するテストであることが分かる。結合テストのポイントは、このシステム設計やプログラム設計に対応するというところにある。

 ソフトウェアの設計を単純化していえば、概念的な要求を論理的なプログラム構造に分割していくことである。その分割されたプログラムを再びまとめていく作業が結合テストということになる。すなわち、結合テストは単にテストであるだけではなく、結合工程そのものといえる。

 結合テストの進め方は増加テストと非増加テストの2つに大別される。前者にはトップダウンテストボトムアップテストサンドイッチテストがあり、後者はビッグバンテストと呼ばれる。通常はトップダウンテストか、ボトムアップテストのどちらかが行われる。

 トップダウンテストとボトムアップテストのどちらを選ぶかは、両テストの特性もあるが、設計や実装をトップダウンで行うか、ボトムアップで行うかの選択と関係する。例えば、トップダウンで設計してそのままコーディング(スケルトンでもよい)すれば、トップダウンテストを実施できる。これを少し進めれば、プログラムの概要を示すプロトタイプができるので、設計の正しさを確認するためにプロトタイプが必要な場合は、トップダウン開発−実装−テストの方法を採ることになる。

 しかし、トップダウン設計で出来上がった部分から実装するというやり方は一般的ではない。標準的なトップダウン設計は、基本はトップダウンで設計しながらボトムアップの視点を含む多角的な見直しを行い、設計フェイズで全体の見通しを立ててから開発を進めるというスタイルである。この場合、設計が完成してから実装とテストを行うので、スケジュール的には不利となる。

 また伝統的な説明では、トップダウン開発−テストではスケジュールの後半にテストが集中するため、最終段階で問題が多発するとされた。しかし、近年ではテスティングフレームワークによって開発段階で単体テストを行うことも多く、従来よりは結合テストの比重は下がっている。なお、スケルトン開発を採用した場合はインターフェイスのテストを先行することになるので、単体テストが通ったモジュールは本番結合テストを通る確率も高いと期待できる。

 他方のボトムアップ設計は先にシステムの要素を確定してから、その組み合わせとして全体を構成する方法である。データ中心アプローチや再利用を前提にしたオブジェクト指向開発は、ボトムアップ的になる傾向がある。ボトムアップ設計は、個々の下位モジュールの必要性が明らかなときに採用される設計戦略である。従って、モジュール設計が終われば下位モジュールの実装−テスト(ボトムアップテスト)を先行することができる。逆に、ボトムアップ設計では上位階層の設計変更がしばしば予見されるので、トップダウンテストと組み合わせるメリットはあまりなさそうだ。

 オブジェクト指向プログラムでは、階層構造があればトップダウン/ボトムアップテストも行うが、継承関係があればスーパークラス?サブクラスの結合を、複数スレッドが連携するのであればスレッド単位の統合を検証する。

 なお、XPの世界ではモジュール結合/結合テストは、継続的インテグレーションの形で行われる。

参考文献

▼『ソフトウェアの信頼性――ソフトウェア・エンジニアリング概説』 グレンフォード・J・マイヤーズ=著/有沢誠=訳/近代科学社/1977年10月(『Software Reliability: Principles and Practices』の邦訳)

▼『ソフトウェア・テストの技法〈第2版〉』 グレンフォード・J・マイヤーズ、トム・バジェット、テッド・M・トーマス、コーリー・サンドラー=著/長尾真=監訳/松尾正信=訳/近代科学社/2006年7月(『The Art of Software Testing: 2nd ed』の邦訳)

▼『ソフトウェアテスト技法――自動化、品質保証、そしてバグの未然防止のために』 ボーリス・バイザー=著/小野間彰、山浦恒央=訳/日経BP出版センター/1994年2月(『Software Testing Techniques, 2nd Edition』の邦訳)

▼『リーンソフトウェア開発と組織改革』 メアリー・ポッペンディーク、・トムポッペンディーク=著/依田智夫=監訳/依田光江=訳/アスキー・メディアワークス/2010年10月(『Leading Lean Software Development: Results Are not the Point』の邦訳)


Copyright © ITmedia, Inc. All Rights Reserved.

注目のテーマ