(57)【要約】【課題】データベース処理プログラムのテストを容易に行う。【解決手段】本番モードおよびテストモードを定める実行モード情報１３２０が記憶される。テスト情報管理部１４３０は、実行モード情報１３２０を用いてアプリケーション実行部（ＡＰ実行部）と実行モードとを対応付ける。ＤＢアクセス制御部１４４０は、ＡＰ実行部がデータベース１５００に接続要求するとき、実行モード情報１３２０を送信する。実行モード情報１３２０に基づいて、本番用またはテスト用のコネクションが生成され、接続を確立する。データ格納部（１５６０、１５６１）は、ＡＰ実行部が処理するデータを本番用データまたはテスト用データとしてそれぞれ格納する。データが更新されると、その更新された本番用データまたはテスト用データのバージョンが特定される。このように本番用とテスト用とで、データを分けてテストの影響を本番用データから切り離す。【選択図】図１
2009301352.tif 000002
【特許請求の範囲】
【請求項１】
データベース、および前記データベースを用いてデータを処理するアプリケーション実行部を実行可能な状態で記憶領域に配備する記憶手段と、
前記アプリケーション実行部の実行を制御する制御手段と、
を有するアプリケーションのテスト装置において、
前記記憶手段は、
少なくとも本番用に配備されたアプリケーション実行部を当該本番用に実行するように定める本番モードおよびテスト用に配備されたアプリケーション実行部を当該テスト用に実行するように定めるテストモードを有する実行モードを含む実行モード情報と、
前記実行モード情報を用いて前記アプリケーション実行部と前記実行モードとを対応付けることにより、本番用に実行されるアプリケーション実行部およびテスト用に実行されるアプリケーション実行部を特定するテスト情報管理部と、
前記特定したアプリケーション実行部の実行に際して、前記データベースにアクセスする要求を行うときには前記データベースに前記実行モード情報を送信するデータベースアクセス制御部と、
前記要求に従い、アクセスしようとするアプリケーション実行部に対応する実行モード情報に基づいて、本番用のコネクションまたはテスト用のコネクションを生成し、前記アプリケーション実行部と前記データベースとのアクセスを確立するコネクション制御部と、
前記実行モードが本番モードであるとき、前記本番用のアプリケーション実行部が処理するデータを本番用データとして格納する本番用データ格納部と、
前記実行モードがテストモードであるとき、前記テスト用のアプリケーション実行部が処理するデータをテスト用データとして格納するテスト用データ格納部と、
前記本番用データおよび前記テスト用データを、参照または更新するデータ制御部と、
前記本番用データが更新されると、その更新された本番用データのバージョンを特定し、前記本番用データの更新状況を管理する本番用バージョン制御部と、
前記テスト用データが更新されると、その更新されたテスト用データのバージョンを特定し、前記テスト用データの更新状況を管理するテスト用バージョン制御部と、
を記憶し、
前記制御手段は、
前記実行モード情報に基づいて、前記本番用のアプリケーション実行部およびテスト用のアプリケーション実行部のいずれかを実行させる
ことを特徴とするテスト装置。
【請求項２】
前記アプリケーション実行部からデータの参照要求がなされた場合において、
前記データ制御部は、
前記実行モードがテストモードであり、前記テスト用データ格納部に前記テスト用データが格納されているときは、前記テスト用バージョン制御部から前記テスト用データのバージョンを特定し、前記バージョンのテスト用データを参照し、
前記実行モードが本番モードであるか、または、前記実行モードがテストモードであるが前記テスト用データ格納部に前記テスト用データが格納されていないときは、前記本番用バージョン制御部から前記本番用データのバージョンを特定し、前記バージョンの本番用データを参照する
ことを特徴とする請求項１に記載のテスト装置。
【請求項３】
前記アプリケーション実行部からデータの更新要求がなされた場合において、
前記データ制御部は、
前記実行モードがテストモードであるときは、前記テスト用バージョン制御部から前記テスト用データのバージョンを特定し、前記バージョンのテスト用データを更新前データとして取得して更新し、当該更新後データを前記テスト用データ格納部に格納するとともに、前記テスト用バージョン制御部により、前記更新後データに対するバージョンを採番し、
前記実行モードが本番モードであるときは、前記本番用バージョン制御部から前記本番用データのバージョンを特定し、前記バージョンの本番用データを更新前データとして取得して更新し、当該更新後データを前記本番用データ格納部に格納するとともに、前記本番用バージョン制御部により、前記更新後データに対するバージョンを採番する
ことを特徴とする請求項１に記載のテスト装置。
【請求項４】
データベース、および前記データベースを用いてデータを処理するアプリケーション実行部を実行可能な状態で記憶領域に配備する記憶手段と、
前記アプリケーション実行部の実行を制御する制御手段と、
を有するアプリケーションのテスト装置におけるテスト方法おいて、
前記記憶手段は、
少なくとも本番用に配備されたアプリケーション実行部を当該本番用に実行するように定める本番モードおよびテスト用に配備されたアプリケーション実行部を当該テスト用に実行するように定めるテストモードを有する実行モードを含む実行モード情報を記憶し、
前記制御手段において、
前記実行モード情報を用いて前記アプリケーション実行部と前記実行モードとを対応付けることにより、本番用に実行されるアプリケーション実行部およびテスト用に実行されるアプリケーション実行部を特定するステップと、
前記特定したアプリケーション実行部の実行に際して、前記データベースにアクセスする要求を行うときには前記データベースに前記実行モード情報を送信するステップと、
前記要求に従い、アクセスしようとするアプリケーション実行部に対応する実行モード情報に基づいて、本番用のコネクションまたはテスト用のコネクションを生成し、前記アプリケーション実行部と前記データベースとのアクセスを確立するステップと、
前記実行モードが本番モードであるとき、前記本番用のアプリケーション実行部が処理するデータを本番用データとして格納するステップと、
前記実行モードがテストモードであるとき、前記テスト用のアプリケーション実行部が処理するデータをテスト用データとして格納するステップと、
前記本番用データおよび前記テスト用データを、参照または更新するステップと、
前記本番用データが更新されると、その更新された本番用データのバージョンを特定し、前記本番用データの更新状況を管理するステップと、
前記テスト用データが更新されると、その更新されたテスト用データのバージョンを特定し、前記テスト用データの更新状況を管理するステップと、を実行し、
前記実行モード情報に基づいて、前記本番用のアプリケーション実行部およびテスト用のアプリケーション実行部のいずれかを実行させる
ことを特徴とするテスト方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データベースでデータ処理（この処理を、「データベース処理」という場合がある。）をするためのプログラムのテストの技術に関する。
【背景技術】
【０００２】
従来、計算機に、データベースでデータ処理を実行させるプログラム（データベース処理プログラム（つまり、アプリケーション（Application：以下「ＡＰ」と略記する場合がある。）））のテストを行う際は、本番用データベースとは異なるテスト用データベースを使用するか、またはテストに本番用データベースを使用して、テスト終了後にロールバックして、本番用データベースの状態をテスト前の状態に戻す、といった方法をとっていた。
【０００３】
これらの従来のテストの方法のうち、テスト用データベースを使用する方法の場合には、本番用データベースとは別にテスト用データベースを用意しなければならなかったので、テスト環境を整えるまでに時間がかかる。加えて、資源等の問題もあって、大規模データベースに対するテストは行いづらい。もし、本番用データベースよりも規模の小さいテスト用データベースを使用した場合には、データの組み合わせや処理件数によって生じる問題等については、十分なテストが行えない等の欠点がある。
【０００４】
また、本番用データベースを使用してテストを行い、テスト終了後にロールバックする方法では、テストと本番との実施期間を隔離しなければならないという欠点がある。
【０００５】
前記欠点を解消するために、特許文献１に記載されている方式が提案されているが、インメモリデータベースの分野では適用しづらいという欠点がある。特許文献１に示す、ディスクを使った従来のデータベースの場合、一般的に検索のときも更新のときもバッファに読み込んでから処理するようになっている。データを読み込む単位や、データ構造、検索アルゴリズムなどが、バッファに読み込んだデータへのキャッシュヒット率が高くなるように最適化されているので、特許文献１の解決方法でも本番に近いテストを行うことができる。一方、インメモリデータベースの場合は、データはメモリ上に存在するので、直接データにアクセスするように設計されている。そのため、テストの場合だけ検索や更新で特別なバッファを使用するという解決策を適用するのは困難である。
【０００６】
分散ＡＰサーバの分野では、本番とテストとを区別するために、例えば、特許文献２に記載されているような方式が提案されている。しかし、特許文献２では、ＡＰサーバからデータベースまで一貫してテストを行う方法は言及されていない。
【特許文献１】特開平２−１２５３４６号公報
【特許文献２】特開２００６−１４６４３４号公報
【発明の開示】
【発明が解決しようとする課題】
【０００７】
前記事情を鑑みて、本発明の目的は、データベース処理プログラムのテストを容易に行うことである。
【課題を解決するための手段】
【０００８】
前記目的を達成するために、本発明は、データベース処理プログラムのテストを実施する際に、本番用データベースを使用しながら、被テストプログラムによるテスト用データの更新の影響を、本番用データから切り離すようにする。詳細は後記する。
【発明の効果】
【０００９】
本発明によれば、テスト用データベースを用意することなく、かつ本番用データベースのロールバックを行うこともないため、データベース処理プログラムのテストを容易に行うことができる。
【発明を実施するための最良の形態】
【００１０】
以下、本発明を実施するための最良の形態（以下、「実施形態」という。）を、図面を適宜参照しつつ、詳細に説明する。
【００１１】
≪構成≫
図１は、本実施形態のデータベース処理プログラムのテスト方法を実行する計算機の内部機能構成を図示したものである。
計算機１０００（テスト装置）は、データベースを用いてデータを処理するアプリケーション実行部（ＡＰ実行部）の実行を制御する制御部として実現されるＣＰＵ（Central Processing Unit：中央処理装置）１１００、および記憶部として実現される主記憶装置１２００を有して構成されるコンピュータである。主記憶装置１２００上には、ＡＰ配備情報１３００、ＡＰサーバ１４００、データベース１５００が配置される。なお、主記憶装置１２００に何らかのデータ、アプリケーション実行部、ミドルウェア、データベース等が「配置」されるとは、データ、アプリケーション実行部、ミドルウェア、データベース等が主記憶装置１２００内の所定の場所（アドレス）に記憶されることを意味する。また、本実施形態のデータベース処理プログラムをテストするために実行されるプログラムは、主記憶装置１２００に記憶されていると良い。ＣＰＵ１１００は、そのプログラムを読み出すことにより、データベース処理プログラムのテストを実行するように処理する。換言すれば、このプログラムは、以降で説明する各部を実現するためのものであって、このプログラムがＣＰＵ１１００で処理されることで、各部の処理が実現される。各処理部（各部）は、プログラムで実現されても良く、その場合はＣＰＵ１１００で実行されることにより、その処理は実現される。それらのプログラムは、ＣＤ−ＲＯＭやＤＶＤに記憶され、メモリ（主記憶装置１２００）にインストールされても良い。各処理部は、その機能をハードウェアで実現することも可能である。
【００１２】
ＡＰ配備情報１３００は、ＡＰ情報１３１０と、実行モード情報１３２０とを有している。ＡＰ情報１３１０は、配備を行うＡＰ実行部に関する情報（例えば、当該ＡＰ実行部を実行するためのファイル等）を保持する。なお、ＡＰ実行部の「配備」とは、計算機１０００に、前記ファイルを読み出してＡＰをインストールして、そのＡＰ実行部を利用可能な状態にすることを意味する。実行モード情報１３２０は、ＡＰ実行部が本番用に実行されることを示す本番モードまたはＡＰ実行部がテスト用に実行されることを示すテストモードに区別される実行モードを識別する情報である。後記する実行モード判定処理部１５１１により、その識別が行われる。
【００１３】
ＡＰサーバ１４００は、ユーザからの要求（計算機１０００の入力手段（キーボードやマウス等で実現されるもの）から入力された要求）を受け付けて、その要求をデータベース１５００の処理に橋渡しする機能を有するミドルウェアである。このＡＰサーバ１４００は、アプリケーション実行部を実行するための環境（記憶領域）を与えるコンテナ１４１０、ＡＰ配備情報１３００に基づいてＡＰ実行部の配備を行うＡＰ配備部１４２０、ＡＰ実行部の実行モードを管理するテスト情報管理部１４３０、データベース１５００と通信するＤＢ（Data Base）アクセス制御部１４４０を有している。
【００１４】
このＡＰサーバ１４００おいて、さらに、コンテナ１４１０には、計算機１０００において実行されるアプリケーション実行部として、ＡＰ実行部１（１４１１）、ＡＰ実行部２（１４１２）が配備されている。
また、テスト情報管理部１４３０には、ＡＰ実行部ごとに実行モードを格納するためのテスト情報管理テーブル１４３１が接続されている。
【００１５】
データベース１５００は、主記憶装置１２００に配置されたインメモリデータベースである。このデータベース１５００は、ＤＢアクセス制御部１４４０からの接続要求を受け付ける接続処理部１５１０、コネクションの生成と管理をするコネクション制御部１５２０、ＳＱＬ（Structured Query Language）を解析してデータ処理の計画をたてるＳＱＬ解析部１５３０、ＡＰ実行部を実行したときに対象となるデータの処理を制御するデータ制御部１５４０、ＭＶＣＣ（Multi Version Concurrency Control）で本番用データ（本番用の更新データ等）を管理するため、データのタイムスタンプを管理するバージョン制御部１５５０、データを格納するデータ格納部（図１の、本番用データ格納部１５６０およびテスト用データ格納部１５６１の総称）を有している。
【００１６】
このデータベース１５００において、さらに、接続処理部１５１０には、実行モード情報１３２０から実行モードを判定する実行モード判定処理部１５１１が接続されている。
また、コネクション制御部１５２０には、実行モードがテストモードであるときは、当該実行モード情報１３２０をコネクションに設定するテスト用コネクション処理部１５２１が接続されている。
また、バージョン制御部１５５０には、ＭＶＣＣでテスト用データ（テスト用の更新データ等）を管理するため、データのタイムスタンプを管理するテスト用バージョン制御部１５５１が接続されている。
以下、各部について簡単に説明する。
【００１７】
［コンテナ］
コンテナ１４１０は、ＡＰ実行部の実行環境を提供する。その実行環境を提供するために、例えば、データ構造、抽象データ型またはクラス等を表現するオブジェクトの集合を組織的に主記憶装置１２００に格納する。そして、ＡＰ実行部はコンテナ１４１０の中に配備された後、実行が開始される。図１の例では、ＡＰ実行部１（１４１１）、ＡＰ実行部２（１４１２）はコンテナ１４１０に配備された後、それぞれに要求された処理を実行する。
【００１８】
［ＡＰ配備部］
ＡＰ配備部１４２０は、指定されたＡＰ実行部の配備を行う。そして、実行モードに応じて配備のための処理を切り替える機能なども含めている。なお、ＡＰ実行部の指定は、例えば、計算機１０００が備える、前記入力手段により当該ＡＰを選択することによりなされる。
【００１９】
［テスト情報管理部］
テスト情報管理部１４３０は、指定された実行モードをテスト情報管理テーブル１４３１に格納する。実行モードの指定は、例えば、実行モード情報１３２０を用いて前記入力手段から行われ、その指定内容が、テスト情報管理テーブル１４３１に反映される。図１において、テスト情報管理テーブル１４３１では、ＡＰ実行部１（１４１１）はテストモードで実行され、ＡＰ実行部２（１４１２）は本番モードで実行されるように、実行モードがＡＰ実行部ごとに格納されている。
【００２０】
［ＤＢアクセス制御部］
ＤＢアクセス制御部１４４０は、データベース１５００への接続を行う機能を有する。また、コンテナ１４１０に配備されたＡＰ実行部（図１では、ＡＰ実行部１（１４１１）、ＡＰ実行部２（１４１２））からＡＰ実行部が配備されたことを示す接続情報を受信し、その接続情報をデータベース１５００に送信する。
このＤＢアクセス制御部１４４０は、接続処理部１５１０に通信して接続する（接続要求をする）と、ＳＱＬ文をデータベース１５００に伝えるためのコネクションを、接続処理部１５１０から受け取る。
また、ＤＢアクセス制御部１４４０は、接続時に、テスト情報管理部１４３０から取得した実行モード情報１３２０を、接続処理部１５１０に伝える機能も有する。
【００２１】
［接続処理部］
接続処理部１５１０は、ＤＢアクセス制御部１４４０からデータベース１５００への接続要求を受け取って、ＳＱＬリクエストを受け付けるためのコネクションをＤＢアクセス制御部１４４０へ返す。さらに、前記接続情報を解析する機能も有しており、この接続情報には、タイムアウトなどの情報も含まれる。さらに、接続処理部１５１０は、実行モード判定処理部１５１１から実行モードを受け取り、実行モードを接続情報とともにコネクション制御部１５２０に出力する機能を有する。
【００２２】
［コネクション制御部］
コネクション制御部１５２０は、接続処理部１５１０から接続情報および実行モードが入力されたときに、コネクションを生成する。さらに、テスト用コネクション処理部１５２１を使い、実行モードがテストモードであるときは、生成したコネクションに当該実行モード情報１３２０を入力する機能を有する。このようにして、実行モードがテストモードであるときは、テスト用のコネクションを生成し、実行モードが本番モードであるときは、本番用のコネクションを生成する。
【００２３】
［ＳＱＬ解析部］
ＳＱＬ解析部１５３０は、コネクションから入力されたＳＱＬリクエストを解析し、検索（参照）や更新といったデータ処理をデータ制御部１５４０に要求する。
【００２４】
［データ制御部］
データ制御部１５４０は、データ格納部（１５６０、１５６１）に格納されているデータを参照したり、更新データを作成したりする。データのある場所や作成する場所（アドレス）は、バージョン制御部１５５０から取得する。
【００２５】
［バージョン制御部］
バージョン制御部１５５０は、データが更新されるたびに、その更新データの各々に対してバージョン情報を追加し、データの更新状況を制御する機能を有する。トランザクションのタイムスタンプから、そのトランザクションが開始した時点より前に更新されたバージョンのデータを見えるようにする。例えば、計算機１０００が備える表示手段（ディスプレイ等により実現されたもの）において、追加したバージョン情報として、そのデータに採番したバージョン、タイムスタンプ、内容、更新日時等を表示するようにする。実行モードがテストモードの場合には、テスト用バージョン制御部１５５１にテストデータのバージョンを問い合わせる機能を有する。このようにして、本番用のデータの更新状況およびテスト用のデータの更新状況を独立に管理する。
【００２６】
［データ格納部］
データ格納部は、アプリケーション実行部が実行の対象とするデータを格納するエリア（記憶領域：例えば、ＲＡＭ（Random Access Memory）等で実現される。）であり、本番用のデータを格納する本番用データ格納部１５６０とテスト用のデータを格納するテスト用データ格納部１５６１に分かれている。本番用データ格納部１５６０とテスト用データ格納部１５６１は、それぞれデータに対してのロックの状態をもつ。その状態をもたせるために、当該データに対し、ロックの状態を示すフラグを追加し、データ制御部１５４０の制御に基づいてフラグの値を設定する。
【００２７】
このような構成を有することにより、ＣＰＵ１１００は、アプリケーション実行部ごとに付された実行モード情報１３２０に基づいて、配備されたアプリケーション実行部を本番用またはテスト用として実行することができる。このとき、本番用としてあるアプリケーション実行部を実行している間に、テスト用として別のアプリケーション実行部を実行することもできる。つまり、各アプリケーション実行部の実行は、テストモードであれ本番モードであれ、独立して行われる。
【００２８】
≪処理≫
図２は、本実施形態において、ＡＰ実行部を配備しテストを実行する処理の流れ全体を示すシーケンス図である。なお、接続処理部１５１０がコネクション２０００を生成する処理の流れの詳細は、図３にて説明する。また、ＳＱＬリクエストを受け取ったコネクション２０００の処理の流れの詳細は、図４、図５にて説明する。
【００２９】
ＡＰ配備部１４２０は、ＡＰ情報１３１０と実行モード情報１３２０から構成されるＡＰ配備情報１３００の入力を受けて、実行モード情報１３２０をテスト情報管理部１４３０に書き込む（ステップＳ２１０）。さらに、ＡＰ配備部１４２０は、ＡＰ情報を使い、コンテナ１４１０に、テストの対象となるＡＰ実行部１（１４１１）を配備する（ステップＳ２１１）。
【００３０】
ＡＰ実行部１（１４１１）の配備後にテストが開始され、データベース処理が必要になった時に、ＤＢアクセス制御部１４４０に、データベース１５００に接続するためのコネクションを要求する（ステップＳ２１２）。この要求をするにあたり、ＡＰ実行部１（１４１１）は、接続情報をＤＢアクセス制御部１４４０に送信する。
【００３１】
前記要求を受け付けたＤＢアクセス制御部１４４０は、テスト情報管理部１４３０からＡＰ実行部１（１４１１）の実行モード情報を読み取り（ステップＳ２１３）、接続情報に実行モード情報を追加し、接続処理部１５１０に接続する（ステップＳ２１４）。
【００３２】
ＤＢアクセス制御部１４４０と接続処理部１５１０は、接続情報を使って通信路を確立する。この例では、接続処理部１５１０が、コネクション制御部１５２０（図３参照）によりコネクション２０００を生成させ（ステップＳ２１５）、生成したコネクション２０００を、そのままＤＢアクセス制御部１４４０に返している（ステップＳ２１６）。この処理の流れの詳細は、図３を使って説明する。
【００３３】
ＡＰ実行部１（１４１１）は、ＤＢアクセス制御部１４４０から受け取ったコネクション２０００を使い、ＳＱＬリクエストを送信し（ステップＳ２１７）、その返信としてＳＱＬレスポンスを受け取る（ステップＳ２１８）。この処理の流れの詳細は、それぞれ図４、図５を使って説明する。
以上で、ＡＰ実行部を配備しテストを実行する処理の流れ全体に関する説明を終了する。
【００３４】
図３は、接続処理部１５１０がコネクション２０００を生成する処理の流れの詳細を示すシーケンス図である。接続処理部１５１０は、ＤＢアクセス制御部１４４０から実行モード情報を含んだ接続情報を入力として受け取る。
【００３５】
接続処理部１５１０は、接続情報を実行モード判定処理部１５１１に送信する（ステップＳ３０１）。実行モード判定処理部１５１１は、接続情報から実行モード情報をとりだして、実行モードを判定する。ちなみに、配備されたのはＡＰ実行部１（１４１１）であるため、実行モードは、テストモードである（例えば、図１参照）。判定した後、その実行モード情報を接続処理部１５１０に返す（ステップＳ３０２）。
【００３６】
接続処理部１５１０は、接続情報と実行モード情報を入力として、コネクション制御部１５２０にコネクションを要求する（ステップＳ３０３）。コネクション制御部１５２０はコネクション２０００を生成し（ステップＳ３０４）、さらに、実行モードがテストモードであるため、生成したコネクション２０００の情報と実行モード情報とをテスト用コネクション処理部１５２１に送信する（ステップＳ３０５）。テスト用コネクション処理部１５２１は、コネクション２０００に実行モード情報を設定する（ステップＳ３０６）。このようにしてテスト用のコネクションを生成する。
【００３７】
その後、生成したコネクション２０００は、コネクション制御部１５２０から、接続処理部１５１０を介して、ＤＢアクセス制御部１４４０に渡される。これにより、ＡＰサーバ１４００とデータベース１５００との通信路が確立される。
以上で、接続処理部１５１０がコネクション２０００を生成する処理の流れの詳細の説明を終了する。
【００３８】
図４は、参照系のＳＱＬリクエストを受け取ったコネクション２０００の処理の流れの詳細を示すシーケンス図である。ここでいう「参照系のＳＱＬリクエスト」とは、データの更新や削除をせず、さらにデータにロックをかける必要のないＳＱＬリクエストのことをいう。
【００３９】
ＡＰ実行部１（１４１１）からＳＱＬリクエストを受信したコネクション２０００は、ＳＱＬ解析部１５３０にＳＱＬリクエストを入力する。この際、コネクション毎に設定されている実行モード情報も入力する（ステップＳ４０１）。
【００４０】
ＳＱＬ解析部１５３０は、入力されたＳＱＬリクエストの解析を行う。解析した結果、データに対しての処理が必要な場合は、データ制御部１５４０にデータ処理を要求する。この際に、実行モード情報も入力する（ステップＳ４０２）。
【００４１】
データ制御部１５４０は、ＳＱＬ解析部１５３０からの要求に従って、バージョン制御部１５５０に対し、データのバージョン情報（本番用データのバージョン情報またはテスト用データのバージョン情報）を取得するように要求する。このとき、本番用データ格納部１５６０またはテスト用データ格納部１５６１上のデータを参照する方法も要求する（ステップＳ４０３）。バージョン制御部１５５０は、実行モードがテストモードだった場合、テスト用バージョン制御部１５５１に、テスト用データ格納部１５６１上のデータを参照する方法を要求する（ステップＳ４０４）。
【００４２】
データがテスト用データ格納部１５６１に存在する場合、テスト用データ格納部１５６１上のデータを参照するための情報が、テスト用バージョン制御部１５５１からバージョン制御部１５５０を介してデータ制御部１５４０に送信される。データがテスト用データ格納部１５６１に存在しない場合、または実行モードが本番モードの場合、本番用データ格納部１５６０上のデータを参照するための情報が、バージョン制御部１５５０を介してデータ制御部１５４０に送信される。
【００４３】
データ制御部１５４０は、バージョン制御部１５５０から受け取った情報に従って、本番用データ格納部１５６０かテスト用データ格納部１５６１かのどちらかに存在するデータを参照する（ステップＳ４０５）。
【００４４】
その後、前記ＳＱＬリクエストに対するＳＱＬレスポンスが、データ制御部１５４０からＳＱＬ解析部１５３０およびコネクション２０００を介して、ＡＰ実行部１（１４１１）に送信される。これにより、本番用データ格納部１５６０のデータまたはテスト用データ格納部１５６１のデータの参照処理が完了する。
以上で、参照系のＳＱＬリクエストを受け取ったコネクション２０００の処理の流れの詳細に関する説明を終了する。
【００４５】
図５は、更新系のＳＱＬリクエストを受け取ったコネクション２０００の処理の流れの詳細を示すシーケンス図である。ここでいう「更新系のＳＱＬリクエスト」とは、参照系のＳＱＬリクエスト以外のＳＱＬリクエストをいう。
【００４６】
一般的に、データベースでデータを更新する場合は、障害に備えて更新前と更新後のデータの値をログに書き込むため、更新前データも必要とする。そのため、更新前データ取得の処理（ステップＳ５０１からステップＳ５０５）までは、図４のデータ参照までの処理の流れ（ステップＳ４０１からステップＳ４０５）と同じである。つまり、更新前のデータを取得するための一連の処理は、データを参照するための一連の処理と同一である。よって、このあたりの詳細な説明は、省略する。
【００４７】
更新後データは、実行モードが本番モードの場合は、本番用データ格納部１５６０に作成される（ステップＳ５０６）。また、更新後データは、実行モードがテストモードの場合は、テスト用データ格納部１５６１に作成される（ステップＳ５０７）。
【００４８】
さらに、データ制御部１５４０は、更新後データを本番用データ格納部１５６０に作成した場合（ステップＳ５０６参照）は、バージョン制御部１５５０に、作成した更新後データの情報を入力して、バージョン情報を追加する（ステップＳ５０８）。このとき、本番用データの最新のバージョンを採番する。また、データ制御部１５４０は、更新後データをテスト用データ格納部１５６１に作成した場合（ステップＳ５０７参照）は、テスト用バージョン制御部１５５１に、作成した更新後データの情報を入力して、バージョン情報を追加する（ステップＳ５０９）。このとき、テスト用データの最新のバージョンを採番する。
【００４９】
その後、前記ＳＱＬリクエストに対するＳＱＬレスポンスが、データ制御部１５４０からＳＱＬ解析部１５３０およびコネクション２０００を介して、ＡＰ実行部１（１４１１）に送信される。これにより、本番用データ格納部１５６０のデータまたはテスト用データ格納部１５６１のデータの更新処理が完了する。
以上で、更新系のＳＱＬリクエストを受け取ったコネクション２０００の処理の流れの詳細に関する説明を終了する。
【００５０】
図６は、テストと本番が同じデータの参照および更新をする場合の、データの管理について示すシーケンス図である。ＳＱＬ解析部１５３０、データ制御部１５４０、バージョン制御部１５５０、テスト用バージョン制御部１５５１の動作は図３および図４で説明しているので、重複した説明を避けるため、この図には含めないものとする。
【００５１】
この処理では、コネクション（テスト）Ｃ６０とコネクション（本番）Ｃ６１からは、データ１の参照と更新を行うＳＱＬリクエストが、それぞれ送信されてくるものとする。また、テストを実施する前は、本番用データ格納部１５６０にしかデータ１は存在しないものとする（ＮＤ６０１参照）。なお、コネクション（テスト）Ｃ６０は、テストモードとして実行されるＡＰ実行部１（１４１１）がデータベース１５００にアクセスしたときに生成されるコネクションである。また、コネクション（本番）Ｃ６１は、本番モードとして実行されるＡＰ実行部２（１４１２）がデータベース１５００にアクセスしたときに生成されるコネクションである。したがって、図６では、ＡＰ実行部１（１４１１）およびＡＰ実行部２（１４１２）が１つのデータ（データ１）に対してデータ処理を実行する場合における、当該データの管理に関するものである。
【００５２】
この処理では、まず、コネクション（テスト）Ｃ６０でテストモードのトランザクションが開始される（ステップＳ６０１）。データ１の参照では、テスト用データ格納部１５６１にはデータ１が存在しないので、本番用データ格納部１５６０上の、バージョンが本番００１と採番されたデータ１（ＮＤ６０１）を参照する（ステップＳ６０２）。また、データ１の更新では、本番００１と採番されたデータ１（ＮＤ６０１）をテスト用に複製し、その複製したデータを更新する。その結果、テスト用データ格納部１５６１には、更新後のデータ１（ＴＤ６０１）を、テスト００１というバージョンで作成する（ステップＳ６０３）。更新前の古いデータである、バージョンが本番００１のデータ１（ＮＤ６０１）は、本番用データ格納部１５６０の中では最新のデータなので、捨てずに残しておく。なお、本番用データをテスト用データに複製する処理は、データ制御部１５４０が実行する。
【００５３】
次に、コネクション（本番）Ｃ６１にて、本番モードのトランザクションが開始されると（ステップＳ６０４）、実行モードが本番モードなので、参照（ステップＳ６０５）も、更新（ステップＳ６０６）も、本番用データ格納部１５６０に格納された本番００１と採番されたデータ１（ＮＤ６０１）に対して行われる。その結果、更新後の新しいデータ１をバージョンが本番００２と採番して、作成する（ＮＤ６０２参照）。
【００５４】
バージョンが本番００１であるデータ１（ＮＤ６０１）は、参照する本番モードのトランザクションが終了した時点で、不要データとして回収対象になる。回収対象になったデータ（つまり、本番００１と採番されたデータ１（ＮＤ６０１））は非同期で回収され、本番用データ格納部１５６０から削除される（ステップＳ６０７）。
【００５５】
次に、コネクション（テスト）Ｃ６０で、テストモードのトランザクションが開始される（ステップＳ６０８）。データ１の参照では、テスト用データ格納部１５６１に格納された、バージョンがテスト００１と採番されたデータ１（ＴＤ６０１）が存在するので、そのデータ１を参照する（ステップＳ６０９）。また、データ１の更新では、テスト００１と採番されたデータ１（ＴＤ６０１）を更新し、テスト用データ格納部１５６１に更新後のデータ１（ＴＤ６０２）を、テスト００２というバージョンで作成する（ステップＳ６１０）。
【００５６】
バージョンがテスト００１であるデータ１（ＴＤ６０１）は、参照するテストモードのトランザクションが終了した時点で、不要データとして回収対象になる。回収対象になったデータ（つまり、テスト００１と採番されたデータ１（ＴＤ６０１））は、非同期で回収され、テスト用データ格納部１５６１から削除される（ステップＳ６１１）。
以上で、テストと本番が同じデータの参照および更新をする場合の、データの管理に関する説明を終了する。
【００５７】
図７は、テスト用のデータにロックをかけた場合の本番の処理の流れを示すシーケンス図である。ここでいう「ロック」とは、参照ロックと更新ロックのどちらの場合も含むものとする。なお、参照ロックとは、あるユーザによって参照中のデータが、別のユーザによって同時に更新等されるのを防ぐロックである。また、更新ロックとは、あるユーザによって更新中のデータが、別のユーザによって同時に更新等されるのを防ぐロックである。また、コネクション（テスト）Ｃ７０は、テストモードとして実行されるＡＰ実行部１（１４１１）がデータベース１５００にアクセスしたときに生成されるコネクションである。また、コネクション（本番）Ｃ７１は、本番モードとして実行されるＡＰ実行部２（１４１２）がデータベース１５００にアクセスしたときに生成されるコネクションである。
【００５８】
まず、コネクション（本番）Ｃ７１で実行モードが本番モードのトランザクションが開始される（ステップＳ７０１）。次に、コネクション（テスト）Ｃ７０で実行モードがテストモードのトランザクションが開始される（ステップＳ７０２）。さらに、データ制御部１５４０によって、データ１のロックがＡＰ実行部１（１４１１）から取得される（ステップＳ７０３）。この際、テスト用データ格納部１５６１において、バージョンが本番００１のデータ１（ＮＤ７０１）の複製を、バージョンがテスト００１のデータ１（ＴＤ７０１）として作成し、さらに、テスト用データ格納部１５６１上のデータ１（ＴＤ７０１）にのみロックをかける。
【００５９】
バージョンがテスト００１のデータ１（ＴＤ７０１）を別個に作成しているので、実行モードが本番モードのトランザクション（Ｓ７０１参照）は、実行モードがテストモードのトランザクション（Ｓ７０２参照）がかけたロックから影響を受けない。よって、ロックの開放（ステップＳ７０６）を行う前に、バージョンが本番００１と採番されたデータ１（ＮＤ７０１）に対しての参照（ステップＳ７０４）や更新（ステップＳ７０５）を行うことができる。
【００６０】
なお、図７の処理は、本番用のデータにロックをかけた場合のテストの処理についても同様である。実行モードがテストモードのトランザクションは、実行モードが本番モードのトランザクションがかけたロックから影響を受けないので、本番用のデータにかけたロックの開放を行う前に、テスト用のデータに対しての参照や更新を行うことができる。
以上で、テスト用のデータにロックをかけた場合の本番の処理に関する説明を終了する。
【００６１】
≪まとめ≫
以上説明した本実施形態によれば、テスト用データベースを用意することなく、かつ本番用データベースのロールバックを行うこともないため、データベース処理プログラムのテストを容易に行うことができる。
【００６２】
このとき、本番モードとテストモードとで同じデータを使用する場合であっても、テストによるデータの更新を本番用データに影響させずにすむため、テストを容易に行うことができるようになる。
また、参照系ＳＱＬの場合に、既存の本番用データをそのまま使うことができるので、テストによって使用するデータの記憶領域を削減することができる。
【００６３】
また、本番用データとテスト用データとでロックの管理を分離するので、テストモードのトランザクションがロックをかけることによる、本番モードにおけるトランザクションのスループットの低下を削減することができる。
また、本番モードのトランザクションがロックをかけることによる、テストモードのトランザクションへの影響も削減することができる。
【００６４】
また、本実施形態だと、参照にしか使わないデータの複製を必要としないので、インメモリデータベースの場合に、テストで使用するメモリの使用量を削減できるという効果もある。
【００６５】
≪その他≫
以上本発明の実施形態についての一例を示したが、本発明は、これに限定されず、本発明の趣旨を逸脱しない範囲で適宜変更が可能である。
【００６６】
例えば、本実施形態では、実行モード情報として本番モードとテストモードとの２つを区別する情報しか使わなかった。しかし、テスト毎に実行モード情報を変更し、複数のテストを同時にできるようにしても良い。具体的には、テスト情報管理テーブル１４３１において、アプリケーション実行部ごとに、実行しようとする種々のテストモードを割り当てて対応付けるように記憶する。
【００６７】
また、本実施形態では、コネクション制御部１５２０で生成したコネクション２０００を、接続処理部１５１０を介して、通信路を含めてＤＢアクセス制御部１４４０に渡すようにした。しかし、通信路だけをＤＢアクセス制御部１４４０に返し、ＤＢアクセス制御部１４４０でコネクション２０００を別途作成することで、ＡＰサーバ１４００とデータベース１５００間を別の計算機に配置し、それらの間をネットワーク接続するようにしても良い。このようなネットワークを構成することにより、ディスクを使ったデータベースに対してこのテストを実行することもできる。
【００６８】
その他、ハードウェア、ソフトウェア、各シーケンスなどの具体的な構成について、本発明の趣旨を逸脱しない範囲で適宜変更が可能である。
【図面の簡単な説明】
【００６９】
【図１】本実施形態のデータベース処理プログラムのテスト方法を実行する計算機の内部機能構成を図示したものである。
【図２】ＡＰ実行部を配備しテストを実行する処理の流れ全体を示すシーケンス図である。
【図３】接続処理部１５１０がコネクション２０００を生成する処理の流れの詳細を示すシーケンス図である。
【図４】参照系のＳＱＬリクエストを受け取ったコネクション２０００の処理の流れの詳細を示すシーケンス図である。
【図５】更新系のＳＱＬリクエストを受け取ったコネクション２０００の処理の流れの詳細を示すシーケンス図である。
【図６】テストと本番が同じデータの参照および更新をする場合の、データの管理について示すシーケンス図である。
【図７】テスト用のデータにロックをかけた場合の、本番の処理の流れを示すシーケンス図である。
【符号の説明】
【００７０】
１０００  計算機
１１００  ＣＰＵ
１２００  主記憶装置
１３００  ＡＰ配備情報
１３１０  ＡＰ情報
１３２０  実行モード情報
１４００  ＡＰサーバ
１４１０  コンテナ
１４１１、１４１２  ＡＰ実行部
１４２０  ＡＰ配備部
１４３０  テスト情報管理部
１４３１  テスト情報管理テーブル
１４４０  ＤＢアクセス制御部
１５００  データベース
１５１０  接続処理部
１５１１  実行モード判定処理部
１５２０  コネクション制御部
１５２１  テスト用コネクション処理部
１５３０  ＳＱＬ解析部
１５４０  データ制御部
１５５０  バージョン制御部
１５５１  テスト用バージョン制御部
１５６０  本番用データ格納部
１５６１  テスト用データ格納部
２０００、Ｃ６０、Ｃ６１、Ｃ７０、Ｃ７１  コネクション
ＮＤ６０１、ＮＤ６０２、ＮＤ７０１、ＮＤ７０２、ＴＤ６０１、ＴＤ６０２、ＴＤ７０１  データ１
【図１】
2009301352.tif 000003
【図２】
2009301352.tif 000004
【図３】
2009301352.tif 000005
【図４】
2009301352.tif 000006
【図５】
2009301352.tif 000007
【図６】
2009301352.tif 000008
【図７】
2009301352.tif 000009