以下、図面を参照して本発明の実施の形態に係る状態遷移表生成装置を説明する。
[第1の実施の形態]
図1は、第1の実施の形態にかかる状態遷移表生成装置及び、この状態遷移表生成装置によって出力される状態遷移表を用いたモデル検査の流れを示した図である。
モデル検査の実施を行うユーザ(或いはオペレータなど、以下同じ)は、まず入出力順序系列仕様を用意する。ここで、「入出力順序系列仕様」とは、時系列の順序形式で記述された仕様書をいい、例えばフローチャートなどである。
ユーザは入出力順序系列仕様10を状態遷移表生成装置11に入力する。状態遷移表生成装置11は、入出力順序系列仕様10のデータを状態遷移表生成処理方法によって処理し、その処理結果として状態遷移表12を生成し、出力する。
ユーザは状態遷移表12に基づいて検査用コード13を作成するとともに、検査式14を作成する。ユーザは検査用コード13及び検査式14をモデル検査器15に入力する。
モデル検査器15はモデル検査処理を実行し、反例16を出力する。ユーザは反例を解析することにより、問題点を発見し、検査用コード13を修正し、この修正済みの検査用コード13をモデル検査器15によってさらに検査し、問題点をつぶすように、検査用コード13の改善を行う。
図2は、状態遷移表生成装置11の構成例を示す機能ブロック図である。なお、図2に示した各構成要素は、状態遷移表生成装置11を機能ごとのまとまりとしてとらえた要素であって、実際の状態遷移表生成装置11が各構成様相に相当するハードウエア(回路、モジュール、ユニットなど)を備えていることを必要とすることを示すものではない。
状態遷移表生成装置11は、例えばコンピュータ、ワークステーションなどの情報処理装置によって実現される装置である。この情報処理装置は、演算処理装置(CPU)、主メモリ(RAM)、読出し専用メモリ(ROM)、入出力装置(I/O)、及び必要な場合にはハードディスク装置等の外部記憶装置を具備している装置である。
状態遷移表生成装置11は、入出力順序系列仕様記憶部21と、本実施の形態のだ第の生成手段に相当する状態定義レコード表生成部22と、本実施の形態の第1の生成手段に相当する状態遷移表生成部23と、イベント/アクション定義レコード表生成部24とを有する。入出力順序系列仕様記憶部21は状態定義レコード表生成部22に接続されており、状態定義レコード表生成部22は状態遷移表生成部23に接続されており、イベント/アクション定義レコード表生成部24は状態遷移表生成部23に接続されている。ここで「接続されている」とは、データ、情報、命令などの授受が可能な状態になっていることをいい、配線で連結されているような物理的な接続に限られる意味ではない。
入出力順序系列仕様記憶部21は、ユーザによって入力された入出力順序系列仕様を記憶する機能を有する。入出力順序系列仕様は状態定義レコード表生成部22が読み取り可能な形式、フォーマットなどであればどのようなデータとして保存されていてもよい。
状態定義レコード表生成部22は、入出力順序系列仕様を表すデータを入出力順序系列仕様記憶部21から受信し、後述する状態定義レコード表生成処理を実行することにより状態定義レコード表を表すデータを生成し、出力する機能を有する。
状態遷移表生成部23は、状態定義レコード表生成部22から状態定義レコード生成部22から状態定義レコード表を表すデータを受信し、後述する状態遷移表生成処理を実行することにより、状態遷移表を表すデータを生成し、出力する機能を有する。
イベント/アクション定義レコード表生成部24は、入出力順序系列仕様に含まれるイベント、アクションに付したラベル(符号)と、当該ラベルの内容を示す文や単語とを対応付けしたデータであるイベント/アクション定義レコード表を生成し、記憶する機能を有する。
[状態定義レコード表生成処理]
以下に、図3A,図3Bを参照しながら状態定義レコード表生成処理の例を説明する。図3Aは、状態定義レコード表生成処理の例を示したフローチャート、図3Bは図3Aに続くフローチャートである。なお、本説明においては、入出力順序系列仕様10はフローチャートであるものとして説明する。
まず、状態定義レコード表生成部22は、フローチャートの条件分岐、処理の各要素にそれぞれイベントとアクションの番号付けをする(S10)。すなわち、条件分岐処理にはイベントの番号付けをし、アクション(通常処理)にはアクションの番号付けを行う。
次に、状態定義レコード表生成部22は、状態定義レコード表を生成する。状態定義レコード表は、一つのアクション実行パス状態について一つのレコードを有し、各レコードは「イベント」、「前イベント」、「アクション系列」という3つのフィールドを有する情報である。状態定義レコード表生成部22は、フローチャートの最初の要素である「Start」を読み取ると、アクション実行パス状態欄に「State0」を格納し、且つそのイベント欄にイベント名「Start」と格納したレコードを状態定義レコード表に加える(S20)。
次に、状態定義レコード表生成部22は、「終了(End)」以外の全ての要素を読み込み済みで且つ状態定義済みか否かを判定する(S30)。「終了(End)」以外の全ての要素を読み込み済みである場合には、状態定義レコード表生成部22は現在の状態数を含む状態名をアクション実行パス状態欄に格納し、且つイベント欄に「End」を格納した新たな状態定義レコードを生成し、状態定義レコード表に追加する(S110)。
次に、状態定義レコード表生成部22は、登録した或いは登録済みイベントの前イベントに、前記2つのレコードの直前に状態を定義したレコードのイベントを登録する(S120)。
一方、「終了(End)」以外の全ての要素を読み込み済みでない場合(S30、No)、状態定義レコード表生成部22は、フローチャートの連結部分から一要素を読み取る(S40)。
次に、状態定義レコード表生成部22は、読み取った要素が条件分岐か否かを判定する(S50)。その要素が条件分岐ではないと判定した場合(S50,No)、状態定義レコード表生成部22は、その要素(処理)を当該条件のイベントに対するアクションとして、読み取った要素の要素番号(ラベルともいう)を状態定義レコード表に登録する(S60)。その後、先に述べたステップS30に戻り、処理を続行する。
一方、ステップS50においてその要素が条件分岐であると判定した場合(S50,Yes)、状態定義レコード表生成部22は、当該条件分岐によって生じる状態を定義する状態名を状態定義レコード表に登録する(S70)。ここで「状態」とは、アクション実行パスであって、ある条件分岐から次の条件分岐に至るまでのフローチャート上の経路(パス)に相当する。本例では状態名は「State[状態レコード数]」というフォーマットで記述するものとする。
なお、本例では、上記経路を状態として扱っているが、条件分岐ごと状態として扱っても実施可能である。この場合経路は状態の区別に関係しない。
次に、状態定義レコード表生成部22は、その条件分岐がイベントとして状態定義レコード表に登録済みであるか否かを判定する(S80)。その条件分岐がイベントとして状態定義レコード表に登録済みではないと判定した場合(S80、No)、状態定義レコード表生成部22は、状態定義レコード表に新たに状態定義レコードを2つ作成し、その条件分岐の「TRUE」に対応するイベントを一方のレコードのイベント欄に登録し、他方のレコードにその条件分岐の「FALSE」に対応するイベントを登録する(S90)。
次に、状態定義レコード表生成部22は、登録した或いは登録済みイベントの前イベントに、前記2つのレコードの直前に状態を定義したレコードのイベントを登録する(S100)。その後ステップS30に戻り、処理を続行する。
一方、ステップS80においてその条件分岐がイベントとして状態定義レコード表に登録済みであると判定した場合(S80,Yes)、状態定義レコード表生成部22は、ステップS90を行うこと無く、ステップS100を実行する。
以上で状態定義レコード表生成処理の説明を終了する。
[具体例]
上記状態定義レコード表生成処理の具体例を示す。図4は、本具体例において上記状態定義レコード表の元となる入出力順序系列仕様10であるフローチャート(「処理対象フローチャート」と呼ぶ)である。図5は、図4の処理対象フローチャートから生成された状態定義レコード表の例を示した図である。以下、図3、図4、図5を参照しながら状態定義レコード表生成処理の具体例を説明する。
処理対象フローチャートの内容は以下の通りである。まず、初めに第1の条件分岐であるステップS101がある。条件分岐ステップS101の「True」に対応するアクションであるステップS102があり、ステップS102に続く別のアクションであるステップS102がある。また、条件分岐ステップS101の「False」に対応するアクションはステップS103である。
ステップS103に続いて第2の条件分岐であるステップS104がある。条件分岐ステップS104の「True」に対応するアクションとしてアクションであるステップS105があり、ステップS105の後この処理対象フローチャートの処理は「End」に到達する。また、第2の条件分岐のステップS104の「False」に対応するのは、「End」となる。
さて、この処理対象フローチャートに基づいて状態定義レコード表の作成処理を行う。まず、状態定義レコード表生成部22は、フローチャートの条件分岐、処理の各要素にそれぞれイベントとアクションの番号付けをする(図3、S10)。具体的には、第1の条件分岐S101にはイベント番号「E1」を付与し、第2の条件分岐S104にはイベント番号「E2」を付与する。また、アクションS102、S103、S104にはそれぞれアクション番号「A1」、「A2」、「A3」を付与する。
次に、状態定義レコード表生成部22は、状態定義レコード表を生成し、当該状態定義レコード表の第1のレコードとして、アクション実行パス状態欄に[State0]が格納され、イベント欄に[Start]が格納されたレコードを加える(図3、S20)。
次に、状態定義レコード表生成部22は、「終了(End)」以外の全ての要素を読み込み済みで且つ状態定義済みか否かを判定する(図3、S30)。この具体例では、まだいずれの要素も読み込んでいないので、判定は「No」としてステップS40に移行する。
次に、状態定義レコード表生成部22は、処理対象フローチャートの連結部分から一要素を読み取る(図3、S40)。この例では処理対象フローチャートの要素「Start」を読み込む。
次に、状態定義レコード表生成部22は、読み取った要素が条件分岐か否かを判定する(図3、S50)。この例では要素「Start」は条件分岐ではないと判定される(図3、S50、No)。
次に、状態定義レコード表生成部22は、その要素(処理)を当該条件のイベントに対するアクションとして、読み取った要素の要素番号を状態定義レコード表に登録する(図3、S60)。具体的には、図5に示した状態定義レコード表の第1行の「アクション実行パス状態」欄に「State0」と記述し、同第1行の「イベント」欄に読み取った要素の要素番号である「Start」を記述する。
次に、状態定義レコード表生成部22は、ステップS30の判定後、処理対象フローチャートの連結部分から次の一要素を読み取る(図3、S40)。この例では処理対象フローチャートの要素「E1」を読み込む。
次に、状態定義レコード表生成部22は、読み取った要素が条件分岐か否かを判定する。この例では要素「E1」は条件分岐であると判定される(図3、S50、Yes)。
次に、状態定義レコード表生成部22は、当該条件分岐によって生じる状態を定義する状態名を決定する(図3、S70)。この例では、状態定義レコード表生成部22は、条件分岐「E1」の「True」における経路(E1からA1,A2を経由してE2に至る経路)を状態名「State1」と定め、また条件分岐「E1」の「False」における経路(E1からA2を経由してE2に至る経路)を状態名「State2」と定める。
次に、状態定義レコード表生成部22は、その条件分岐がイベントとして状態定義レコード表に登録済みであるか否かを判定する(図3、S80)。この例では、条件分岐「E1」は未だ状態定義レコード表に登録済みではないと判定し(図3、S80、No)、ステップS90に移行する。
ステップS90において、状態定義レコード表生成部22は、状態定義レコード表に新たに状態定義レコードを2つ作成し、その条件分岐の「True」に対応するイベントを一方のレコードのイベント欄に登録し、他方のレコードにその条件分岐の「False」に対応するイベントを登録する。この例では、状態定義レコード表生成部22は、図5の状態定義レコード表において、第2行と第3行を作成し、第2行の「アクション実行パス状態」欄に「State1」を記述するとともに「イベント」欄に「E1[True]」を記述する。またさらに状態定義レコード表生成部22は、第3行の「アクション実行パス状態」欄に「State2」と記述するとともに「イベント」欄に「E1[False]」を記述する。
次に、状態定義レコード表生成部22は、登録した或いは登録済みイベントの前イベントに、前記2つのレコードの直前に状態を定義したレコードのイベントを登録する(図3、S100)。この例では、状態定義レコード表生成部22は、直前に登録したイベントである「E1[True]」(第2行)、「E1[False]」(第3行)に対応する「前イベント」欄に、直前に状態を定義したレコード(第1行)の「イベント」欄に記述されたイベント「Start」を記述する。
次に、状態定義レコード表生成部22は、ステップS30に戻りその後ステップS40において、要素「E1」の次の要素「A1」を読み取る(図3、S40)。
次に、状態定義レコード表生成部22は、読み取った要素が条件分岐か否かを判定する。この例では要素「A1」は条件分岐ではないと判定される(図3、S50、No)。
次に、状態定義レコード表生成部22は、その要素(処理)を当該条件のイベントに対するアクションとして、読み取った要素の要素番号を状態定義レコード表に登録する(図3、S60)。具体的には、図5に示した状態定義レコード表の第2行の「アクション系列」欄に「A1」と記述する。
次に、状態定義レコード表生成部22は、ステップS30に戻りその後ステップS40において、要素「A1」の次の要素「A2」を読み取る(図3、S40)。
次に、状態定義レコード表生成部22は、読み取った要素が条件分岐か否かを判定する(図3、S50)。この例では要素「A2」は条件分岐ではないと判定される(図3、S50、No)。
次に、状態定義レコード表生成部22は、その要素(処理)を当該条件のイベントに対するアクションとして、読み取った要素の要素番号を状態定義レコード表に登録する(図3、S60)。具体的には、図5に示した状態定義レコード表の第2行の「アクション系列」欄に「A2」を追加するように記述する。
次に、状態定義レコード表生成部22は、ステップS30に戻りその後ステップS40において、処理対象フローチャートにおける要素「A2」の次の要素「E2」を読み取る(図3、S40)。
次に、状態定義レコード表生成部22は、読み取った要素が条件分岐か否かを判定する(図3、S50)。この例では要素「E2」は条件分岐であると判定される(図3、S50、Yes)。
次に、状態定義レコード表生成部22は、当該条件分岐によって生じる状態を定義する状態名を決定する(S70)。この例では、状態定義レコード表生成部22は、条件分岐「E2」の「True」における経路(E2からA3を経由してEndに至る経路)を状態名「State3」と定め、また条件分岐「E2」の「False」における経路(E2からEndに至る経路)を状態名「State4」と定める。
次に、状態定義レコード表生成部22は、その条件分岐がイベントとして状態定義レコード表に登録済みであるか否かを判定する(図3、S80)。この例では、条件分岐「E2」は未だ状態定義レコード表に登録済みではないと判定し(図3、S80、No)、ステップS90に移行する。
ステップS90において、状態定義レコード表生成部22は、図5に示す状態定義レコード表に新たに状態定義レコードを2つ追加し、その条件分岐の「True」に対応するイベントを一方のレコードのイベント欄に登録し、他方のレコードにその条件分岐の「False」に対応するイベントを登録する。この例では、状態定義レコード表生成部22は、状態定義レコード表に第4行と第5行を作成し、第4行の「アクション実行パス状態」欄に「State3」を記述するとともに「イベント」欄に「E2[True]」を記述する。またさらに状態定義レコード表生成部22は、第5行の「アクション実行パス状態」欄に「State4」と記述するとともに「イベント」欄に「E2[False]」を記述する。
次に、状態定義レコード表生成部22は、登録した或いは登録済みイベントの前イベントに、前記2つのレコードの直前に状態を定義したレコードのイベントを登録する(図3、S100)。この例では、状態定義レコード表生成部22は、第4行及び第5行の登録の直前に登録したレコード(第2行、第3行に相当するレコード)のイベント欄に記述された「E1[True]」(第2行)及び「E1[False]」(第3行)を第4行、第5行の「前イベント」欄に記述する。
次に、状態定義レコード表生成部22は、ステップS30に戻りその後ステップS40において、要素「E2」の次の要素「A3」を読み取る(図3、S40)。
次に、状態定義レコード表生成部22は、読み取った要素が条件分岐か否かを判定する(図3、S50)。この例では要素「A3」は条件分岐ではないと判定される(S50、No)。
次に、状態定義レコード表生成部22は、その要素(処理)を当該条件のイベントに対するアクションとして、読み取った要素の要素番号を状態定義レコード表に登録する(図3、S60)。具体的には、図5に示した状態定義レコード表の第4行の「アクション系列」欄に「A3」を記述する。
次に、状態定義レコード表生成部22は、ステップS30に戻り終了(End)以外の全ての要素を読み込み済みか否かを判定する(S30)。この例では、状態定義レコード表生成部22は、終了(End)以外の全ての要素を読み込み済みであると判定し(S30、Yes)、図3BのステップS110に進む。
ステップS110において、状態定義レコード表生成部22は現在の状態数を含む状態名をアクション実行パス状態欄に格納し、且つイベント欄に「End」を格納した新たな状態定義レコードを生成し、状態定義レコード表に追加する(S110)。この例では、第6行のレコードに相当する。
次に、状態定義レコード表生成部22は、登録した或いは登録済みイベントの前イベントに、前記2つのレコードの直前に状態を定義したレコードのイベントを登録する(S120)。この例では、状態定義レコード表生成部22は、第6行の登録の直前に登録したレコード(第4行、第5行に相当するレコード)のイベント欄に記述された「E2[True]」(第4行)及び「E2[False]」(第5行)を第6行の「前イベント」欄に記述する。図4に示したフローチャートに基づく状態定義レコード表が完成する。
以上で、状態定義レコード表生成処理の説明を終了する。
[状態遷移表生成処理]
次に、状態定義レコード表から状態遷移表を生成する処理である、状態遷移表生成処理について説明する。図6は、状態遷移表生成処理の一例を示したフローチャートである。以下、このフローチャートを参照しながら状態遷移表生成処理について説明する。
状態定義レコード表生成部22によって生成された状態定義レコード表を取得した状態遷移表生成部23は、状態定義レコード表の「アクション実行パス状態」欄に記述された内容を、状態遷移表の各行のインデックスとして状態遷移表に記述し、且つ状態定義レコード表の「イベント」欄に記述された内容を各列のインデックスとして状態遷移表に記述する(S201)。
次に、状態遷移表生成部23は、状態定義レコード表の最初の状態定義レコード(状態定義レコード表の第1行に相当する)を読み込む(S202)
次に、状態遷移表生成部23は、取得した状態定義レコード表の全ての状態定義レコードを読み終えたか否かを判定する(S203)。全ての状態定義レコードを読み終えたと判定した場合(S203、Yes)、状態遷移表生成部23は、状態遷移表の空いているセルの全てに空欄であることを示す所定の情報、例えば記号「/」(スラッシュ)を書き込む(ステップS211)。このステップS211終了後、状態遷移表生成部23は状態遷移表生成処理を終了する。一方、ステップS203において全ての状態定義レコードを読み終えていないと判定した場合(S203、No)、状態遷移表生成部23は、現在処理している状態定義レコード(以下、「処理対象レコード」と呼ぶ)の「アクション実行パス状態」欄に記述されている情報が「State0」でないか否かを判定する(S204)。
ステップS204において処理対象レコードの「アクション実行パス状態」欄の記述が「State0」であると判定した場合(S204、No)、状態遷移表生成部23は次の状態定義レコードを処理対象レコードとする(S205)。その後ステップS203に戻る。
一方、ステップS204において処理対象レコードの「アクション実行パス状態」が「State0」でないと判定した場合(S204、Yes)、状態遷移表生成部23は処理対象レコードを読み取る(S206)。
状態遷移表生成部23はS206において読み取った処理対象レコードの「前イベント」欄に何らかのイベントが記述されているか否かを判定する(S207)。ステップS207において、「前イベント」欄に何のイベントも記述されていないと判定した場合(S207、No)、状態遷移表生成部23は、前イベントに対するアクション実行パス状態を「State0」に決定する(S208)。この「State0」は後述する「処理対象セル」を決定するための情報として用いられる。
ステップS208実行後、状態遷移表生成部23は、状態定義レコード表から、前イベントに対するアクション実行パス状態を有する状態定義レコード群を抽出する(S209)。より具体的には、状態遷移表生成部23は、状態定義レコード表の全ての状態定義レコードのうち、処理対象レコードの「前イベント」欄に記載されたイベントと同一のイベントを「イベント」欄に有する状態定義レコードを全て抽出する。この抽出された行を抽出レコードと呼ぶこととする。また、処理対象レコードにおいて「前イベント」欄に記載が無い場合は、状態遷移表における「Init」行を、処理対象セルを定めるための行とする。
次に、状態遷移表生成部23は、前イベントに対するアクション実行パス状態群に対するイベントの状態遷移先として、イベントに対するアクション実行パス状態を定義する(S210)。より具体的には、状態遷移表生成部23は、状態遷移表において、処理対象レコードにおける「前イベント」に記述されたイベントを「イベント」欄に有する状態定義レコードの「アクション実行パス状態」欄に記載されたアクション実行パス状態に一致するインデックスを有する行と、処理対象レコードの「イベント」欄に記載されたイベントに一致するインデックスを有する列との交点となるセル(処理対象セルと呼ぶ)の状態欄に、処理対象レコードの「アクション実行パス状態」欄に記載されているアクション実行パス状態を書き込む。また、処理対象レコードの「アクション系列」欄にアクションの記述があれば、そのアクションを上記処理対象セルのアクション欄に書き込む。
ステップS210終了後、状態遷移表生成部23はステップS205に戻る。
一方、前述のステップS207において、「前イベント」欄にイベントが記述されていると判定した場合(S207、Yes)、状態遷移表生成部23は直ちにステップS209に進む。
以上で、状態遷移表作成処理の説明を終了する。
[状態遷移表作成処理の具体例]
次に、上述した状態遷移表作成処理について、具体例を挙げて説明する。図7は、本実施の形態の状態定義レコード表生成部22が生成した状態定義レコード表の一例を示す図であり、図17は図7に示した状態定義レコード表に基づいて、本実施の形態の状態遷移表生成部23が生成した状態遷移表の例を示す図である。また、図8から図16は図17に示した状態遷移表を完成させる過程を示した図である。以下、状態遷移表作成処理によりどのように図7に示した状態定義レコード表から図17に示した状態遷移表が生成されるかを図6から図17を参照しながら説明する。
状態定義レコード表生成部22によって生成された状態定義レコード表を取得した状態遷移表生成部23は、図7の状態定義レコード表の「アクション実行パス状態」欄(最左列の各セル)に記述された内容である「State0」、「State1」、「State2」、「State3」、「State4」、「State5」及びこれらに加えて「Init」を、状態遷移表の最左列の各セルに記述し、また状態定義レコード表の「イベント」欄(左端から2番目の列の各セル)に記述された内容である「Start」、「E1[true]」、「E1[false]」、「E2[true]」、「E2[false]」、「End」を状態遷移表の最上行の各セルに各列のインデックスとして記述する(図6、S201参照)。
次に、状態遷移表生成部23は、状態定義レコード表の第1行の状態定義レコードを読む(図6、S202)。第1行の状態定義レコードはこの時点での「処理対象レコード」となる。図8は、状態とイベントがインデックスとして記述される前の状態遷移表の例を示した図、図9は図8の状態遷移表に状態とイベントがインデックスとして記述された状態を示した図である。
次に、状態遷移表生成部23は、状態定義レコード表の全ての状態定義レコードを読み終えたか否かを判定する(図6、S203)。本具体例では、状態遷移表生成部23は全ての行を読み終えていないと判定する(図6、S203、No)。
次に状態遷移表生成部23は処理対象レコードの「アクション実行パス状態」のセルに記述されている情報が「State0」でないか否かを判定する(図6、S204)。本具体例では、状態遷移表生成部23はステップS203において処理対象レコードにおける「アクション実行パス状態」欄のセルに記述された情報は「State0」であると判定し、ステップS205に進む(S204、No)。ここで、状態遷移表生成部23はアクション実行パス状態に「Init」が記載された行と、処理対象レコードの「イベント」欄に記載されたイベント「Start」に一致するインデックスを有する列との交点となるセル(処理対象セルと呼ぶ)の状態欄に、処理対象レコードの「アクション実行パス状態」欄に記載されているアクション実行パス状態「State0」を書き込む。 図10に、図9の状態の後上記処理で「State0」が書き込まれた状態の状態遷移表の例を示す。
[状態定義レコード表、第2行の処理]
ステップS205では、状態遷移表生成部23は状態定義レコード表の次のレコードを処理対象レコードにする(図6、S205)。本具体例では、図7の状態定義レコード表の第2行、「アクション実行パス状態」欄のセルが「State1」である状態定義レコードが新たな処理対象レコードに決定される。
次に、状態遷移表生成部23は、取得した状態定義レコード表の全ての行(レコード)を読み終えたか否かを判定する(図6、S203)。本具体例では、状態遷移表生成部23は全ての行を読み終えていないと判定する(図6、S203、No)。
次に状態遷移表生成部23は状態定義レコード表の処理対象レコードの「アクション実行パス状態」のセルに記述されている情報が「State0」でないか否かを判定する(図6、S203)。本具体例では、処理対象レコードの「アクション実行パス状態」のセルは「State1」であるので、ステップS206に進む。ステップS206において、状態遷移表生成部23は処理対象レコードを読む。本具体例では、状態定義レコード表の第2行、「アクション実行パス状態」欄のセルが「State1」である状態定義レコードが読み取られる。
次に、状態遷移表生成部23は、処理対象レコードにおける「前イベント」欄に記述されたイベントがあるか否かを判定する(図6、S207)。本具体例では、状態定義レコード表の第2行の「前イベント」欄には、イベント「Start」の記述があるので、ステップS209へと進む。
状態遷移表生成部23は、状態定義レコード表から、前イベントに対するアクション実行パス状態を有する状態定義レコード群を抽出する(図6、S209)。抽出されたレコード群を「抽出レコード群」と呼ぶこととする。本具体例では、状態定義レコード表においてイベント「Start」が「イベント」欄に記述されている状態定義レコードが抽出され、抽出レコード群は第1行の状態定義レコードのみである。
次に、状態遷移表生成部23は、状態遷移表において、抽出レコード群の「アクション実行パス状態」欄に記載されたアクション実行パス状態に一致するインデックスを有する行と、処理対象レコードの「イベント」欄に記載されたイベントに一致するインデックスを有する列との交点となるセル(処理対象セルと呼ぶ)の状態欄に、処理対象レコードの「アクション実行パス状態」欄に記載されているアクション実行パス状態を書き込む(図6、S210)のであるが、抽出レコードである第1行の「アクション実行パス状態」欄に記載されているアクション実行パス状態は「State0」である。また、処理対象レコードの「イベント」欄に記載されたイベントは「E1[True]」である。よって、状態遷移表における処理対象セルは、「State0」をインデックスとする第2行と、「E1[True]」をインデックスとする左端から第2列との交点であるセルに決定される。状態遷移表生成部23はこの処理対象セルの状態欄(セル内上側)に、処理対象レコードの「アクション実行パス状態」欄に記載されているアクション実行パス状態「State1」を書き込む。さらに状態遷移表生成部23は処理対象セルのアクション欄(セル内下側)に、処理対象レコードの「アクション系列」欄に記述されているアクション「A1,A2」を上記処理対象セルのアクション欄(セル内下側)に書き込む(図6、S210参照)。状態「State1」及びアクション「A1,A2」が処理対象セルに書き込まれた状態の状態遷移表の例を図11に示す。
[状態定義レコード表、第3行の処理]
次に状態遷移表生成部23はステップS205に進み、状態定義レコード表の次のレコードを処理対象レコードにする(図6、S205)。本具体例では、図5の状態定義レコード表の第3行、「アクション実行パス状態」欄のセルが「State2」である状態定義レコードが新たな処理対象レコードに決定される。
次に、状態遷移表生成部23は、取得した状態定義レコード表の全ての行(レコード)を読み終えたか否かを判定する(図6、S203)。本具体例では、状態遷移表生成部23は全ての行を読み終えていないと判定する(S203、No)。
次に状態遷移表生成部23は状態定義レコード表の処理対象レコード「アクション実行パス状態」のセルに記述されている情報が「State0」でないか否かを判定する(図6、S203)。本具体例では、処理対象レコードの「アクション実行パス状態」欄の記述は「State2」であるので、ステップS206に進む。ステップS206において、状態遷移表生成部23は処理対象レコードを読む。本具体例では、状態定義レコード表の第3行、「アクション実行パス状態」欄のセルが「State2」である状態定義レコードが読み取られる。
次に、状態遷移表生成部23は、処理対象レコードにおける「前イベント」欄に記述されたイベントがあるか否かを判定する(S207)。本具体例では、状態定義レコード表の第3行の「前イベント」欄には、イベント「Start」の記述があるので、ステップS209へと進む。
状態遷移表生成部23は、状態定義レコード表から、前イベントに対するアクション実行パス状態を有する状態定義レコード群を抽出する(図6、S209)。本具体例では、状態定義レコード表においてイベント「Start」が「イベント」欄に記述されている状態定義レコードが抽出レコード群として抽出され、抽出レコード群は第1行の状態定義レコードのみである。
次に、状態遷移表生成部23は、状態遷移表において、抽出レコード群の「アクション実行パス状態」欄に記載されたアクション実行パス状態に一致するインデックスを有する行と、処理対象レコードの「イベント」欄に記載されたイベントに一致するインデックスを有する列との交点となる処理対象セルの状態欄に、処理対象レコードの「アクション実行パス状態」欄に記載されているアクション実行パス状態を書き込み、同処理対象セルのアクション欄に、処理対象レコードの「アクション系列」欄に記載されたアクションを記述する(S210参照)。本具体例では、抽出レコード群は状態定義レコード表の第1行のみであり、その第1行の「アクション実行パス状態」欄に記載されているアクション実行パス状態は「State0」である。また、処理対象レコードの「イベント」欄に記載されたイベントは「E1[False]」である。よって、状態遷移表における処理対象セルは、「State0」をインデックスとする第2行と、「E1[False]」をインデックスとする左端から第3列との交点であるセルに決定される。状態遷移表生成部23はこの処理対象セルの状態欄(セル内上側)に、処理対象レコードの「アクション実行パス状態」欄に記載されているアクション実行パス状態「State2」を書き込む。状態遷移表生成部23は処理対象セルのアクション欄(セル内下側)に、処理対象レコードの「アクション系列」欄に記述されているアクションを上記処理対象セルのアクション欄(セル内下側)に書き込むのであるが、処理対象レコード「アクション系列」欄は空欄であるので、上記処理対象セルのアクション欄は空欄のままとなる。(S210参照)。処理対象セルに上記「State2」が記述され、アクション欄は空欄のままとされた状態の状態遷移表の例を図12に示す。
[状態定義レコード表、第4行の処理]
次に状態遷移表生成部23はステップS205に進み、状態定義レコード表の次のレコードを処理対象レコードにする(図6、S205)。本具体例では、図5の状態定義レコード表の第4行、「アクション実行パス状態」欄のセルが「State3」である状態定義レコードが新たな処理対象レコードに決定される。
次に、状態遷移表生成部23は、取得した状態定義レコード表の全ての行(レコード)を読み終えたか否かを判定する(図6、S203参照)。本具体例では、状態遷移表生成部23は全ての行を読み終えていないと判定する(図6、S203、No)。
次に状態遷移表生成部23は処理対象レコード「アクション実行パス状態」のセルに記述されている情報が「State0」でないか否かを判定する(図6、S203)。本具体例では、処理対象レコードの「アクション実行パス状態」欄の記述は「State3」であるので、ステップS206に進む。ステップS206において、状態遷移表生成部23は処理対象レコードを読む。本具体例では、状態定義レコード表の第4行、「アクション実行パス状態」欄のセルが「State3」である状態定義レコードが読み取られる。
次に、状態遷移表生成部23は、処理対象レコードにおける「前イベント」欄に記述されたイベントがあるか否かを判定する(図6、S207)。本具体例では、状態定義レコード表の第4行の「前イベント」欄には、イベント「E1[True]」及び「E1[False]」の記述があるので、ステップS209へと進む。
状態遷移表生成部23は、状態定義レコード表から、前イベントに対するアクション実行パス状態を有する状態定義レコード群を抽出する(S209参照)。本具体例では、状態定義レコード表においてイベント「E1[True]」及び「E1[False]」が「イベント」欄に記述されている状態定義レコードが抽出され、抽出レコードは「E1[True]」について第2行の状態定義レコードのみ、「E1[False]」について第3行の状態定義レコードのみである。
次に、状態遷移表生成部23は、状態遷移表において、抽出レコード群の「アクション実行パス状態」欄に記載されたアクション実行パス状態に一致するインデックスを有する行と、処理対象レコードの「イベント」欄に記載されたイベントに一致するインデックスを有する列との交点となる処理対象セルの状態欄に、処理対象レコードの「アクション実行パス状態」欄に記載されているアクション実行パス状態を書き込み、同処理対象セルのアクション欄に、処理対象レコードの「アクション系列」欄に記載されたアクションを記述する(図6、S210参照)。
状態定義レコード表において「E1[True]」についての抽出レコード群は第2行のみであり、その第2行の「アクション実行パス状態」欄に記載されているアクション実行パス状態は「State1」である。また、処理対象レコードの「イベント」欄に記載されたイベントは「E2[True]」である。よって、状態遷移表における処理対象セルは、「State1」をインデックスとする第3行と、「E2[True]」をインデックスとする左端から第4列との交点であるセルに決定される。状態遷移表生成部23はこの処理対象セルの状態欄(セル内上側)に、処理対象レコードの「アクション実行パス状態」欄に記載されているアクション実行パス状態「State3」を書き込む。さらに状態遷移表生成部23は処理対象セルのアクション欄(セル内下側)に、処理対象レコードの「アクション系列」欄に記述されているアクションを上記処理対象セルのアクション欄(セル内下側)に書き込むのであるが、処理対象レコード「アクション系列」欄にはアクション「A3」が記述されているので、上記処理対象セルのアクション欄に「A3」を記述する。(S210参照)。
次に、もう一つのイベントである「E1[False]」についての抽出レコード群の処理に付いて述べる。状態定義レコード表において「E1[False]」についての抽出レコードは第3行のみであり、その第3行の「アクション実行パス状態」欄に記載されているアクション実行パス状態は「State2」である。また、処理対象レコードの「イベント」欄に記載されたイベントは「E2[True]」である。よって、状態遷移表における処理対象セルは、「State2」をインデックスとする第4行と、「E2[True]」をインデックスとする左端から第4列との交点であるセルに決定される。状態遷移表生成部23はこの処理対象セルの状態欄(セル内上側)に、処理対象レコードの「アクション実行パス状態」欄に記載されているアクション実行パス状態「State3」を書き込む。さらに状態遷移表生成部23は処理対象セルのアクション欄(セル内下側)に、処理対象レコードの「アクション系列」欄に記述されているアクションを上記処理対象セルのアクション欄(セル内下側)に書き込むのであるが、処理対象レコード「アクション系列」欄にはアクションが記述されていないので、上記処理対象セルのアクション欄には何も書き込まれない。(S210参照)。上記状態定義レコード表、第4行の処理が終了した時点の状態遷移表の状態を図13に示す。
[状態定義レコード表、第5行の処理]
次に状態遷移表生成部23はステップS205に進み、状態定義レコード表の次のレコードを処理対象レコードにする(図6、S205)。本具体例では、図5の状態定義レコード表の第5行、「アクション実行パス状態」欄のセルが「State4」である状態定義レコードが新たな処理対象レコードに決定される。
次に、状態遷移表生成部23は、状態定義レコード表の全ての行(レコード)を読み終えたか否かを判定する(図6、S203参照)。本具体例では、状態遷移表生成部23は全ての行を読み終えていないと判定する(図6、S203、No)。
次に状態遷移表生成部23は状態定義レコード表の処理対象レコード「アクション実行パス状態」のセルに記述されている情報が「State0」でないか否かを判定する(図6、S203)。本具体例では、処理対象レコードの「アクション実行パス状態」欄の記述は「State4」であるので、ステップS2066に進む。ステップS206において、状態遷移表生成部23は処理対象レコードを読む。本具体例では、状態定義レコード表の第5行、「アクション実行パス状態」欄のセルが「State4」である状態定義レコードが読み取られる。
次に、状態遷移表生成部23は、処理対象レコードにおける「前イベント」欄に記述されたイベントがあるか否かを判定する(S207)。本具体例では、状態定義レコード表の第5行の「前イベント」欄には、イベント「E1[True]」及び「E1[False]」の記述があるので、ステップS209へと進む(図6、S207、Yes)。
状態遷移表生成部23は、状態定義レコード表から、前イベントに対するアクション実行パス状態を有する状態定義レコード群を抽出する(S209参照)。本具体例では、状態定義レコード表においてイベント「E1[True]」及び「E1[False]」が「イベント」欄に記述されている状態定義レコードが抽出され、「E1[True]」についての抽出レコード群は第2行の状態定義レコードのみ、「E1[False]」についての抽出レコード群は第3行の状態定義レコードのみである。
次に、状態遷移表生成部23は、状態遷移表において、抽出レコードの「アクション実行パス状態」欄に記載されたアクション実行パス状態に一致するインデックスを有する行と、処理対象レコードの「イベント」欄に記載されたイベントに一致するインデックスを有する列との交点となる処理対象セルの状態欄に、処理対象レコードの「アクション実行パス状態」欄に記載されているアクション実行パス状態を書き込み、同処理対象セルのアクション欄に、処理対象レコードの「アクション系列」欄に記載されたアクションを記述する(図6、S210)。
状態定義レコード表において「E1[True]」についての抽出レコード群は第2行のみであり、その第2行の「アクション実行パス状態」欄に記載されているアクション実行パス状態は「State1」である。また、処理対象レコードの「イベント」欄に記載されたイベントは「E2[False]」である。よって、状態遷移表における処理対象セルは、「State1」をインデックスとする第3行と、「E2[False]」をインデックスとする左端から第5列との交点であるセルに決定される。状態遷移表生成部23はこの処理対象セルの状態欄(セル内上側)に、処理対象レコードの「アクション実行パス状態」欄に記載されているアクション実行パス状態「State4」を書き込む。さらに状態遷移表生成部23は処理対象セルのアクション欄(セル内下側)に、処理対象レコードの「アクション系列」欄に記述されているアクションを上記処理対象セルのアクション欄(セル内下側)に書き込むのであるが、処理対象レコード「アクション系列」欄には何も記述されていないので、上記処理対象セルのアクション欄は空欄のままとする。(図6、S210)。
次に、もう一つのイベントである「E1[False]」についての抽出レコードの処理について述べる。状態定義レコード表において「E1[False]」についての抽出レコード群は第3行のみであり、その第3行の「アクション実行パス状態」欄に記載されているアクション実行パス状態は「State2」である。また、処理対象レコードの「イベント」欄に記載されたイベントは「E2[False]」である。よって、状態遷移表における処理対象セルは、「State2」をインデックスとする第4行と、「E2[False]」をインデックスとする左端から第5列との交点であるセルに決定される。状態遷移表生成部23はこの処理対象セルの状態欄(セル内上側)に、処理対象レコードの「アクション実行パス状態」欄に記載されているアクション実行パス状態「State4」を書き込む。さらに状態遷移表生成部23は処理対象セルのアクション欄(セル内下側)に、処理対象レコードの「アクション系列」欄に記述されているアクションを上記処理対象セルのアクション欄(セル内下側)に書き込むのであるが、処理対象レコード「アクション系列」欄にはアクションが記述されていないので、上記処理対象セルのアクション欄は空欄のままとする。(図6、S210)。
上記状態定義レコード表、第5行の処理が終了した時点の状態遷移表の状態を図14に示す。
[状態定義レコード表、第6行の処理]
次に状態遷移表生成部23はステップS205に進み、状態定義レコード表の次のレコードを処理対象レコードにする(図6、S205)。本具体例では、図5の状態定義レコード表の最終行である第6行、「アクション実行パス状態」欄のセルが「State5」である状態定義レコードが新たな処理対象レコードに決定される。
次に、状態遷移表生成部23は、状態定義レコード表の全ての行(レコード)を読み終えたか否かを判定する(図6、S203参照)。本具体例では、状態遷移表生成部23は全ての行を読み終えていないと判定する(図6、S203、No)。
次に状態遷移表生成部23は状態定義レコード表の処理対象レコード「アクション実行パス状態」のセルに記述されている情報が「State0」でないか否かを判定する(図6、S203参照)。本具体例では、処理対象レコードの「アクション実行パス状態」欄の記述は「State5」であるので、ステップS206に進む。ステップS206において、状態遷移表生成部23は処理対象レコードを読む。本具体例では、状態定義レコード表の第3行、「アクション実行パス状態」欄のセルが「State5」である状態定義レコードが読み取られる。
次に、状態遷移表生成部23は、処理対象レコードにおける「前イベント」欄に記述されたイベントがあるか否かを判定する(図6、S207)。本具体例では、状態定義レコード表の第6行の「前イベント」欄には、イベント「E2[True]」及び「E2[False]」の記述があるので、ステップS209へと進む(図6、S207、Yes)。
状態遷移表生成部23は、状態定義レコード表から、前イベントに対するアクション実行パス状態を有する状態定義レコード群を抽出する(図6、S209)。本具体例では、状態定義レコード表においてイベント「E2[True]」及び「E2[False]」が「イベント」欄に記述されている状態定義レコードが抽出され、抽出レコード群は「E2[True]」について第4行の状態定義レコードのみ、「E2[False]」について第5行の状態定義レコードのみである。
次に、状態遷移表生成部23は、状態遷移表において、抽出レコードの「アクション実行パス状態」欄に記載されたアクション実行パス状態に一致するインデックスを有する行と、処理対象レコードの「イベント」欄に記載されたイベントに一致するインデックスを有する列との交点となる処理対象セルの状態欄に、処理対象レコードの「アクション実行パス状態」欄に記載されているアクション実行パス状態を書き込み、同処理対象セルのアクション欄に、処理対象レコードの「アクション系列」欄に記載されたアクションを記述する(図6、S210)。
状態定義レコード表において「E2[True]」についての抽出レコード群は第4行のみであり、その第4行の「アクション実行パス状態」欄に記載されているアクション実行パス状態は「State3」である。また、処理対象レコードの「イベント」欄に記載されたイベントは「End」である。よって、状態遷移表における処理対象セルは、「State3」をインデックスとする第5行と、「End」をインデックスとする左端から第6列との交点であるセルに決定される。状態遷移表生成部23はこの処理対象セルの状態欄(セル内上側)に、処理対象レコードの「アクション実行パス状態」欄に記載されているアクション実行パス状態「State5」を書き込む。さらに状態遷移表生成部23は処理対象セルのアクション欄(セル内下側)に、処理対象レコードの「アクション系列」欄に記述されているアクションを上記処理対象セルのアクション欄(セル内下側)に書き込むのであるが、処理対象レコード「アクション系列」欄には何も記述されていないので、上記処理対象セルのアクション欄は空欄のままとする。(図6、S210)。
次に、もう一つのイベントである「E2[False]」についての抽出レコード群の処理について述べる。状態定義レコード表において「E2[False]」についての抽出レコード群は第5行のみであり、その第5行の「アクション実行パス状態」欄に記載されているアクション実行パス状態は「State4」である。また、処理対象レコードの「イベント」欄に記載されたイベントは「End」である。よって、状態遷移表における処理対象セルは、「State4」をインデックスとする第6行と、「End」をインデックスとする左端から第6列との交点であるセルに決定される。状態遷移表生成部23はこの処理対象セルの状態欄(セル内上側)に、処理対象レコードの「アクション実行パス状態」欄に記載されているアクション実行パス状態「State5」を書き込む。さらに状態遷移表生成部23は処理対象セルのアクション欄(セル内下側)に、処理対象レコードの「アクション系列」欄に記述されているアクションを上記処理対象セルのアクション欄(セル内下側)に書き込むのであるが、処理対象レコード「アクション系列」欄にはアクションが記述されていないので、上記処理対象セルのアクション欄は空欄のままとする。(図6、S210)。
上記状態定義レコード表、第6行の処理が終了した時点の状態遷移表の状態を図15に示す。
[空欄処理]
次に状態遷移表生成部23はステップS205に進み、処理対象レコードを次の状態定義レコードとするが、状態定義レコード表は第6行以降の行が無いので、最終行到達と判定する。次に状態遷移表生成部23はステップS203に進み、状態定義レコードが終了したか否かを判定する(図6、S203)。ここで、状態遷移表生成部23は状態定義レコードが終了したと判定し(図6、S203、Yes)、ステップS211に進む。
ステップS211において、状態遷移表生成部23は状態遷移表の全ての空欄に、該当欄が空欄であることを示す情報として"/"を記述する。該当欄が空欄であることを示す情報が記述された状態の状態遷移表の例を図16に示す。図16に示す状態が完成した状態遷移表となる。
以上で、状態遷移表生成処理が終了し、図16に示した状態遷移表が完成する。
[実施例1]
次に、本実施の態様の別の実施例について説明する。図17は、本実施の態様にかかる状態遷移表生成装置に入力される入出力順序系列仕様であるフローチャートを示した図である。このフローチャートは、従業員食堂における代金精算システムの処理内容を示したフローチャートである。
状態遷移表生成装置は、図17のフローチャートを読み取ると、まず、状態定義レコード表生成処理(図3参照)を実行する。
図17のフローチャートはステップS301からステップS312までの12ステップで構成され、そのうち条件分岐はステップS303,ステップS305,ステップS308である。
状態遷移表生成装置、より詳しくは状態定義レコード表生成部は図17のフローチャートの各処理、S301、S302、S304、S306、S307、S309、S310、S311、S312にアクションとしてラベル付けを行い、A1,A2、A4,A5,A6,A8,A9,A3,A7とする。また、状態遷移表生成装置、より詳しくは状態定義レコード表生成部は、図17のフローチャートの各条件分岐S303、S305、S308のTrue(Yes側分岐に対応する)、False(No側分岐に対応する)をイベントとしてラベル付けを行い、それぞれをE1[True](S303、Yes)及びE1[False](S303、No)、E2[True](S305、Yes)及びE2[False](S305、No)、E3[True](S308、Yes)及びE3[False](S308、No)とする。
状態遷移表生成装置11、より詳しくは状態定義レコード表生成部22は状態定義レコード表生成処理(図3参照)を続行することにより、図18に示す状態定義レコード表を生成する。図18は、状態定義レコード表生成処理を実行することによって、図17のフローチャートから生成された状態定義レコード表の一例を示す図である。
状態遷移表生成装置11、より詳しくは状態遷移表生成部23は図18に示す状態定義レコード表を受信すると、これに基づいて状態遷移表生成処理(図6参照)を実行し、状態遷移表を生成し出力する。図19は、状態遷移表生成処理によって図18の状態定義レコードから生成された状態遷移表の例を示す。
[実施例1:追加機能]
状態遷移表生成装置11、より詳しくはイベント/アクション定義レコード生成部24は、各イベント並びにアクションに付したラベルと、各イベント並びにアクションの内容を対応付けして示した表である、「イベント/アクション定義レコード」を生成する。
図20は、図18に示したフローチャートから状態遷移表を生成する際に、状態遷移表生成装置、より詳しくは状態定義レコード表生成部によって生成される「イベント/アクション定義レコード」の一例を示した図である。
かかる「イベント/アクション定義レコード」を生成し、利用することによりユーザは状態遷移表の内容検証、検討などをより容易に行えるようになる。例えば、生成された状態遷移表を画面上に表示させた状態で、状態遷移表内のラベル(A1、など)の上にカーソルやポインタを置くと、「イベント/アクション定義レコード」が参照され、ポップアップウインドウが開いてその中に当該ラベルに対応する「意味」が表示されるような機能を実現することも可能となる。
[実施例2]
上述した例では、状態遷移表生成装置11の入力である入出力順序系列仕様としてフローチャートを利用する態様を説明したが、状態遷移表生成装置11が利用可能な入出力順序系列仕様は、フローチャートに限られず、例えば、プログラムのソースコードであってもかまわない。以下に、プログラムのソースコードを入出力順序系列仕様として扱う場合の状態遷移表生成装置11の動作例を説明する。
まず、状態遷移表生成装置11はソースコードに基づいて状態定義レコード表を生成する。これは図3に示した状態定義レコード生成処理を実行することによって行われる。但し、if文、while文が「条件分岐」として扱われ、その他の命令文は「処理」として扱われる。
状態遷移表生成装置11は、生成した状態定義レコード表に基づいて状態遷移表を生成する。この処理は図6に示す状態遷移表生成処理によって行われる。
図21は、状態遷移表生成装置11の入力となるソースコードの一例を示す図である。図22は、図21のソースコードにイベント及びアクションのラベルが付された状態を示す図である。図22に示したようにイベント及びアクションのラベルを付し、状態定義レコード表生成処理(図3参照)を実行した結果得られる状態定義レコード表の例を図23に示す。図23に示した状態定義レコード表に基づいて、状態遷移表生成処理(図6参照)を実行した結果得られる状態遷移表の例を図24に示す。すなわち、状態遷移表生成装置11は、図21に示したソースコードから図24に示す状態遷移表を生成することが可能である。
[まとめ]
本実施の態様によれば、状態遷移表等の事象-応答型の仕様を入力情報として検査コードを自動変換するモデル検査支援ツールに対して、フローチャート等の時系列の入力情報を扱うことができるようになる。
本実施の態様によれば、時系列の仕様の条件と処理を、状態遷移のイベント、条件、アクションに適切に対応させることで、状態遷移系に変換させても、条件に応じた処理のパスを理解容易にすることができる。
[第2の実施の形態]
次に、第2の実施の形態について説明する。第2の実施の形態は、条件分岐と処理にイベントとアクションのラベル付けを行う処理が、第1の実施の形態と異なる。より具体的には、第1の実施の形態では、イベントとアクションの組み合わせをアクション実行パス状態として定義するのに対して、第2の実施の形態ではイベントをアクション実行パスとする点で異なっている。
[装置の構成例]
第2の実施の形態にかかる状態遷移表生成装置11Aの構成例を図25に示す。状態遷移表生成装置11Aは、第1の実施の形態にかかる状態遷移表生成装置11の構成と基本的に同様であるが、状態定義レコード生成部22に代えて、状態定義レコード生成部22Aを有する点で異なっている。他の構成要素については同一の構成要素には同一の参照番号を付し、これら構成要素の詳細な説明は省略する。
[動作例]
次に、状態遷移表生成装置11Aの動作例を説明する。入出力順序系列仕様記憶部21、状態遷移表生成部23、イベント/アクション定義レコード生成部24のそれぞれは、第1の実施の形態における動作と同様なので、これらの動作の説明は省略する。以下に、状態定義レコード生成部22Aの動作を述べる。
図26と図27は、状態定義レコード生成部22Aの動作である状態定義レコード生成処理の一例を示すフローチャートであって、図27は、図26に続くフローチャートである。
図26と図27に示す状態定義レコード生成部22Aの動作である状態定義レコード生成処理は、図3A,図3Bに示す状態定義レコード生成部22の動作と基本的に同じ処理内容であるが、ステップS90Aにおいて異なっている。
ステップS90Aにおいて、状態定義レコード生成部22Aは同一の状態名(アクション実行パス状態を特定する情報)を有する状態定義レコードを2つ作成し、一方のレコードに当該条件分岐の「True」をそのイベント欄に登録し、他方のレコードのイベント欄に「False」を登録する。
その他の各ステップについては、第1の実施の形態にかかる図3A、図3Bに示したステップと同様なので、同一の処理内容を有するステップには同一の参照番号を付し、これらの詳細な説明は省略する。
第2の実施の形態における状態定義レコード生成処理によって状態定義レコードが生成される。この状態定義レコードから第1の実施の形態の状態遷移表生成処理(図6参照)と同様の処理によって、状態遷移表が生成されることになる。
第2の実施の形態において生成される状態遷移表は、第2の実施の形態のそれに比べて、アクション実行パス状態(状態定義レコード)の数を少なくすることができ、その結果最終的生成される状態遷移表もより簡素化されたものを生成することができ、ユーザの状態遷移表の使用の際の負担を軽減できる。
[具体例その1]
第2の実施の形態にかかる状態遷移表生成装置11Aの動作例の具体例を述べる。図28は、本具体例において上記状態定義レコード表の元となる入出力順序系列仕様10であるフローチャート(「処理対象フローチャート」と呼ぶ)である。図28は、前述した図4に示すフローチャートと同様であるので、このフローチャートの内容の説明は省略する。図29は、図28の処理対象フローチャートから生成された状態定義レコード表の例を示した図である。
まず、状態定義レコード表生成部22Aは、図28に示したフローチャートの条件分岐、処理の各要素にそれぞれイベントとアクションの番号付けをする(図26、S10)。具体的には、第1の条件分岐S101にはイベント番号「E1」を付与し、第2の条件分岐S104にはイベント番号「E2」を付与する。また、アクションS102、S103、S104にはそれぞれアクション番号「A1」、「A2」、「A3」を付与する。
次に、状態定義レコード表生成部22は、状態定義レコード表を生成し、フローチャートの最初の要素である「Start」を読み取ると、アクション実行パス状態欄に「State0」を格納し、且つそのイベント欄にイベント名「Start」と格納したレコードを状態定義レコード表に加える(図26、S20)。
次に、状態定義レコード表生成部22Aは、「終了(End)」以外の全ての要素を読み込み済みか否かを判定する(図26、S30)。この具体例では、全ての要素を読み込んでいないので、判定は「No」となりステップS40に移行する。
次に、状態定義レコード表生成部22Aは、ステップS30の判定後、処理対象フローチャートの連結部分から次の一要素を読み取る(図26、S40)。この例では処理対象フローチャートの要素「E1」を読み込む。
次に、状態定義レコード表生成部22は、読み取った要素が条件分岐か否かを判定する(図26、S50)。この例では要素「E1」は条件分岐であると判定される(図26、S50、Yes)。
次に、状態定義レコード表生成部22Aは、当該条件分岐によって生じる状態を定義する状態名を決定する(図26、S70)。この例では、状態定義レコード表生成部22は、条件分岐「E1」を状態名「State1」と定める。
次に、状態定義レコード表生成部22Aは、その条件分岐がイベントとして状態定義レコード表に登録済みであるか否かを判定する(図26、S80)。この例では、条件分岐「E1」は未だ状態定義レコード表に登録済みではないと判定し(図26、S80、No)、ステップS90Aに移行する。
ステップS90Aにおいて、状態定義レコード表生成部22Aは、状態定義レコード表に新たに状態定義レコードを2つ作成し、一方のレコードのイベント欄にその条件分岐の「True」を登録し、他方のレコードのイベント欄にその条件分岐の「False」を登録する。この例では、状態定義レコード表生成部22Aは、図29の状態定義レコード表において、第2行と第3行を作成し、第2行の「アクション実行パス状態」欄に状態名「State1」を記述するとともに「イベント」欄に「E1[True]」を記述する。またさらに状態定義レコード表生成部22は、第3行の「アクション実行パス状態」欄に状態名「State1」と記述するとともに「イベント」欄に「E1[False]」を記述する。
次に、状態定義レコード表生成部22Aは、登録した或いは登録済みイベントの前イベントに、前記2つのレコードの直前に状態を定義したレコードのイベントを登録する(図26、S100)。この例では、状態定義レコード表生成部22Aは、直前に登録したイベントである「E1[True]」(第2行)、「E1[False]」(第3行)に対応する「前イベント」欄に、直前に状態を定義したレコード(第1行)の「イベント」欄に記述されたイベント「Start」を記述する。
次に、状態定義レコード表生成部22Aは、ステップS30に戻りその後ステップS40において、要素「E1」の次の要素「A1」を読み取る(図26、S40)。
次に、状態定義レコード表生成部22Aは、読み取った要素が条件分岐か否かを判定する。この例では要素「A1」は条件分岐ではないと判定される(図26、S50、No)。
次に、状態定義レコード表生成部22Aは、その要素(処理)を当該条件のイベントに対するアクションとして、読み取った要素の要素番号を状態定義レコード表に登録する(図26、S60)。具体的には、図29に示した状態定義レコード表の第2行の「アクション系列」欄に「A1」と記述する。
次に、状態定義レコード表生成部22Aは、ステップS30に戻り、続くステップS40において、要素「A1」の次の要素「A2」を読み取る(図26、S40)。
次に、状態定義レコード表生成部22Aは、読み取った要素が条件分岐か否かを判定する(図26、S50)。この例では要素「A2」は条件分岐ではないと判定される(図26、S50、No)。
次に、状態定義レコード表生成部22Aは、その要素(処理)を当該条件のイベントに対するアクションとして、読み取った要素の要素番号を状態定義レコード表に登録する(図26、S60)。具体的には、図29に示した状態定義レコード表の第2行の「アクション系列」欄に「A2」を追加して記述する。
次に、状態定義レコード表生成部22Aは、ステップS30に戻りその後ステップS40において、処理対象フローチャートにおける要素「A2」の次の要素「E2」を読み取る(図26、S40)。
次に、状態定義レコード表生成部22Aは、読み取った要素が条件分岐か否かを判定する(図26、S50)。この例では要素「E2」は条件分岐であると判定される(図26、S50、Yes)。
次に、状態定義レコード表生成部22Aは、当該条件分岐によって生じる状態を定義する状態名を決定する(図26、S70)。この例では、状態定義レコード表生成部22Aは、条件分岐「E2」を状態名「State2」と定める。
次に、状態定義レコード表生成部22Aは、その条件分岐がイベントとして状態定義レコード表に登録済みであるか否かを判定する(図26、S80)。この例では、条件分岐「E2」は未だ状態定義レコード表に登録済みではないと判定し(図26、S80、No)、ステップS90Aに移行する。
ステップS90Aにおいて、状態定義レコード表生成部22Aは、状態定義レコード表に新たに状態定義レコードを2つ追加し、その条件分岐の「True」を一方のレコードのイベント欄に登録し、他方のレコードにその条件分岐の「False」を登録する。この例では、状態定義レコード表生成部22は、図29に示す状態定義レコード表に第4行と第5行を作成し、第4行の「アクション実行パス状態」欄に「State2」を記述するとともにその「イベント」欄に「E2[True]」を記述する。またさらに状態定義レコード表生成部22Aは、第5行の「アクション実行パス状態」欄に「State2」と記述するとともにその「イベント」欄に「E2[False]」を記述する。
次に、状態定義レコード表生成部22Aは、登録した或いは登録済みイベントの前イベントに、前記2つのレコードの直前に状態を定義したレコードのイベントを登録する(図26、S100)。この例では、状態定義レコード表生成部22Aは、第4行及び第5行の登録の直前に登録したレコード(第2行、第3行のレコード)のイベント欄に記述された「E1[True]」(第2行)及び「E1[False]」(第3行)を第4行、第5行の「前イベント」欄に記述する。
次に、状態定義レコード表生成部22Aは、ステップS30に戻りその後ステップS40において、要素「E2」の次の要素「A3」を読み取る(図26、S40)。
次に、状態定義レコード表生成部22Aは、読み取った要素が条件分岐か否かを判定する(図26、S50)。この例では要素「A3」は条件分岐ではないと判定される(図26、S50、No)。
次に、状態定義レコード表生成部22Aは、その要素(処理)を当該条件のイベントに対するアクションとして、読み取った要素の要素番号を状態定義レコード表に登録する(図26、S60)。具体的には、図29に示した状態定義レコード表の第4行の「アクション系列」欄に「A3」を記述する。
次に、状態定義レコード表生成部22Aは、ステップS30に戻り、終了(End)以外の全ての要素を読み込み済みか否かを判定する(図26、S30)。この例では、状態定義レコード表生成部22Aは、終了(End)以外の全ての要素を読み込み済みであると判定し(S30、Yes)、図27のステップS110に進む。
ステップS110において、状態定義レコード表生成部22Aは現在の状態数を含む状態名をアクション実行パス状態欄に格納し、且つイベント欄に「End」を格納した新たな状態定義レコードを生成し、状態定義レコード表に追加する(図27、S110)。図29の例では、第6行のレコードに相当する。
次に、状態定義レコード表生成部22Aは、登録した或いは登録済みイベントの前イベントに、前記2つのレコードの直前に状態を定義したレコードのイベントを登録する(図27、S120)。この例では、状態定義レコード表生成部22Aは、第6行の登録の直前に登録したレコード(第4行、第5行に相当するレコード)のイベント欄に記述された「E2[True]」(第4行)及び「E2[False]」(第5行)を第6行の「前イベント」欄に記述する。
以上で、図26に示したフローチャートの処理に基づいて、図29に示した状態定義レコード表が完成する。
[状態遷移表の生成]
次に、状態遷移表生成装置11A、より詳しくは状態遷移表生成部23は、図29に示した状態定義レコード表のデータを受信して、このデータを用いて、状態遷移表生成処理(図6参照)を実行し状態遷移表を生成する。状態遷移表生成処理の内容は第1の実施の形態と同様である。
図30に、図29に示した状態定義レコード表のデータから生成された状態遷移表の例を示す。
[実施例その2]
第2の実施の形態にかかる状態遷移表生成装置11Aの動作例の別の具体例を述べる。図31に示すIPアドレスの割り当て処理を状態遷移表生成装置11Aを用いて状態遷移表を生成する例を示す。
図31は、PC−1、PC−2、PC−3、PC−4からなるネットワークにおいて、IPアドレスの割り当てを行う処理の例を示したシーケンス図である。PC−3、PC−4はともにDHCPサーバとして機能する。
まず、PC−1が起動時にIPアドレスの有無を判定し、IPアドレスが割り当てられていない場合には、ネットワーク内の他の装置にDISCOVERメッセージをブロードキャストする(S3101、S3102、S3103)。
DISCOVERメッセージを受信したDHCPサーバであるPC−3、PC−4は、割り当てる候補となるIPアドレスが含まれているOFFERメッセージを送信する(S3104、S3105)。この例では、PC−3はIP1というIPアドレスを提示し、PC−4はIP2というIPアドレスを提示したものとする。
PC−3,PC−4のそれぞれからOFFERメッセージを受信したクライアントであるPC−1は、提示されたIPアドレスに問題がなければ、正式にサーバにIPを要求するREQUESTメッセージを送信する(S3106、S3107)。この例では、PC−1はIP1を選択して、REQUESTメッセージを送信した者とする。
IP1についてのREQUESTメッセージを受信したPC−3は自分が選択されたことを同じユーザーIPアドレスが返送されたことで確認して、問題なければ「PACK」パケットを返信し、問題あれば「PNAK」パケットを返信する(S3108)。
PACKを正常に受信したPC-1は、OFFERで指定されたユーザIPアドレスを自分のIPアドレスとして保存し、以降はこのIPアドレスで通信を行うように内部設定する。一方、「PNAK」が返信された時は、再度DISCOVERの送信を実行する(S3109)。
この実施の例では、上記のシーケンス図に示される処理のうち、クライアントであるPC−1の処理フローチャートと、DHCPサーバであるPC−3の処理フローチャートを、それぞれ入出力順序系列仕様10として用意し、それぞれの入出力順序系列仕様10から状態遷移表生成装置11Aに状態遷移表を生成させる。
[クライアント側]
図32は、クライアントであるPC−1の処理フローチャートの例を示す図である。このフローチャートに対応するデータ等を入出力順序系列仕様10から状態遷移表生成装置11Aに入力する。図33は、状態名(アクション実行パス状態)が付された図32のフローチャートを示す。図34は、図32のフローチャート(入出力順序系列仕様10)から状態遷移表生成装置11Aが生成した状態遷移表を状態遷移図に示した図である。
[DHCPサーバ側]
図35は、DHCPサーバであるPC−3の処理フローチャートの例を示す図である。このフローチャートに対応するデータ等を入出力順序系列仕様10から状態遷移表生成装置11Aに入力する。図36は、状態名(アクション実行パス状態)が付された図35のフローチャートを示す。分岐条件E1,E2,E3,E4について、それぞれ状態名(アクション実行パス状態)State1, State2, State3, State4が付与され、これら状態名ごとに状態定義レコード表のレコードが生成されることとなる。図37は、図35のフローチャート(入出力順序系列仕様10)から状態遷移表生成装置11Aが生成した状態遷移表を状態遷移図に示した図である。
なお、本実施の形態の変形として、条件分岐が連続している場合(図36、E2〜E3)は、これを一つの条件分岐として扱い、一つの状態として状態遷移表の生成を行うようにしてもよい。この例に上記変形を適用すると、条件分岐であるE2〜E4は、一つの状態「State2」として処理される。
[その他]
以上、本発明の実施の形態を説明したが、本発明はこれらに限定されるものではなく、発明の趣旨を逸脱しない範囲内において、種々の変更、追加、組み合わせ等が可能である。
変形例として、状態遷移表生成装置11は、状態定義レコード生成部22と状態定義レコード生成部22Aとをともに有しており、ユーザの指定により一方を選択して、状態定義レコード表の生成、それに基づく状態遷移表の生成を行わせるように変形することもできる。