プロバイダはサービスのインタフェースのみを公開しており,その情報はWSDLで記述されて いる.したがって,リクエスタが得られる情報は,プロバイダのWSDLに依存する.
通常,リクエスタはプロバイダの内部動作の詳細を知る必要はなく,インタフェー スの規約のみを遵守すればよい.これは,コンポーネント指向の抽象プログラミ ングの観点から見ると,リクエスタは実装に関知せずにアプリケーションを構築 できるという利点がある.
しかし,実際の開発においては,特にデバッグやテストの段階において,利用す るサービスの内部動作を知りたいという要求がある.すなわち,いわゆるホワイ トボックステストをWebサービス開発で実現したいという要求である.
スタンドアロンアプリケーションであれば,利用するコンポーネントはライブラ リとして提供されるので,デバッガ等で追跡可能である.しかし,Webサービス は実装を公開しないので,リクエスタサイドからはいわゆるブラックボックステ ストしか行えない.
企業内システムなど,利用者の身元が特定可能で,かつ閉鎖的なネットワークに おける運用であれば,開発段階の措置という前提の上で,プロバイダの実装に 対する一定のアクセスを許容してもよい.この場合,プロバイダはテスト用にイ ンタフェースを拡張し,テストに必要な実装をプロバイダに組み込む必要が 生じる.このことに伴うコストは,プロバイダ管理者に課せられる.
一方で,リクエスタはプロバイダの想定するテスト要件から外れた,独自のテス トケースを自由に構築したいという要求がある.しかし,リクエスタの新規開発,ま たは既存リクエスタの仕様変更がなされるたびに,プロバイダ管理者に依頼してテ スト要件に対応してもらうことは,プロバイダ管理者の負担を増大させるので, 現実的ではない.また,サービスのコードを静的に変更しなければならないので, コードの品質低下に繋がる.
複合Webサービスをテストする場合は,更に問題が複雑化する.テスト対象となるプロバイ ダ間に依存関係が存在する場合,リクエスタはテストケースのシー ケンスに沿ってサービス要求の順序を制御する必要がある.このとき,サービス 間の依存関係が正常に解決済みであると,リクエスタが確認できなければならな い.しかし,この手続きはサービス間で直接行われるので,インタフェースから 得られる情報のみで手続きの成否を確実に判断することは不可能である.
他,リモートデバッグにおける通信経路についても問題がある.既存のリモート デバッガは,多くの場合独自のプロトコルを使用して通信する.しかし,一般 にWebサービスが稼働するホストはセキュリティ上好ましくない通信経路をファ イアウォール等で遮断することが多いので,必ずしもデバッガを接続できるとは 限らない.
以上の点が,リクエスタ開発における統合的なホワイトボックステストを阻害する要因と なっている.
要点を以下にまとめる. まず,リクエスタからプロバイダに何らかの操作を行う上で嫁せられる,一般的 な制約は以下の通りである.
これらの事実から,リクエスタサイドにおけるテストにおいて,以下のような不 都合が生じる.
これらの方法論は,テスト実行を機械的に自動化してコストを削減することで テスト実行の繰り返しを促し,より安定かつ洗練されたコードへと改善すること に役立つ.テストの問題領域はテスト対象となるモ ジュールの粒度および構成の規模によって異なり,細粒度から粗粒度へ,小規模 から大規模へ段階的に実施される.これらの各段階におけるテスト手法の各論に ついては多くの既存研究がある.
Webサービスに対し既存のテスティング方法論および技術の適用を検討すること は,前節で述べたホワイトボックステストの阻害要因がテストシーケンスにおいて表面化 する箇所を明らかにすることに繋がる.以下,既存のテスティング方法論と それらを実現する技術について述べ,本研究の問題領域への検討を図る.
単一のWebサービス全体を一つのプログラムモジュールと見なすと,リクエスタ による単体テストの概念を適用できる.しかし,あくまでWSDLに従ったWebサー ビス全体としての振る舞いのテストであり,Webサービスの内部動作には関与し ない.
複合Webサービス開発において,一つ以上のプロバイダからなる一連の処理シー ケンスに対し,リクエスタによる結合テストの概念を適用できる.しかし,単体 テストにおける概念の流用と同じく,WSDLによる規約に依存する.また,プロバ イダ間で直接行われるインタラクションは,リクエスタサイドで把握することは できない.
リモートホストに存在するプログラムを変更可能なツールとして DJcutter[10]がある.DJcutterは分散環境でアスペクト指向プログラミングを実現す ることを目的としており,処理の一部をリモートホスト上に存在するプログラム で実行することができる.また,複数ホスト上にある不特定多数のプログラムで 共有可能なプログラム断片を,サーバから配布してプログラムに織り込むことも できる.ただし,プログラム断片を織り込むためには,事前にホスト上のプログ ラムの実装について知らなければならない.すなわち,内部情報を引き出すため の支援機能は持たない.また,プログラム断片の配布に使用するプロトコルは, Webサービスの標準プロトコル(SOAP)ではない.
Webサービスのテストを目的としたフレームワークに,WSUnit[11]があ る.WSUnitは,リクエスタとプロバイダの間にプロキシとして介在し,SOAP要求とそ の結果に介入することができる.しかし,あくまでもWebサービスのMockとして 振る舞うだけなので,Webサービスにおける単体テストや結合テストの実現には 有用であるが,プロバイダの内部動作に干渉することはできない. 他,同種のWebサービスプロキシやApache Axis TCPMon[12]などのSOAPモニタは すべて同様の問題を内包する.
MITSUBAYASHI Shin 2007-03-14