(57)【要約】【課題】状態遷移表を用いた制御を行うプログラムにおいて、状態遷移表より生成したソースの可読性を確保しつつ、状態遷移表の静的／動的変更によるコールバック関数のミスコールを防止する手法を提供する。【解決手段】事象解析マネージャ，発生事象格納手段，現在状態格納手段，コールバック関数名称ポインタ解決手段，状態遷移表格納／管理手段，状態遷移制御マネージャ，コールバック関数実行手段，コールバック関数作用入出力手段，状態遷移表，遷移記述単位現在値記憶手段を具備し、状態遷移表中に記述されている文字列としてのコールバック関数名称を、対応するコールバック関数のポインタに変換するコールバック関数名称ポインタ解決手段を利用して実行すべきコールバック関数を決定する。【選択図】　図１
2004094837.tif 000002
【特許請求の範囲】
【請求項１】
事象及び状態の組み合わせにより処理を選択する状態遷移表に基づき制御を行う状態遷移制御方法において、
現在状態及び発生事象により決定される処理方法を記述したコールバック関数を選択する際、
現在状態及び発生事象から実行するコールバック関数の状態遷移表に記述した関数名称の文字列を求め、
この関数名称の文字列から、実行する関数のアドレスを求めて、該関数のアドレスに実行を移し、
該関数の実行が終了した際の戻り値を用いて、状態遷移表に基づく次の遷移状態を求めて現在状態を更新することを特徴とする状態遷移制御方法。
【請求項２】
上記請求項１の状態遷移制御方法において、状態遷移表は、状態遷移の動作を特徴づける状態遷移動作記述部を備え、状態遷移動作記述部のうち１つの状態と１つの事象を指定することで決定される１組の状態遷移表記述内容を遷移記述単位とし、遷移記述単位が１つあるいは複数のセルからなり、少なくともコールバック関数を記述するセルを有し、
コールバック関数を記述するセルに記述されたコールバック関数名に基づき、文字列としてのコールバック関数名称と、原始コード中の識別子としてのコールバック関数を対応付けることにより、状態遷移制御を実行することを特徴とする状態遷移制御方法。
【請求項３】
上記請求項２に記載の状態遷移制御方法において、状態遷移表記述単位は更に、注釈を入力するセルと遷移状態を入力するセルを有することを特徴とする状態遷移制御方法。
【請求項４】
上記請求項２に記載の状態遷移制御方法において、前記状態遷移表に含まれる事象名を列挙した事象定義ファイル、及び前記状態遷移表に含まれる状態を列挙した状態定義ファイル及び少なくとも一方を生成し、状態遷移表と状態遷移表からの生成ファイル内容との整合性を確保する状態遷移制御方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、状態遷移を用いた制御を行うプログラムに係り、特に状態遷移表に記述したコールバック関数の原始コード（ソースコード，元プログラム）への反映方法とプログラム実行時に呼び出すべきコールバック関数の選択方法の改良に関する。
【０００２】
【従来の技術】
一般に内部状態をもつプログラムの制御構造は、状態遷移表を用いて定義する場合が多い。このとき、状態遷移表に忠実な動作を行うために、何らかの方法で状態遷移表に定義している動作を実現する仕組みが必要である。
【０００３】
従来の状態遷移表を用いた制御構造の構築では、状態遷移表における列番号及び行番号等から機械的に生成されるコールバック関数名を用いるか、あるいは、コールバック関数を列挙したコールテーブルを用いてコールバック関数を呼び出す構造をとっていた。このような例として、特開平８−１９０４７６号公報や特開平１１−２８２６５８号公報に記載の技術がある。
【０００４】
状態遷移表定義の動作を実現させるための１つの方法としては、状態遷移表中にコールバック関数名ではなくコールバック関数の処理内容を直接記述し、状態遷移表の列と行から機械的にコールバック関数名称を生成するものがある。このような例として、「最新状態遷移表設計手法とデザインフェーズでのシミュレーション」（渡辺政彦，ＣＱ出版社刊，Ｉｎｔｅｒｆａｃｅ　，１９９９年２月号，ｐ１６９〜１７５）が挙げられる。状態遷移表定義の動作を実現させるもう１つの方法は、状態遷移表中にコールバック関数名のみを記述し、状態遷移表の記述順に従ったコールテーブル（コールバック関数へのポインタの配列）を作成するものである。
【０００５】
【発明が解決しようとする課題】
状態遷移表の列と行から機械的にコールバック関数名称を生成する場合、生成後のソースコード中のコールバック関数名称からその動作を類推することが非常に難しくなりソースコードの可読性が低下する問題があった。
【０００６】
状態遷移表の記述順に従ったコールテーブルを作成する場合、コールテーブル生成時と状態遷移実行時で、状態遷移表が変更された場合、誤ったコールバック関数をコールするエラーを防止できないという問題があった。
【０００７】
【課題を解決するための手段】
上記課題を解決するため、本発明では、状態遷移表中にコールバック関数名を記述し、かつ状態遷移表中の“文字列”としてのコールバック関数名と、ソースコード中の“識別子”としてのコールバック関数名とを結合させ、状態遷移実行時にコールバック関数をその“文字列”としての名称でコールする手段を備える。本手段によりソースコードの可読性を確保しつつ、コールバック関数のミスコールを防止する。
【０００８】
【発明の実施の形態】
図１に本発明を用いた実施例の構成を示す。状態遷移制御マネージャ０１６０は、全体動作の制御を行う。事象解析マネージャ０１１０は、状態遷移制御の対象となるプログラムの動作に伴い発生する事象の解析を行い、事象の解析結果を発生事象格納手段０１２０に格納する。現在状態格納手段０１３０は、状態遷移制御の対象となるプログラムの現在の状態を保持する。コールバック関数名称ポインタ解決手段０１４０は、文字列として与えられたコールバック関数の名称から、対応するコールバック関数のポインタを返す機能を提供する。
【０００９】
状態遷移表格納／管理手段０１５０は、現在の状態値と発生した事象から、状態遷移表中で対応する１組の状態遷移表記述内容を返す機能を提供する。以下では、状態遷移表において１つの状態と１つの事象を指定することにより決定されるこの１組の状態遷移表記述内容を、遷移記述単位と呼ぶ。コールバック関数実行手段０１７０は、ポインタとして与えられたコールバック関数をコールすることにより、コールバック関数の実行を行う。コールバック関数作用入出力手段
０１８０は、コールバック関数の実行により発生する入出力の動作を提供する。状態遷移表０１９０はファイル等に格納された状態遷移表である。遷移記述単位現在値記憶手段０１１００は、現在の遷移記述単位の内容を格納する。
【００１０】
次に図１の動作について説明する。まず初期化に際し、状態遷移表格納／管理手段０１５０には状態遷移表０１９０の情報が読み込まれているとする。更に現在状態格納手段０１３０には初期状態値が入力されているとする。ここで、状態遷移制御の対象となるプログラムの動作に伴い発生した事象が、事象解析マネージャ０１１０により解析され、発生事象格納手段０１２０に格納される。図１で外界とは、状態遷移を制御する部分を除いた状態遷移制御の対象となるプログラムである。状態遷移制御の部分以外は、同一のプログラムのプロセスであっても、入出力ハードウェアであってもここでは“外界”と表記する。なお、事象の発生源は状態遷移制御マネージャ０１６０自身も含める。状態遷移制御マネージャ０１６０は、発生事象格納手段０１２０に事象が格納されている場合、その事象と現在状態格納手段０１３０から得た状態値を元に、状態遷移表格納／管理手段０１５０から遷移記述単位を取得する。取得した遷移記述単位は、遷移記述単位現在値記憶手段０１１００に格納する。
【００１１】
次に、遷移記述単位現在値記憶手段０１１００から、文字列としてのコールバック関数の名称を取得する。そしてコールバック関数名称ポインタ解決手段０１４０を用いて、この文字列としてのコールバック関数名称を、対応するコールバック関数のポインタへ変換する。そして変換されたコールバック関数ポインタを、コールバック関数実行手段０１７０に送り、実際のコールバック関数を実行する。このコールバック関数の実行に伴う情報の外界との情報の入出力は、コールバック関数作用入出力手段０１８０により行う。コールバック関数の実行後、実行結果の戻り値が、コールバック関数実行手段０１７０から状態遷移制御マネージャ０１６０へ渡される。状態遷移制御マネージャ０１６０は、渡ってきたコールバック関数の戻り値を元に遷移記述単位現在値記憶手段０１１００から、遷移すべき次の状態値を取得し、現在状態格納手段０１３０の現在状態を更新する。
【００１２】
図２は、本発明の実行時のフローチャートである。本発明の実施例で特徴的である点は、状態遷移動作時に、文字列としてのコールバック関数名称を含んだ状態遷移表を参照し、所望のコールバック関数をコールバック関数名称で検索して、そのコールバック関数名称と結び付けられているコールバック関数のポインタを取得するという段階を踏むことである。
【００１３】
以下実行時の動作を順を追って説明する。プログラム開始後、全体の初期化処理を行う（０２１０）。次に処理０２２０で外部ファイル等に定義された状態遷移表データ０２３０を読み込む。処理０２４０では、プログラム全体の動作のうち、状態遷移関連以外の処理を行う。処理０２５０〜処理０２９０に状態遷移関連の処理をまとめて示している。処理０２５０では、状態遷移に必要な前提条件として、処理０２４０において状態遷移関連以外の処理を行った結果発生した事象と、現在の状態値を取得する。
【００１４】
次に処理０２６０において、取得した発生事象と現在の状態値に基づき、状態遷移を辿ることによって、対応するコールバック関数の名称を取得する。処理
０２７０では、取得したコールバック関数名称を元に、コールバック関数名称とコールバック関数ポインタの関係を示す辞書を参照して、対応するコールバック関数のポインタを取得する。処理０２８０では、取得したコールバック関数のポインタをコールすることにより、状態遷移の伴うコールバック関数を実行する。最後に０２９０において、コールバック関数の実行後、その戻り値情報を元に、次の遷移先を決定して、遷移を行う。ここで遷移とは、現在の状態値を遷移すべき新しい状態値で更新することである。
【００１５】
状態遷移表は、プログラム作成時にハードコード（プログラム中に直接書き込むこと）しても良い。あるいは、状態遷移表から必要なコールバック関数を検索する直前（０２６０）に毎回読み込みを行ってもよい。これは、状態遷移表がプログラムの動作中に外部プログラムによって変更され得る場合に適用する。一度読み込んで計算機のメモリ上に存在する状態遷移表を動的に変更してもよい。
【００１６】
次に図３を用い、本発明による実施例の実装時の手順について説明する。本実施例の状態遷移表０３１０は、最左列に状態を列挙した状態列（０３２０）、最上行に事象を列挙した事象行（０３３０）をそれぞれ見出しとして持つ。状態列０３２０の右側かつ事象行０３３０の下側に位置する状態遷移の動作を特徴づける表の部分を状態遷移動作記述部（０３４０）と呼び、状態遷移動作記述部
（０３４０）のうち１つの状態と１つの事象を指定することで決定する１組の状態遷移表の記述内容を遷移記述単位（０３５０）と呼ぶ。遷移記述単位（０３５０）は１つあるいは複数のセルからなり、少なくともコールバック関数を記述するセルを有する。状態列０３２０，事象行０３３０とも他の要素と区別できればよく、必ずしも最左列および最上行に無くてもよい。更に行と列を入れ替えてもよい。以下の説明では、図３に示した状態遷移表０３１０の書式を前提に説明する。
【００１７】
実装時この状態遷移表をもとに、大きく分けて２つのファイル群を作成する。１つは定義ファイルで、実行を伴わない各種定義を記述するものである。もう１つは、実行文記述ファイルで、コールバック関数の動作についての記述を含むものである。
【００１８】
状態遷移表を元に生成する定義ファイルとは、事象定義ファイル（０３６０），コールバック関数定義ファイル（０３７０），状態定義ファイル（０３８０）のうちの少なくとも１つである。事象定義ファイル（０３６０）は、状態遷移表（０３１０）中の事象行（０３３０）の内容を列挙したものである。同様に状態定義ファイル（０３８０）は、状態遷移表（０３１０）中の状態列（０３２０）の内容を列挙したものである。コールバック関数定義ファイル（０３７０）は、状態遷移動作記述部（０３４０）全てに関し、遷移記述単位（０３５０）中のコールバック関数を列挙したヘッダファイルである。コールバック関数のうち同一名称のものは、同一関数として１つのみ列挙する。これらの定義ファイルのうち、コールバック関数定義ファイル（０３７０）のみが本発明の実施例に必須であり、その他は必要に応じ使用する。
【００１９】
実行文記述ファイルには、関数名称マッピングファイル（０３９０）及び関数本体記述（０３１００）がある。関数名称マッピングファイル（０３９０）は、状態遷移表より抽出した“文字列”としてのコールバック関数名称と、コールバック関数定義ファイル（０３７０）に記述した“識別子”としてのコールバック関数名称とを関連付ける。
【００２０】
関数名称マッピングファイル（０３９０）の作成においては、状態遷移表
（０３１０）あるいはコールバック関数定義ファイル（０３７０）からコールバック関数名称を抽出した後、コールバック関数名称を文字列として引用したものと関数ポインタとして引用したものを、関連付けする操作の引数として与える形式とする。関連付けする操作では、文字列を検索キーとしてポインタを得る機構を利用する。例えばＣ／Ｃ＋＋言語においてはｍａｐ　ライブラリが利用できる。その他の言語や環境においても、辞書や連想配列的な機能を提供するライブラリを利用すれば、本発明において必要となる機能を簡便に実現できる。
【００２１】
本実施例における関数名称マッピングファイル０３９０の書式例では、文字列として関数名称を与えるために関数名称をダブルクオート（”）で囲み、関数名称のポインタを表わすために、関数名称に「＆」記号を付けている。Ｃ／Ｃ＋＋言語以外の言語／ライブラリを利用する場合でも、文字列をキーとしてポインタを得る仕組みを利用すれば同様の機能を実現できる。関連付けを行う関数名称マッピングファイルの書式は単純であるため、状態遷移表を与えて機械的に生成する場合に有利である。
【００２２】
関数本体記述０３１００はコールバック関数の本体記述であり、各コールバック関数の実際の動作に関する記述を行う。関数名称マッピング（０３９０）及び関数本体記述（０３１００）においては、コールバック関数定義ファイル（０３７０）を参照する。
【００２３】
図４に遷移記述単位（図３における０３５０）の記述内容の例を示す。０４１０が状態遷移表、０４２０が遷移記述単位である。この例では、遷移記述単位は、コールバック関数名称を示すセル（０４３０）、遷移先を示すセル（０４４０）、注釈セル（０４５０）から構成されている。この遷移記述単位で最低限必要な項目は、コールバック関数名称を示すセル０４３０である。また、状態遷移表の性質上、遷移先を示すセル（０４４０）を設けることにより、遷移先を表中に明示することができるため利便性が向上する。遷移先を示すセルを利用しない場合には、遷移処理をコールバック関数の中で行う。同様に注釈セル（０４５０）を設けることで、コールバック関数名称（０４３０）のみでは表現できない情報を盛り込むことが出来る。０４６０〜０４１００は遷移先を示すセル（０４４０）の書式の例である。０４６０は、同じ状態遷移表内の別状態への遷移する場合の書式であり、遷移可能な状態を列挙した形式となっている。現在の状態からどの遷移先に遷移するかは、コールバック関数の戻り値により決定する。例えばコールバック関数の戻り値が０の場合は遷移先状態１へ遷移し、同様に戻り値が１の場合は、遷移先状態２へ遷移する等の方式が考えられる。
【００２４】
０４７０は、遷移先として別の状態遷移表の遷移状態を含む場合の書式の例である。この書式の例では、遷移先並びの先頭に遷移先となる状態遷移表を列挙した記述（０４８０）をもち、これに引き続いて、同一表内への遷移先状態が列挙されている（０４９０）。遷移先の表の列挙と、遷移先状態の列挙を分離して記述するのは、別の状態遷移表に遷移した後に元の状態遷移表へ状態が復帰する際の利便性のためである。例えば、０４７０において遷移先が遷移先表２（０４１００）であった場合、現在の状態遷移表が遷移先表２で示される表に切り替わる（いわゆる状態遷移表の入れ子構造）。その後、遷移先表２に基づいた処理を経て、しかるべき事象の発生に伴い、元の状態遷移表に復帰する局面が来る。その際、元の状態遷移表中のどの状態へ遷移すべきかの指定が必要となる。その復帰時の遷移先の指定に遷移先状態の列挙（０４９０）が用いられる。尚、遷移先状態の列挙（０４９０）は別表からの復帰時に限らず、入れ子の別表へ移行しない場合の同一表内への遷移先状態の指定にも用いる。
【００２５】
これまでの実施例においては、説明のためにコールバック関数名称は機械的に番号付けをした抽象的なものであった。本方式においては、コンパイラ等の言語処理系が認識できる範囲において任意のコールバック関数名称を付与できるため、生成後のソースの可読性が良いことが特徴である。そこで、図５および図６に示す、通信プログラムにおけるトランスポートコネクションの確立の動作を例として、より具体的なコールバック関数名称を用いた実際例に近い実施例を説明する。
【００２６】
図５が説明の対象とするコネクション確立関連のシーケンスチャートである。本実施例の範囲では、コネクションの確立及び開放における一連の動作に絞って説明し、例外処理系の説明は省く。０５１０及び０５２０は着目している局の通信プログラムの階層である。０５１０が着目している局のトランスポート層、
０５２０はその上層に相当する。同様に０５４０と０５５０は着目している局と対向する局のトランスポート層及びその上層である。０５３０は着目局と対向局双方のトランスポート層以下の階層、及び両局間に介在する通信媒体である。
【００２７】
ここで着目局側からトランスポートコネクションの接続要求および切断要求を発し、対向局がそれに応答する場合を考える。０５６０が着目局の上層よりの接続要求である。この要求は着目局の上層からのｒｅｑｕｅｓｔ　の受信後、着目局のトランスポート層を通り、対向するトランスポート層への接続要求が発信され、対向局のトランスポート層に到達後、対向局の上層への接続要求のｉｎｄｉｃａｔｉｏｎとして伝達される。そのｉｎｄｉｃａｔｉｏｎに対する接続要求受理のｒｅｓｐｏｎｓｅは、対向局のトランスポート層を介して着目局のトランスポート層に到達し、大元の接続要求元である着目局の上層へｃｏｎｆｉｒｍａｔｉｏｎとして伝達される（０５７０）。切断においても同様のシーケンスを辿る。０５８０が切断要求、０５９０が切断要求受理のメッセージシーケンスである。０５１００は、着目局のトランスポート層の状態遷移を示している。
【００２８】
図５における着目局の状態遷移を表にしたものが次の図６である。０６１０は状態を列挙した状態列、０６２０は事象を列挙した事象行、０６３０は状態遷移の動作を記述する状態遷移動作記述部、０６４０〜０６７０は遷移記述単位、
０６８０は遷移記述単位におけるセルの説明である。０６８０は実施例の説明のために付けたもので、必ずしも必要ではない。なお状態遷移表における状態の初期値の指定方法は別フラグで指定する方法も考えられるが、状態列の最上行とするのが簡便である。トランスポート層のコネクションに関する初期状態は“切断”状態であるため、図６の状態列の最上行を“切断”状態としている。同表で対角要素のみに内容を記述しているのは、説明のために正常系のみの動作を示すためである。一般的には例外的処理を適切に行えるよう対角要素以外にも内容を記述する。
【００２９】
次に、この図６において初期状態である“切断”状態から、“接続受理待ち”状態へ遷移する場合の例を、各種変数値の変化を追いながら説明する。図７がこの変数値の変化を示す図である。０７１０は一連の遷移動作の最初のステップにおける変数値を示し、それに続く０７２０〜０７６０が状態遷移動作のステップを追った変数値の変化を示している。図７の１つの表で、左半分が変数の項目名、同右半分が変数項目名に対応する変数の値の例である。変数の値のうち、不定あるいは不問の場合を横棒“−”で示す。直前の変数値との比較で変化したものは太枠で示す。変数値０７７０は、現在の状態を保持する。変数値０７８０は、入力された事象、０７９０はコールバック関数名称の文字列、０７１００はコールバック関数へのポインタ、０７１１０はコールバック関数実行後の戻り値を格納する。
【００３０】
まず状態遷移動作開始時における変数値は０７１０に示すように、現在の状態として“切断”状態であるという情報のみを保持している。次に事象“上層よりの接続要求受信”が発生したとすると、０７２０のように入力事象の項目に発生した事象の値（０７１２０）が入力される。次に、現在の状態および入力事象の２つの値から、状態遷移表０７１３０を参照する（０７１４０）。参照した結果得られるコールバック関数の文字列としての名称を、０７３０に示すようにコールバック関数名称へ入力する（０７１５０）。次にこのコールバック関数名称を元に、関数名称マッピングファイルに基づき生成されたコールバック関数マッピング０７１７０を参照する（０７１６０）ことで、該当するコールバック関数へのポインタを取得する（０７１８０）。ここまでの動作で、コールバック関数のポインタが得られたため、次のステップにおいては、その関数へのポインタをコールすることで（０７１９０）、コールバック関数の実行を行う（０７２３０）。コールバック関数の実行の結果得られるコールバック関数の戻り値を０７５０の変数値の状態において格納する（０７２００）。
【００３１】
次にこの戻り値を元に、更新後の状態の遷移先を決定するため、変数値の状態０７５０において、状態遷移表０７１３０から遷移先を検索する。得られた遷移先現在の状態へ上書きすることで、現在の状態を更新した結果、変数値の状態は０７６０の様になる。以下、同様の動作を繰り返す。
【００３２】
本発明の実施例では、実行すべきコールバック関数を、その名称で指定可能であるため、実行時に状態遷移表が動的に変更された場合でも対応可能である。状態遷移表の動的変更の場合、変更後のコールバック関数が、予め定義されている必要がある。変更後のコールバック関数が状態遷移表中で既に使用されている場合を除き、動的変更後に使用され得るコールバック関数は、コールバック関数定義ファイル（０３７０）と関数名称マッピングファイル（０３９０）及び関数本体記述（０３１００）に予め定義しておく必要がある。また、使用頻度の高いと思われるコールバック関数を、標準コールバック関数として用意しておくと工数削減と管理の容易化が可能である。その他、標準コールバック関数の例としては、回線を活性状態に保つｋｅｅｐ　Ａｌｉｖｅ用の定型的なａｃｋ　応答を送信する関数や、何もしないｎｏｐ　関数が挙げられる。
【００３３】
本発明の特徴として、コードの管理効率の良さが挙げられる。例えば、状態遷移表の行番号及び列番号から機械的にコールバック関数の名称を生成する方式の場合、全ての要素について、コールバック関数が生成されるため、コールバック関数は、状態遷移表の要素数必要となり管理工数の増大を招く。更に、状態遷移表の変更に伴い、列番号や行番号が変動するため、コードの確認は常に状態遷移表との突き合わせが必要となる。ところが本発明の方式に寄れば、上記のような不具合は生じない。
【００３４】
本発明において不要なコールバック関数が増えないのは、名称によりコールバック関数を管理しているためである。本発明では、同一名称に対しては１つのコールバック関数を対応させることで、状態遷移表の複数の箇所から同一関数を参照可能である。例えば、状態遷移表中の非対角要素には、例外処理的な動作を記述することが多いが、例外処理は内容が同一である場合が多く、本発明ではこれらに同一のコールバック関数名を与えることができるため、コールバック関数の数を削減可能である。このように、必ずしも全ての非対角要素に関し、異なったコールバック関数を定義する必要が無いため、本発明においてはコールバック関数の作成と管理を大幅に簡略化できる。
【００３５】
また、本発明では、状態遷移表中にコードを直接記述しない。この方式には、下記に示す複数の利点がある。
【００３６】
利点の１つは、状態遷移表の階層化が容易となることである。専用のＣＡＳＥツールを利用すれば、状態遷移表のセル中に直接コードを書き、なおかつ状態遷移表の入れ子構造化も可能である。しかしこの場合、そのＣＡＳＥツールの用意されていない環境においては、閲覧や編集が不可能となる。一方、本発明の方式によれば、遷移先に別の状態遷移表名を指定して入れ子構造を実現しているため、全ての入れ子レベルにおいて、画一的な状態遷移表のフォーマットとすることが出来、通常の表計算ソフトやエディタを利用して状態遷移表の閲覧や編集が可能である。
【００３７】
もう１つの利点は、コールバック関数の再利用性の向上である。通常、プログラムの開発が進展するにつれ、コールバック関数の処理内容は変更されていく。この際、試行錯誤に伴って、以前使用したコールバック関数の処理を再利用したくなる場合がある。状態遷移表中にコードを直接各方式であれば、状態遷移表の編集に伴い、変更前のコールバック関数の処理内容は失われる。ところが本発明の方式では、コールバック関数処理内容の変更の際、コールバック関数の名称を変えて保存することで、変更前の処理内容を保持しておくことが容易である。再利用が必要となった際は、コールバック関数の名称のみを変更することで、変更前のコールバック関数を利用できることになる。
【００３８】
１つのプロジェクトに対し、状態遷移表が複数存在する場合、コールバック関数に、表を識別するｐｒｅｆｉｘを付けて区別する。イベント名称も同様に複数の状態遷移表に対応してｐｒｅｆｉｘを付ける。
【００３９】
図８に、図６の状態遷移表を用いた場合の各種ファイルの書式の例を示す。
０８１０はコールバック関数定義ファイルの例である。状態遷移表中からコールバック関数の定義部を抽出し、列挙する。引数に関しては、各コールバック関数に必要な値を網羅するよう抽象化した引数タイプ（０８１０の例では、“ＡＲＧ＿ＴＹＰＥ”）を作成すると、引数部分の書式の統一が図れるため、機械的処理に有効である。また、関数の“名称”でコールバック関数をコールする本発明の方式においては、コールバック関数にその処理内容を反映した任意の名称を付与することが可能であるため、コールバック関数定義ファイル単体での可読性に優れる。一方、列番号と行番号よりコールバック関数名称を抽象化して生成する方式では、コールバック関数名称のみからその処理内容を類推することは困難である。
【００４０】
０８２０は関数名称マッピングファイルの例である。ｍａｐ　等の文字列の検索キーとそれに対応するポインタ等の値を対で格納／検索できる仕組みを利用し、文字列としての関数名称と、識別子としての関数へのポインタを対で格納している。識別子としての関数へのポインタを、この書式で利用できるのは、コールバック関数定義ファイル０８１０において既にコールバック関数を定義しているためである。この関数名称マッピングファイルも、単純な書式であるため状態遷移表より自動生成する機械的処理に好適である。０８３０は関数本体記述である。コールバック関数は、その戻り値の型と、引数の型を共通化しているため、関数毎の固有の処理部以外の部分（いわゆる雛型あるいはスケルトン）は、状態遷移表よりの機械処理により自動生成可能である。また、状態遷移表よりコールバック関数のスケルトンを作成する際、手動あるは自動を問わず、状態遷移表中の注釈（遷移記述単位中の注釈セルの内容）を対応するコールバック関数へコメントとして挿入すると、利便性が向上する。関数本体記述０８３０のみでなく、コールバック関数定義ファイル（０８１０），関数名称マッピングファイル（０８２０）にも状態遷移表中の注釈を挿入しても良い。
【００４１】
０８４０は状態遷移実行ログの例である。本発明を適用したプログラムの動作時、状態遷移表の記述内容を利用し、０８４０に示すような状態遷移実行ログを出力すると、動作解析に有効である。これらのログ出力は、状態遷移表の内容をベースに出来るため、新たなデータの入力は不要である。かつ状態遷移表本体を修正すれば、以降のプログラム動作時には、修正後状態遷移表ベースのログ出力とすることが出来る。
【００４２】
各種ファイル生成のための機械的処理とは、状態遷移表よりコールバック関数定義ファイルを自動的に作成する処理を指す。機械処理の対象としては図３におけるファイル群の場合、事象定義ファイル０３６０，状態定義ファイル０３８０，関数名称マッピングファイル０３９０，関数本体記述０３１００のうち関数毎の固有処理をのぞく共通書式のスケルトン部である。
【００４３】
次に図９を用い、状態遷移表よりコールバック関数の雛型を生成する処理について説明する。雛型の生成には、更新された最新状態の状態遷移表０９１０と、状態遷移表の更新が反映される前の状態の既存ソースコード０９２０を用いる。これら状態遷移表０９１０と既存ソースコード０９２０からの自動生成ファイル０９３０として、文字列としてのコールバック関数名称とコールバック関数のポインタとを結びつけるコールバック関数マッピング定義ファイルとコールバック関数スケルトンファイルの少なくとも一方が作成される。０９４０はコールバック関数定義ファイルの例、０９５０はコールバック関数スケルトン（雛型）ファイルの例である。これらのファイルを生成する際、状態遷移表と既存コールバック関数記述の双方に一致して存在するコールバック関数か、又は状態遷移表のみに存在し今回の状態遷移表の更新により新たに追加されたコールバック関数か、あるいは既存のコールバック関数記述にのみ存在し今回の状態遷移表の更新により削除されたコールバック関数かの３種類に分類する。分類の具体例を、コールバック関数マッピング定義ファイルを用いて示したものが０９６０，０９７０，０９８０である。
【００４４】
０９６０は状態遷移表と既存ソースコードの双方に存在するコールバック関数の定義、０９７０が既存ソースコードのみに存在するコールバック関数の定義、０９８０が状態遷移表のみに存在するコールバック関数の定義である。０９６０は更新された状態遷移表と既存のソースコード中との双方に一致して存在することを示しているため、特に変更をする必要のないコールバック関数を示している。０９７０は状態遷移表の更新に伴い状態遷移表から削除され、更新前の既存のソースコード中にのみ存在するコールバック関数を示している。
【００４５】
もし、これらのコールバック関数を将来にわたり使用しないことが明らかな場合は削除することが可能である。逆に、状態遷移表の更なる変更に伴い再び０９７０に記述されているコールバック関数を使用する可能性がある場合は、削除しない方がコードの管理が容易となる。状態遷移表を実行時の動的に変更する際に、新たに使用するコールバック関数も０９７０の欄に出現するが、この場合も削除を行わない。０９８０は状態遷移表の更新により新たに追加されたコールバック関数である。従って本欄に示されたコールバック関数は、新たにソースコードに追加する必要がある。その際コールバック関数スケルトンファイル０９５０のようなコールバック関数の雛型を自動的に生成することで、工数が削減可能であるとともに、コールバック関数の本来の中身のみの記述に集中できる。
【００４６】
コールバック関数の雛型を自動で生成する場合は、既存のソースコードを直接編集せず、元ファイル名より類推しやすい別ファイルとすることで、予期せぬコードの消失を防止できる。逆に既存のソースコードを自動で編集することで、コード管理の工数を低減させることが可能である。これらのどちらの方式をとるかを、必要に応じて切り替えられるオプションを設けることで、より柔軟な運用が可能となる。
【００４７】
【発明の効果】
本発明によれば、状態遷移表を用いた制御を行うプログラムにおいて、文字列としてのコールバック関数名と、ソースコード中の識別子としてのコールバック関数名を関連させて呼び出す仕組みを設けることによって、コールバック関数をその識別子名称（つまりは関数名）の“文字列”として呼び出す方式としたため、コールバック関数名称をその内容を把握しやすい任意の名称とすることが出来、状態遷移表より生成したソースコードの可読性を向上させることが可能である。また、動的な状態遷移表の変更によるコールバック関数のミスコールを防止できる。
【図面の簡単な説明】
【図１】発明の構成。
【図２】実行時のフローチャート。
【図３】実装時の手順。
【図４】遷移記述単位における記述内容の例。
【図５】コネクション確立関連のシーケンスチャート。
【図６】トランスポート層コネクション確立時の状態遷移表の例。
【図７】変数値の変化を示す図。
【図８】各種ファイルの書式の例。
【図９】雛型の生成。
【符号の説明】
０１１０…事象解析マネージャ、０１２０…発生事象格納手段、０１３０…現在状態格納手段、０１４０…コールバック関数名称ポインタ解決手段、０１５０…状態遷移表格納／管理手段、０１６０…状態遷移制御マネージャ、０１７０…コールバック関数実行手段、０１８０…コールバック関数作用入出力手段、０１９０，０３１０，０４１０，０７１３０…状態遷移表、０２３０…状態遷移表データ、０３６０…事象定義ファイル、０３７０，０８１０…コールバック関数定義ファイル、０３８０…状態定義ファイル、０３９０…関数名称マッピングファイル、０８２０…コールバック関数名称マッピングファイル、０８４０…状態遷移実行ログ、０１１００…遷移記述単位現在値記憶手段、０７１７０…コールバック関数マッピング。
【図１】
2004094837.tif 000003
【図２】
2004094837.tif 000004
【図３】
2004094837.tif 000005
【図４】
2004094837.tif 000006
【図５】
2004094837.tif 000007
【図６】
2004094837.tif 000008
【図７】
2004094837.tif 000009
【図８】
2004094837.tif 000010
【図９】
2004094837.tif 000011