(57)【特許請求の範囲】
【請求項１】
プログラム・モデル検査装置用のＤＢシーケンス・バックトラック制御プログラムであって、
アプリケーションプログラムからのＤＢ操作コマンドのシーケンス番号取得要求に応答して、ＤＢＭＳに代わってシーケンス番号を出力することによって前記シーケンス番号取得要求の存在しないＤＢ操作コマンドを前記ＤＢＭＳに伝達すると共に前記シーケンス番号の状態の履歴を前記アプリケーションプログラムの状態と対応付けて記憶部に記憶し、
前記プログラム・モデル検査装置により指定されたアプリケーションプログラムの状態まで戻すバックトラック要求に応答して、前記記憶部に記憶された前記シーケンス番号の状態の履歴に基づいて、前記シーケンス番号の状態を、前記指定されたアプリケーションプログラムの状態と対応する状態までバックトラックさせる、
処理をコンピュータに実行させることを特徴とするプログラム。
【請求項２】
前記記憶部に記憶する処理は、
アプリケーションプログラムからのＤＢ操作コマンドを、シーケンス番号取得要求に係るＤＢ操作コマンドと、その他のＤＢ操作コマンドとに分離し、前記シーケンス番号取得要求に係るＤＢ操作コマンドから、シーケンス番号取得要求を抽出し、
前記抽出されたシーケンス番号取得要求に応答して、ＤＢＭＳに代わって前記シーケンス番号を出力することによりシーケンス番号の状態の履歴をアプリケーションプログラムの状態と対応付けて記憶部に保存し、
前記シーケンス番号取得要求に係るＤＢ操作コマンドのうち、シーケンス番号取得要求が組み込まれたＤＢ操作コマンドの中の前記組み込まれたシーケンス番号取得要求を、前記出力されたシーケンス番号に置換したＤＢ操作コマンドと、前記その他のＤＢ操作コマンドと、を前記ＤＢＭＳに伝達する、
処理を有することを特徴とする請求項１記載のプログラム。
【請求項３】
プログラム・モデル検査装置用のＤＢシーケンス・バックトラック制御方法であって、
アプリケーションプログラムからのＤＢ操作コマンドのシーケンス番号取得要求に応答して、ＤＢＭＳに代わってシーケンス番号を出力することによって前記シーケンス番号取得要求の存在しないＤＢ操作コマンドを前記ＤＢＭＳに伝達すると共に前記シーケンス番号の状態の履歴を前記アプリケーションプログラムの状態と対応付けて記憶部に記憶し、
前記プログラム・モデル検査装置により指定されたアプリケーションプログラムの状態まで戻すバックトラック要求に応答して、前記記憶部に記憶されたシーケンス番号の状態の履歴に基づいて、前記シーケンス番号の状態を、前記指定されたアプリケーションプログラムの状態と対応する状態までバックトラックさせる、
ことを特徴とする方法。
【請求項４】
プログラム・モデル検査装置用のＤＢシーケンス・バックトラック制御装置であって、
アプリケーションプログラムからのＤＢ操作コマンドのシーケンス番号取得要求に応答して、ＤＢＭＳに代わってシーケンス番号を出力することによって前記シーケンス番号取得要求の存在しないＤＢ操作コマンドを前記ＤＢＭＳに伝達すると共に前記シーケンス番号の状態の履歴を前記アプリケーションプログラムの状態と対応付けて記憶部に記憶する、シーケンス番号処理部と、
前記プログラム・モデル検査装置により指定されたアプリケーションプログラムの状態まで戻すバックトラック要求に応答して、前記記憶部に記憶されたシーケンス番号の状態の履歴に基づいて、前記シーケンス番号の状態を、前記指定されたアプリケーションプログラムの状態と対応する状態までバックトラックさせる、シーケンス・バックトラック部と、
を有することを特徴とする装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データベース（ＤＢ）を利用するアプリケーションプログラムを検査対象とするプログラム・モデル検査において、プログラム・モデル検査装置の管理するプログラム状態の一部であるＤＢ状態のバックトラック制御に関する。
【背景技術】
【０００２】
アプリケーションプログラムのプログラム・モデル検査とは、アプリケーションプログラム（モデルに該当する）が仕様として満たすべき性質（プロパティと呼ばれる。以下プロパティと記す）を満足するか否かを、プログラムを実行させ網羅的に検査する手法をいう。予め用意したシナリオに基づいて、アプリケーションプログラムを実行し、その実行時のプログラム状態と、予め用意したプロパティとを比較し、両者が一致するか（プロパティが成立するか）を評価することで、アプリケーションプログラムが仕様を満たしているか否かを検査することができる。
【０００３】
ここで、ソフトウェア開発分野におけるモデルとは、開発するシステムの挙動や処理内容の記述であり、記述の詳細度レベルによって種々のモデルがある。例えば、概要設計のレベルでは、ＵＭＬ（Ｕｎｉｆｉｅｄ  Ｍｏｄｅｌｉｎｇ  Ｌａｎｇｕａｇｅ）を用いて、システムが処理する情報の静的構造や処理シーケンスを記述したモデルが利用される。また、開発仕様を厳密に記述する場合には、仕様記述言語を用いて開発仕様をモデルとして記述することも行われている。さらに、開発システムの動的な側面をモデル化する場合には、例えば、Ｐｒｏｍｅｌａ等のモデル記述用の専用言語を用いて状態遷移等を記述することも行われている。Ｐｒｏｍｅｌａで記述されたモデルに対しては、ＳＰＩＮモデルチェッカというツールを用いてモデル検査を実行することができる。
【０００４】
また、Ｊａｖａ(登録商標)等の実行可能なプログラム言語を用いて記述されたソフトウェアは、最も記述が詳細なモデルであると見なされる。プログラムをモデルとするモデル検査は、上述のように特にプログラム・モデル検査と呼ばれるが、ここでは、以後単にモデル検査と表記する場合がある。Ｊａｖａ(登録商標)で記述されたプログラムに対するモデル検査ツールには、例えば、ＪＰＦ（Ｊａｖａ(登録商標)  Ｐａｔｈ  Ｆｉｎｄｅｒ）がある。本発明の一実施形態では、モデル検査のうち、ＤＢを利用するプログラムをモデルとした場合を対象とする。
【０００５】
次にＤＢデータのバックトラックについて説明する。
【０００６】
プログラム・モデル検査では、上述のようにドライバにシナリオを投入することによってプログラムを実行させた時に遷移する全ての状態において、予め設定されたプロパティが成立するかを検査する。この検査を実施するため、モデル検査では、状態を木構造で把握し、その木構造に対して、深さ優先探索法によって状態探索を行う。状態探索木の深さ優先探索法は、バックトラック法とも呼ばれ、状態探索の途中において、探索木のある枝の末端まで検査が終了したら、既に検査した探索木を辿って、未検査の枝への分岐点まで戻り、未調査の枝に対して検査を続行する。このように、探索木を未検査の枝への分岐点まで戻ることを、状態のバックトラックと呼ぶ。
【０００７】
一方、現在、多くのプログラムは、マスタデータや処理結果データや履歴等を記録するためにＤＢを利用している。モデル検査の対象がＤＢを利用するプログラムである場合、プログラム・モデル検査装置の管理する状態には、プログラム変数に加えて、ＤＢデータが含まれる。従って、ＤＢを利用するプログラムを対象とするモデル検査において、状態をバックトラックするために、ＤＢデータをバックトラックする必要がある。
【０００８】
モデル検査のためにＤＢデータのバックトラックを実現する方法には、ＤＢスタブを用いる方法と実際のＤＢＭＳ（Ｄａｔａｂａｓｅ  Ｍａｎａｇｅｍｅｎｔ  Ｓｙｓｔｅｍ：データベース管理システム）を利用する方法がある。ＤＢスタブを用いる方式では、複雑なＳＱＬに対応できない課題があり、現実的でない。
【０００９】
他方、実際のＤＢＭＳを利用して、バックトラックを行うデータベース制御装置が知られている（特許文献１）。
【００１０】
ＤＢＭＳが管理しているデータには、テーブルにレコードとして格納されるデータと、シーケンス番号がある。シーケンス番号は、ＤＢＭＳが生成する一連のユニークな番号を意味する。このシーケンス番号は、テーブルのプライマリーキーの値のように、テーブル内でユニークな値であることが要求される場合や、重複の無い連番が必要な場合などに、プログラムで利用されている。
【００１１】
シーケンス番号は、プログラムにおいて、ＤＢＭＳに要求することにより、取得することができるため、ＤＢを利用する処理を記述する際に便利である。このため、現在、広く利用されているＯｒａｃｌｅ（登録商標）といったＤＢＭＳでは、シーケンス機能として提供されている。
【００１２】
シーケンス機能により採番されたシーケンス番号は、上述のようにユニークな番号であるため、ＤＢデータのプライマリーキー等に格納されることが多い。モデル検査の状態探索においてＤＢデータをバックトラックする場合、シーケンス番号もバックトラックしなければならない。
【００１３】
しかしながら、ＤＢＭＳが提供するシーケンス機能は、元来ユニークな値を提供することが目的であるため、シーケンス番号を逆戻りさせる機能が提供されていないＤＢＭＳが多く存在する。シーケンス番号を安易に逆戻りさせうる機能を提供すると、ユニークな値を提供するという、シーケンス機能の本来の機能を保証できなくなるからである。
【００１４】
このため、特許文献１では、ＤＢＭＳを利用して通常のテーブルデータを効率的にバックトラックする方法を提示しているが、ＤＢＭＳのシーケンス番号をバックトラックさせることはできない。
【００１５】
従って、特許文献１は、ＤＢＭＳのシーケンス機能を利用するプログラムのモデル検査に適用することができない。
【００１６】
なお、モデル検査において、シーケンス番号データのバックトラックが出来ないことが原因となる具体的な不具合は、後述の実施例を説明する際に（図８、図２８）事例を挙げて説明する。
【先行技術文献】
【特許文献】
【００１７】
【特許文献１】特開２０１１−１３７９２号公報
【発明の概要】
【発明が解決しようとする課題】
【００１８】
本プログラム、方法、及び装置は、上記実情に鑑みなされたものであり、ＤＢを利用するアプリケーションプログラムを検査対象とするプログラム・モデル検査において、ＤＢのシーケンス処理をも含めてバックトラックできる改善された技術を提供することを目的とする。
【課題を解決するための手段】
【００１９】
本プログラムの一観点によれば、プログラム・モデル検査装置用のＤＢシーケンス・バックトラック制御プログラムであって、アプリケーションプログラムからのＤＢ操作コマンドのシーケンス番号取得要求に応答して、ＤＢＭＳに代わってシーケンス番号を出力することによって前記シーケンス番号取得要求の存在しないＤＢ操作コマンドを前記ＤＢＭＳに伝達すると共に前記シーケンス番号の状態の履歴を前記アプリケーションプログラムの状態と対応付けて記憶部に記憶し、前記プログラム・モデル検査装置により指定されたアプリケーションプログラムの状態まで戻すバックトラック要求に応答して、前記記憶部に記憶された前記シーケンス番号の状態の履歴に基づいて、前記シーケンス番号の状態を、前記指定されたアプリケーションプログラムの状態と対応する状態までバックトラックさせる、処理をコンピュータに実行させることを特徴とするプログラムが提供される。
【発明の効果】
【００２０】
開示のプログラム、方法、及び装置によれば、ＤＢＭＳのシーケンス機能を用いたアプリケーションプログラムに対しても、シーケンス番号のバックトラックが可能であり、モデル検査を実施することができる。
【図面の簡単な説明】
【００２１】
【図１】本発明の一実施形態が組み込まれた機能ブロック図である。
【図２】商品購入Ｗｅｂアプリケーションの画面遷移の例を示す図である。
【図３】データベース内のデータの例を示す図である。
【図４】注文受付処理の前後のＤＢの状態を示す図である。
【図５】注文受付処理で発行されるＳＱＬの例を示す図である。
【図６】シーケンス番号生成用のＤＢ操作コマンドの例を示す図である。
【図７】アプリケーションプログラムの状態遷移の例を示す図である。
【図８】状態バックトラックの例を示す図である。
【図９】ＤＢシーケンス・バックトラック制御装置のブロック図である。
【図１０Ａ】ＤＢシーケンス・バックトラック制御の処理フローを示す図である。
【図１０Ｂ】ＤＢシーケンス・バックトラック制御の処理フローを示す図である。
【図１１】プログラム・モデル検査装置の処理フローを示す図である。
【図１２】ＤＢ操作コマンド解析・分離部のフロー図である。
【図１３】シーケンス処理の判別ルールの例を示す図である。
【図１４】ＤＢ操作コマンド解析・分離部の入力と出力の例を示す図（１）である。
【図１５】ＤＢ操作コマンド解析・分離部の入力と出力の例を示す図（２）である。
【図１６】ＤＢ操作コマンド置換部のフロー図である。
【図１７】ＤＢ操作コマンド置換部の入力と出力の例を示す図である。
【図１８】シーケンス管理部のデータ構造を示す図である。
【図１９】シーケンス状態データの例を示す図である。
【図２０】シーケンス状態スタックデータの例を示す図である。
【図２１】シーケンス管理部の初期化フロー図である。
【図２２】シーケンス管理部の動作フロー図である。
【図２３】シーケンス管理部の管理データの変化の例を示す図である。
【図２４】シーケンス・バックトラック部のフロー図である。
【図２５】シーケンス・バックトラックの例を示す図である。
【図２６】操作シナリオの例を示す図である。
【図２７】操作と状態遷移の例を示す図である。
【図２８】シーケンス・バックトラック不能による不具合の例を示す図である。
【図２９】本実施形態に係るハードウエア構成を示す図である。
【発明を実施するための形態】
【００２２】
図１は、本発明の一実施例としてのＤＢシーケンス・バックトラック制御装置１０３が組み込まれたプログラム・モデル検査を実行する装置１０１のブロック図である。図１において、プログラム・モデル検査を実行する装置１０１は、ＤＢＭＳを利用するモデル検査装置１０２と、一実施形態であるＤＢシーケンス・バックトラック制御装置１０３と、検査対象プログラム１０４と、ＤＢＭＳ１０５を含んでいる。利用者は、装置１０１の入出力装置（不図示）を介して、ＤＢＭＳを利用したアプリケーションプログラムのプログラム・モデル検査を実行することができる。
【００２３】
装置１０１は、一台のコンピュータ上に実現しても良いし、あるいは、例えば、ＤＢＭＳを別のコンピュータに配置することによって、複数台のコンピュータを用いて実現してもよい。
【００２４】
ＤＢＭＳを利用するモデル検査装置１０２と、一実施形態であるＤＢシーケンス・バックトラック制御装置１０３と、検査対象プログラム１０４と、ＤＢＭＳ１０５は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）やプログラマブルなデバイス（ＦＰＧＡ（Ｆｉｅｌｄ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙ）、ＰＬＤ（Ｐｒｏｇｒａｍｍａｂｌｅ  Ｌｏｇｉｃ  Ｄｅｖｉｃｅ）など機器に実装されたプログラムとして実現できる。また、種々のデータやプログラムは、例えばＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、ハードディスクなどのメモリに記憶されてもよい。
【００２５】
［シーケンス番号を利用するアプリケーションプログラムの例］
ここでＤＢＭＳのシーケンス機能により、シーケンス番号を利用するアプリケーションプログラムの例を示す。
【００２６】
図２は、商品購入Ｗｅｂアプリケーションの画面遷移の例を示す。選択画面２１０において、発注ボタン２１１と注文ボタン２１２が表示されている。発注の場合には、発注ボタン２１１をマウスでクリックすると、注文画面２２０が表示される。ここで、必要な注文内容を入力し、注文ボタン２２１をクリックする。画面は、完了画面２３０に移る。この段階で、データベース（不図示）にデータが格納され、注文Ｎｏ２３２として「１」が表示され、先ほど入力した注文内容が表示される。また、選択画面２１０において、注文検索ボタン２１２をクリックした場合には、検索画面２４０、検索結果画面２５０と遷移する。このように、データベースを用いるアプリケーションプログラムの場合には、注文Ｎｏ（２３２）のように、アプリケーション側がユニークな番号を自動的に付与して、注文の内容が一意に特定できるようになっている。
【００２７】
図３は、データベース内のデータの例を示す図である。注文画面３１０にて注文内容を入力すると、アプリケーションプログラム３２０は、（１）注文情報を取得する。（２）ＤＢＭＳ３３０内の商品テーブル３３２に格納されている商品を確認する。（３）ＤＢＭＳから、新たな注文Ｎｏを取得するためにシーケンス番号３３６として、「次値」の値である「２」を取得する。（４）次にＤＢＭＳ３３０内の注文テーブル３３４内に新たなレコードとして、注文Ｎｏ（３３５）の欄に「２」を記入し、新たな注文データをＩＮＳＥＲＴし、格納する。このように、注文テーブル３３４内においては、注文Ｎｏ（３３５）が、注文のレコードを一意に特定するための主キーとして機能していることが分かる。また、アプリケーションプログラム３２０は、ユニークな注文ＮｏをＤＢＭＳからシーケンス番号として取得していることが分かる。
【００２８】
図４は、注文受付処理の前後のＤＢの状態を示している。ＤＢＭＳ４１０は、注文受付前のＤＢの状態を示している。ＤＢＭＳ４２０は注文受付後のＤＢＭＳの状態を示している。注文受付後においては、注文テーブル４２４にＮｏ２のレコードが追加されている。また、シーケンス番号の「注文Ｎｏ」の「現在」４２８の値が「２」に変化しているのが分かる。
【００２９】
図５は、注文受付処理で発行されるＳＱＬの例を示している。４つのＳＱＬコマンドが列記されている。このうち、Ｎｏ．３の「ＳＥＬＥＣＴ  注文Ｎｏ．ＮＥＸＴＶＡＬ  ＡＳ  ＳＥＱ＿ＮＥＸＴＶＡＬ  ＦＲＯＭ  ＤＵＡＬ」には、「注文Ｎｏ．ＮＥＸＴＶＡＬ」がふくまれており、注文Ｎｏとして、次のシーケンス番号を取得するコマンドを意味している。
【００３０】
図６は、シーケンス番号生成用のＤＢ操作コマンドの例を示している。シーケンス番号の名前として、「注文Ｎｏ」が定義されており、増分１、初期値０、最大値１０００が指定されている。このシーケンス番号は、新しい値を取得する毎に、１ずつ増加する。そして、シーケンス番号を逆戻りさせるコマンドは用意されていないＤＢＭＳが多い。このようなＤＢＭＳでは、後述するようにバックトラックの際に、シーケンス番号を逆戻りさせることができないために、不都合が生じる。
【００３１】
図７は、アプリケーションプログラムの状態遷移の例を示す。以下のように、一連の操作をシナリオとして予め用意しておき、シナリオに沿ってアプリケーションプログラムを実行させる。
（１）（選択画面、発注ボタン）
（２）（注文画面、注文ボタン、顧客名：富士太郎、商品名：商品Ａ、数量：１０）
（３）（完了画面、戻るボタン）
（４）（選択画面、発注ボタン）
（５）（注文画面、注文ボタン顧客名：富士次郎  商品名：商品Ｂ、数量：２０）
（６）（完了画面、戻るボタン）
（７）（選択画面、注文検索ボタン）
（８）（検索画面、検索ボタン、顧客名：富士、注文Ｎｏ：１）
（９）（検索結果画面、戻るボタン）
図７には、一連のシナリオ操作（１）乃至（９）を行った際のデータベースの内容７１０乃至７３４及び状態（初期状態、状態１、状態２）が、対応付けて示されている。単純化するために、状態として、ＤＢ状態だけを示している。
【００３２】
図７における具体的な状態遷移は以下のようになる。
【００３３】
＜状態遷移＞
操作（１）：選択画面で、発注ボタンを押下すると、注文画面に遷移する。初期状態からＤＢデータは変化しないので、状態は変化しない。
【００３４】
操作（２）：注文画面で、顧客名に“富士太郎”、商品名に“商品Ａ”、数量に“１０”を入力して、注文ボタンを押下する。注文受付処理が動作して、商品テーブルの在庫数が更新され、注文Ｎｏシーケンスから注文Ｎｏが採番され（注文Ｎｏは一つ増加する）注文テーブルに注文情報が追加される。ＤＢデータが変化したので、初期状態から状態１となる。
【００３５】
操作（３）：完了画面で、戻るボタンを押下する。選択画面に戻る。ＤＢは更新されないので、状態１から変化しない。
【００３６】
操作（４）：選択画面で、発注ボタンを押下すると、注文画面に遷移する。ＤＢデータは変化しないので、状態１のままである。
【００３７】
操作（５）：注文画面で、顧客名に“富士次郎”、商品名に“商品Ｂ”、数量に“２０”を入力して、注文ボタンを押下する。注文受付処理が動作して、商品テーブルの在庫数が更新され、注文Ｎｏシーケンスから注文Ｎｏが採番され（注文Ｎｏは一つ増加する）、注文テーブルに注文情報が追加される。ＤＢデータが変化するので、状態１から状態２となる。
【００３８】
操作（６）：完了画面で、戻るボタンを押下して、選択画面に戻る。ＤＢは更新されないので、状態１から変化しない。
【００３９】
操作（７）：選択画面で、注文検索ボタンを押下して、検索画面に遷移する。ＤＢは変化しないので、状態２のままである。
【００４０】
操作（８）：検索画面で、顧客名に“富士”、注文Ｎｏに“１”を入力して、検索ボタンを押下する。検索結果画面に遷移する。ＤＢデータの参照だけであり、ＤＢは変化しないので、状態２から遷移しない。
【００４１】
操作（９）：検索結果画面で、戻るボタンを押下して、選択画面に戻る。
【００４２】
上記操作（９）が終了した段階で、図７のシナリオでは、全ての操作で回数制限に達し、選択可能な操作が無くなる。このため、上記操作９の終了後、バックトラックが行われる。なお、上記シナリオは、注文１（注文データ１で注文）、注文２（注文データ２で注文）、検索１（検索データ１で検索）の操作を順に行ったものに該当する。
【００４３】
＜状態のバックトラック＞
上記操作（９）の後、状態２において、シナリオから選択可能な操作が無くなる。このため、プログラム・モデル検査装置は、別のシナリオで検査を続行するため、選択可能な操作が存在する、操作（３）の実行後までバックトラックする。別のシナリオの例は、例えば、注文１、検索、注文２の操作である。
【００４４】
図８は、状態バックトラックの例を示している。プログラム・モデル検査装置は、別のシナリオで検査を続行するため、選択可能な操作が存在する操作３の実行直後までバックトラックする。データベースのバックトラックの際には、データ自体と、シーケンス番号との両者を元に戻さなければならない。従って、ＤＢＭＳの内容は、本発明の実施形態では、図８のＤＢＭＳの状態７１０に戻すことができる。参考のために、本実施形態を用いない場合のＤＢＭＳの状態８１０を示す。この場合には、シーケンス番号である注文Ｎｏ８１４の値が「２」となっており、状態１における正しい値「１」を示していない。これは、ＤＢＭＳにおいてシーケンス番号を逆戻りさせることができないために生じた不都合である。本実施形態では、この不都合を回避していることがわかる。なお、本実施形態の詳細については、以下の実施例の項において説明する。
【実施例】
【００４５】
図９は、本発明の一実施形態としてのＤＢシーケンス・バックトラック制御装置のブロック図を示している。なお、図９では、ＤＢシーケンス・バックトラック制御装置９００に加えて、ＤＭＢＳ９４０を利用するプログラム・モデル検査装置９５０、検査対象アプリケーションプログラム９３０、及びＤＢＭＳ９４０も併せて示されており、相互の関係が把握できるようになっている。
【００４６】
まず、ＤＢシーケンス・バックトラック制御装置９００について説明する。
【００４７】
ＤＢシーケンス・バックトラック制御装置９００は、検査対象アプリケーションプログラム９３０からＤＢＭＳ９４０に向けて送出されるＤＢ操作コマンドを受信する。ＤＢ操作コマンドは、まず、ＤＢ操作コマンド解析・分離部９１２に入力される。ここでは、ＤＢ操作コマンドが解析され、まず、シーケンス処理に係るＤＢ操作コマンドと、その他のＤＢ操作コマンドとに分離する。そして、シーケンス処理のＤＢ操作コマンドから、シーケンス番号取得要求を抽出する。抽出されたシーケンス番号取得要求は、シーケンス管理部９１４に伝達される。そして、シーケンス番号取得要求が組み込まれたＤＢ操作コマンドにはＹＥＳのマーキングを行う。このマーキングの処理については、図１５を用いて後述する。そして、上述のその他のＤＢ操作コマンドと、ＹＥＳのマーキングされたＤＢ操作コマンドは、ＤＢ操作コマンド置換部９１６に伝達される。（すなわち、シーケンス処理のＤＢ操作コマンドのうち、シーケンス番号取得要求が組み込まれたＤＢ操作コマンド以外のＤＢ操作コマンドは、ＤＢ操作コマンド置換部９１６に伝達されない）
【００４８】
シーケンス管理部９１４は、シーケンス番号取得要求を受け取り、ＤＭＢＳ９４０に代わってシーケンス番号を生成し、出力する。シーケンス状態の履歴をアプリケーションプログラムの状態と対応付けて保存する。アプリケーションプログラムの状態は、ＤＭＢＳ９４０を利用するプログラム・モデル検査装置９５０から、状態ＩＤとして提供される。また、シーケンス・バックトラック部９２０からの指示に基づいて、バックトラックしたシーケンス状態を状態収集部９５６に伝達する。また、ＤＢ操作コマンド置換部に、ＤＢ操作コマンドの置換を行うためのシーケンス番号を伝達する。
【００４９】
ＤＢ操作コマンド置換部９１６は、ＤＢ操作コマンド解析・分離部からのＤＢ操作コマンドを受け取り、ＹＥＳにマーキングされたＤＢ操作コマンドである場合には、そのＤＢ操作コマンドの中のシーケンス番号取得要求を、シーケンス管理部から出力されたシーケンス番号に置換する。そして、ＤＢ操作コマンドをＤＭＢＳ９４０に転送する。
【００５０】
以上の操作によって、ＤＢＭＳ９４０には、シーケンス番号取得要求の存在しないＤＢ操作コマンドが伝達されることになる。
【００５１】
シーケンス・バックトラック部９２０は、ＤＢバックトラック部９５８によって指定されたアプリケーションプログラムの状態まで戻すバックトラック要求に応答して、シーケンス状態の履歴に基づいて、シーケンス状態を指定されたアプリケーションプログラムの状態と対応する状態までバックトラックさせる。
【００５２】
上述の一連の処理によって、ＤＢ操作コマンド置換部９１６からＤＢＭＳ９４０に転送されるＤＢ操作コマンドの中には、シーケンス番号取得に関連する要求（又はコマンド）が取り除かれることとなる。このことは、ＤＢＭＳ９４０のシーケンス機能を用いないことになる。このため、シーケンス取得に関連する要求（又はコマンド）に対しては、ＤＢＭＳ９４０に代わって、シーケンス管理部９１４が処理を行うこととなる。そして、シーケンス番号の逆戻りもシーケンス管理部９１４の管理する履歴を使うこととなるため、シーケンス状態のバックトラックが実現できることになる。
【００５３】
なお、シーケンス管理部９１４と、ＤＢ操作コマンド解析・分離部９１２と、ＤＢ操作コマンド置換部９１６とは、連携して、シーケンス番号処理部９１０を形成している。このシーケンス番号処理部９１０は、以下の処理を行っている。すなわち、アプリケーションプログラムからＤＭＢＳ９４０に向けて発せられたＤＢ操作コマンドを受け取り、ＤＢ操作コマンドのシーケンス番号取得要求に基づいて、ＤＭＢＳ９４０に代わってシーケンス番号を生成し、シーケンス番号取得要求の存在しないＤＢ操作コマンドをＤＭＢＳ９４０に伝達し、シーケンス状態の履歴をアプリケーションプログラムの状態と対応付けて記録することである。
【００５４】
次に、ＤＭＢＳ９４０を利用するプログラム・モデル検査装置９５０について説明する。
【００５５】
ドライバ９５３は、予め定められた一連の操作を記憶したシナリオに基づいて、検査対象アプリケーションプログラム９３０に指示を与える。すなわち、通常はオペレータが行う操作を、オペレータに代わって、シナリオに基づいてドライバ（９５３）が行う。
【００５６】
状態収集部９５６は、アプリケーションプログラムの状態や、シーケンス管理部からのシーケンス番号状態を収集して、状態管理部９５４に転送する。状態管理部９５４は、検査対象アプリケーションプログラム９３０の状態を監視し、状態が変化する場合には、状態ＩＤを変更する。状態ＩＤは、バックトラックの状態を特定する際に用いてもよい。また、状態管理部９５４は、アプリケーションの状態を評価器９５２に送る。
【００５７】
評価器９５２は、状態管理部９５４から送られたアプリケーションプログラムの状態がプロパティ管理部９５１から提供されるプロパティを満足するかをチェックする。このチェックにおいて、状態がプロパティを満足すれば、アプリケーションプログラム９３０は、仕様を満足していることが分かる。この点については、既に説明したとおりである。
【００５８】
バックトラック部９５５は、状態管理部９５４からの指示に基づいて、バックトラックを行うための制御を司る。バックトラックの指示をＰＧ（プログラム）変数バックトラック部９５７とＤＢバックトラック部９５８に送る。
【００５９】
ＰＧ変数バックトラック部９５７は、アプリケーションプログラム９３０の変数をバックトラックすべき状態まで戻す機能を果たす。
【００６０】
ＤＢバックトラック部９５８は、ＤＢＭＳ９４０に対して、データのバックトラックを指示する。これは、ＤＢＭＳ９４０に対して送った一連のＤＢ操作コマンドの処理の逆の処理をＤＭＢＳ９４０に指示することにより実現できる。加えて、シーケンス・バックトラック部に、シーケンス番号をバックトラックさせる指示を行う。シーケンス状態は、ＤＭＢＳ９４０に代わって、ＤＢシーケンス・バックトラック部９２０及びシーケンス管理部９１４が管理しているため、ＤＢＭＳ９４０に何ら影響を与えずに、シーケンス状態のバックトラックを実現する。シーケンス番号のバックトラックについては、既に説明したとおりである。
【００６１】
なお、ＤＢ接続切換部９４１は、モデル検査を行わない場合に、アプリケーションプログラム９３０とＤＢＭＳ９４０とを直接接続するためのスイッチである。
【００６２】
図１０Ａは、ＤＢシーケンス・バックトラック制御の処理フローを示している。
【００６３】
ステップ１０１０において、アプリケーションプログラムからＤＭＢＳ９４０に向けて発せられたＤＢ操作コマンドを受け取り、ＤＢ操作コマンドのシーケンス番号取得要求に基づいて、ＤＭＢＳ９４０に代わってシーケンス番号を生成し、シーケンス番号取得要求の存在しないＤＢ操作コマンドをＤＭＢＳ９４０に伝達し、シーケンス状態の履歴をアプリケーションプログラムの状態と対応付けて記録する。
【００６４】
ステップ１０２０において、プログラム・モデル検査装置９５０により指定されたアプリケーションプログラムの状態まで戻すバックトラック要求に応答して、シーケンス状態の履歴に基づいて、シーケンス状態を指定されたアプリケーションプログラムの状態と対応する状態までバックトラックさせる。
【００６５】
図１０Ｂも、ＤＢシーケンス・バックトラック制御の処理フローを示している。ここでは、図１０Ａで示したステップ１０１０を実現する他の実施形態を示している。
【００６６】
ステップ１０１２において、シーケンス処理に係るＤＢ操作コマンドと、その他のＤＢ操作コマンドとに分離し、シーケンス処理のＤＢ操作コマンドから、シーケンス番号取得要求を抽出し、シーケンス番号取得要求が組み込まれたＤＢ操作コマンドにはマーキングを行う。
【００６７】
ステップ１０１４において、シーケンス番号取得要求を受け取り、ＤＭＢＳ９４０に代わってシーケンス番号を生成し、シーケンス状態の履歴をアプリケーションプログラムの状態と対応付けて保存する。
【００６８】
ステップ１０１６において、その他のＤＢ操作コマンドと、マーキングされたＤＢ操作コマンドとを受け取り、マーキングされたＤＢ操作コマンドの中のシーケンス番号取得要求を、生成されたシーケンス番号に置換した後に、受け取ったＤＢ操作コマンドをＤＭＢＳ９４０に転送する。
【００６９】
ステップ１０２０については、図１０Ａにおいて説明したとおりである。
【００７０】
図１１は、プログラム・モデル検査装置の処理フローを示している。
【００７１】
ステップ１１１０において、シナリオ中に現在状態で選択可能な操作があるか判断される。この判断がＹＥＳであればステップ１１２０に進む。この判断がＮＯであればステップ１１７０に進む。
【００７２】
ステップ１１２０において、ドライバが選択可能な操作で検査対象アプリケーションプログラムを駆動する。
【００７３】
ステップ１１３０において、状態を収集し、状態を管理し、状態ＩＤと関連付けてシーケンス状態が管理・保持される。
【００７４】
ステップ１１４０において、状態がプロパティを満足するかがチェックされ、アプリケーションプログラムの状態を評価する。
【００７５】
ステップ１１５０において、プロパティが成立したか（すなわち状態がプロパティを満足するか）がチェックされる。この判断がＹＥＳであれば、ステップ１１１０に戻る。この判断がＮｏであれば、ステップ１１６０に進む。
【００７６】
ステップ１１６０において、プロパティ不成立を報告する。この場合には、アプリケーションプログラムが仕様を満足していないことが分かる。
【００７７】
ステップ１１７０において、バックトラック可能かが判断される。この判断がＮｏであれば終了する。この場合には、アプリケーションプログラムは、仕様を満足していることが判明する。この判断がＹＥＳであれば、ステップ１１８０に進む。
【００７８】
ステップ１１８０では、バックトラックが行われる。どこまでバックトラックすべきかの判断は、上述の深さ優先探索法でシナリオをチェックすることによって判明する。なお、この点の具体例については、後述する。そして、以下のバックトラックを実施する。
（１）アプリケーションプログラムの変数のバックトラック
（２）ＤＢバックトラック
（ａ）ＤＢのデータのバックトラック
（ｂ）シーケンス番号のバックトラック
以上が、プログラム・モデル検査装置９５０の処理フローである。
【００７９】
図１２は、ＤＢ操作コマンド解析・分離部９１２のフロー図を示している。
【００８０】
ステップ１２１０において、アプリケーションプログラムから、ＤＭＢＳ９４０に向けて発行されたＤＢ操作コマンドを取得する。ＤＢ操作コマンドは、アプリケーションプログラムから順次発行されるため、ＤＢ操作コマンドを取得した都度、以下の処理を行えばよい。
【００８１】
ステップ１２２０において、取得したＤＢ操作コマンドを構文解析し、シーケンス処理の判定ルール１２２５に基づき、シーケンス番号の取得に関連する処理（シーケンス処理）かを判定する。シーケンス処理の判定ルールの例については、図１３を用いて後述する。
【００８２】
ステップ１２３０において、ＤＢ操作コマンドがシーケンス処理か否かが判定される。判定がＹｅｓであれば、ステップ１２４０に進む。判定がＮｏであれば、ステップ１２７０に進む。
【００８３】
ステップ１２４０において、ＤＢ操作コマンドからシーケンス番号取得要求を抽出し、これをシーケンス管理部９１４に送る。シーケンス処理に関係するＤＢ操作コマンドには、ＤＢ操作コマンド単独でシーケンス番号取得要求を行うものと、ＤＢ操作コマンド内に組み込まれた形でシーケンス番号取得要求を行うものとが存在する（以後、このタイプのＤＢ操作コマンドを「組み込み」という語を用いて説明する）。これらの具体例については図１４及び図１５を用いて後述する。このステップでは、いずれのタイプのＤＢ操作コマンドであっても、シーケンス番号取得要求を抽出して、シーケンス管理部９１４に送る。
【００８４】
ステップ１２５０において、シーケンス処理が、組み込みか否かが判断される。この判断がＹｅｓであればステップ１２６０に進む。この判断がＮｏであればステップ１２８０に進む。
【００８５】
ステップ１２８０において、このステップに進んだ場合には、取得したＤＢ操作コマンドをＤＢ操作コマンド置換部に伝達しない。なぜなら、このステップに到達した場合には、ＤＢ操作コマンドは、ＤＢコマンド内にシーケンス番号取得要求が組み込まれていない、シーケンス番号取得のみのためのＤＢ操作コマンドだからである。すなわち、シーケンス番号の取得の処理をＤＭＢＳ９４０に要求しないため、ＤＭＢＳ９４０に伝送する必要はない。その代わり、本実施形態では、シーケンス管理部９１４が、ＤＭＢＳ９４０に代わってシーケンス番号取得要求の処理を行っている。
【００８６】
ステップ１２６０において、当該ＤＢ操作コマンドの組込み欄に「ＹＥＳ」の印を付けて、ＤＢ操作コマンド置換部に伝達する。ここで、Ｙｅｓの印を付けるのは、このＤＢ操作コマンドが、シーケンス番号取得要求が組み込まれたものであるということを予めマーキングしておくためである。ＤＢ操作コマンド置換部９１６において、このＤＢ操作コマンドの中のシーケンス番号取得要求の部分を、シーケンス管理部９１４が生成したシーケンス番号で置き換える。このようにすることによって、この置き換えられたＤＢ操作コマンドをＤＭＢＳ９４０に送った場合にも、ＤＭＢＳ９４０は、シーケンス番号取得要求が組み込まれていないＤＢ操作コマンドとして処理を行うことができるのである。
【００８７】
ステップ１２７０において、ＤＢ操作コマンドをＤＭＢＳ９４０に伝送する。このステップに進んだ場合、ＤＢ操作コマンドは、シーケンス番号取得要求とは関係のないものであるため、ＤＭＢＳ９４０に処理させても、後のバックトラックが可能だからである。
【００８８】
以上の処理によって、ＤＭＢＳ９４０には、シーケンス番号取得要求の含まれないＤＢ操作コマンドが送られることとなる。そして、上述したようにシーケンス番号取得要求に対しては、ＤＭＢＳ９４０に代わって、シーケンス管理部９１４が処理を行う。
【００８９】
図１３は、シーケンス処理の判別ルールの例を示している。Ｎｏ．１及びＮｏ．２は、シーケンス名に対応するシーケンス番号を取得する命令である。これらは、シーケンス番号取得要求を行う単独のコマンドであるため、シーケンス管理部９１４にシーケンス番号取得要求を送ればよい。そして、これらのＤＢ操作コマンドは、ＤＭＢＳ９４０に送らないようにする。
【００９０】
図１３のＮｏ．３及びＮｏ．４のコマンドは、ＩＮＳＥＲＴ文であり、レコードを追加しつつ、データを追加する処理の中で、シーケンス番号取得要求を組み込んだものである。このようなシーケンス番号取得要求を組み込んだＤＢ操作コマンドは、シーケンス番号取得要求部分だけを、シーケンス管理部９１４が生成したシーケンス番号で置き換えて、ＤＢ操作コマンドを修正した後にＤＭＢＳ９４０に送ることが必要である。このようにすることによって、修正されたＤＢ操作コマンドを受け取ったＤＭＢＳ９４０に、シーケンス番号取得要求の部分の処理をおこなわせないことができる。
【００９１】
上記以外のＤＢ操作コマンドについては、シーケンス処理とは関係のないＤＢ操作コマンドであると認識させる。
【００９２】
図１４は、ＤＢ操作コマンド解析・分離部９１２の入力と出力の例を示している。そして、シーケンス処理が組み込まれていない場合を示している。検査対象アプリケーションプログラム９３０から表１４１０のＤＢ操作コマンドが入力された。この一連のＤＢ操作コマンドのうち、Ｎｏ３のＤＢ操作コマンド「ＳＥＬＥＣＴ  注文Ｎｏ．ＮＥＸＴＶＡＬ  ＡＳ  ＳＥＱ＿ＮＥＸＴＶＡＬ  ＦＲＯＭ  ＤＵＡＬ」は、注文Ｎｏ．のシーケンス番号の次の値を要求するものである。このＤＢ操作コマンドは、シーケンス番号取得要求が組み込まれたコマンドではないため、テーブル１４３０の出力２に示すように、ＤＢ操作コマンド置換部９１６には、送らなくてよい。その代わり、テーブル１４２０に示すように、シーケンス番号取得要求として出力１「注文Ｎｏ．ＮＥＸＴＶＡＬ」をシーケンス管理部９１４に送り、シーケンス番号を生成させ、出力させる。また、表１４３０の「組込み」の欄にＮＯを追加する。ＮＯの意味は、ＤＢ操作コマンド置換部において、置換処理が不要であることを意味する。ＮＯの代わりに、ブランクとしておいてもよい。
【００９３】
図１５は、ＤＢ操作コマンド解析・分離部９１２の別の入力と出力の例を示しており、シーケンス番号取得要求が、ＤＢ操作コマンドに組み込まれている場合の例を示している。表１５１０のＮｏ．３のコマンドは、「ＩＮＳＥＲＴ  ＩＮＴＯ  商品テーブル  （注文Ｎｏ，顧客名，商品コード，数量）  ＶＡＬＵＥＳ  （注文Ｎｏ．ＮＥＸＴＶＡＬ，富士次郎，Ｉｔｅｍ２，２０）」となっており、ＩＮＳＥＲＴ分の中に、「注文Ｎｏ．ＮＥＸＴＶＡＬ」という、シーケンス番号取得要求が組み込まれている。この場合には、表１５２０に示すように、出力１としてシーケンス番号取得要求「注文Ｎｏ．ＮＥＸＴＶＡＬ」をシーケンス管理部９１４に送り、シーケンス番号を生成させる。そして、表１５３０に示すように出力２として、ＤＢ操作コマンドの「組込み」欄にＹＥＳをマーキングして、出力２をＤＢ操作コマンド置換部に送る。ここで、「ＹＥＳ」をマーキングする意味は、ＤＢ操作コマンド置換部において、該当するＤＢ操作コマンド内のシーケンス番号取得要求を、シーケンス管理部９１４からのシーケンス番号で置換するための目印として利用する。なお、以上のような「ＹＥＳ」「Ｎｏ」のマーキングは、一例であり、ＤＢ操作コマンド置換部での置換処理が行える処理であれば、どのような処理であってもよいことはいうまでもない。
【００９４】
図１６は、ＤＢ操作コマンド置換部９１６のフローを示している。
【００９５】
ステップ１６１０において、ＤＢ操作コマンド解析・分離部９１２から、ＤＢ操作コマンドを取得する。
【００９６】
ステップ１６２０において、ＤＢ操作コマンドにシーケンス番号取得要求が組み込まれているか（シーケンス処理が組み込みか）否かが判断される。この判断がＹｅｓであれば、ステップ１６３０に進む。また、この判断がＮｏであれば、ステップ１６５０に進む。この判断は、図１６及び図１７において示した実施形態の場合には、「組込み」の欄に「ＹＥＳ」が付されているか否かをチェックすることにより行うことができる。
【００９７】
ステップ１６３０において、組み込まれたシーケンス番号取得要求に対応するシーケンス番号を、シーケンス管理部９１４から取得する。
【００９８】
ステップ１６４０において、取得したＤＢ操作コマンドに組み込まれたシーケンス番号取得要求の部分を、シーケンス番号で置き換える。
【００９９】
ステップ１６５０において、取得したＤＢ操作コマンドを、ＤＭＢＳ９４０に伝達する。
【０１００】
以上の操作によって、シーケンス番号取得要求を含まないＤＢ操作コマンドがＤＭＢＳ９４０に送られることが保証される。
【０１０１】
図１７は、ＤＢ操作コマンド置換部９１６の入力と出力の例を示している。これは、図１５で示した例を用いている。表１７１０に示されているように、入力のうち、Ｎｏ．３のコマンドは、「ＩＮＳＥＲＴ  ＩＮＴＯ  商品テーブル  （注文Ｎｏ，顧客名，商品コード，数量）  ＶＡＬＵＥＳ  （注文Ｎｏ．ＮＥＸＴＶＡＬ，富士次郎，Ｉｔｅｍ２，２０）」となっており、シーケンス番号取得要求が組み込まれている。このため、表１７２０のＮｏ．３に示されるように、この中の「注文Ｎｏ．ＮＥＸＴＶＡＬ」を、シーケンス管理部７１４から出力されたシーケンス番号「２」で置換し、「ＩＮＳＥＲＴ  ＩＮＴＯ  商品テーブル  （注文Ｎｏ，顧客名，商品コード，数量）  ＶＡＬＵＥＳ  （２，富士次郎，Ｉｔｅｍ２，２０）」とする。この操作によって、ＤＭＢＳ９４０には、シーケンス番号取得要求の組み込まれていないＩＮＳＥＲＴ文が送られることになる。
【０１０２】
図１８は、シーケンス管理部９１４のデータ構造を示している。シーケンス管理部９１４は、シーケンス状態データ１８１０と、シーケンス状態スタックデータ１８２０とを有する。
【０１０３】
図１９に、シーケンス状態データの例を示す。
【０１０４】
シーケンス状態データ１９１０は、現時点における複数のシーケンス名（例えば、「注文Ｎｏ」「商品Ｎｏ」）の状態を示している。各シーケンス名の「現在値」及び「次値」が示されている。これらは、動的に変化して行く。「初期値」「増分」及び「最大値」は、シーケンス番号の定義の際に指定された値である。具体的な定義コマンドは、図６に示したとおりである。
【０１０５】
図２０は、シーケンス状態スタックデータの例を示す。図１９のシーケンスデータを、状態管理部９５４からの状態ＩＤと関連付けてスタック状にメモリに記憶して行く。たとえば、表２０１０は、状態ＩＤ＝「状態２」である場合のスタックデータを示している。状態を保存する場合には、新たなデータをプッシュする。バックトラックが指示された場合には、シーケンス・バックトラック部９２０により、シーケンス状態スタックデータが、必要な回数だけポップされる。そして、トップの位置にあるシーケンス状態スタックデータが、バックトラック後におけるシーケンス状態となる。
【０１０６】
図２１は、シーケンス管理部９１４の初期化フローを示している。
【０１０７】
ステップ２１１０において、シーケンス生成用のＤＢ操作コマンドを受け取る。このコマンドの例は、図６に示されている。
【０１０８】
ステップ２１２０においてシーケンス管理９１４の管理データスタックを生成し、１番目のデータをＰｕｓｈする。現在のシーケンス状態が、状態ＩＤとともにシーケンススタックデータのＴｏｐに置かれる。
【０１０９】
図２２は、シーケンス管理部９１４の動作フローを示している。
【０１１０】
ステップ２２１０において、シーケンス番号取得要求か否かが判断される。この判断がＹｅｓであれば、ステップ２２２０に進む。この判断がＮｏであれば、ステップ２２７０に進む。
【０１１１】
ステップ２２２０において、シーケンス番号取得要求を受け取る。
【０１１２】
ステップ２２３０において、シーケンス番号取得要求の対象シーケンス名を特定する。シーケンスには、例えば図２０においては、「注文Ｎｏ」と「商品Ｎｏ」の２つが存在する。このステップにおいて、シーケンス名が特定される。
【０１１３】
ステップ２２４０において、シーケンス番号取得要求が次値を要求しているか否かが判断される。シーケンス番号取得要求には、現在値を要求する場合と次値を要求する場合の２つが存在するため、このステップにおいて、このいずれであるかを特定する。この判断がＹｅｓであれば、ステップ２２５０に進む。この判断がＮｏであればステップ２２６０に進む。
【０１１４】
ステップ２２５０において、次値が要求されているため、シーケンス状態データから、当該シーケンスの増分に従って、現在値と次値を更新する。
【０１１５】
ステップ２２６０において、シーケンス番号を出力する。
【０１１６】
ステップ２２７０において、シーケンス状態スタックデータの更新要求か否かが判断される。判断がＹｅｓの場合には、ステップ２２８０に進む。判断がＮｏである場合には、終了する。
【０１１７】
ステップ２２８０において、このステップでは、状態の保存が要求されている場合であるため、プログラム・モデル検査装置９５０から状態ＩＤを取得する。
【０１１８】
ステップ２２９０において、シーケンス状態スタックデータに、状態ＩＤと
シーケンス状態データをまとめて、Ｐｕｓｈする。
【０１１９】
図２３は、シーケンス管理部９１４の管理データの変化の例を示している。
【０１２０】
まず、シーケンス管理部９１４の表２３１０はシーケンス状態を示しており、表２３２０は、シーケンス状態スタックデータを示している。この状態において、プログラム・モデル検査装置９５０から、シーケンス状態スタックデータの更新が指示されたと仮定する。この場合には、新たな状態ＩＤとして「状態２」が、プログラム・モデル検査装置９５０から提供される。そして、シーケンス状態スタックデータが、表２３４０に示すように、状態２のエントリをプッシュして、更新される。このようにして、各々の状態ＩＤと関連させてシーケンス状態がプッシュされる形で保存されて行く。
【０１２１】
図２４は、シーケンス・バックトラック部９２０のフローを示している。
【０１２２】
ステップ２４１０において、バックトラックすべき状態を取得し、バックトラック状態とする。
【０１２３】
ステップ２４２０において、シーケンス状態スタックデータに対して、バックトラック状態まで、スタックをＰｏｐする。このＰｏｐ動作によって、適切なシーケンススタックデータがトップの位置に置かれることとなる。
【０１２４】
ステップ２４３０において、シーケンス状態スタックデータのＴｏｐから、シーケンス情報を取得して、シーケンス状態データとする。この操作によって、シーケンス状態は、バックトラックされ、シーケンス番号が逆戻りすることとなる。
【０１２５】
図２５は、シーケンス・バックトラックの例を示している。
【０１２６】
シーケンス・バックトラック部９２０は、バックトラックすべき状態ＩＤまで、シーケンス管理部９１４のシーケンス状態スタックデータに対して、スタックをＰｏｐする処理を行う。この図の例の場合には、状態１までバックトラックすることが示されている。したがって、シーケンス管理部９１４のシーケンス状態スタックデータのＴｏｐに状態１が来るよう、Ｐｏｐの操作がなされる。この状態が、表２５２０に示されている。
【０１２７】
図２６は、操作シナリオの例を示している。シナリオには、シナリオＮｏが付されており。しなりおＮｏ１を終了した後、順次次のシナリオを実行して行く。シナリオに基づいて、ドライバ９５３が、検査対象アプリケーションプログラム９３０を操作する。例えば、シナリオＮｏ１が終了すると、次にシナリオＮｏ２の実行が行われる。その際、シナリオＮｏ２は、最初の（１）注文１から開始するのではなく、シナリオＮｏ１の状態を（１）注文１の終了時点までバックトラックする。そして、ドライバは、シナリオ２の（４）検索の操作をアプリケーションプログラム９３０に対して行う。バックトラックの手法として、深さ優先探索法によって状態探索を用いてもよい。
【０１２８】
図２７は、操作と状態遷移の例を示す。図２６のシナリオを実行した結果を木構造で示している。例えば、（５）注文２によって状態２（２７５４）まで進んだ後、初期状態（２７５０）までバックトラックが行われる。そして（６）注文２の操作が行われる。この場合、状態２においては、表２７１４に示されるように注文Ｎｏは、「２」まで増加しているが、状態３においては、表２７１６に示されるように、注文Ｎｏは、「１」となっており、本実施形態により、シーケンス番号のバックトラックが適切に行われていることが分かる。
【０１２９】
図２８は、シーケンス・バックトラック不能による不具合の例を示す。これは、例えば、図９におけるＤＢシーケンス・バックトラック制御装置９００を用いずに、ＤＢ接続切換部９４１を用いて、検査対象アプリケーションプログラム９３０を直接ＤＢＭＳ９４０に接続した場合の例を示している。図２８の各々の注文Ｎｏは、ＤＭＢＳ９４０のシーケンス番号取得要求を用いているために、シーケンス番号のバックトラックが正常に行われていない。したがって、注文Ｎｏが、バックトラックできずに増加してしまっていることが分かる。シーケンスのバックトラックが出来ないと、注文処理ごとに注文Ｎｏシーケンスが増えてしまう。このため、以下のような不具合が発生する。
（１）現状の注文Ｎｏの値によって注文数を算出するロジックがあった場合、注文数が間違ってしまう。
（２）成功すべき検索が失敗してしまい、探索すべき状態に到達できない。
（３）本来同じであるべき状態が、別の状態となってしまう。
【０１３０】
図２９は、一実施形態のハードウエア構成を示している。ハードウエアには、ＣＰＵ２９０２、メモリ２９０４、動的メモリ２９０６、媒体２９０９を読み書きするドライブ２９０８、通信インターフェース２９１０、表示装置２９１３等に画像信号を送るビデオインターフェース２９１２、Ｉ／Ｏインターフェース２９１４、Ｉ／Ｏとしてのキーボード２９１６、マウス２９１８、プリンタ２９２０が含まれる。
【０１３１】
ＣＰＵ２９０２は、メモリ２９０４や動的メモリ２９０６に格納されている上記説明したプログラム・モデル検査のための種々のプログラムを実行する。
【０１３２】
また、プログラムに係る本発明は、機械読み取り可能な記録媒体に格納されてもよい。機械読み取り可能な記録媒体には、磁気記録媒体、光ディスク、光磁気記録媒体、半導体メモリなどがある。磁気記録媒体には、ＨＤＤ、フレキシブルディスク（ＦＤ）、磁気テープ（ＭＴ）などがある。光ディスクには、ＤＶＤ（Ｄｉｇｉｔａｌ  Ｖｅｒｓａｔｉｌｅ  Ｄｉｓｃ）、ＤＶＤ−ＲＡＭ、ＣＤ−ＲＯＭ（Ｃｏｍｐａｃｔ  Ｄｉｓｃ−Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）、ＣＤ−Ｒ（Ｒｅｃｏｒｄａｂｌｅ）／ＲＷ（ＲｅＷｒｉｔａｂｌｅ）などがある。また、光磁気記録媒体には、ＭＯ（Ｍａｇｎｅｔｏ−Ｏｐｔｉｃａｌ  ｄｉｓｋ）などがある。
【０１３３】
以上の複数の実施形態に関し、更に以下の付記を開示する。
（付記１）
プログラム・モデル検査装置用のＤＢシーケンス・バックトラック制御プログラムであって、
アプリケーションプログラムからのＤＢ操作コマンドのシーケンス番号取得要求に応答して、ＤＢＭＳに代わってシーケンス番号を出力することによって前記シーケンス番号取得要求の存在しないＤＢ操作コマンドを前記ＤＢＭＳに伝達すると共に前記シーケンス番号の状態の履歴を前記アプリケーションプログラムの状態と対応付けて記憶部に記憶し、
前記プログラム・モデル検査装置により指定されたアプリケーションプログラムの状態まで戻すバックトラック要求に応答して、前記記憶部に記憶された前記シーケンス番号の状態の履歴に基づいて、前記シーケンス番号の状態を、前記指定されたアプリケーションプログラムの状態と対応する状態までバックトラックさせる、
処理をコンピュータに実行させることを特徴とするプログラム。
（付記２）
前記記憶部に記憶する処理は、
アプリケーションプログラムからのＤＢ操作コマンドを、シーケンス番号取得要求に係るＤＢ操作コマンドと、その他のＤＢ操作コマンドとに分離し、前記シーケンス番号取得要求に係るＤＢ操作コマンドから、シーケンス番号取得要求を抽出し、
前記抽出されたシーケンス番号取得要求に応答して、ＤＢＭＳに代わって前記シーケンス番号を出力することによりシーケンス番号の状態の履歴をアプリケーションプログラムの状態と対応付けて記憶部に保存し、
前記シーケンス番号取得要求に係るＤＢ操作コマンドのうち、シーケンス番号取得要求が組み込まれたＤＢ操作コマンドの中の前記組み込まれたシーケンス番号取得要求を、前記出力されたシーケンス番号に置換したＤＢ操作コマンドと、前記その他のＤＢ操作コマンドと、を前記ＤＢＭＳに伝達する、
処理を有することを特徴とする付記２記載のプログラム。
（付記３）
プログラム・モデル検査装置用のＤＢシーケンス・バックトラック制御方法であって、
アプリケーションプログラムからのＤＢ操作コマンドのシーケンス番号取得要求に応答して、ＤＢＭＳに代わってシーケンス番号を出力することによって前記シーケンス番号取得要求の存在しないＤＢ操作コマンドを前記ＤＢＭＳに伝達すると共に前記シーケンス番号の状態の履歴を前記アプリケーションプログラムの状態と対応付けて記憶部に記憶し、
前記プログラム・モデル検査装置により指定されたアプリケーションプログラムの状態まで戻すバックトラック要求に応答して、前記記憶部に記憶された前記シーケンス番号の状態の履歴に基づいて、前記シーケンス番号の状態を、前記指定されたアプリケーションプログラムの状態と対応する状態までバックトラックさせる、
ことを特徴とする方法。
（付記４）
前記記憶部に記憶する処理は、
アプリケーションプログラムからのＤＢ操作コマンドを、シーケンス番号取得要求に係るＤＢ操作コマンドと、その他のＤＢ操作コマンドとに分離し、前記シーケンス番号取得要求に係るＤＢ操作コマンドから、シーケンス番号取得要求を抽出し、
前記抽出されたシーケンス番号取得要求に応答して、ＤＢＭＳに代わって前記シーケンス番号を出力することによりシーケンス番号の状態の履歴をアプリケーションプログラムの状態と対応付けて記憶部に保存し、
前記シーケンス番号取得要求に係るＤＢ操作コマンドのうち、シーケンス番号取得要求が組み込まれたＤＢ操作コマンドの中の前記組み込まれたシーケンス番号取得要求を、前記出力されたシーケンス番号に置換したＤＢ操作コマンドと、前記その他のＤＢ操作コマンドと、を前記ＤＢＭＳに伝達する、
処理を有することを特徴とする付記３記載の方法。
（付記５）
プログラム・モデル検査装置用のＤＢシーケンス・バックトラック制御装置であって、
アプリケーションプログラムからのＤＢ操作コマンドのシーケンス番号取得要求に応答して、ＤＢＭＳに代わってシーケンス番号を出力することによって前記シーケンス番号取得要求の存在しないＤＢ操作コマンドを前記ＤＢＭＳに伝達すると共に前記シーケンス番号の状態の履歴を前記アプリケーションプログラムの状態と対応付けて記憶部に記憶する、シーケンス番号処理部と、
前記プログラム・モデル検査装置により指定されたアプリケーションプログラムの状態まで戻すバックトラック要求に応答して、前記記憶部に記憶された前記シーケンス番号の状態の履歴に基づいて、前記シーケンス番号の状態を、前記指定されたアプリケーションプログラムの状態と対応する状態までバックトラックさせる、シーケンス・バックトラック部と、
を有することを特徴とする装置。
（付記６）
前記シーケンス番号処理部は、
アプリケーションプログラムからのＤＢ操作コマンドを、シーケンス番号取得要求に係るＤＢ操作コマンドと、その他のＤＢ操作コマンドとに分離し、前記シーケンス番号取得要求に係るＤＢ操作コマンドから、シーケンス番号取得要求を抽出する、ＤＢ操作コマンド解析・分離部と、
前記抽出されたシーケンス番号取得要求に応答して、ＤＢＭＳに代わって前記シーケンス番号を出力することによりシーケンス番号の状態の履歴をアプリケーションプログラムの状態と対応付けて記憶部に保存する、シーケンス管理部と、
前記シーケンス番号取得要求に係るＤＢ操作コマンドのうち、シーケンス番号取得要求が組み込まれたＤＢ操作コマンドの中の前記組み込まれたシーケンス番号取得要求を、前記出力されたシーケンス番号に置換したＤＢ操作コマンドと、前記その他のＤＢ操作コマンドと、を前記ＤＢＭＳに伝達する、ＤＢ操作コマンド置換部と、
を有することを特徴とする付記５記載の装置。
【符号の説明】
【０１３４】
９００  ＤＢシーケンス・バックトラック制御装置
９１０  シーケンス番号処理部
９１２  ＤＢ操作コマンド解析・分離部
９１４  シーケンス管理部
９１６  ＤＢ操作コマンド置換部
９２０  シーケンス・バックトラック部
９３０  検査対象アプリケーションプロクラム
９４０  ＤＢＭＳ
９５０  ＤＢＭＳを利用するプログラム・モデル検査装置
【図１】
0005708260.tif 000002
【図２】
0005708260.tif 000003
【図３】
0005708260.tif 000004
【図４】
0005708260.tif 000005
【図５】
0005708260.tif 000006
【図６】
0005708260.tif 000007
【図７】
0005708260.tif 000008
【図８】
0005708260.tif 000009
【図９】
0005708260.tif 000010
【図１０Ａ】
0005708260.tif 000011
【図１０Ｂ】
0005708260.tif 000012
【図１１】
0005708260.tif 000013
【図１２】
0005708260.tif 000014
【図１３】
0005708260.tif 000015
【図１４】
0005708260.tif 000016
【図１５】
0005708260.tif 000017
【図１６】
0005708260.tif 000018
【図１７】
0005708260.tif 000019
【図１８】
0005708260.tif 000020
【図１９】
0005708260.tif 000021
【図２０】
0005708260.tif 000022
【図２１】
0005708260.tif 000023
【図２２】
0005708260.tif 000024
【図２３】
0005708260.tif 000025
【図２４】
0005708260.tif 000026
【図２５】
0005708260.tif 000027
【図２６】
0005708260.tif 000028
【図２７】
0005708260.tif 000029
【図２８】
0005708260.tif 000030
【図２９】
0005708260.tif 000031