(57)【特許請求の範囲】
【請求項１】
アプリケーションプログラムの動作検証を行う情報処理装置であって、
前記動作検証の実行環境に含まれ、設定された接続情報に基づいて前記アプリケーションプログラムを外部のサービスに接続する接続部から、前記外部のサービスへの接続要求を検知した旨の通知を受けると、前記動作検証において前記アプリケーションプログラムの接続対象とする前記外部のサービスの数に応じて前記実行環境を複製し、前記複製された実行環境に対応する外部のサービスへの接続情報を、前記複製された実行環境に含まれる接続部に設定し、前記複製された実行環境ごとに、前記複製された実行環境に含まれる接続部によって前記対応する外部のサービスを接続して前記動作検証を継続する制御部を備える、
情報処理装置。
【請求項２】
前記動作検証において前記アプリケーションプログラムの接続対象とする前記外部のサービスは、互いに互換性を有し、属性の異なるサービスである、
請求項１に記載の情報処理装置。
【請求項３】
アプリケーションプログラムの動作検証を行う情報処理装置のプロセッサが、
前記動作検証の実行環境に含まれ、設定された接続情報に基づいて前記アプリケーションプログラムを外部のサービスに接続する接続部から、前記外部のサービスへの接続要求を検知した旨の通知を受けると、前記動作検証において前記アプリケーションプログラムの接続対象とする前記外部のサービスの数に応じて、前記実行環境を複製し、
前記複製された実行環境に対応する外部のサービスへの前記接続情報を、前記複製された実行環境に含まれる接続部に設定し、
前記複製された実行環境ごとに、前記複製された実行環境に含まれる接続部によって前記対応する外部のサービスを接続して前記動作検証を継続する、
動作検証方法。
【請求項４】
アプリケーションプログラムの動作検証を行う情報処理装置のプロセッサに、
前記動作検証の実行環境に含まれ、設定された接続情報に基づいて前記アプリケーションプログラムを外部のサービスに接続する接続部から、前記外部のサービスへの接続要求
を検知した旨の通知を受けると、前記動作検証において前記アプリケーションプログラムの接続対象とする前記外部のサービスの数に応じて、前記実行環境を複製させ、
前記複製された実行環境に対応する外部のサービスへの前記接続情報を、前記複製された実行環境に含まれる接続部に設定させ、
前記複製された実行環境ごとに、前記複製された実行環境に含まれる接続部によって前記対応する外部のサービスを接続して前記動作検証を継続させる、
ための動作検証プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置、動作検証方法及び動作検証プログラムに関する。
【背景技術】
【０００２】
アプリケーションの構築に際し、アプリケーションの外部のサービスやミドルウェアを利用する機会が増えてきている。外部のサービスは、例えば、種々の情報やサービスを組み合わせて新しいサービスを提供するマッシュアップ、マイクロサービス等である。また、ミドルウェアは、例えば、データの保存および管理を行うRelational Database（ＲＤ
Ｂ）、Relational Database Service（ＲＤＳ）、Key-Value Store（ＫＶＳ）等である。
【０００３】
アプリケーションの外部のサービスやミドルウェア（以下、外部サービスともいう）のバージョンは、構築されるアプリケーションとは無関係に更新される。このため、外部サービスのバージョンが更新されると、アプリケーションが動作しなくなる場合がある。
【０００４】
外部サービスのいずれのバージョンで動作するかを確認するため、外部サービスのバージョンごとに、アプリケーションの動作検証（以下、テストともいう）が実施される。例えば、外部サービスとしてＲＤＢを用いる場合、アプリケーションは、ＲＤＢのバージョンごとに実行環境が用意され、テストされる。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２０１０−１９１５４３号公報
【特許文献２】特開２００６−１４８５５８号公報
【特許文献３】特表２００８−５３３５４２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、テストに含まれる複数のステップ（以下、テストステップともいう）には、ＲＤＢ等の外部サービスを利用しないテストステップが含まれる。外部サービスを利用しないテストステップについても、外部サービス、例えばＲＤＢのバージョンごとに用意された実行環境でテストが実施されるため、プロセッサやメモリ等の計算リソースは、無駄に消費される。
【０００７】
なお、以上のような確認は、バージョンの異なる外部サービスの他、様々な属性の違いを有する外部サービスごとに行われることも予想される。属性の異なる外部サービスとしては、外部サービスで用いるプログラムあるいはデータのバージョンが異なるものの他、例えば、互換性があるとされている異なる種別のサービスなどを含む。
【０００８】
本発明の一態様は、外部サービスを利用するアプリケーションの動作検証に使用されるリソースの低減を図る情報処理装置、動作検証方法及び動作検証プログラムを提供することを目的とする。
【課題を解決するための手段】
【０００９】
本発明の態様の一つは、アプリケーションプログラムの動作検証を行う情報処理装置である。本情報処理装置は、動作検証の実行環境に含まれ、設定された接続情報に基づいてアプリケーションプログラムの外部のサービスに接続する接続部から、外部のサービスへの接続要求を検知した旨の通知を受けると、動作検証の対象となる外部のサービスの数に
応じて実行環境を複製し、複製された実行環境に対応する外部のサービスへの接続情報を、複製された実行環境に含まれる接続部に設定し、複製された実行環境ごとに、複製された実行環境に含まれる接続部によって接続される対応する外部のサービスに対して動作検証を継続する制御部を備える。
【発明の効果】
【００１０】
開示の情報処理装置、動作検証方法及び動作検証プログラムによれば、外部サービスを利用するアプリケーションの動作検証に使用されるリソースの低減を図ることができる。
【図面の簡単な説明】
【００１１】
【図１】情報処理装置のハードウェア構成の一例を示す図である。
【図２】情報処理装置の機能構成の一例を示す図である。
【図３】初期状態のコンテナとＲＤＢの例を示す図である。
【図４】コンテナ複製後のコンテナとＲＤＢの例を示す図である。
【図５】初期状態のコンテナ管理テーブルの例を示す図である。
【図６】コンテナ複製後のコンテナ管理テーブルの例を示す図である。
【図７】ＲＤＢを使用しないテストケースのシーケンスの一例である。
【図８】ＲＤＢを使用するテストケースのシーケンスの一例である。
【図９】ポートフォワーダー部のフローチャートの一例である。
【図１０】コンテナマネージャのフローチャートの一例である。
【図１１】比較例における計算リソースの使用量を模式的に例示する図である。
【図１２】外部サービスを利用しないテストケースの計算リソースの使用量を模式的に例示する図である。
【図１３】外部サービスを利用するテストケースの計算リソースの使用量を模式的に例示する図である。
【図１４】仮想マシンによる並列テストの例を示す図である。
【発明を実施するための形態】
【００１２】
以下、図面に基づいて、本発明の実施の形態を説明する。以下の実施形態の構成は例示であり、本発明は実施形態の構成に限定されない。
【００１３】
＜比較例＞
外部サービスを利用するアプリケーションをテストする場合、例えば、外部サービスのバージョンごとにテストをするため、複数の実行環境が用意される。例えば、アプリケーションは、複数の仮想マシン（Virtual Machine、ＶＭ）上で実行され、外部サービスの
バージョンごとにテストされる。
【００１４】
図１４は、仮想マシンによる並列テストの例を示す図である。図１４において、仮想マシン１０１ａから１０１ｆが用意される。仮想マシン１０１ｄから１０１ｆは、それぞれバージョンの異なるデータベースＲＤＢ  ｖ１、ＲＤＢ  ｖ２、ＲＤＢ  ｖ３を含む。仮想マシン１０１ａから１０１ｃは、それぞれデータベースＲＤＢ  ｖ１、ＲＤＢ  ｖ２、ＲＤＢ  ｖ３を利用するアプリケーションＡｐｐ１０２ａ、Ａｐｐ１０２ｂ、Ａｐｐ１０２ｃを含む。
【００１５】
アプリケーションＡｐｐ１０２ａ、Ａｐｐ１０２ｂ、Ａｐｐ１０２ｃは、接続先が異なる同一のアプリケーションであり、それぞれ仮想マシン１０１ａから１０１ｃで実行される。アプリケーションＡｐｐ１０２ａ、Ａｐｐ１０２ｂ、Ａｐｐ１０２ｃは、それぞれ仮想マシン１０１ｄから１０１ｆに接続され、データベースＲＤＢ  ｖ１、ＲＤＢ  ｖ２、ＲＤＢ  ｖ３を利用する。このように、複数の仮想マシンで実行されるアプリケーションは、異なる接続先に接続することで、データベースのバージョンごとのテストを実施する
ことができる。
【００１６】
図１４の構成では、仮想マシンは、マシンそのものを仮想化するため負荷がかかり、短時間で複製するのは難しい。そこで、マシンそのものではなく、Operating System（ＯＳ）を仮想化するコンテナを用いてもよい。コンテナは、仮想マシンよりも少ない負荷で短時間に仮想化することができる。すなわち、複数のコンテナで実行されるアプリケーションは、異なる接続先に接続することで、データベースのバージョンごとにテストを実施することができる。
【００１７】
しかしながら、アプリケーションのテストは、データベースを利用しないテストステップを含む場合がある。この場合、データベースのバージョンごとに並列してテストをするのは、計算リソースの無駄となる。
【００１８】
＜実施形態＞
実施形態において、アプリケーションのテストは、複数のテストステップからなるテストケース単位で実施される。テストケース中、データベース等の外部サービスを利用しないテストステップは、１つのコンテナで実行される。外部サービスを利用するテストステップが検知されると、コンテナが複製される。複製された各コンテナは、複製元のコンテナにおけるテストステップの結果を流用し、外部サービスのバージョンごとに、残りのテストステップを継続する。これにより、コンテナ複製前に使用される計算リソースは削減される。
【００１９】
なお、実施形態において、外部サービスは、ＲＤＢ等のデータベースであるものとして説明されるが、データベースに限られない。外部サービスは、アプリケーションの外部のコンポーネント、プログラム等、アプリケーションの構築に利用される種々のサービスであってもよい。外部サービスは、アプリケーションの実行環境から接続されるサーバやコンテナ等に含まれる。外部サービスは、バージョンごとに、例えば、異なるサーバ等に配置されてもよく、同じサーバ内の異なるコンテナに配置されてもよい。
【００２０】
また、実施形態では、テスト対象は、外部サービスの複数のバージョンであるものとして説明されるが、バージョンに限られない。テスト対象は、提供元の異なる複数のミドルウェア等であってもよい。より具体的には、本実施形態の構成は、相互に互換性があるとされる異なる種別の外部サービスにも適用可能である。相互に互換性があるとされる異なる種別の外部サービスとしては、例えば、所定の規格に準拠しているとされる、提供元の異なるミドルウェア、アプリケーションサービス等が含まれる。相互に互換性があるとされる複数の外部サービスを区別するバージョン、種別、提供元等の性質は、以下、属性とも称される。
【００２１】
＜ハードウェア構成＞
図１は、情報処理装置１０のハードウェア構成の一例を示す図である。情報処理装置１０は、プロセッサ１１、主記憶装置１２、補助記憶装置１３、入力装置１４、出力装置１５、ネットワークインタフェース１６を備える。また、これらはバス１７により互いに接続される。
【００２２】
プロセッサ１１は、補助記憶装置１３に保持されたＯＳや様々なコンピュータプログラムを主記憶装置１２にロードして実行することによって、様々な処理を実行する。ただし、コンピュータプログラムによる処理の一部がハードウェア回路により実行されてもよい。プロセッサ１１は、例えば、Central Processing Unit（ＣＰＵ）や、Digital Signal Processor（ＤＳＰ）である。
【００２３】
主記憶装置１２は、プロセッサ１１に、補助記憶装置１３に格納されているプログラムをロードするための記憶領域、及びプログラムを実行するための作業領域を提供する。また、主記憶装置１２は、データを保持するためのバッファとして用いられる。主記憶装置１２は、例えば、Read Only Memory（ＲＯＭ）、Random Access Memory（ＲＡＭ）等の半導体メモリである。
【００２４】
補助記憶装置１３は、様々なプログラムや、各プログラムの実行に際してプロセッサ１１が使用するデータを格納する。補助記憶装置１３は、例えば、Erasable Programmable ROM（ＥＰＲＯＭ）、又はハードディスクドライブ（Hard Disk Drive、ＨＤＤ）等の不揮発性のメモリである。補助記憶装置１３は、例えば、オペレーティングシステム（Operating System、ＯＳ）、動作検証プログラム、その他様々なアプリケーションプログラムを保持する。また、補助記憶装置１３は、複製されたコンテナの接続先の情報を保持する。
【００２５】
入力装置１４は、ユーザからの操作入力を受け付ける。例えば、入力装置１４は、タッチパッド、マウス、タッチパネル等のポインティングデバイス、キーボード、操作ボタン、遠隔操作機からの信号を受信する回路等である。出力装置１５は、例えば、情報処理装置１０によるテスト結果を出力する。出力装置１５は、例えば、液晶ディスプレイ（Liquid Crystal Display、ＬＣＤ）である。
【００２６】
ネットワークインタフェース１６は、ネットワークとの情報の入出力を行うインタフェースである。ネットワークインタフェース１６は、有線のネットワーク、または無線のネットワークと接続する。ネットワークインタフェース１６は、例えば、Network Interface Card（ＮＩＣ）、無線Local Area Network（ＬＡＮ）カード等である。ネットワークインタフェース１６で受信されたデータ等は、プロセッサ１１に出力される。
【００２７】
例えば、情報処理装置１０では、プロセッサ１１が、補助記憶装置１３に保持される動作検証プログラムを主記憶装置１２にロードして実行する。なお、情報処理装置１０のハードウェア構成は一例であり、上記に限られず、実施の形態に応じて適宜構成要素の省略、置換または追加が可能である。
【００２８】
＜機能構成＞
図２は、情報処理装置１０の機能構成の一例を示す図である。情報処理装置１０は、機能構成として、コンテナマネージャ１、コンテナ２Ａおよびコンテナ２Ｂを備える。コンテナマネージャ１は、コンテナ管理テーブル５を備える。コンテナ２Ａは、Ａｐｐ  ３Ａおよびポートフォワーダー部４Ａを備える。同様に、コンテナ２Ｂは、Ａｐｐ  ３Ｂおよびポートフォワーダー部４Ｂを備える。
【００２９】
図２において、コンテナマネージャ１は、コンテナ２Ａおよびコンテナ２Ｂを備えるが、２つに限られず、複製した数のコンテナを備える。コンテナ２Ａ、コンテナ２Ｂ、複製されたコンテナは、コンテナ２と総称される。同様に、Ａｐｐ  ３Ａ、Ａｐｐ  ３Ｂ等は、Ａｐｐ  ３と総称される。さらに、ポートフォワーダー部４Ａ、ポートフォワーダー部４Ｂ等は、ポートフォワーダー部４と総称される。
【００３０】
情報処理装置１０のプロセッサ１１は、コンピュータプログラムにより、コンテナマネージャ１、Ａｐｐ  ３、ポートフォワーダー部４の処理を実行する。ただし、コンテナマネージャ１、Ａｐｐ  ３およびポートフォワーダー部４のいずれか、またはその処理の一部がハードウェア回路により実行されてもよい。
【００３１】
コンテナマネージャ１は、コンテナ２を管理する。具体的には、コンテナマネージャ１は、コンテナ２の複製、アプリケーションＡｐｐ  ３のテストの開始および継続指示、複
製したコンテナ２の破棄等を行う。コンテナマネージャ１は、制御部の一例である。
【００３２】
コンテナ２は、アプリケーションＡｐｐ  ３の実行環境を提供する。コンテナ２は、ＯＳが仮想化されたものである。ＯＳの内部は、一般に、物理リソースを管理するカーネル空間と、アプリケーションを実行するユーザ空間とに分かれる。コンテナ２は、ユーザ空間を複数に分けてＯＳを仮想化した空間であり、各コンテナから見えるリソースは制限される。各コンテナ２は、プロセス、ファイルシステム、ネットワーク等のリソースを他のコンテナ２から独立して管理する。コンテナ２は、実行環境の一例である。
【００３３】
Ａｐｐ  ３は、テスト対象のアプリケーションである。アプリケーションは、通常テストケースを実行するためのプログラムを含む。アプリケーション起動時の指定により、テストが開始され、アプリケーションは擬似的に実行される。Ａｐｐ  ３は、コンテナマネージャ１の指示により、テストケースの実行を開始する。Ａｐｐ  ３は、外部サービスを利用する場合、外部サービスを含むサーバ等ではなく、ポートフォワーダー部４に接続される。Ａｐｐ  ３の接続先は、設定ファイル等を事前に書き換えることにより、サーバからポートフォワーダー部４に切り換えられる。
【００３４】
ポートフォワーダー部４は、Ａｐｐ  ３の接続先を制御する。ポートフォワーダー部４は、Ａｐｐ  ３から外部サービスへの接続要求を検知すると、コンテナマネージャ１に対し、Ａｐｐ  ３が外部サービスを利用することを通知する。ポートフォワーダー部４からの通知を受けて、コンテナマネージャ１がコンテナ２を複製すると、ポートフォワーダー部４は、コンテナマネージャ１からテストの継続指示を受け付ける。この場合、複製されたコンテナ２のポートフォワーダー部４は、対応する外部サービスの接続先を含むフォワード先の切換え指示も受け付ける。ポートフォワーダー部４は、対応する外部サービスに対し、処理を依頼し、処理結果をＡｐｐ  ３に返す。ポートフォワーダー部４は、接続部の一例である。また、接続先は、接続情報の一例である。
【００３５】
コンテナ管理テーブル５は、コンテナ２と、テスト対象である外部サービスのバージョンとの対応関係を記憶する。コンテナマネージャ１は、コンテナ２を複製すると、コンテナ管理テーブル５を参照して、複製したコンテナ２のポートフォワーダー部４に、対応するバージョンの外部サービスの接続先を設定する。
【００３６】
＜コンテナの複製＞
コンテナマネージャ１は、ポートフォワーダー部４から、Ａｐｐ  ３が外部サービスを利用することの通知を受けると、コンテナ２を複製する。図３から図６は、コンテナ２の複製を説明するための図である。図３および図４は、コンテナ２とＲＤＢの例を示す。図５および図６は、コンテナ管理テーブル５の例を示す。
【００３７】
図３は、初期状態のコンテナ２とＲＤＢの例を示す図である。コンテナマネージャ１、コンテナ２Ａ、Ａｐｐ  ３Ａ、ポートフォワーダー部４Ａおよびコンテナ管理テーブル５は、図２と同一であるため、その説明は省略される。ＲＤＢ  ｖ１、ＲＤＢ  ｖ２およびＲＤＢ  ｖ３は、テスト対象のＲＤＢの３つのバージョンである。
【００３８】
初期状態では、１つのコンテナ２Ａが存在する。コンテナ２Ａで実行されるＡｐｐ  ３Ａは、データベースを利用する際、ポートフォワーダー部４Ａに接続される。ポートフォワーダー部４Ａは、Ａｐｐ  ３ＡからのデータをＲＤＢ  ｖ１にフォワードする。
【００３９】
図４は、コンテナ複製後のコンテナとＲＤＢの例を示す図である。コンテナマネージャ１、コンテナ２Ａ、Ａｐｐ  ３Ａ、ポートフォワーダー部４Ａ、コンテナ管理テーブル５、ＲＤＢ  ｖ１、ＲＤＢ  ｖ２およびＲＤＢ  ｖ３は、図３と同一であるため、その説明
は省略される。
【００４０】
コンテナ複製後は、３つのコンテナ２Ａ、コンテナ２Ｂおよびコンテナ２Ｃが存在する。コンテナ２Ｂおよびコンテナ２Ｃは、Ａｐｐ  ３Ａがデータベースを利用することが検知されると、コンテナマネージャ１によってコンテナ２Ａから複製される。
【００４１】
コンテナマネージャ１は、ポートフォワーダー部４Ｂに対し、Ａｐｐ  ３Ｂの接続先としてＲＤＢ  ｖ２を設定する。また、コンテナマネージャ１は、ポートフォワーダー部４Ｃに対し、Ａｐｐ  ３Ｃの接続先としてＲＤＢ  ｖ３を設定する。
【００４２】
コンテナ２Ｂで実行されるＡｐｐ  ３Ｂは、データベースを利用する際、ポートフォワーダー部４Ｂに接続される。ポートフォワーダー部４Ｂは、Ａｐｐ  ３ＢからのデータをＲＤＢ  ｖ２にフォワードする。
【００４３】
同様に、コンテナ２Ｃで実行されるＡｐｐ  ３Ｃは、データベースを利用する際、ポートフォワーダー部４Ｃに接続される。ポートフォワーダー部４Ｃは、Ａｐｐ  ３ＣからのデータをＲＤＢ  ｖ３にフォワードする。
【００４４】
図５は、初期状態のコンテナ管理テーブル５の例を示す図である。図５において、コンテナ管理テーブル５は、ＲＤＢの「バージョン」ごとに、「コンテナＩＤ」、「コンテナのＩＰアドレス」および「フォワード先」を示す情報を記憶する。
【００４５】
「コンテナＩＤ」は、当該バージョンのＲＤＢに接続されるコンテナ２の識別子である。「コンテナのＩＰアドレス」は、当該バージョンのＲＤＢに接続されるコンテナ２のＩＰアドレスである。「フォワード先」は、当該バージョンのＲＤＢへの接続先であり、コンテナ複製時に、ポートフォワーダー部４に設定される。「フォワード先」は、ＲＤＢを含むサーバ等のＩＰアドレスおよびポート番号を含む。
【００４６】
図５の例では、テスト対象のＲＤＢのバージョンは３つ存在する。初期状態では、ＲＤＢ  ｖ１に接続される１つのコンテナ２が存在する。当該コンテナ２の「コンテナＩＤ」は“c12345”であり、「コンテナのＩＰアドレス」は、“192.0.2.11”である。また、ＲＤＢ  ｖ１への「フォワード先」は、“192.0.2.101:12345”である。“192.0.2.101”はＲＤＢ  ｖ１を含むサーバ等のＩＰアドレスであり、“12345”は、ＲＤＢ  ｖ１と通信
するためのポート番号である。
【００４７】
初期状態では、ＲＤＢ  ｖ２およびＲＤＢ  ｖ３に接続されるコンテナ２は存在せず、ＲＤＢ  ｖ２およびＲＤＢ  ｖ３の「コンテナＩＤ」および「コンテナのＩＰアドレス」は、コンテナ管理テーブル５に記憶されていない。ＲＤＢ  ｖ２への「フォワード先」は、“192.0.2.102:12345”である。“192.0.2.102”はＲＤＢ  ｖ２を含むサーバ等のＩＰアドレスであり、“12345”は、ＲＤＢ  ｖ２と通信するためのポート番号である。ＲＤ
Ｂ  ｖ３への「フォワード先」は、“192.0.2.103:12345”である。“192.0.2.103”はＲＤＢ  ｖ３を含むサーバ等のＩＰアドレスであり、“12345”は、ＲＤＢ  ｖ３と通信す
るためのポート番号である。
【００４８】
ポートフォワーダー部４は、Ａｐｐ  ３からの通信を受けるためのポートと、コンテナマネージャ１からの指示を受けるためのポートの２つのポートで、接続待ちをする。例えば、アプリケーションからの通信を受けるためのポートを“12345”とし、コンテナマネ
ージャ１からの指示を受けるためのポートを“23456”とする。この場合、Ａｐｐ  ３か
らポートフォワーダー部４への接続先は、“127.0.0.1:12345”となる。
【００４９】
“127.0.0.1”は、ローカル・ループバック・アドレスと呼ばれ、自分自身を指すＩＰ
アドレスである。Ａｐｐ  ３は、自分自身が実行されるコンテナ２上で動作しているポートフォワーダー部４へ接続する場合、このＩＰアドレスを利用することができる。また、コンテナマネージャ１がポートフォワーダー部４に指示を出す場合の接続先は、“192.0.2.11:23456”となる。“192.0.2.11”は、当該ポートフォワーダー部４を含むコンテナ２のＩＰアドレスであり、コンテナ２の外部から接続する場合に用いられるアドレスである。
【００５０】
図６は、コンテナ複製後のコンテナ管理テーブル５の例を示す図である。ＲＤＢ  ｖ２およびＲＤＢ  ｖ３の「コンテナＩＤ」および「コンテナのＩＰアドレス」以外は、図５と同一であるため、その説明は省略される。
【００５１】
コンテナマネージャ１は、コンテナ複製時に、ＲＤＢ  ｖ２およびＲＤＢ  ｖ３に接続されるコンテナ２の「コンテナＩＤ」および「コンテナのＩＰアドレス」を、コンテナ管理テーブル５に登録する。図６の例では、ＲＤＢ  ｖ２に接続されるコンテナ２の「コンテナＩＤ」は“c23456”であり、「コンテナのＩＰアドレス」は、“192.0.2.12”である。また、ＲＤＢ  ｖ３に接続されるコンテナ２の「コンテナＩＤ」は“c34567”であり、「コンテナのＩＰアドレス」は、“192.0.2.13”である。
【００５２】
＜動作例＞
図７および図８は、複数バージョンのＲＤＢに対するアプリケーションのテストを実施する場合の動作例を示す。
【００５３】
図７は、ＲＤＢを使用しないテストケースのシーケンスの一例である。図７の例では、コンテナマネージャ１は、ＲＤＢ  ｖ１を使用しないテストケースについて、Ａｐｐ  ３Ａのテストを実施する。当該テストケースはＲＤＢを使用しないため、他のバージョンのＲＤＢに対するテストにおいても同じ結果が得られる。したがって、Ａｐｐ  ３Ａによる当該テストケースのテスト結果は、他のバージョンのＲＤＢに対するテストに流用される。
【００５４】
図７のコンテナマネージャ１、Ａｐｐ  ３Ａ、ポートフォワーダー部４ＡおよびＲＤＢ
ｖ１は、図３において、同じ符号により示される機能構成と同一であるため、その説明は省略される。
【００５５】
Ｓ１では、コンテナマネージャ１は、Ａｐｐ  ３Ａにテストの開始を指示する。Ｓ２では、Ａｐｐ  ３Ａは、ＲＤＢを使用しないテストステップ１を実行する。Ｓ３では、Ａｐｐ  ３Ａは、ＲＤＢを使用しないテストステップ２を実行する。
【００５６】
Ｓ４では、Ａｐｐ  ３Ａは、テスト結果をコンテナマネージャ１に返す。Ｓ５では、コンテナマネージャ１は、Ｓ４で得られたテスト結果を、ＲＤＢ  ｖ１以外のバージョンのＲＤＢを利用する他のＡｐｐ  ３のテストに流用する。
【００５７】
図８は、ＲＤＢを使用するテストケースのシーケンスの一例である。図８の例では、コンテナマネージャ１は、ＲＤＢを使用するテストケースについて、２つのバージョンＲＤＢ  ｖ１およびＲＤＢ  ｖ２に対するテストを実施する。図８に示されるテストケースは、ＲＤＢを使用しないテストステップ１、ＲＤＢを使用するテストステップ１およびＲＤＢを使用しないテストステップ２を含む。
【００５８】
図８のコンテナマネージャ１、Ａｐｐ  ３Ａ、Ａｐｐ  ３Ｂ、ポートフォワーダー部４Ａ、ポートフォワーダー部４Ｂ、ＲＤＢ  ｖ１およびＲＤＢ  ｖ２は、図４において、同
じ符号により示される機能構成と同一であるため、その説明は省略される。
【００５９】
Ｓ１１およびＳ１２の処理は、それぞれ図７のＳ１およびＳ２と同一であるため、その説明は省略される。Ｓ１３では、Ａｐｐ  ３Ａは、ＲＤＢを使用するテストステップ１を実行するために、ポートフォワーダー部４Ａに接続する。
【００６０】
Ｓ１４では、ポートフォワーダー部４Ａは、コンテナマネージャ１に対し、Ａｐｐ  ３Ａが外部サービスであるＲＤＢ  ｖ１を利用することを通知する。Ｓ１５では、通知を受けたコンテナマネージャ１は、Ａｐｐ  ３Ａおよびポートフォワーダー部４Ａを含むコンテナ２Ａを複製する。複製されたコンテナ２Ｂは、Ａｐｐ  ３Ｂおよびポートフォワーダー部４Ｂを含む。
【００６１】
図８の例では、テスト対象のＲＤＢのバージョンは２個であるが、２個より多くてもよい。テスト対象のＲＤＢのバージョンの数は、テストの実施前に設定ファイル等に設定されていればよく、例えば、コンテナ管理テーブル５に登録されたバージョンの数であってもよい。テスト対象のＲＤＢのバージョンがＮ個の場合、コンテナマネージャ１は、Ｎ−１個のコンテナ２を複製する。
【００６２】
Ｓ１６では、コンテナマネージャ１は、複製元のポートフォワーダー部４Ａに対し、テストケースの継続を指示する。Ｓ１７では、コンテナマネージャ１は、複製先のポートフォワーダー部４Ｂに対し、フォワード先の切替えと、テストケースの継続を指示する。コンテナマネージャ１からポートフォワーダー部４Ｂへの指示は、ＲＤＢ  ｖ２の接続先を含む。ＲＤＢ  ｖ２の接続先は、コンテナマネージャ１がコンテナ管理テーブル５から取得する。
【００６３】
Ｓ１８−１では、ポートフォワーダー部４Ａは、ＲＤＢ  ｖ１に対して問合せを実行する。Ｓ１９−１では、ＲＤＢ  ｖ１は、問合せの結果をポートフォワーダー部４Ａに返す。Ｓ２０−１では、ポートフォワーダー部４Ａは、ＲＤＢ  ｖ１からの問合せの結果をＡｐｐ  ３Ａに返す。
【００６４】
Ｓ２１−１では、Ａｐｐ  ３Ａは、ＲＤＢ  ｖ１からの問合せの結果に基づいてＲＤＢを使わないテストステップ２を実行する。Ｓ２１−１では、Ａｐｐ  ３Ａは、コンテナマネージャ１にテスト結果を通知する。
【００６５】
Ｓ１８−２からＳ２１−２の処理は、それぞれＳ１８−１からＳ２１−１の処理に対応し、Ａｐｐ  ３Ａ、ポートフォワーダー部４Ａ、ＲＤＢ  ｖ１に代えて、Ａｐｐ  ３Ｂ、ポートフォワーダー部４Ｂ、ＲＤＢ  ｖ２が処理を行う。
【００６６】
Ｓ２３では、コンテナマネージャ１は、各Ａｐｐ  ３からのテスト結果を受け取ると、複製先のコンテナ２を破棄する。図８の例では、複製先のコンテナ２Ｂ、並びにコンテナ２Ｂに含まれるＡｐｐ  ３Ｂおよびポートフォワーダー部４Ｂは破棄される。当該テストケースは終了し、次のテストケースが開始される。コンテナマネージャ１は、テストが完了するまで、図７または図８の動作例に従ってテストケースの実行を繰り返す。
【００６７】
＜処理の流れ＞
図９は、ポートフォワーダー部４のフローチャートの一例である。ポートフォワーダー部４の処理は、例えば、コンテナマネージャ１がＡｐｐ  ３Ａにテストの開始を指示することにより開始される。なお、図９に示されるフローチャートの動作主体の実態はプロセッサ  １１であるが、図９では、ポートフォワーダー部４を動作主体として説明する。
【００６８】
ＳＴ１では、ポートフォワーダー部４は、テストの開始により、Ａｐｐ  ３Ａからの接続受付状態になる。ポートフォワーダー部４は、初回の接続を受け付けた場合は、処理がＯＰ１に進み、２回目以降の接続を受け付けた場合は、処理がＯＰ３に進む。
【００６９】
ＯＰ１では、ポートフォワーダー部４は、コンテナマネージャ１に対し、Ａｐｐ  ３が外部サービスを利用することを通知し、状態がＳＴ２に遷移する。ＳＴ２では、ポートフォワーダー部４は、コンテナマネージャ１からのテスト継続の指示待ち状態になる。
【００７０】
このとき、コンテナマネージャ１は、テスト対象の外部サービスのバージョンの数に応じて、コンテナ２を複製する。複製されたコンテナ２のポートフォワーダー部４は、ＳＴ２の状態、すなわちコンテナマネージャ１からのテスト継続の指示待ち状態となっている。
【００７１】
複製元のコンテナ２のポートフォワーダー部４は、コンテナマネージャ１からテスト継続の指示を受ける。次に、処理がＯＰ３に進む。一方、複製された複製先のコンテナ２のポートフォワーダー部４は、コンテナマネージャ１から、フォワード先の切換えとテスト継続の指示を受ける。次に、処理がＯＰ２に進む。ＯＰ２では、ポートフォワーダー部４は、外部サービスへのフォワード先の設定を、コンテナマネージャ１からの指示に含まれる接続先に切り替える。次に処理がＯＰ３に進む。
【００７２】
ＯＰ３では、ポートフォワーダー部４は、Ａｐｐ  ３からの接続を、対応するバージョンの外部サービスにポートフォワードする。ポートフォワードは、特定のポートに送られてきたデータを、別の通信経路を用いて指定されたポートに転送することである。次に、状態がＳＴ１に遷移する。ＳＴ１において、テストの終了により、ポートフォワード部４の処理は終了する。
【００７３】
図１０は、コンテナマネージャ１のフローチャートの一例である。コンテナマネージャ１の処理は、例えば、コンテナマネージャ１がＡｐｐ  ３Ａにテストの開始を指示することにより開始される。なお、図１０に示されるフローチャートの動作主体の実態はプロセッサ  １１であるが、図１０では、コンテナマネージャ１を動作主体として説明する。
【００７４】
ＳＴ１１では、コンテナマネージャ１は、テストの開始を指示すると、ポートフォワーダー部４からの外部サービス利用通知待ち状態になる。外部サービス利用通知は、Ａｐｐ
３が外部サービスを利用する旨の通知である。コンテナマネージャ１は、外部サービス利用通知を受信した場合は、処理がＯＰ１１に進み、テスト結果を受信した場合は、処理がＯＰ１４に進む。
【００７５】
ＯＰ１１では、コンテナマネージャ１は、外部サービスのテスト対象のバージョンの数に応じて、コンテナ２を複製する。コンテナ２の複製が完了すると、処理がＯＰ１２に進む。
【００７６】
ＯＰ１２では、コンテナマネージャ１は、フォワード先切替え指示およびテスト継続指示を出す。このとき、コンテナマネージャ１は、複製元のコンテナ２には、テスト継続指示を出す。また、コンテナマネージャ１は、複製先のコンテナ２には、フォワード先切替え指示およびテスト継続指示を出す。次に、状態がＳＴ１２に遷移する。
【００７７】
ＳＴ１２では、コンテナマネージャ１は、各コンテナからのテスト結果を待つ。コンテナマネージャ１は、各コンテナからのテスト結果を受信すると、処理がＯＰ１３に進む。ＯＰ１３では、コンテナマネージャ１は、複製先のコンテナ２を破棄し、コンテナマネージャ１の処理を終了する。
【００７８】
ＯＰ１４は、ＳＴ１１の状態において、コンテナマネージャ１が外部サービス利用通知を受信せずにテスト結果を受信した場合の処理である。すなわち、テストケースにおいて、外部サービスは利用されていない。このため、ＯＰ１４では、コンテナマネージャ１は、外部サービスの他のバージョンのテストに対しても、受信したテスト結果を流用し、コンテナマネージャ１の処理を終了する。
【００７９】
＜実施形態の作用効果＞
複数の属性の外部サービスに対してアプリケーションのテストを実施する場合、外部サービスを利用しないテストケースについては、１つのアプリケーションで実施したテスト結果が、他のアプリケーションで流用される。これにより、コンテナマネージャ１は、当該テストケースの実行に使用されるリソースの低減を図ることができる。
【００８０】
また、外部サービスを利用するテストケースについては、外部サービスを利用する前のテストステップについては、１つのアプリケーションで実施したテスト結果が、他のアプリケーションで流用される。その後のテストステップは、アプリケーションごとに継続して実行される。これにより、コンテナマネージャ１は、外部サービスを利用する前のテストステップについては、使用されるリソースの低減を図ることができる。
【００８１】
ポートフォワーダー部４は、Ａｐｐ  ３からの接続要求に対し、コンテナマネージャ１から通知された接続先の外部サービスに接続する。このため、Ａｐｐ  ３は、外部サービスへの接続先を制御することなく、対応する属性の外部サービスに接続され、テストを実施することができる。これにより、コンテナマネージャ１は、外部サービスの利用を検知してコンテナ２を複製すると、外部サービスの属性ごとのテストに移行することができる。コンテナマネージャ１は、コンテナ２の複製前のテスト結果を、外部サービスの属性ごとのテストに流用することで、テストに使用されるリソースの低減を図ることができる。
【００８２】
コンテナマネージャ１は、外部サービスの異なるバージョンごとのテストだけでなく、例えば、提供元の異なるミドルウェアの種類ごとのテスト等、互いに互換性を有するとされる外部サービスの属性ごとのテストをすることができる。これにより、コンテナマネージャ１は、互いに互換性を有するとされる外部サービスの属性ごとのテストにおいても、テストに使用されるリソースの低減を図ることができる。
【００８３】
図１１から図１３は、低減される計算リソース使用量について具体的に説明する。図１１から図１３の例では、外部サービスのテスト対象のバージョンがＭ個あり、各バージョンをテストするためのアプリケーションＡｐｐ１からＡｐｐＭが用意される。また、テストケースは、テストステップ１からテストステップＮのＮ個のテストステップを含む。
【００８４】
横方向にＡｐｐ１からＡｐｐＭ、縦方向にテストステップ１からテストステップＮを並べた表において、アプリケーションごとに実行されたテストステップの欄は、背景色が付されるものとする。背景色が付された欄の数を、計算リソース使用量であるものとして、図１１から図１３における計算リソースを比較する。
【００８５】
図１１は、比較例における計算リソースの使用量を模式的に例示する図である。各アプリケーションのテストを個別に行う場合、テストに使用する計算リソース量はＭに比例する。また、Ｎ個の各テストステップにかかる時間が同じであるとすると、テストにかかる時間はＮに比例する。図１１では、Ｍ個のアプリケーションに対して、テストステップ１からテストステップＮが実行されるため、使用される計算リソースは、Ｍ×Ｎと表すことができる。
【００８６】
図１２は、外部サービスを利用しないテストケースの計算リソースの使用量を模式的に例示する図である。外部サービスを利用しないテストケースの場合、コンテナマネージャ１は、１つのアプリケーションでテストケースを実行し、得られたテスト結果を他のアプリケーションのテストに流用すればよい。
【００８７】
図１２では、１個のアプリケーションＡｐｐ１に対して、テストステップ１からテストステップＮが実行され、Ａｐｐ２からＡｐｐＭは、Ａｐｐ１のテスト結果を流用する。このため、使用される計算リソースは、１×Ｎと表すことができる。図１１の場合と比較して、使用される計算リソースは１／Ｍとなる。
【００８８】
図１３は、外部サービスを利用するテストケースの計算リソースの使用量を模式的に例示する図である。外部サービスを利用するテストケースの場合、コンテナマネージャ１は、外部サービスを利用する前のテストステップは一つのアプリケーションで実行する。コンテナマネージャ１は、外部サービスを利用するテストステップの実行前に、コンテナ２を複製する。コンテナマネージャ１は、複製されたコンテナ２上で、各アプリケーションのテストを継続する。
【００８９】
図１３では、１個のアプリケーションＡｐｐ１に対して、テストステップ１およびテストステップ２が実行され、Ａｐｐ２からＡｐｐＭは、テストステップ１およびテストステップ２については、Ａｐｐ１のテスト結果を流用する。コンテナマネージャ１は、テストステップ３の実行前にコンテナ２を複製し、テストステップ３以降のテストステップは、複製されたコンテナ２上で、Ａｐｐ２からＡｐｐＭのテストを継続する。使用される計算リソースは、図１１の場合と比較して２×（Ｍ−１）低減させることができる。
【００９０】
＜変形例＞
実施形態は、データベースのバージョンごとのテストを例として説明されるが、これに限られない。例えば、複数のソフトウェアを連携させるためのインタフェースであるRepresentational State Transfer Application Programming Interface（ＲＥＳＴ  ＡＰＩ
）を用いたアプリケーションについても、外部サービスを利用しないテストケースまたはテストステップの結果の流用により、テストに使用されるリソースの低減が図られる。
【００９１】
また、外部サービスのバージョンではなく、例えば、外部サービスの提供元の違いによる属性ごとのテストについても、外部サービスを利用しないテストケースまたはテストステップの結果の流用により、テストに使用されるリソースの低減が図られる。
【００９２】
＜記録媒体＞
コンピュータその他の機械、装置（以下、コンピュータ等）に上記いずれかの機能を実現させるプログラムをコンピュータ等が読み取り可能な記録媒体に記録することができる。そして、コンピュータ等に、この記録媒体のプログラムを読み込ませて実行させることにより、その機能を提供させることができる。
【００９３】
ここで、コンピュータ等が読み取り可能な記録媒体とは、データやプログラム等の情報を電気的、磁気的、光学的、機械的、または化学的作用によって蓄積し、コンピュータ等から読み取ることができる記録媒体をいう。このような記録媒体のうちコンピュータ等から取り外し可能なものとしては、例えばフレキシブルディスク、光磁気ディスク、ＣＤ−ＲＯＭ、ＣＤ−Ｒ／Ｗ、ＤＶＤ、ブルーレイディスク、ＤＡＴ、８ｍｍテープ、フラッシュメモリなどのメモリカード等がある。また、コンピュータ等に固定された記録媒体としてハードディスクやＲＯＭ（リードオンリーメモリ）等がある。さらに、Solid State Drive（ＳＳＤ）はコンピュータ等から取り外し可能な記録媒体としても、コンピュータ等
に固定された記録媒体としても利用可能である。
【符号の説明】
【００９４】
１        コンテナマネージャ
２、２Ａ、２Ｂ、２Ｃ      コンテナ
３、３Ａ、３Ｂ、３Ｃ      Ａｐｐ
４、４Ａ、４Ｂ、４Ｃ      ポートフォワーダー部
５        コンテナ管理テーブル
１０      情報処理装置
１１      プロセッサ
１２      主記憶装置
１３      補助記憶装置
１４      入力装置
１５      出力装置
１６      ネットワークインタフェース
１７      バス
【図１】
0006561555.tif 000002
【図２】
0006561555.tif 000003
【図３】
0006561555.tif 000004
【図４】
0006561555.tif 000005
【図５】
0006561555.tif 000006
【図６】
0006561555.tif 000007
【図７】
0006561555.tif 000008
【図８】
0006561555.tif 000009
【図９】
0006561555.tif 000010
【図１０】
0006561555.tif 000011
【図１１】
0006561555.tif 000012
【図１２】
0006561555.tif 000013
【図１３】
0006561555.tif 000014
【図１４】
0006561555.tif 000015