説明

プログラムモデル検査におけるデータベース制御装置、データベース制御方法、データベース制御プログラム

【課題】プログラムモデル検査において実行環境で使用されるDBのデータを復元状態へ戻す効率的なバックトラックを行う。
【解決手段】 データベースに変化があることを検出したとき、ノードIDを有する状態変更通知を前記プログラムモデル検査装置から受信し、ノードIDに関連付けてパス情報とログ情報を状態ツリー管理テーブルに記録する状態ツリー管理部と、バックトラックを実行するとき、プログラムモデル検査装置からバックトラックを開始情報と復元先ノードIDを有するバックトラック開始通知を受信し、復元先ノードIDに基づいて状態ツリー管理テーブルからパス情報とログ情報を取得し、取得した前記パス情報と前記ログ情報に基づいてデータベースを復元先ノードIDが示す状態に戻すバックトラック用コードを生成するバックトラック管理部と、を備えるプログラムモデル検査におけるデータベース制御装置である。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、プログラムモデル検査において実行環境で使用されるデータベース(以降、DB)を制御する際に用いるバックトラック技術に関する。
【背景技術】
【0002】
プログラムモデル検査を行う場合、検査対象プログラムのプログラムパスにおける各状態を構成する要素のひとつとしてDBに記録されたデータがある。プログラムモデル検査では、DBのレコードに対し検索、参照のみを行うときはDBのデータの状態は変わらないが、作成、更新、削除などを行うとDBの状態に変化がおきる。図10のAに示す例では、状態Aから状態Bに至るパスでDBデータに対して挿入(Insert)を実行し、状態Bから状態Cに至るパスで削除(Delete)を実行する。次に、プログラムモデル検査で状態Bから状態Dに至るパスを実行するために、状態Cから状態BにDBデータを含む実行環境を戻してから、状態Dに至るパスを実行する。この状態Cから状態Bに実行環境を戻すときにバックトラックが必要になる。すなわち、バックトラックはプログラムパスにおける各状態を構成する全ての要素に対して行うが、DBデータに対しても行う必要がある。
【0003】
このDBデータのバックトラックを実現する方法には、DBスタブを用いる方法と実際のDBに接続して中身を書き換える方法がある。
DBスタブを使用した場合、予めDBデータのファイルを用意しておき、各状態フェーズにおけるDBデータイメージを保持する。バックトラック時には、スタブプログラムの内部変数として保持し、プログラムモデル検査ツールがもつプログラムの内部変数を戻す仕組みを活用することにより状態を元に戻す。そのためには、DBMS(Data Base Management System)の振る舞いを模倣するスタブを準備しなければならないが、DBMSの機能を持つスタブを作成するには多くの作業時間が発生するという問題がある。また、プログラムモデル検査対象のシステムごとに使うDBMSごとに作成するスタブが変わるため、スタブを使えるようにするにはシステム対象を変更しなければならないという問題もある。さらに、DBMSごとに異なる部分(例えば、データ型の違い、DBMSごとの文法の違い)が存在するため、スタブの仕組みを1つ作成すれば他のシステムでも利用できるとは限らない。
【0004】
そこで、DBスタブを使わないで実際のDBに接続してDBの内容を書き換える提案がされている。
例えば、データベーススナップショットという別の読み取り専用ポイントインタイム(point in time)コピー用のデータベースを用意し、元のデータベースの修正分のみストレージにコピーし、そのポイントインタイムビューを保持する。そして、ユーザエラーが起きてデータ復元が必要になった時に直近のスナップショットをコピーすることで以前の状態に復帰する技術が知られている。ところが、DBに対してバックトラックを実行すると、管理しなければならないスナップショットの数は直近のものだけではなく、状態ツリーのルートに遡って各状態にそれぞれバックトラックを実行しなければならない。そのため、スナップショットの数がプログラムによって非常に大きなものになることがある。
【0005】
そこで、次のような技術が提案されている。例えば、SQL(Structured Query Language)ログを用いてDBデータを元に戻す方法が知られている。しかし、プログラムモデル検査のように、特定の状態のDBに戻すためにどのようなSQL文を発行すべきかを簡単に解くことはできない。
【先行技術文献】
【特許文献】
【0006】
【特許文献1】特表2007−524173号公報
【特許文献2】特開2006−244394号公報
【特許文献3】特開2004−348701号公報
【特許文献4】特開平7−160563号公報
【特許文献5】特開2000−10836号公報
【発明の概要】
【発明が解決しようとする課題】
【0007】
上記のような実情に鑑みてなされたものであり、プログラムモデル検査において実行環境で使用されるDBのデータを復元したい状態へ戻す効率的なバックトラックを行うデータベース制御装置、データベース制御方法、データベース制御プログラムを提供することを目的とする。
【課題を解決するための手段】
【0008】
態様のひとつであるプログラムモデル検査装置がプログラムモデル検査を実施する際に実行環境で使用するデータベースを制御するデータベース制御装置データベース制御装置は、記録部、バックトラック管理部を備えている。
【0009】
記録部は、上記プログラムモデル検査装置から、データベースの変化後の状態を識別する識別番号であるノードIDを有する状態変更通知を受信したときに、該ノードIDに関連付けて、該変化後の状態への遷移経路を示すパス情報と、変化前の状態から該変化後の状態へ遷移する間に該プログラムモデル検査装置から出力された該データベースを制御するコードであるログ情報を状態ツリー管理テーブルに記録する。
【0010】
バックトラック管理部は、上記プログラムモデル検査装置から戻り先の状態を示す識別番号である復元先ノードIDを有するバックトラック開始通知を受信したときに、該復元先ノードIDに関連付けて上記状態ツリー管理テーブルに記録されたパス情報とログ情報とに基づいて、上記データベースを該復元先ノードIDが示す状態に戻すバックトラック用コードを生成する。
【発明の効果】
【0011】
プログラムモデル検査において実行環境で使用されるDBのデータを復元したい状態へ戻す効率的なバックトラックを行うことができる。
【図面の簡単な説明】
【0012】
【図1】プログラムモデル検査を行うシステムの装置の構成を示すブロック図である。
【図2】プログラムモデル検査装置の構成を示すブロック図である。
【図3】Aはプログラムモデル検査装置から発行されたSQL文を示す図である。BはSQL文とノードを関連付けたコードを示す図である。
【図4】データベースの状態の例を示す図である。
【図5A】プログラムモデル検査のやり取りを示すフロー図である。
【図5B】プログラムモデル検査のやり取りを示すフロー図である。
【図6】DBデータ管理部の動作を示すフロー図である。
【図7】A〜Eは状態ツリー管理テーブルを示す図である。
【図8】バックトラック管理部の動作を示すフロー図である。
【図9】本実施例がコンピュータプログラムとして実現される場合の構成を示す図である。
【図10】A〜Cはデータベースの状態の例を示す図である。
【発明を実施するための形態】
【0013】
以下図面に基づいて、本発明の実施形態について詳細に説明する。
本実施例は、DBのレコードに対して作成、更新、削除などを行った後にバックトラックが発生した場合、復元したい状態にDBのデータを戻すための効率的な方法を示すものである。
【0014】
(構成)
図1はプログラムモデル検査における実行環境で使用されるDBのデータを任意の状態へ戻すバックトラックを実行するデータベース制御装置2を備えるプログラムモデル検査を行うシステムの構成を示す図である。このプログラムモデル検査を行うシステムは、プログラムモデル検査装置1、データベース制御装置2を備えている。
【0015】
プログラムモデル検査装置1は、例えば図2に示すように、検査対象プログラム22に対するモデル検査環境であるドライバ21および、実際に検査対象プログラム22が実行の際に使用するDBMS11(データベース管理システム)などを備えている。プログラムモデル検査装置1は、プログラム中の分岐条件(検査対象プログラム22が保持するデータの変化に加えDBのレコードに対して作成、更新、削除など)が現れるたびにその時の状態を記録する。なお、プログラムモデル検査装置1は、図示しないDBスタブ、ネットワークスタブなども備えていてもよい。
【0016】
ドライバ21は、クライアント(例えば、検証実行者)の代わりに検査対象プログラム22に対してユーザ操作を模倣した入力データ23を入力する。そして、プログラムモデル検査装置1が、検査対象プログラム22をさまざまなバリエーションで複数回、連続的に呼び出し、プロパティ24に格納されている機能仕様などが満たされているかをチェックする。
【0017】
このように、プログラムモデル検査装置1は、検査対象プログラム22とデータをやり取りするDBMS11、DB用スタブ23などに対して網羅的な検査を行う。
データベース制御装置2は、DBデータ管理部3、コード保存部5(DBドライバ追加モジュール4)などを備えている。
【0018】
DBドライバ追加モジュール4はコード保存部5を備え、通常DBデータベースに含まれるDB用ドライバ(例えばJDBC(Java Data Base Connectivity)など)から発行されるコード(例えば、SQL文)をログファイル6に保存する(図3のA)。なお、本例ではSQLを用いているが、リレーショナルデータベースの操作を行なうための言語であればSQLに限定するものではない。検査対象プログラム22が使用するDBMS11によってログファイルを保存できる機能を有しているため、その場合にはコード保存部5の代わりに該機能を用いてもよい。
【0019】
状態ツリー管理部7は、各状態に戻るためのパスを把握するために、プログラムモデル検査装置1の状態ツリーと同等の情報を管理する。また、状態ツリー管理部7は、プログラムモデル検査装置1からプログラムパスの分岐と、プログラムの新しい状態を示すノードID(識別番号)を有する状態変更通知を受信する。そして、新しい状態に対応するノードIDに、直前の状態と新しい状態間のパスを関連付けて、後述する状態ツリー管理テーブルに記録する。
【0020】
ログファイル管理部8は、プログラムモデル検査装置1から状態変更通知を受信すると、SQLログファイル6を読み込み、パス状態が変化するたびに状態遷移間で発行されたSQL文を取得して管理する。ログファイル管理部8は、ログファイル6を読み込み、前回発行された状態変更通知から今回発行された状態変更通知を受信するに至るまでのコード(例えば、SQL文)を抽出し、ノードIDと結びつけて管理する(図3のB)。例えば、図4に示す状態1から状態2に遷移するパスであれば、状態2に対応するノードIDに状態1から状態2に至る間に発行されたSQL文を全て関連付けて記録する。また、状態2から状態3に遷移するパスであれば、状態3に対応するノードIDに状態2から状態3に至る間に発行されたSQL文全てを関連付けて記録する。なお、図4の各状態に割り振った番号はプログラムモデル検査装置1がプログラムモデル検査を行う順番と対応付けられている。
【0021】
バックトラック管理部9は、プログラムモデル検査装置1からバックトラックを実行する通知を受信すると、DBMS11を初期状態に戻して目的の状態にするためのDB制御コード(例えば、SQL文)を作成する(詳細は後述する)。
DB制御コード発行部10は、バックトラック管理部9で作成したDB制御コードをDBMS11に発行する。
【0022】
(動作説明)
図5はプログラムモデル検査装置1、DBデータ管理部3、コード保存部5、検査対象プログラム22、DBMS11の動作を説明するフロー図である。
【0023】
ステップS1では、DBデータ管理部3がDBを初期状態にするためのコードを有する検査開始通知をDBMS11に送信する。例えば、DBを初期状態にするSQL文を、DBドライバ追加モジュール4を介して出力する。
【0024】
ステップS2では、DBMS11が初期状態にするためのコードを受信する。ステップS3では、DBMS11がDBを初期状態にする。
ステップS4では、プログラムモデル検査装置1がプログラムモデル検査を開始する。
【0025】
ステップS5では、プログラムモデル検査装置1がコードをコード保存部5とDBMS11へ出力を開始する(図3のA参照)。
ステップS6では、コード保存部5がコードをログファイル6に記録する。また、ステップS7ではDBMS11がコードを受信する。
【0026】
ステップS8では、ログファイル管理部8がログファイル6の読み込みを開始する。
ステップS9では、プログラムモデル検査装置1がDBの状態変化を判定する。例えば、プログラムモデル検査装置1がSQL文に記述されている分岐条件となる挿入(insert)、更新(update)、削除(delete)などを検出する。
【0027】
ステップS10では、プログラムモデル検査装置1がステップS9で検出した状態変化を後述する状態変更通知をDBデータ管理部3へ送信する。
ステップS11では、DBデータ管理部3が状態変更通知を受信する。DBデータ管理部3は、状態変更通知に基づいてDBの状態に変化があったことを検知する。
【0028】
ステップS12では、DBデータ管理部3がコード保存部5からコードを読み込む。
ステップS13では、DBデータ管理部3がコード保存部5から取得したコードと状態を関連付ける(詳細については後述する)。
【0029】
通常時、ステップS4〜ステップS13に示した処理を繰り返し実行し、バックトラックを行う場合にはステップS15に移行する。
ステップS14では、プログラムモデル検査装置1がバックトラックを行うか否かを判定し、バックトラックを行う場合はステップS15に移行する。例えば、プログラムモデル検査装置1が既存の機能によりこれ以上状態が変化しないことを検出する。なお、バックトラックを実行するとき、プログラムモデル検査装置1はプログラムモデル検査を中断する。そして、バックトラック処理が完了したことを検出すると、プログラムモデル検査を再開する。例えば、JPF(Java Pathfinder)などを用いることにより、プログラムモデル検査装置1とデータベース制御装置2の切り替え同期を取る。
【0030】
ステップS15では、プログラムモデル検査装置1が後述するバックトラック開始通知をDBデータ管理部3に送信する。
ステップS16では、バックトラック開始通知をDBデータ管理部3が受信する。
【0031】
ステップS17では、DBデータ管理部3がバックトラック処理を実行する(詳細については後述する)。
ステップS18では、DBデータ管理部3がDBMS11のDBを初期状態にするコードを、DBドライバ追加モジュール4を介してDBMS11に送信する。
【0032】
ステップS19では、DBMS11が初期状態にするコードを受信し、ステップS20でDBMS11がDBを初期状態にする。
ステップS21では、DBデータ管理部3がバックトラック開始通知に示されているDBMS11をロールバックする情報(復元先ノードID)に基づいて生成されたコードを、DBドライバ追加モジュール4を介してDBMS11に送信する。
【0033】
ステップS22では、DBMS11がDBをロールバックするコードを受信し、ステップS23でDBMS11がDBに対して指定された状態にロールバックする指示を出力する。
【0034】
ステップS24では、ステップS22の処理が完了すると、DBデータ管理部3がプログラムモデル検査装置1に対して状態復元終了通知を送信する。状態復元終了通知は、プログラムモデル検査装置1にプログラムモデル検査を再開させるとともに、データベース制御装置2からプログラムモデル検査装置1に動作を切り替える通知である。
【0035】
(DBデータ管理部の動作説明)
図4に示す状態ツリーを持つプログラム状態を想定して、図6に示すフロー図を用い、DBデータ管理部3の動作を説明する。なお、本例ではSQL文をコードとして用いるものとする。
【0036】
ステップS31では、DBデータ管理部3が、DBMS11のDBを初期状態(図4の状態1)にするためにSQL文をプログラムモデル検査装置1に発行する。例えば、図7のAに示す「delete * from TB1」「delete * from TB5」などを発行する。初期状態にするSQL文は、予めユーザ(検証実行者)が状態ツリー管理テーブルに記録する。また、「TB1」「TB5」はDBMS11にも受けられているテーブルなどである。
【0037】
なお、図7のA〜Eに示す状態ツリー管理テーブルは、「ノードID」「パス」「SQL」を記録するセルを有し、「ノードID」にはプログラムモデル検査装置1から通知される状態を示す識別番号を記録する。「パス」には「ノードID」に関連付けられ、分岐点の状態と遷移した状態を示す内容(パス情報)を記録する。例えば、状態2から状態3への分岐であれば「2→3」のように記録する。「SQL」には、「ノードID」に関連付けられ、分岐(状態遷移)が検出されるまでに発行されたSQL文が記録される。
【0038】
ステップS32では、DBデータ管理部3が、プログラムモデル検査装置1からDBドライバ追加モジュール4を介して検査開始通知(再開時にも通知される)を受信する。検査開始通知は、プログラムモデル検査装置1が検査を開始もしくは再開するときに発行される情報である(図6のA参照)。
【0039】
ステップS33では、コード保存部5がDBMS11から発行されるSQL文をログファイル6へ記録する。図3のAにDBMS11から発行されるSQL文の例を示す。
ステップS34(状態ツリー管理処理)では、状態ツリー管理部7がプログラムモデル検査装置1からDBドライバ追加モジュール4を介して状態変更通知を受信する。状態変更通知は、検査中のプログラムのパスに状態変更があるとき通知され、この通知が状態変更を示す通知であることを示す状態変更コードと、新たな状態を示すノードIDを有している(図6のB参照)。例えば、図4の状態1から状態2(分岐点)への遷移であれば、状態2を示すノードIDとして「2」が通知される。
なお、プログラムモデル検査装置1は、プログラム中の分岐条件が現れるたびにその時の状態を記憶している。
【0040】
ステップS35(ログファイル管理処理)では、ログファイル管理部8がSQL文に状態変更のマークを記録する。図3のBにDBMS11から発行されるSQL文の例を示す。図3のBの例ではマークとして[初期状態]、[ノードID2]〜[ノードID6]を記述している。なお、本例ではコメント記号「/*」「*/」を用いマークをコメント文として扱っている。
【0041】
ステップS36(状態ツリー管理処理)では、状態ツリー管理部7では、新たな状態を示す「ノードID」を状態ツリー管理テーブルに追加記録する。例えば、図4の状態1から状態2(分岐点)への遷移であれば、図7のBに示すように状態ツリー管理テーブルの「ノードID」に「2」を追加する。そして、「パス」に「ノードID」の「1」(状態1)から進んでプログラム分岐点である状態2が検出されたことを示す「1→2」を記録する。また、ログファイル管理部8で記録された状態1から状態2に至る間で発行されたSQL文を順番に「SQL」に記録する。
【0042】
同様に、状態2から状態3、状態3から状態4への遷移についてもステップS33〜S36と同じように処理をする。その結果、図7のB、Cに示す状態ツリー管理テーブルが生成される。
【0043】
ステップS37〜S39、S41(バックトラック管理処理)、ステップS40(DB制御コード発行処理)によりバックトラック処理を行う。
ステップS37では、バックトラック管理部9がプログラムモデル検査装置1からバックトラック開始通知を受信し、バックトラック開始通知を受信したときステップS38に移行し、受信しないときステップS33に移行する。バックトラック開始通知は、バックトラック開始を示すコードと、復元先の状態を示す識別番号である復元先ノードIDを有している。例えば、図4において状態4までプログラムが進むと直近のプログラム分岐状態3に戻るバックトラック開始通知を、バックトラック管理部9がプログラムモデル検査装置1から受信する。
【0044】
ステップS38では、バックトラック管理部9が復元先ノードIDを取得する。
ステップS39では、バックトラック管理部9が状態ツリー管理テーブルから復元先ノードIDに示されたノードIDを検索し、初期状態から復元先ノードIDに示された状態に至るまでのパスとSQL文を全て抽出する。そして、抽出したSQL文をパスの順序と逆に並べ替えてSQL文(DB制御コード)を生成してDB制御コード発行部10に送信する。
【0045】
ステップS40(DB制御コード発行処理)では、DB制御コード発行部10がステップS39で生成したSQL文を順番にDBMS11に発行する。
ステップS41では、バックトラック管理部9がプログラムモデル検査装置1に状態復元終了通知を送信する。
【0046】
図4の場合であれば、DBデータバックトラック部2は、状態4までプログラムが進むと、「ノードID」の「3」が示す状態3からプログラムモデル検査装置1が実行され、状態5とその間に発行されたSQL文を状態ツリー管理テーブルに記録する。
【0047】
状態5までプログラムが進むと直近のプログラム分岐状態2に戻るようにプログラムモデル検査装置1から通知を受け取る。そのため状態2に戻るためのバックトラックの処理に移る。
【0048】
次に、DB制御コード発行部10がSQL文を発行して、DBMS11を状態2に戻す。
次に、図4の状態2からプログラムモデル検査装置1が実行され、状態2から状態6の間に発行されたSQL文が状態ツリー管理テーブルの「SQL」に記録される。
【0049】
なお、プログラムモデル検査装置1からコード(SQL文)が出力されるのは、プログラムモデル検査装置1の検査対象プログラム22が動作した時のみであるため、バックトラック時はプログラムが動作しない。そのため、検査対象プログラム22からのコード(SQL文など)は無視される。よって、バックトラック時の動作はログファイル6に記録されない。
【0050】
(バックトラック管理部の動作説明:バックトラック管理処理)
図8はバックトラック管理部9の動作を示すフロー図である。
【0051】
ステップS51では、バックトラック管理部9がプログラムモデル検査装置1からバックトラック開始通知を受信するまで待機する。例えば、図4に示した状態4から状態3に戻る場合であれば、状態ツリー管理テーブルには図7のCに示すように「ノードID」の「1」〜「4」に対応する「パス」「SQL」が生成され記録されている。
【0052】
ステップS52では、バックトラック管理部9がプログラムモデル検査装置1からバックトラック開始通知を受信する。例えば、バックトラック開始通知は、図8のAに示すように、バックトラック開始を示すコード(「startコード」)、復元先ノードID(復元先の状態を示す識別番号)を有している。図4に示す状態3にプログラムモデル検査が戻る場合であれば、復元先ノードIDとして「3」がプログラムモデル検査装置1から送信され、バックトラック管理部9が復元先ノードIDに基づいて状態3へバックトラックすることを認識する。
【0053】
ステップS53では、バックトラック管理部9が状態ツリー管理テーブルから復元先ノードIDに対応する「ノードID」を検索する。例えば、復元先ノードIDが「3」であれば、図7のCの状態ツリー管理テーブルの中から「ノードID」が「3」である行を探索する。そして、探索結果である「3」を記録部に記録する(図8のB)。
【0054】
ステップS54〜S56では、バックトラック管理部9が初期状態を示す「ノードID」から復元先ノードに対応する状態に至るまでのパスを抽出する。
ステップS54では、バックトラック管理部9が、復元先ノードに対応する「ノードID」に関連付けられている「パス」を抽出する。また、ステップS56で検出された「ノードID」に対応する「パス」を抽出する。
【0055】
ステップS55では、バックトラック管理部9が、抽出した「パス」に前のノードID(前状態)に初期状態が示されているかを判定し、初期状態を示していればステップS57に移行し、初期状態を示していない場合にはステップS56に移行する。例えば、図7の場合であれば「ノードID」の「1」が図4の状態1である初期状態を示しているので、「パス」に記録されている「1→2」を検出したときステップS57に移行する。
【0056】
ステップS56では、バックトラック管理部9が、記録した「パス」の前のノードIDに対応する「ノードID」を、状態ツリー管理テーブルから抽出する。
【0057】
図4の状態4から状態3へバックトラックする場合について説明する。
ステップS54では図8のCに示すように、「ノードID」の「3」に関連付けられている「パス」である「2→3」を抽出する。各「ノードID」に関連付けられた各「パス」は「A→B」のように示されており、Bは同じレコードに関連付けられている「ノードID」を示し、AはBに示される「ノードID」に辿り着く前のノードIDを示している。
【0058】
例えば、ステップS55において「2→3」の前のノードIDが「2」であるので、前の状態が初期状態ではないためステップ56に移行する(ステップS5:1回目)。
ステップ56では、ステップS55で記録した図8のCに示すノードID(1回目)のパス「2→3」から前のノードIDである「2」を抽出する(図8のE)。
【0059】
ステップS54では、図8のCに示すように、「ノードID」の「2」に関連付けられている「パス」である「1→2」を抽出する。
次に、ステップS55では、「1→2」の前のノードIDが「1」であるので、初期状態と判定してステップ57に移行する(ステップS55:図8のDの2回目)。
【0060】
上記のようにして、バックトラック管理部9が初期状態を示す「ノードID」から復元先ノードに対応する状態に至るまでのパス(状態1→状態2→状態3)を抽出する。
ステップS57では、バックトラック管理部9が、記録した「パス」に関連付けられた「ノードID」に対応する「SQL」にあるSQL文を状態ツリー管理テーブルから抽出する。例えば、図8のFに示すように「ノードID」の「3」に対応するSQL文、「ノードID」の「2」に対応するSQL文、「ノードID」の「1」(初期状態)のSQL文を状態ツリー管理テーブルから抽出する。
【0061】
ステップS58では、バックトラック管理部9が、ステップS59で抽出したSQL文をパスの順序と逆に並べ替え、その順序でDB制御コード発行部10に送信する。例えば、図8のGに示すように「ノードID」の「1」(初期状態)に対応するSQL文、「ノードID」の「2」のに対応するSQL文、「ノードID」の「3」のに対応するSQL文を並べ替えてDB制御コード発行部10に送信する。
【0062】
なお、DB制御コード発行部10は受信したSQL文を順番にプログラムモデル検査装置1のDBMS11に発行する。そして、プログラムモデル検査装置1は、SQL文に基づいてDBの状態を復元する。
【0063】
ステップS59では、バックトラック管理部9が、復元先ノードIDが示す状態にするための全てのSQL文を、DBMS11に復元終了したことを通知(状態復元終了通知)する。
【0064】
上記のようにバックトラック処理を行うことにより、プログラムモデル検査において実行環境で使用されるDBMS11のデータを復元状態へ戻す効率的なバックトラックを行うことにより、メモリ消費を削減することができる。また、それぞれの状態に至るログを状態ツリー構造として管理し、そこに戻るパスを動的に作成することができる。
【0065】
また、実際のDBを用いてプログラムモデル検査を実行する場合でも、従来のようなDBデータの各状態をスナップショットで残しておき、それらをプログラムモデル検査パスの持つ状態とリンクして管理する仕組みを必要としない。
【0066】
また。従来はプログラムモデル検査にDBデータがないとしても、膨大なメモリとCPUの性能が必要である。加えてスナップショットによるメモリ消費が追加されるとプログラムモデル検査の実行そのものに多大な影響を与える。また、コピー用データベースおよびストレージが別途必要になる。また、スナップショットを取るタイミングがデータ変更のタイミングで管理されており、プログラムモデル検査で管理する単位とは異なるため、両者を結びつけて管理する機構が別途必要になる。また、従来はプログラムモデル検査装置内部において動的に作成される状態ツリー情報を管理し、図10のBに示すように全く別の部分木に属する状態に戻る時、その状態が属する部分木を特定し、その状態に至るパスを求めている。
【0067】
しかし、本例では、図10のBに示すように状態Sから状態Iに戻るためには状態を遡るだけでなく、状態Iが属する部分木を特定してその状態に至るパスを計算する必要がなくなる。また、データスナップショットを取っておくための追加ストレージも不要になる。また、メモリの消費を削減することができる。
【0068】
また、従来は図10のCに示されるように1次元の時間列で表現される状態に戻ることを想定しており、プログラムモデル検査の状態木のように複数の時間列が存在する状態を管理する方法ではない。そのため、プログラムモデル検査ツール内部において動的に作成される複数の時間列が存在する状態ツリー情報を管理するためには、動的に作成されるプログラムモデル検査状態木に連動したDB状態の管理を効率的に行う必要がある。しかし、対象の状態がルートからどのノードを通って達するパスであるか、それら複数のパスの全てを記録可能なデータ構造を持っていなければ、任意の状態へのバックトラックを効率的にSQLログから作成することは難しい。また、ツリー構造を無視して管理をすると、プログラムモデル検査のように状態数が数百から数千など非常に多くなる場合、メモリの消費が多くなるとともに、どのパスを辿れば目的の状態を探し出すことができるかを検索するため、CPUの負荷が大きくなる。
【0069】
それに対して本例では、バックトラック開始点へのパスを状態ツリーとして管理するため、ノード探索およびそこに至るパス計算が速くなりCPUの負荷を減らすことができる。
【0070】
また、プログラムモデル検査装置1で発行したコード(SQL文など)を用いるため、DBMS11ごとにプログラムモデル検査装置に変更を加えなくてよい。
なお、本実施例では、プログラムモデル検査装置とデータベース制御装置とが別々の装置である例を示したが、両装置の機能を備えた1台の装置として本発明を構成することも可能である。
【0071】
(本実施例がコンピュータプログラムとして実現される場合の構成)
図9は、上記本発明の実施形態の装置を実現できるコンピュータのハードウェア構成の一例を示す図である。
【0072】
コンピュータのハードウェア90は、CPU91、記録部92(ROM、RAM、ハードディスクドライブなど)、記録媒体読取装置93、入出力インタフェース94(入出力I/F)、通信インタフェース95(通信I/F)などを備えている。また、上記各構成部はバス96によってそれぞれ接続されている。
【0073】
CPU91は、記録部92に格納されている上記説明した状態ツリー管理処理、ログファイル管理処理、バックトラック管理処理、DB復元通知発行処理(図5、6、8に示した処理)を実行する。
【0074】
記録部92は、CPU91が実行するプログラムやデータが記録されている。また、ワークエリアなどとして使用される。
記録媒体読取装置93は、CPU91の制御にしたがって記録媒体93aに対するデータのリード/ライトを制御する。そして、記録媒体93a、記録媒体読取装置93の制御で書き込まれたデータを記憶したり、記録媒体93aに記憶されたデータを読み取らせたりする。また、着脱可能な記録媒体93aは、コンピュータで読み取り可能な記録媒体として、磁気記録装置、光ディスク、光磁気記録媒体、半導体メモリなどがある。磁気記録装置には、ハードディスク装置(HDD)などがある。光ディスクには、DVD(Digital Versatile Disc)、DVD−RAM(Random Access Memory)、CD−ROM(Compact Disc Read Only Memory)、CD−R(Recordable)/RW(ReWritable)などがある。光磁気記録媒体には、MO(Magneto-Optical disk)などがある。
【0075】
入出力インタフェース94には、入出力装置94a(マウス、キーボード、ディスプレイなど)が接続され、ユーザが入力した情報を受信し、バス96を介してCPU91に送信する。また、CPU91からの命令に従ってディスプレイの画面上に操作情報などを表示する。
【0076】
通信インタフェース95は、必要に応じ、他のコンピュータとの間のLAN接続やインターネット接続や無線接続のためのインタフェースである。また、他の装置に接続され、外部装置からのデータの入出力を制御する。
【0077】
このようなハードウェア構成を有するコンピュータを1台または2台以上用いることによって、上記説明した各種処理機能(実施例で説明した処理(フローチャートなど))が実現される。その場合システムが有すべき機能の処理内容を記述したプログラムが提供される。そのプログラムをコンピュータで実行することにより、上記処理機能がコンピュータ上で実現される。処理内容を記述したプログラムは、コンピュータで読み取り可能な記録媒体93aに記録しておくことができる。
【0078】
プログラムを流通させる場合には、例えば、そのプログラムが記録されたDVD、CD−ROMなどの可搬型記録媒体が販売される。また、プログラムをサーバコンピュータの記憶装置に格納しておき、ネットワークを介して、サーバコンピュータから他のコンピュータにそのプログラムを転送することもできる。
【0079】
プログラムを実行するコンピュータは、例えば、可搬型記録媒体に記録されたプログラムもしくはサーバコンピュータから転送されたプログラムを、自己の記憶装置に格納する。そして、コンピュータは、自己の記憶装置からプログラムを読み取り、プログラムに従った処理を実行する。なお、コンピュータは、可搬型記録媒体から直接プログラムを読み取り、そのプログラムに従った処理を実行することもできる。また、コンピュータは、サーバコンピュータからプログラムが転送されるごとに、逐次、受け取ったプログラムに従った処理を実行することもできる。
また、本発明は、上記実施の形態に限定されるものでなく、本発明の要旨を逸脱しない範囲内で種々の改良、変更が可能である。
【0080】
以上実施例を含む実施形態に関し、更に以下の付記を開示する。
(付記1)
プログラムモデル検査装置がプログラムモデル検査を実施する際に実行環境で使用するデータベースを制御するデータベース制御装置であって、
前記プログラムモデル検査装置から、データベースの変化後の状態を識別する識別番号であるノードIDを有する状態変更通知を受信したときに、該ノードIDに関連付けて、該変化後の状態への遷移経路を示すパス情報と、変化前の状態から該変化後の状態へ遷移する間に該プログラムモデル検査装置から出力された該データベースを制御するコードであるログ情報を状態ツリー管理テーブルに記録する記録部と、
前記プログラムモデル検査装置から戻り先の状態を示す識別番号である復元先ノードIDを有するバックトラック開始通知を受信したときに、該復元先ノードIDに関連付けて前記状態ツリー管理テーブルに記録されたパス情報とログ情報とに基づいて、前記データベースを該復元先ノードIDが示す状態に戻すバックトラック用コードを生成するバックトラック管理部と、
を備えることを特徴とするデータベース制御装置。
(付記2)
前記バックトラック管理部は、
初期状態から前記復元先ノードIDに対応する状態に到るまでの遷移経路を示す複数のパス情報に対応する複数のログ情報を、前記状態ツリー管理テーブルから取得し、該ログ情報を並べてバックトラック用コードを生成することを特徴とする付記1に記載のデータベース制御装置。
(付記3)
プログラムモデル検査を行うプログラムモデル検査手段から、データベースの変化後の状態を識別する識別番号であるノードIDを有する状態変更通知を受信したときに、該ノードIDに関連付けて、該変化後の状態への遷移経路を示すパス情報と、変化前の状態から変化後の状態へ遷移する間に該プログラムモデル検査手段から出力された該データベースを制御するコードであるログ情報を状態ツリー管理テーブルに記録する記録手段と、
前記プログラムモデル検査手段から、戻り先の状態を示す識別番号である復元先ノードIDを有するバックトラック開始通知を受信したときに、該復元先ノードIDに関連付けて前記状態ツリー管理テーブルに記録されたパス情報とログ情報に基づいて、前記データベースを該復元先ノードIDが示す状態に戻すバックトラック用コードを生成するバックトラック管理手段と、
を備えることを特徴とするコンピュータ。
(付記4)
プログラムモデル検査装置がプログラムモデル検査を実施する際に実行環境で使用するデータベースのデータベース制御方法であって、
前記プログラムモデル検査装置から、データベースの変化後の状態を識別する識別番号であるノードIDを有する状態変更通知を受信したときに、該ノードIDに関連付けて、該変化後の状態への遷移経路を示すパス情報と、変化前の状態から該変化後の状態へ遷移する間に該プログラムモデル検査装置から出力された該データベースを制御するコードであるログ情報を状態ツリー管理テーブルに記録し、
前記プログラムモデル検査装置から戻り先の状態を示す識別番号である復元先ノードIDを有するバックトラック開始通知を受信したときに、該復元先ノードIDに関連付けて前記状態ツリー管理テーブルに記録されたパス情報とログ情報とに基づいて、前記データベースを該復元先ノードIDが示す状態に戻すバックトラック用コードを生成する、
ことを特徴とするプログラムモデル検査におけるデータベース制御方法。
(付記5)
コンピュータに、
プログラムモデル検査装置から、データベースの変化後の状態を識別する識別番号であるノードIDを有する状態変更通知を受信したときに、該ノードIDに関連付けて、該変化後の状態への遷移経路を示すパス情報と、変化前の状態から該変化後の状態へ遷移する間に該プログラムモデル検査装置から出力された該データベースを制御するコードであるログ情報を状態ツリー管理テーブルに記録する処理と、
前記プログラムモデル検査装置から戻り先の状態を示す識別番号である復元先ノードIDを有するバックトラック開始通知を受信したときに、該復元先ノードIDに関連付けて前記状態ツリー管理テーブルに記録されたパス情報とログ情報とに基づいて、前記データベースを該復元先ノードIDが示す状態に戻すバックトラック用コードを生成するバックトラック管理処理と、
を実行させることを特徴とするプログラムモデル検査におけるデータベース制御プログラム。
(付記6)
初期状態から前記復元先ノードIDに対応する状態に到るまでの遷移経路を示す複数のパス情報に対応する複数のログ情報を、前記状態ツリー管理テーブルから取得し、該ログ情報を並べてバックトラック用コードを生成させることを特徴とする付記4に記載のプログラムモデル検査におけるデータベース制御方法。
(付記7)
コンピュータに、
初期状態から前記復元先ノードIDに対応する状態に到るまでの遷移経路を示す複数のパス情報に対応する複数のログ情報を、前記状態ツリー管理テーブルから取得し、該ログ情報を並べてバックトラック用コードを生成させることを特徴とするプログラムモデル検査におけるデータベース制御プログラム。
【符号の説明】
【0081】
1 プログラムモデル検査装置
2 データベース制御装置
3 DBデータ管理部
4 モジュール
5 コード保存部
6 ログファイル
7 状態ツリー管理部
8 ログファイル管理部
9 バックトラック管理部
10 DB制御コード発行部
21 ドライバ
22 プログラム
23 入力データ
24 プロパティ
31 ドライバ
90 ハードウェア
92 記録部
93 記録媒体読取装置
93a 記録媒体
94 入出力インタフェース
94a 入出力装置
95 通信インタフェース
96 バス

