結合テストの基礎
結合テスト、統合テストとは
結合テスト、統合テストは組織やチームなどによって名称が異なりますが、
- 「結合テスト」
- 「統合テスト」
- 「連結テスト」
- 「インターフェーステスト」
- 「インテグレーションテスト」
- 「サブシステムテスト」
- 「コンポーネント統合テスト」
- 「システム統合テスト」
などと呼ばれるものの総称です。 組織によってさまざまな実施形態があるため、定義が困難になっていると思われます。
一般的な定義
一般的な定義としてはどうでしょうか。
結合テスト、統合テストは、英語では一般的に integration testing と呼ばれています。 テストの用語集、JSTQB用語集(JSTQB-glossary.V2.0.J02)を見てみましょう。
●統合テスト(integration testing):
統合したコンポーネントやシステムのインターフェースや、相互作用の欠陥を摘出するためのテスト。component integration testing および system integration testing も参照のこと。参照先は以下。
●コンポーネント統合テスト(component integration testing)
統合したコンポーネント間のインターフェースや相互作用の欠陥を検出するためのテスト。●システム統合テスト(system integration testing)
システムとパッケージを統合するテスト。また、外部システム(たとえば電子データ交換やインターネット)とのインターフェースのテスト。
このように、コンポーネントの相互作用を確認するテスト、また何らかの結合時に実施するテスト、というのが一般的な理解となっています。
ソフトウェアシステムの構造には システム>サブシステム>コンポーネント>モジュール… といった階層があります。こららの階層毎といった粒度で、段階的に結合を行っていきます。どの階層で問題が発生しているのかを明確にできるため、段階的に結合を行うことが良いとされています。
また、最近では技術の進歩により「単体テスト」としての範囲の拡張や、「システムオブシステムズ」や「ソリューション」といった上位概念が出てきており、統合テストの範囲は年々広がっています。
つまり、現段階で、結合には以下のような粒度があると言えます
- モジュール間結合
- コンポーネント間結合
- サブシステム間結合
- システム間結合
結合テストはすべての粒度で必要です。
結合テストの目的
結合テストの目的は、「設計・構造の妥当性確認」です。 以下のような項目をテストします。
- 外部/内部インターフェースの完全性: 結合・構造自体に問題がないか
- 機能の妥当性: 結合した状態の振る舞いに問題がないか
- データの内容: 結合した状態でやりとりするデータに問題がないか
- 性能: 結合した状態での動作は狙い通りか
システムテストとの違い
システムテストも最終的な結合テストといえますが、結合テストは設計・構造の妥当性を確認する - 要求とそれに対するシステムの妥当性を確認するものです。 結合テストは対象物の内部構造に焦点を合わせ、システムテストでは人と対象物に焦点を合わせます。
結合テストの分類
結合テストは、適用範囲と実施方法により分類できます。
範囲の分類
○インターフェースに特化したテスト
- 「連結」テストと呼ばれることもあります。
- インターフェースのプロトコルやメッセージのやりとりに特化したテストです。
結合することをテストします。
シーケンス図等で定められたシーケンスに従った入出力において、正しいパターンやあり得ないパターンの通信を受けた時の動作が妥当なものかどうかを評価します。あるモジュールが出した命令を受けて、期待通りに次のモジュールが動くこと、正しい通信を返すこと、といった点が主な焦点になります。
結合テストの目的のうち、1. を確認対象とし、3. も時々確認します。
○サブシステムやシステムを結合した状態でのブラックボックステスト
- いわゆる「結合」テスト。
- 既に「現在の対象が外部にリリースする単位」(=これを単体と定義する)では内部のテストが終了しており、他のモジュールとの連動や組み合わせによって表現される機能に対してのテストを行います。
結合した状態の動作をテストします。要求から一つ一つブレイクダウンした「実現方法」が主な焦点となります。
結合テストの目的のうち、2.、3.、4. を確認対象とします。
この結合テストでいう単位がテストレベルになることもあります。 組織によっては細分化されたり、丸められたりします。 品質を厳しく見る組織では、より細分化されたり、まったく異なる軸や観点のテストが定義されることもあります。
実施方法の分類
トップダウンテスト
いわゆるスタブを使ったテスト。
モジュール構造において下位にあたるモジュールを所定のインターフェースを持つスタブとして仮に生成し、上位モジュールから呼び出してテストします。
メインモジュールやモジュール間インターフェースに対して、早めの段階でのテストが可能になります。下位モジュールのテスト時にも上位モジュールのテストになるため、潜在バグを発見しやすい長所がある一方、以下のような短所もあります。
- 開発の初期の頃には、テストしながらの開発が難しい
- スタブの作成が難しいことがある
ボトムアップテスト
いわゆるドライバを使ったテスト。
モジュール構造において、上位にあたるモジュールを仮生成して下位モジュールから呼び出してテストを行います。
以下のような長所があります。
- テストケースの作成や結果のチェックが容易
- 開発の初期からテストしながらの開発がしやすい
また、以下のような短所があります。
- 最終的に接続した際に、インターフェースのバグがあったりすると修正量が多くなってしまう
結合テストの特徴
システムテスト前の開発段階であることが多いため、スケジュールや対象物、環境によってパターンが変わりやすい、という特徴があります。
例えば、スタブとなるシミュレータがあらかじめ用意されている環境では、トップダウンの方式を取る場合があります。納期が非常に厳しいケースではボトムアップの方式を取ることがあります。
また、基本的には開発中と呼ばれるフェーズなので、
- テスト期間中だが仕様が定まらずドキュメントが不十分
- 仕様が毎日変わる
- 連結先(連結対象モジュール/コンポーネント/サブシステム)の都合で止まる
- シミュレータのバグに翻弄される
- 要求が変わる
- スケジュールに余裕がない
といったことが当然のように発生します。これらは結合テストに限ったことではありませんが、結合テストのフェーズで、より発生しやすい、と認識しておきましょう。
まとめ
- 結合テストは、設計・構造の妥当性を確認するために、段階的に結合し確認することで問題点を明確化
- 対象は結合する対象によって変化
- 一般的にはインターフェース、機能、データ、性能に着目
- 開発中のため日々の変化に対応する必要あり
参考文献:
テスト技術者資格制度 Foundation Level シラバス 日本語版
© International Software Testing Qualifications Board VER2011
© 日本語翻訳版Japan Software Testing Qualifications Board Version 2011.J02, ソフトウェアテスト標準用語集(日本語版)Version 2.0.J02 (2011年04月19日)
International Software Testing Qualifications Board 用語集作業班
実践ソフトウェアエンジニアリング
ロジャー・S・プレスマン(著) 日本科学技術連盟出版社
執筆者プロフィール 小山 竜治(@koyaman2)
JaSST Tokyo実行委員 / WACATE実行委員
略歴:組み込みソフトウェアの結合テストマネジメントを中心に経験を積み、医療機器ソフトウェアの結合テストマネジメントを経てWebサーバシステムの結合テストマネジメントを担当。現場でテストやプロセス改善をする傍ら、ソフトウェアテストの技術向上のためにテスト自動化研究会等でソフトウェアテストについて学ぶ。