【特許請求の範囲】
【請求項1】
プログラムモデル検査装置がプログラムモデル検査を実施する際に実行環境で使用するデータベースを制御するデータベース制御装置であって、
前記プログラムモデル検査装置から、データベースの変化後の状態を識別する識別番号であるノードIDを有する状態変更通知を受信したときに、該ノードIDに関連付けて、該変化後の状態への遷移経路を示すパス情報と、変化前の状態から該変化後の状態へ遷移する間に該プログラムモデル検査装置から出力された該データベースを制御するコードであるログ情報を状態ツリー管理テーブルに記録する記録部と、
前記プログラムモデル検査装置から戻り先の状態を示す識別番号である復元先ノードIDを有するバックトラック開始通知を受信したときに、該復元先ノードIDに関連付けて前記状態ツリー管理テーブルに記録されたパス情報とログ情報とに基づいて、前記データベースを該復元先ノードIDが示す状態に戻すバックトラック用コードを生成するバックトラック管理部と、
を備えることを特徴とするデータベース制御装置。
【請求項2】
前記バックトラック管理部は、
初期状態から前記復元先ノードIDに対応する状態に到るまでの遷移経路を示す複数のパス情報に対応する複数のログ情報を、前記状態ツリー管理テーブルから取得し、該ログ情報を並べてバックトラック用コードを生成することを特徴とする請求項1に記載のデータベース制御装置。
【請求項3】
プログラムモデル検査を行うプログラムモデル検査手段から、データベースの変化後の状態を識別する識別番号であるノードIDを有する状態変更通知を受信したときに、該ノードIDに関連付けて、該変化後の状態への遷移経路を示すパス情報と、変化前の状態から変化後の状態へ遷移する間に該プログラムモデル検査手段から出力された該データベースを制御するコードであるログ情報を状態ツリー管理テーブルに記録する記録手段と、
前記プログラムモデル検査手段から、戻り先の状態を示す識別番号である復元先ノードIDを有するバックトラック開始通知を受信したときに、該復元先ノードIDに関連付けて前記状態ツリー管理テーブルに記録されたパス情報とログ情報に基づいて、前記データベースを該復元先ノードIDが示す状態に戻すバックトラック用コードを生成するバックトラック管理手段と、
を備えることを特徴とするコンピュータ。
【請求項4】
プログラムモデル検査装置がプログラムモデル検査を実施する際に実行環境で使用するデータベースのデータベース制御方法であって、
前記プログラムモデル検査装置から、データベースの変化後の状態を識別する識別番号であるノードIDを有する状態変更通知を受信したときに、該ノードIDに関連付けて、該変化後の状態への遷移経路を示すパス情報と、変化前の状態から該変化後の状態へ遷移する間に該プログラムモデル検査装置から出力された該データベースを制御するコードであるログ情報を状態ツリー管理テーブルに記録し、
前記プログラムモデル検査装置から戻り先の状態を示す識別番号である復元先ノードIDを有するバックトラック開始通知を受信したときに、該復元先ノードIDに関連付けて前記状態ツリー管理テーブルに記録されたパス情報とログ情報とに基づいて、前記データベースを該復元先ノードIDが示す状態に戻すバックトラック用コードを生成する、
ことを特徴とするプログラムモデル検査におけるデータベース制御方法。
【請求項5】
コンピュータに、
プログラムモデル検査装置から、データベースの変化後の状態を識別する識別番号であるノードIDを有する状態変更通知を受信したときに、該ノードIDに関連付けて、該変化後の状態への遷移経路を示すパス情報と、変化前の状態から該変化後の状態へ遷移する間に該プログラムモデル検査装置から出力された該データベースを制御するコードであるログ情報を状態ツリー管理テーブルに記録する処理と、
前記プログラムモデル検査装置から戻り先の状態を示す識別番号である復元先ノードIDを有するバックトラック開始通知を受信したときに、該復元先ノードIDに関連付けて前記状態ツリー管理テーブルに記録されたパス情報とログ情報とに基づいて、前記データベースを該復元先ノードIDが示す状態に戻すバックトラック用コードを生成するバックトラック管理処理と、
を実行させることを特徴とするプログラムモデル検査におけるデータベース制御プログラム。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5A】
image rotate

【図5B】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate


【公開番号】特開2011−13792(P2011−13792A)
【公開日】平成23年1月20日(2011.1.20)
【国際特許分類】
【出願番号】特願2009−155509(P2009−155509)
【出願日】平成21年6月30日(2009.6.30)
【公序良俗違反の表示】
(特許庁注:以下のものは登録商標)
1.JAVA
【出願人】(000005223)富士通株式会社 (25,993)
【Fターム(参考)】