(57)【要約】【課題】本発明は、シーケンス図と状態遷移図との対応関係が分かり易く、かつ複数のシーケンス図内で同一の状態を１つにまとめた状態遷移図を生成することが可能なプログラム生成装置を提供することを目的とする。【解決手段】本発明によるプログラム生成装置１００は、状態遷移図の状態に相当する情報を明示したシーケンス図である状態明示シーケンス図に基づいて、状態遷移図を生成する状態遷移図生成部１０２と、状態遷移図生成部１０２が生成した状態遷移図に基づいて、状態遷移図の振舞いを表すプログラムである振舞いプログラムを生成する振舞いプログラム生成部１０４とを備える。【選択図】図１
2017211800.tif 000002
【特許請求の範囲】
【請求項１】
状態遷移図の状態に相当する情報を明示したシーケンス図である状態明示シーケンス図に基づいて、前記状態遷移図を生成する状態遷移図生成部と、
前記状態遷移図生成部が生成した前記状態遷移図に基づいて、前記状態遷移図の振舞いを表すプログラムである振舞いプログラムを生成する振舞いプログラム生成部と、
を備える、プログラム生成装置。
【請求項２】
前記状態明示シーケンス図を格納する状態明示シーケンス図格納部と、
前記状態遷移図生成部が生成した前記状態遷移図を格納する状態遷移図格納部と、
前記振舞いプログラム生成部が生成した前記振舞いプログラムを格納する振舞いプログラム格納部と、
をさらに備えることを特徴とする、請求項１に記載のプログラム生成装置。
【請求項３】
状態遷移図の状態に相当する情報を明示したシーケンス図である状態明示シーケンス図に基づいて、前記状態遷移図を生成する状態遷移図生成部と、
前記状態遷移図生成部が生成した前記状態遷移図に基づいて、状態遷移モデルを生成する状態遷移モデル生成部と、
前記状態遷移モデル生成部が生成した前記状態遷移モデルに基づいて、前記状態遷移図の振舞いを表すプログラムである振舞いプログラムを生成するモデル振舞いプログラム生成部と、
を備える、プログラム生成装置。
【請求項４】
前記状態明示シーケンス図を格納する状態明示シーケンス図格納部と、
前記状態遷移図生成部が生成した前記状態遷移図を格納する状態遷移図格納部と、
前記状態遷移モデル生成部が生成した前記状態遷移モデルを格納する状態遷移モデル格納部と、
前記モデル振舞いプログラム生成部が生成した前記振舞いプログラムを格納する振舞いプログラム格納部と、
を備える、請求項３に記載のプログラム生成装置。
【請求項５】
前記状態明示シーケンス図は、前記状態におけるアクションの成功および失敗による状態遷移の分岐の情報を含むことを特徴とする、請求項１から４のいずれか１項に記載のプログラム生成装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、図的表現からプログラムを自動的に生成するプログラム生成装置に関する。
【背景技術】
【０００２】
従来のプログラム生成装置では、シーケンス図から状態遷移図を生成し、当該状態遷移図からプログラムを生成するように、図的表現を段階的に詳細化してプログラムを自動的に生成している（例えば、特許文献１参照）。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開平３−１９５１９３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
従来のプログラム生成装置では、状態遷移図の状態に相当する情報がシーケンス図に明示されていない。従って、シーケンス図と状態遷移図との対応関係が分かりにくいという問題がある。また、シーケンス図が複数ある場合において、当該複数のシーケンス図内で同一の状態を指定することができず、これらを１つにまとめた状態遷移図を生成することが困難であるという問題がある。
【０００５】
本発明は、このような問題を解決するためになされたものであり、シーケンス図と状態遷移図との対応関係が分かり易く、かつ複数のシーケンス図内で同一の状態を１つにまとめた状態遷移図を生成することが可能なプログラム生成装置を提供することを目的とする。
【課題を解決するための手段】
【０００６】
上記の課題を解決するために、本発明によるプログラム生成装置は、状態遷移図の状態に相当する情報を明示したシーケンス図である状態明示シーケンス図に基づいて、状態遷移図を生成する状態遷移図生成部と、状態遷移図生成部が生成した状態遷移図に基づいて、状態遷移図の振舞いを表すプログラムである振舞いプログラムを生成する振舞いプログラム生成部とを備える。
【発明の効果】
【０００７】
本発明によると、プログラム生成装置は、状態遷移図の状態に相当する情報を明示したシーケンス図である状態明示シーケンス図に基づいて、状態遷移図を生成する状態遷移図生成部と、状態遷移図生成部が生成した状態遷移図に基づいて、状態遷移図の振舞いを表すプログラムである振舞いプログラムを生成する振舞いプログラム生成部とを備えるため、シーケンス図と状態遷移図との対応関係が分かり易く、かつ複数のシーケンス図内で同一の状態を１つにまとめた状態遷移図を生成することが可能となる。
【図面の簡単な説明】
【０００８】
【図１】本発明の実施の形態１によるプログラム生成装置の構成の一例を示すブロック図である。
【図２】本発明の実施の形態１によるプログラム生成装置のハードウェア構成の一例を示すブロック図である。
【図３】本発明の実施の形態１による状態明示シーケンス図を説明するための図である。
【図４】本発明の実施の形態１による状態明示シーケンス図の一例を示す図である。
【図５】本発明の実施の形態１による状態明示シーケンス図の一例を示す図である。
【図６】本発明の実施の形態１による状態明示シーケンス図の一例を示す図である。
【図７】本発明の実施の形態１による状態明示シーケンス図の一例を示す図である。
【図８】本発明の実施の形態１による状態明示シーケンス図の一例を示す図である。
【図９】本発明の実施の形態１による状態遷移図の一例を示す図である。
【図１０】本発明の実施の形態１による状態遷移図の一例を示す図である。
【図１１】本発明の実施の形態１による振舞いプログラムの一例を示す図である。
【図１２】本発明の実施の形態１による振舞いプログラムの一例を示す図である。
【図１３】本発明の実施の形態１による振舞いプログラムの一例を示す図である。
【図１４】本発明の実施の形態１による状態遷移図生成部の動作の一例を示すフローチャートである。
【図１５】本実施の形態１による振舞いプログラム生成部の動作の一例を示すフローチャートである。
【図１６】本発明の実施の形態２によるプログラム生成装置の構成の一例を示すブロック図である。
【図１７】本発明の実施の形態２による状態遷移モデル生成部の動作の一例を示すフローチャートである。
【図１８】本発明の実施の形態２による状態遷移モデルの一例を示す図である。
【図１９】本発明の実施の形態２によるモデル振舞いプログラム生成部の動作の一例を示すフローチャートである。
【図２０】本発明の実施の形態３による状態明示シーケンス図の一例を示す図である。
【図２１】本発明の実施の形態３による状態明示シーケンス図の一例を示す図である。
【図２２】本発明の実施の形態３による状態遷移図の一例を示す図である。
【図２３】本発明の実施の形態３による振舞いプログラムの一例を示す図である。
【図２４】本発明の実施の形態３による状態遷移モデルの一例を示す図である。
【図２５】本発明の実施の形態３による状態遷移図生成部の動作の一例を示すフローチャートである。
【図２６】本発明の実施の形態３による振舞いプログラム生成部の動作の一例を示すフローチャートである。
【図２７】本発明の実施の形態３による状態遷移モデル生成部の動作の一例を示すフローチャートである。
【図２８】本発明の実施の形態３によるモデル振舞いプログラム生成部の動作の一例を示すフローチャートである。
【発明を実施するための形態】
【０００９】
本発明の実施の形態について、図面に基づいて以下に説明する。
【００１０】
＜実施の形態１＞
本発明の実施の形態によるプログラム生成装置は、図的表現からプログラムを自動的に生成するプログラム生成装置であって、状態明示シーケンス図と状態遷移図との対応関係が分かり易く、かつ複数のシーケンス図内で同一の状態を１つにまとめた状態遷移図を生成することが可能である。
【００１１】
なお、本明細書中において、状態明示シーケンス図は、プログラム間の処理手順を表すシーケンス図であって、状態遷移図の状態に相当する情報が明示されたシーケンス図のことをいう。状態明示シーケンス図は、例えば後述する図３〜８，２０，２１等の表現を含み、図６，８に示すようなプログラム単体の処理手順のみを表現してもよい。また、振舞いプログラムは、状態遷移図の振舞いを表すプログラムであり、例えば後述する図１１〜１３，２３等の情報を含む。
【００１２】
＜構成＞
まず、本実施の形態１によるプログラム生成装置の構成について説明する。
【００１３】
図１は、本実施の形態１によるプログラム生成装置１００の構成の一例を示すブロック図である。
【００１４】
図１に示すように、プログラム生成装置１００は、状態明示シーケンス図格納部１０１と、状態遷移図生成部１０２と、状態遷移図格納部１０３と、振舞いプログラム生成部１０４と、振舞いプログラム格納部１０５とを備えている。
【００１５】
図２は、プログラム生成装置１００のハードウェア構成の一例を示すブロック図である。
【００１６】
図２に示すように、プログラム生成装置１００は、プロセッサ１０６と、メモリ１０７と、外部記憶装置１０８とを含むコンピュータシステムをハードウェアの主たる構成要素として備えている。
【００１７】
プログラム生成装置１００の状態遷移図生成部１０２および振舞いプログラム生成部１０４は、例えばプロセッサ１０６によるコンピュータプログラムの実行によって実現される。具体的には、プロセッサ１０６は、状態遷移図生成部１０２および振舞いプログラム生成部１０４の機能を実現させるためのコンピュータプログラムをメモリ１０７に展開して処理を行うことによって、当該機能が実現される。
【００１８】
なお、メモリ１０７としてはＲＡＭ（Random Access Memory）等の半導体メモリが一般的に考えられ、外部記憶装置１０８としてはハードディスク等の大容量記憶が可能な記憶装置が一般的に考えられる。プログラム生成装置１００の状態明示シーケンス図格納部１０１、状態遷移図格納部１０３、および振舞いプログラム格納部１０５は、例えば外部記憶装置１０８によって実現される。
【００１９】
状態明示シーケンス図格納部１０１は、少なくとも１つの状態明示シーケンス図を格納する。
【００２０】
図３は、状態明示シーケンス図を説明するための図である。なお、図中の上から下方向に時間が経過するものとする。他の状態明示シーケンス図についても同様である。
【００２１】
図３に示す状態明示シーケンス図は、ライフライン２０１，２０２間における処理手順を示している。ライフライン２０１には、開始疑似状態２０３、状態２０５，２０６、および区切り状態２０８が、接続線２１９，２２０，２２１，２２２によって縦に接続されている。
【００２２】
縦長の矩形で示す状態２０５には、イベントガードメッセージ線２１０とアクションメッセージ線２１４とが順に接続されている。また、状態２０５の直後には、状態２０６が接続されている。状態２０５では、イベント２１２である「Ｅｖｅｎｔ１」が発生すると、アクション２１５である「Ａｃｔｉｏｎ１」を実行した後、状態２０６に遷移することを表している。なお、状態２０５の矩形中の文字列「Ａ１」、および区切り状態２０８の点線で示す円中の文字列「Ａ３」等は状態名であり、ライフライン２０１における状態を一意に識別するＩＤである。状態名が同一の場合は、同一の状態を示している。外部イベント発生源２２６は、ライフライン外部のイベント発生源を示している。
【００２３】
状態２０６では、イベントメッセージ線２１１と複合メッセージ線２１６とが順に接続されている。状態２０６では、ガード２１３である「Ｇｕａｒｄ１」の条件が満たされると、アクション２１７である「Ａｃｔｉｏｎ２」を実行した後、区切り状態２０８に遷移することを表している。区切り状態２０８は、イベントガードメッセージ線、アクションメッセージ線、および複合メッセージ線が接続されない状態である。
【００２４】
複合メッセージ線２１６では、破線部分はアクションメッセージ線、実線部分はイベントガードメッセージ線を示している。図３の例では、ライフライン２０１の状態２０６で実行するアクション２１７である「Ａｃｔｉｏｎ２」が、ライフライン２０２の状態２０７におけるイベントガード２１８である「Ｅｖｅｎｔ２」となることが示されている。なお、イベントガードメッセージ線には、イベントおよびガードを併記してもよい。
【００２５】
一方、ライフライン２０２では、状態２０７および区切り状態２０９が、接続線２２３，２２５によって縦に接続されている。
【００２６】
状態２０７では、複合メッセージ線２１６が接続されている。また、状態２０７の直後には、区切り状態２０９が接続されている。状態２０７では、イベントガード２１８である「Ｅｖｅｎｔ２」が発生し、「Ｇｕａｒｄ２」の条件が満たされると区切り状態２０９に遷移することを表している。なお、状態２０７の矩形中の文字列「Ｂ１」、および区切り状態２０９の点線で示す円中の文字列「Ｂ２」は状態名であり、ライフライン２０２における状態を一意に識別するＩＤである。状態名が同一の場合は、同一の状態を示している。
【００２７】
なお、開始疑似状態の直後に接続された状態は、少なくとも１つ以上の状態明示シーケンス図の同一名のライフライン内において初めに実行される状態である。図３の例では、開始疑似状態２０３の直後に接続された状態２０５が、ライフライン２０１において初めに実行される状態である。
【００２８】
以下、具体的な状態明示シーケンス図について、１つのクライアントと１つのサーバとの間で通信処理を行う場合を一例として説明する。
【００２９】
図４は、クライアント３０１とサーバ３０２との間における接続処理の手順を示す状態明示シーケンス図の一例を示す図である。
【００３０】
図４に示すように、クライアント３０１は、状態３１０から通信処理を開始する。状態３１０では、外部からの接続要求のイベントである「Ｃｏｎｎｅｃｔ」が発生すると、サーバ３０２に対して接続処理のアクションである「Ｃｏｎｎｅｃｔ」を実行した後、区切り状態３１１に遷移する。クライアント３０１のアクションである「Ｃｏｎｎｅｃｔ」が実行されると、サーバ３０２に対する接続受理通知のイベントである「Ａｃｃｅｐｔ」が発生する。なお、図４の例では、開始疑似状態５５０の直後に状態３１０があるため、状態３１０はクライアント３０１において初めに実行される状態である。
【００３１】
一方、サーバ３０２は、状態３１２から通信処理を開始する。状態３１２では、クライアント３０１からのイベントである「Ａｃｃｅｐｔ」が発生すると、接続受理後処理のアクションである「Ａｃｃｅｐｔ」、およびタイマ開始処理のアクションである「ＳｔａｒｔＴｉｍｅｒ」を実行した後、区切り状態３１３に遷移する。なお、図中の「ＳｔａｒｔＴｉｍｅｒ」の後に付されている「（Ｔｉｍｅｒ）」は、「ＳｔａｒｔＴｉｍｅｒ」で開始するタイマ名であり、サーバ３０２においてタイマを一意に識別するためのＩＤである。
【００３２】
図５は、クライアント３０１とサーバ３０２との間におけるデータ送受信の手順を示す状態明示シーケンス図の一例を示す図である。
【００３３】
図５に示すように、クライアント３０１は、状態４０１から処理を行う。状態４０１では、外部からデータ送信要求のイベントである「Ｓｅｎｄ」が発生すると、データ送信処理のアクションである「Ｓｅｎｄ」を実行した後、区切り状態４０２に遷移する。なお、図中の「Ｓｅｎｄ」の後に付されている「（Ｄａｔａ）」は、「Ｓｅｎｄ」で送信するデータ名であり、クライアント３０１およびサーバ３０２においてデータ種別を一意に識別するためのＩＤである。クライアント３０１のアクションである「Ｓｅｎｄ」が実行されると、サーバ３０２に対するデータ受信通知のイベントである「Ｒｅｃｅｉｖｅ」が発生する。なお、図中の「Ｒｅｃｅｉｖｅ」の後に付されている「（Ｄａｔａ）」は、受信対象のデータ種別名である。
【００３４】
一方、サーバ３０２は、状態４０３から処理を行う。状態４０３では、クライアント３０１からイベントである「Ｒｃｅｉｖｅ」が発生し、受信データ種別が「Ｄａｔａ」である場合において、タイマ開始処理のアクションである「ＳｔａｒｔＴｉｍｅｒ」を実行した後、区切り状態４０４に遷移する。
【００３５】
図６は、クライアント３０１の通信を切断する手順を示す状態明示シーケンス図の一例を示す図である。
【００３６】
図６に示すように、クライアント３０１は、状態５０１から処理を行う。状態５０１は、外部から通信切断要求のイベントである「Ｄｉｓｃｏｎｎｅｃｔ」が発生すると、通信切断処理のアクションである「Ｄｉｓｃｏｎｎｅｃｔ」を実行した後、区切り状態５０２に遷移する。
【００３７】
図７は、クライアント３０１とサーバ３０２との間における通信を切断する手順を示す状態明示シーケンス図の一例を示す図である。
【００３８】
図７に示すように、サーバ３０２は、状態５０３から処理を行う。状態５０３では、タイマ発火通知のイベントである「Ｔｉｍｅｏｕｔ」が発生すると、タイマ停止処理のアクションである「ＳｔｏｐＴｉｍｅｒ」および「Ｄｉｓｃｏｎｎｅｃｔ」を実行した後、区切り状態５０４に遷移する。なお、図中の「Ｔｉｍｅｏｕｔ」の後に付されている「（Ｔｉｍｅｒ）」は発火検知対象のタイマ名であり、図中の「ＳｔｏｐＴｉｍｅｒ」の後に付されている「（Ｔｉｍｅｒ）」は停止するタイマ名であり、サーバ３０２においてタイマを一意に識別するためのＩＤである。
【００３９】
一方、クライアント３０１は、状態５０８から処理を行う。状態５０８では、サーバ３０２から通信切断要求のイベントである「Ｄｉｓｃｏｎｎｅｃｔ」が発生すると、通信切断処理のアクションである「Ｄｉｓｃｏｎｎｅｃｔ」を実行した後、区切り状態５０９に遷移する。
【００４０】
図８は、サーバ３０２における通信の開始および終了の手順を示す状態明示シーケンス図の一例を示す図である。
【００４１】
図８に示すように、サーバ３０２は、状態５０５から処理を行う。状態５０５では、サーバ開始処理のイベントである「Ｏｐｅｎ」が発生すると、サーバ開始処理のアクションである「Ｏｐｅｎ」を実行した後、状態５０６に遷移する。状態５０６では、サーバ終了処理のイベントである「Ｃｌｏｓｅ」が発生すると、サーバ終了処理のアクションである「Ｃｌｏｓｅ」を実行した後、区切り状態５０７に遷移する。
【００４２】
なお、開始疑似状態５６０の直後に状態５０５があるため、状態５０５はサーバ３０２において初めに実行される状態である。
【００４３】
図１に戻り、状態遷移図生成部１０２は、状態明示シーケンス図格納部１０１に格納された少なくとも１つの状態明示シーケンス図に基づいて、少なくとも１つの状態遷移図を生成する。状態遷移図格納部１０３は、状態遷移図生成部１０２が生成した状態遷移図を格納する。
【００４４】
以下、状態遷移図格納部１０３に格納される状態遷移図について説明する。
【００４５】
図９は、図４，５，７，８に示す状態明示シーケンス図におけるサーバ３０２に基づいて生成される状態遷移図の一例を示す図である。
【００４６】
図９に示す状態遷移図は、開始疑似状態６０１に接続された遷移線６０４が指示する状態６１１から状態を開始する。状態６１１は、遷移線６１２に対応する遷移情報６１３によって状態６０２に遷移する。
【００４７】
状態６０２は、遷移線６０５に対応する遷移情報６０６によって状態６０３に遷移する。具体的には、イベントである「Ａｃｃｅｐｔ」が発生し、ガードである「Ｇｕａｒｄ」の条件を満たすと、アクションである「Ａｃｃｅｐｔ」と、「ＳｔａｒｔＴｉｍｅｒ」を実行した後、状態６０３に遷移する。また、状態６０２は、遷移線６１４に対応する遷移情報６１５によって状態６１１に遷移する。
【００４８】
状態６０３は、遷移線６０７に対応する遷移情報６０８によって状態６０３に遷移する。また、状態６０３は、遷移線６０９に対応する遷移情報６１０によって状態６０２に遷移する。
【００４９】
図１０は、図４〜７に示す状態明示シーケンス図におけるクライアント３０１に基づいて生成される状態遷移図の一例を示す図である。
【００５０】
図１０に示す状態遷移図は、開始疑似状態７０１に接続された遷移線７０４が指示する状態７０２から状態を開始する。状態７０２は、遷移線７０５に対応する遷移情報７０６によって状態７０３に遷移する。
【００５１】
状態７０３は、遷移線７０７に対応する遷移情報７０８によって状態７０３に遷移する。また、状態７０３は、遷移線７０９に対応する遷移情報７１０によって状態７０２に遷移する。
【００５２】
なお、図９，１０に示す状態遷移図は、状態明示シーケンス図におけるメッセージの相手を識別する情報を含んでもよい。例えば、図３に示す状態明示シーケンス図では、状態名が「Ｂ１」の状態２０７におけるイベントガード２１８のメッセージの相手は、ライフライン２０１である。状態名が「Ａ１」である状態２０５におけるイベント２１２のメッセージの相手は、外部イベント発生源２２６である。状態名が「Ａ２」である状態２０６におけるアクション２１７のメッセージの相手は、ライフライン２０２である。
【００５３】
図１に戻り、振舞いプログラム生成部１０４は、状態遷移図格納部１０３に格納された状態遷移図に基づいて振舞いプログラムを生成する。振舞いプログラム格納部１０５は、振舞いプログラム生成部１０４が生成した振舞いプログラムを格納する。
【００５４】
以下、振舞いプログラム格納部１０５に格納される振舞いプログラムについて説明する。
【００５５】
図１１は、図９に示すサーバの状態遷移図に基づいて生成した、状態名が「Ｓ０」である状態６１１の振舞いプログラムの一例を疑似コードで示した図である。
【００５６】
図１１に示す振舞いプログラムは、状態名が「Ｓ０」である状態６１１に接続されている遷移線６１２に対応する遷移情報６１３の振舞いを示している。具体的には、図１１に示す振舞いプログラムは、遷移情報６１３のイベントである「Ｏｐｅｎ」が発生すると、遷移情報６１３のアクションである「Ｏｐｅｎ」を実行した後、状態名が「Ｓ１」である状態６０２に遷移することを示している。
【００５７】
図１２は、図９に示すサーバの状態遷移図に基づいて生成した、状態名が「Ｓ１」である状態６０２の振舞いプログラムの一例を疑似コードで示した図である。
【００５８】
図１２に示す振舞いプログラムは、状態名が「Ｓ１」である状態６０２に接続されている遷移線６０５に対応する遷移情報６０６の振舞いと、状態名が「Ｓ１」である状態６０２に接続されている遷移線６１４に対応する遷移情報６１５の振舞いとを示している。
【００５９】
具体的には、図１２に示す振舞いプログラムは、遷移情報６０６のイベントである「Ａｃｃｅｐｔ」が発生し、遷移情報６０６のガードである「Ｇｕａｒｄ」の条件を満たせば、遷移情報６０６のアクションである「Ａｃｃｅｐｔ」および「ＳｔａｒｔＴｉｍｅｒ」を実行した後、状態名が「Ｓ２」である状態６０３に遷移することを示している。
【００６０】
また、図１２に示す振舞いプログラムは、遷移情報６１５のイベントである「Ｃｌｏｓｅ」が発生すると、遷移情報６１５のアクションである「Ｃｌｏｓｅ」を実行した後、状態名が「Ｓ０」である状態６１１に遷移することを示している。
【００６１】
図１３は、図９に示すサーバの状態遷移図に基づいて生成した、状態名が「Ｓ２」である状態６０３の振舞いプログラムの一例を疑似コードで示した図である。
【００６２】
図１３に示す振舞いプログラムは、状態名が「Ｓ２」である状態６０３に接続されている遷移線６０７に対応する遷移情報６０８の振舞いと、状態名が「Ｓ２」である状態６０３に接続されている遷移線６０９に対応する遷移情報６１０の振舞いとを示している。
【００６３】
具体的には、図１３に示す振舞いプログラムは、遷移情報６０８のイベントである「Ｒｅｃｉｅｖｅ」が発生すると、遷移情報６０８のアクションである「ＳｔａｒｔＴｉｍｅｒ」を実行した後、状態名が「Ｓ２」である状態６０３に遷移することを示している。
【００６４】
また、図１３に示す振舞いプログラムは、遷移情報６１０のイベントである「Ｔｉｍｅｏｕｔ」が発生すると、遷移情報６１０のアクションである「ＳｔｏｐＴｉｍｅｒ」および「Ｄｉｓｃｏｎｎｅｃｔ」を実行した後、状態名が「Ｓ１」である状態６０２に遷移することを示している。
【００６５】
なお、図１１〜１３に示す振舞いプログラムは、状態明示シーケンス図におけるメッセージの相手を識別する情報を含んでもよい。
【００６６】
＜動作＞
次に、本実施の形態１によるプログラム生成装置１００の内部処理手順について説明する。
【００６７】
プログラム生成装置１００を起動すると、まず、状態遷移図生成部１０２は、状態明示シーケンス図格納部１０１に格納された少なくとも１つの状態明示シーケンス図に基づいて状態遷移図を生成する状態遷移図生成処理を行う。次いで、振舞いプログラム生成部１０４は、状態遷移図格納部１０３に格納されている状態遷移図に基づいて振舞いプログラムを生成する振舞いプログラム生成処理を行う。以下、図４，５，７，８に示すサーバ３０２を一例として説明する。
【００６８】
＜状態遷移図生成処理＞
図１４は、状態遷移図生成部１０２の動作の一例を示すフローチャートであり、状態遷移図生成処理手順を示している。
【００６９】
ステップＳ１０１において、状態遷移図生成部１０２は、状態明示シーケンス図格納部１０１に格納された状態明示シーケンス図から図の基本情報を取得する。図の基本情報としては、少なくとも状態遷移図の生成の対象となっているライフライン名を取得する。具体的には、状態遷移図生成部１０２は、サーバ３０２が状態遷移図の生成の対象となっているため、サーバ３０２を示す矩形の内部に示されたライフライン名である「Ｓｅｒｖｅｒ」を図の基本情報として取得する。
【００７０】
ステップＳ１０２において、状態遷移図生成部１０２は、状態明示シーケンス図格納部１０１に格納された状態明示シーケンス図から状態の情報を取得する。具体的には、状態遷移図生成部１０２は、サーバ３０２の状態として、開始疑似状態５６０、状態名が「Ｓ１」である状態３１２、状態名が「Ｓ２」である区切り状態３１３、状態名が「Ｓ２」である状態４０３、状態名が「Ｓ２」である状態４０４、状態名が「Ｓ２」である状態５０３、状態名が「Ｓ１」である区切り状態５０４、状態名が「Ｓ０」である状態５０５、状態名が「Ｓ１」である状態５０６、状態名が「Ｓ０」である区切り状態５０７を取得する。なお、開始疑似状態５６０の状態名は「Ｓｔａｒｔ」とする。
【００７１】
上記で取得した各状態のうち、状態名が等しい状態は同一の状態とする。従って、状態遷移図生成部１０２は、図４，５，７，８から、状態名が「Ｓｔａｒｔ」、状態名が「Ｓ０」、状態名が「Ｓ１」、および状態名が「Ｓ２」の４つの状態を取得する。
【００７２】
ステップＳ１０３において、状態遷移図生成部１０２は、状態明示シーケンス図格納部１０１に格納された状態明示シーケンス図からメッセージの情報を取得する。具体的には、状態遷移図生成部１０２は、状態明示シーケンス図に示された状態ごとに、その状態に関係するイベントガードメッセージ、アクションメッセージ、および複合メッセージのうちの少なくとも１つを取得する。ここで、イベントガードメッセージは、イベント、ガード、およびイベントガードメッセージ線から得られる情報である。アクションメッセージは、アクションおよびアクションメッセージ線から得られる情報である。複合メッセージは、イベント、ガード、アクション、および複合メッセージ線から得られる情報である。状態遷移図生成部１０２は、これら各メッセージの情報に、対象の状態名と、遷移先の状態名とを関連付けて取得する。
【００７３】
より具体的には、状態遷移図生成部１０２は、サーバ３０２のメッセージの情報として、状態名が「Ｓ１」である状態３１２から、イベントである「Ａｃｃｅｐｔ」、ガードである「Ｇｕａｒｄ」、アクションである「Ａｃｃｅｐｔ」、およびアクションである「ＳｔａｒｔＴｉｍｅｒ」を取得する。また、状態遷移図生成部１０２は、これらのメッセージの情報に、対象の状態名である「Ｓ１」と、遷移先の状態名である「Ｓ２」とを関連付けて取得する。
【００７４】
また、状態遷移図生成部１０２は、状態名が「Ｓ２」である状態４０３から、イベントである「Ｒｅｃｅｉｖｅ」、およびアクションである「ＳｔａｒｔＴｉｍｅｒ」を取得する。また、状態遷移図生成部１０２は、これらのメッセージの情報に、対象の状態名である「Ｓ２」と、遷移先の状態名である「Ｓ２」とを関連付けて取得する。
【００７５】
また、状態遷移図生成部１０２は、状態名が「Ｓ２」である状態５０３から、イベントである「Ｔｉｍｅｏｕｔ」、アクションである「ＳｔｏｐＴｉｍｅｒ」、およびアクションである「Ｄｉｓｃｏｎｎｅｃｔ」を取得する。また、状態遷移図生成部１０２は、これらのメッセージの情報に、対象の状態名である「Ｓ２」と、遷移先の状態名である「Ｓ１」とを関連付けて取得する。
【００７６】
また、状態遷移図生成部１０２は、状態名が「Ｓ０」である状態５０５から、イベントである「Ｏｐｅｎ」、およびアクションである「Ｏｐｅｎ」を取得する。また、状態遷移図生成部１０２は、これらのメッセージの情報に、対象の状態名である「Ｓ０」と、遷移先の状態名である「Ｓ１」とを関連付けて取得する。
【００７７】
また、状態遷移図生成部１０２は、状態名が「Ｓ１」である状態５０６から、イベントである「Ｃｌｏｓｅ」、およびアクションである「Ｃｌｏｓｅ」を取得する。また、状態遷移図生成部１０２は、これらのメッセージの情報に、対象の状態名である「Ｓ１」と、遷移先の状態名である「Ｓ０」とを関連付けて取得する。
【００７８】
なお、状態遷移図生成部１０２は、状態名が「Ｓｔａｒｔ」である開始疑似状態５６０から、遷移先の状態名である「Ｓ０」を関連付けて取得する。
【００７９】
図１４に戻り、ステップ１０４において、状態遷移図生成部１０２は、ステップＳ１０１，１０２，１０３の各々で取得した図の基本情報、状態の情報、およびメッセージの情報に基づいて、状態遷移図を生成する。生成する状態遷移図には、図の基本情報も含まれる。具体的には、状態遷移図生成部１０２は、図４，５，７，８に示すサーバ３０２の状態明示シーケンス図に基づいて、例えば図９に示すような状態遷移図を生成する。
【００８０】
なお、上記のステップＳ１０３において、状態遷移図生成部１０２は、メッセージの相手を識別する情報を併せて取得し、ステップＳ１０４において生成する状態遷移図に含めてもよい。
【００８１】
＜振舞いプログラム生成処理＞
図１５は、振舞いプログラム生成部１０４の動作の一例を示すフローチャートであり、振舞いプログラム生成処理手順を示している。
【００８２】
ステップＳ２０１において、振舞いプログラム生成部１０４は、状態遷移図格納部１０３に格納された状態遷移図から図の基本情報を取得する。具体的には、振舞いプログラム生成部１０４は、図９では図示していないが、振舞いプログラムの生成の対象となっているライフライン名である「Ｓｅｒｖｅｒ」を取得する。
【００８３】
ステップＳ２０２において、振舞いプログラム生成部１０４は、状態遷移図格納部１０３に格納された状態遷移図から状態の情報を取得する。具体的には、振舞いプログラム生成部１０４は、図９に示す状態遷移図から、開始疑似状態６０１、状態名が「Ｓ０」である状態６１１、状態名が「Ｓ１」である状態６０２、および状態名が「Ｓ２」である状態６０３を取得する。
【００８４】
ステップＳ２０３において、振舞いプログラム生成部１０４は、状態遷移図格納部１０３に格納された状態遷移図から遷移の情報を取得する。遷移の情報は、遷移情報と遷移線とから得られる情報である。
【００８５】
また、振舞いプログラム生成部１０４は、遷移の情報に、遷移元となる状態と、遷移先の情報とを関連付けて取得する。
【００８６】
具体的には、振舞いプログラム生成部１０４は、状態遷移図格納部１０３に格納された状態遷移図から遷移線６１２に対応する遷移情報６１３を取得し、遷移情報６１３に、遷移元の状態名が「Ｓ０」である状態６１１と、遷移先の状態名が「Ｓ１」である状態６０２とを関連付けて取得する。
【００８７】
また、振舞いプログラム生成部１０４は、状態遷移図格納部１０３に格納された状態遷移図から遷移線６０５に対応する遷移情報６０６を取得し、遷移情報６０６に、遷移元の状態名が「Ｓ１」である状態６０２と、遷移先の状態名が「Ｓ２」である状態６０３とを関連付けて取得する。
【００８８】
また、振舞いプログラム生成部１０４は、状態遷移図格納部１０３に格納された状態遷移図から遷移線６１４に対応する遷移情報６１５を取得し、遷移情報６１５に、遷移元の状態名が「Ｓ１」である状態６０２と、遷移先の状態名が「Ｓ０」である状態６１１とを関連付けて取得する。
【００８９】
また、振舞いプログラム生成部１０４は、状態遷移図格納部１０３に格納された状態遷移図から遷移線６０７に対応する遷移情報６０８を取得し、遷移情報６０８に、遷移元の状態名が「Ｓ２」である状態６０３と、遷移先の状態名が「Ｓ２」である状態６０３とを関連付けて取得する。
【００９０】
また、振舞いプログラム生成部１０４は、状態遷移図格納部１０３に格納された状態遷移図から遷移線６０９に対応する遷移情報６１０を取得し、遷移情報６１０に、遷移元の状態名が「Ｓ２」である状態６０３と、遷移先の状態名が「Ｓ１」である状態６０２とを関連付けて取得する。
【００９１】
また、振舞いプログラム生成部１０４は、状態遷移図格納部１０３に格納された状態遷移図から遷移線６０４を取得し、遷移線６０４に、遷移元の状態名が「Ｓｔａｒｔ」である開始疑似状態６０１と、遷移先の状態名が「Ｓ０」である状態６１１とを関連付けて取得する。
【００９２】
図１５に戻り、ステップＳ２０４において、振舞いプログラム生成部１０４は、ステップＳ２０１、ステップＳ２０２、およびステップＳ２０３の各々で取得した図の基本情報、状態の情報、および遷移の情報に基づいて、振舞いプログラムを生成する。
【００９３】
具体的には、振舞いプログラム生成部１０４は、図９に示す状態遷移図における状態名が「Ｓ０」である状態６１１から、例えば図１１に示すような振舞いプログラムを生成する。図１１に示す振舞いプログラムは、少なくとも状態名が「Ｓ０」である状態６１１における遷移の情報を含んでいる。図１１に示す振舞いプログラムでは、イベントが「Ｏｐｅｎ」であるか否かについて、条件分岐を示すｉｆ文で判断する。条件を満たせばアクションである「Ｏｐｅｎ」を実行した後、状態名が「Ｓ１」である状態６０２に遷移する処理を実行する。
【００９４】
また、振舞いプログラム生成部１０４は、図９に示す状態遷移図における状態名が「Ｓ１」である状態６０２から、例えば図１２に示すような振舞いプログラムを生成する。図１２に示す振舞いプログラムは、少なくとも状態名が「Ｓ１」である状態６０２における遷移の情報を含んでいる。図１２に示す振舞いプログラムでは、イベントが「Ａｃｃｅｐｔ」であるか否かについてｉｆ文で判断する。条件を満たせば、次いでガードである「Ｇｕａｒｄ」の条件を満たすか否かについてｉｆ文で判断する。条件を満たせば、アクションである「Ａｃｃｅｐｔ」を実行した後、アクションである「ＳｔａｒｔＴｉｍｅｒ」を実行する。そして、状態名が「Ｓ２」である状態６０３に遷移する処理を実行する。
【００９５】
また、図１２に示す振舞いプログラムでは、イベントが「Ｃｌｏｓｅ」であるか否かについてｉｆ文で判断する。条件を満たせばアクションである「Ｃｌｏｓｅ」を実行した後、状態名が「Ｓ２」である状態６０３に遷移する処理を実行する。
【００９６】
また、振舞いプログラム生成部１０４は、図９に示す状態遷移図における状態名が「Ｓ２」である状態６０３から、例えば図１３に示すような振舞いプログラムを生成する。図１３に示す振舞いプログラムは、少なくとも状態名が「Ｓ２」である状態６０３における遷移の情報を含んでいる。図１３に示す振舞いプログラムでは、イベントが「Ｒｅｃｅｉｖｅ」であるか否かについてｉｆ文で判断する。条件を満たせばアクションである「ＳｔａｒｔＴｉｍｅｒ」を実行した後、状態名が「Ｓ２」である状態６０３に遷移する処理を実行する。
【００９７】
また、図１３に示す振舞いプログラムでは、イベントが「Ｔｉｍｅｏｕｔ」であるか否かについてｉｆ文で判断する。条件を満たせばアクションである「ＳｔａｒｔＴｉｍｅｒ」を実行した後、アクションである「Ｄｉｓｃｏｎｎｅｃｔ」を実行する。そして、状態名が「Ｓ１」である状態６０２に遷移する処理を実行する。
【００９８】
なお、図９に示す状態遷移図における状態名が「Ｓｔａｒｔ」である開始疑似状態６０１から生成する振舞いプログラムについても、上記と同様に生成する。
【００９９】
ステップＳ２０３において、振舞いプログラム生成部１０４は、メッセージの相手を識別する情報を併せて取得し、ステップＳ２０４において生成する振舞いプログラムに含めてもよい。
【０１００】
以上のことから、本実施の形態１によれば、状態遷移図の状態に相当する情報を、状態明示シーケンス図中に明示的に記述することができるため、状態明示シーケンス図と状態遷移図との状態の対応関係が明確となる。また、複数の状態明示シーケンス図内で同一の状態を指定することができるため、同一の状態を１つの状態にまとめた状態遷移図を生成することができる。
【０１０１】
＜実施の形態２＞
実施の形態１では、状態遷移図格納部１０３に格納された状態遷移図に基づいて振舞いプログラムを生成する場合について説明した。本発明の実施の形態２では、状態遷移図から振舞いプログラムを生成する過程で状態遷移モデルを生成することによって、状態遷移図から情報を取得する機能と、振舞いプログラムを生成する機能とを分離している。すなわち、本実施の形態２では、状態遷移図に基づいて状態遷移モデルを生成し、当該状態遷移モデルに基づいて振舞いプログラムを生成することを特徴としている。
【０１０２】
＜構成＞
まず、本実施の形態２によるプログラム生成装置の構成について説明する。
【０１０３】
図１６は、本実施の形態２によるプログラム生成装置１０９の構成の一例を示すブロック図である。
【０１０４】
図１６に示すように、プログラム生成装置１０９は、状態遷移モデル生成部１１０と、状態遷移モデル格納部１１１と、モデル振舞いプログラム生成部１１２とを備えることを特徴としている。以下、図１に示す実施の形態１によるプログラム生成装置１００と同様の構成要素には同一の符号を付して説明を省略し、本実施の形態２の特徴部分を中心に説明する。
【０１０５】
状態遷移モデル生成部１１０およびモデル振舞いプログラム生成部１１２は、例えば、図２に示すプロセッサ１０６によるコンピュータプログラムの実行によって実現される。また、状態遷移モデル格納部１１１は、例えば、図２に示す外部記憶装置１０８によって実現される。
【０１０６】
状態遷移モデル生成部１１０は、状態遷移図格納部１０３に格納された状態遷移図に基づいて、状態遷移モデルを生成する。状態遷移モデル格納部１１１は、状態遷移モデル生成部１１０で生成された状態遷移モデルを格納する。
【０１０７】
モデル振舞いプログラム生成部１１２は、状態遷移モデル格納部１１１に格納された状態遷移モデルに基づいて、振舞いプログラムを生成する。振舞いプログラム格納部１０５は、モデル振舞いプログラム生成部１１２で生成された振舞いプログラムを格納する。
【０１０８】
なお、状態遷移モデルは、状態シーケンス図におけるメッセージの相手を識別する情報を含んでもよい。
【０１０９】
＜動作＞
次に、本実施の形態２によるプログラム生成装置１０９の内部処理手順について説明する。
【０１１０】
プログラム生成装置１０９を起動すると、まず、状態遷移図生成部１０２は、状態明示シーケンス図格納部１０１に格納された少なくとも１つの状態明示シーケンス図に基づいて状態遷移図を生成する状態遷移図生成処理を行う。次いで、状態遷移モデル生成部１１０は、状態遷移図格納部１０３に格納された状態遷移図に基づいて状態遷移モデルを生成する状態遷移モデル生成処理を行う。次いで、モデル振舞いプログラム生成部１１２は、状態遷移モデル格納部１１１に格納された状態遷移モデルに基づいて振舞いプログラムを生成するモデル振舞いプログラム生成処理を行う。以下、図４，５，７，８に示すサーバ３０２について振舞いプログラムを生成する場合を一例として説明する。
【０１１１】
＜状態遷移図生成処理＞
状態遷移図生成部１０２が行う状態遷移図生成処理は、図１４に示すような実施の形態１による状態遷移図生成部１０２と同様である。具体的には、状態遷移図生成部１０２は、図４，５，７，８に示すサーバ３０２について、例えば図９に示す状態遷移図を生成する。
【０１１２】
＜状態遷移モデル生成処理＞
図１７は、状態遷移モデル生成部１１０の動作を示すフローチャートであり、状態遷移モデル生成処理手順を示している。
【０１１３】
ステップＳ３０１において、状態遷移モデル生成部１１０は、状態遷移図格納部１０３に格納された状態遷移図から図の基本情報を取得する。図の基本情報の取得については、図１５のステップＳ２０１と同様である。
【０１１４】
ステップＳ３０２において、状態遷移モデル生成部１１０は、状態遷移図格納部１０３に格納された状態遷移図から状態の情報を取得する。状態の情報の取得については、図１５のステップＳ２０２と同様である。
【０１１５】
ステップＳ３０３において、状態遷移モデル生成部１１０は、状態遷移図格納部１０３に格納された状態遷移図から遷移の情報を取得する。遷移の情報の取得については、図１５のステップＳ２０３と同様である。
【０１１６】
ステップＳ３０４において、状態遷移モデル生成部１１０は、ステップＳ３０１、ステップＳ３０２、およびステップＳ３０３の各々で取得した基本情報、状態の情報、および遷移の情報に基づいて、状態遷移モデルを生成する。
【０１１７】
図１８は、図９に示すサーバの状態遷移図に基づいて生成した状態遷移モデルの一例を示す図である。
【０１１８】
図１８に示す状態遷移モデルは、モデルを示す「Ｍｏｄｅｌ」、状態を示す「Ｓｔａｔｅ」、および遷移を示す「Ｍｅｓｓａｇｅ」の３つの階層構造によって示される。
【０１１９】
「Ｍｏｄｅｌ」は「Ｓｔａｔｅ」、「Ｓｔａｔｅ」は「Ｍｅｓｓａｇｅ」、「Ｍｅｓｓａｇｅ」は遷移の情報を要素とする集合である。なお、「Ｍｏｄｅｌ」、「Ｓｔａｔｅ」、および「Ｍｅｓｓａｇｅ」は、他の要素の情報を含んでもよい。
【０１２０】
「Ｍｏｄｅｌ」は、「Ｍｏｄｅｌ」を一意に識別するための名前を示すＩＤを含んでもよい。「Ｓｔａｔｅ」は、「Ｍｏｄｅｌ」内で一意に識別するための名前を示すＩＤを含んでもよい。「Ｍｅｓｓａｇｅ」は、「Ｓｔａｔｅ」内で一意に識別するための名前を示すＩＤを含んでもよい。
【０１２１】
「Ｍｅｓｓａｇｅ」は、遷移先の状態を示す「ｔａｒｇｅｔ」、遷移情報のイベントを示す「ｅｖｅｎｔ」、ガードを示す「ｇｕａｒｄ」、およびアクションを示す「ａｃｔｉｏｎ」で表される。
【０１２２】
図１８の例では、状態遷移モデルの最上位の階層は、図の基本情報を名前に持つ「Ｍｏｄｅｌ」となっている。ここで、図の基本情報とは、サーバ３０２のライフライン名の「Ｓｅｒｖｅｒ」である。
【０１２３】
「Ｍｏｄｅｌ」は、状態名が「Ｓ０」である「Ｓｔａｔｅ」、状態名が「Ｓ１」である「Ｓｔａｔｅ」、状態名が「Ｓ２」である「Ｓｔａｔｅ」、および状態名が「Ｓｔａｒｔ」である「Ｓｔａｔｅ」の、４つの「Ｓｔａｔｅ」の集合となっている。
【０１２４】
状態名が「Ｓ１」である「Ｓｔａｔｅ」は、メッセージ名が「Ｍ１」である「Ｍｅｓｓａｇｅ」と、メッセージ名が「Ｍ２」である「Ｍｅｓｓａｇｅ」との、２つの「Ｍｅｓｓａｇｅ」の集合となっている。
【０１２５】
メッセージ名が「Ｍ１」である「Ｍｅｓｓａｇｅ」を例として、「Ｍｅｓｓａｇｅ」の要素である遷移の情報について説明する。メッセージ名が「Ｍ１」である「Ｍｅｓｓａｇｅ」には、遷移情報６０６および遷移線６０５の遷移の情報が対応する。状態遷移モデル生成部１１０は、遷移先の状態名である「ｔａｒｇｅｔ」、イベントである「ｅｖｅｎｔ」、ガードである「ｇｕａｒｄ」、およびアクションである「ａｃｔｉｏｎ」を、メッセージ名が「Ｍ１」である「Ｍｅｓｓａｇｅ」として取得する。
【０１２６】
なお、ステップＳ３０３においてメッセージの相手を識別する情報を併せて取得し、当該情報をステップＳ３０４で生成する状態遷移モデルに含めてもよい。
【０１２７】
＜モデル振舞いプログラム生成処理＞
図１９は、モデル振舞いプログラム生成部１１２の動作の一例を示すフローチャートであり、モデル振舞いプログラム生成処理手順を示している。
【０１２８】
ステップＳ４０１において、モデル振舞いプログラム生成部１１２は、状態遷移モデル格納部１１１に格納された状態遷移モデルから図の基本情報を取得する。具体的には、モデル振舞いプログラム生成部１１２は、図１８に示す状態遷移モデルから「Ｍｏｄｅｌ」の名前である「Ｓｅｒｖｅｒ」を取得する。
【０１２９】
ステップＳ４０２において、モデル振舞いプログラム生成部１１２は、状態遷移モデル格納部１１１に格納された状態遷移モデルから状態の情報を取得する。具体的には、モデル振舞いプログラム生成部１１２は、図１８に示す状態遷移モデルから、「Ｓｔａｔｅ」の名前である「Ｓｔａｒｔ」、「Ｓ０」、「Ｓ１」、および「Ｓ２」を取得する。
【０１３０】
ステップＳ４０３において、モデル振舞いプログラム生成部１１２は、状態遷移モデル格納部１１１に格納された状態遷移モデルから遷移の情報を取得する。モデル振舞いプログラム生成部１１２は、遷移の情報として各々の「Ｍｅｓｓａｇｅ」から、「ｔａｒｇｅｔ」、「ｅｖｅｎｔ」、「ｇｕａｒｄ」、および「ａｃｔｉｏｎ」を取得する。また、当該「Ｍｅｓｓａｇｅ」の名前、および当該「Ｍｅｓｓａｇｅ」を要素とする「Ｓｔａｔｅ」の名前を関連付けて取得する。
【０１３１】
以下、図１８に示す状態遷移モデルにおける状態名が「Ｓ１」である「Ｓｔａｔｅ」から取得するメッセージ名が「Ｍ１」である「Ｍｅｓｓａｇｅ」について説明する。
【０１３２】
モデル振舞いプログラム生成部１１２は、「ｔａｒｇｅｔ」として遷移先の状態名である「Ｓ２」と、「ｅｖｅｎｔ」として「Ａｃｃｅｐｔ」と、「ｇｕａｒｄ」として「Ｇｕａｒｄ」と、「ａｃｔｉｏｎ」として「Ａｃｃｅｐｔ」および「ＳｔａｒｔＴｉｍｅｒ」とを、メッセージ名が「Ｍ１」である「Ｍｅｓｓａｇｅ」に関連付けて取得する。そして、モデル振舞いプログラム生成部１１２は、「Ｍｅｓｓａｇｅ」の名前である「Ｍ１」、およびメッセージ名が「Ｍ１」である「Ｍｅｓｓａｇｅ」を要素とする「Ｓｔａｔｅ」の名前である「Ｓ１」を取得する。
【０１３３】
図１９に戻り、ステップＳ４０４において、モデル振舞いプログラム生成部１１２は、ステップＳ４０１、ステップＳ４０２、およびステップＳ４０３の各々で取得した図の基本情報、状態の情報、および遷移の情報に基づいて、振舞いプログラムを生成する。本実施の形態２ではモデル振舞いプログラム生成部１１２が状態遷移モデルから各情報を取得しているが、当該各情報の内容は実施の形態１において振舞いプログラム生成部１０４が取得する各情報と同様である。従って、本実施の形態２によるモデル振舞いプログラム生成部１１２が生成する振舞いプログラムと、実施の形態１による振舞いプログラム生成部１０４が生成する振舞いプログラムとは同様となる。
【０１３４】
具体的には、モデル振舞いプログラム生成部１１２は、図１８に示す状態遷移モデルにおける状態名が「Ｓ０」である「Ｓｔａｔｅ」から、例えば少なくとも図１１に示す振舞いプログラムで示される処理と同様の内容を含む振舞いプログラムを生成する。
【０１３５】
また、モデル振舞いプログラム生成部１１２は、図１８に示す状態遷移モデルにおける状態名が「Ｓ１」である「Ｓｔａｔｅ」から、例えば少なくとも図１２に示す振舞いプログラムで示される処理と同様の内容を含む振舞いプログラムを生成する。
【０１３６】
また、モデル振舞いプログラム生成部１１２は、図１８に示す状態遷移モデルにおける状態名が「Ｓ２」である「Ｓｔａｔｅ」から、例えば少なくとも図１３に示す振舞いプログラムで示される処理と同様の内容を含む振舞いプログラムを生成する。
【０１３７】
なお、図１８に示す状態遷移モデルにおける状態名が「Ｓｔａｒｔ」である「Ｓｔａｔｅ」から生成する振舞いプログラムについても、上記と同様に生成する。
【０１３８】
ステップＳ４０３において、モデル振舞いプログラム生成部１１２は、メッセージの相手を識別する情報を併せて取得し、ステップＳ４０４において生成する振舞いプログラムに含めてもよい。
【０１３９】
以上のことから、本実施の形態２によれば、実施の形態１による効果に加えて、プログラム生成機能がモデル振舞いプログラム生成部１１２に局所化され、状態遷移図から情報を取得する機能は状態遷移モデル生成部１１０に分離されるため、例えば既存のプログラム生成装置が対象とする状態遷移図とは描き方が異なる状態遷移図から振舞いプログラムを生成することになったとしても、既存のモデル振舞いプログラム生成部１１２については変更する必要がない。
【０１４０】
＜実施の形態３＞
本発明の実施の形態３では、状態明示シーケンス図および状態遷移図において、アクションの成功および失敗による遷移の分岐を明示し、当該遷移の分岐を状態遷移モデルおよび振舞いプログラムにも反映している。すなわち、本実施の形態３では、状態明示シーケンス図から振舞いプログラムを生成するまでの過程において、アクションの成功および失敗に特化した遷移の分岐を扱うことが可能であることを特徴としている。
【０１４１】
＜構成＞
本実施の形態３によるプログラム生成装置は、図１に示す実施の形態１によるプログラム生成装置１００、または図１６に示す実施の形態２によるプログラム生成装置１０９と同様の構成要素を有している。また、本実施の形態３によるプログラム生成装置は、図１に示す実施の形態１によるプログラム生成装置１００、または図１６に示す実施の形態２によるプログラム生成装置１０９と同様のハードウェア構成によって実現される。以下、本実施の形態３の特徴部分を中心に説明する。
【０１４２】
図２０は、クライアント３０１とサーバ３０２との間における通信の接続成功時の処理の手順を示す状態明示シーケンス図の一例を示す図である。
【０１４３】
図２０に示す状態明示シーケンス図では、アクション分岐状態８０１，８０５、およびアクション成否疑似状態８０２，８０６等が示されている。
【０１４４】
アクション分岐状態で実行されるアクションは、実施の成功または失敗によって遷移が分岐することを示している。なお、アクション分岐状態の矩形中の文字列は状態名であり、クライアント３０１における状態を一意に識別する名前を示すＩＤである。
【０１４５】
アクション分岐状態の直後には、アクション成否疑似状態を接続する。アクション成否疑似状態では、例えばイベントガードメッセージに対応するガードによって成功または失敗を示し、さらに成功時または失敗時に実行するアクションがあれば記述する。例えば、ガードの「Ｓｕｃｃｅｓｓ」は成功の遷移を示し、ガードの「Ｆａｉｌｕｒｅ」は失敗の遷移を示す。
【０１４６】
図２０に示すように、クライアント３０１は、アクション分岐状態８０１から通信処理を開始する。アクション分岐状態８０１は、外部からイベントである「Ｃｏｎｎｅｃｔ」が発生すると、サーバ３０２に対してアクションである「Ｃｏｎｎｅｃｔ」を実行する。図２０の例では、直後のアクション成否疑似状態８０２におけるガード８０３が「Ｓｕｃｃｅｓｓ」となっているため、アクション分岐状態８０１におけるアクションである「Ｃｏｎｎｅｃｔ」が成功したとき、区切り状態８０４が示す状態名である「Ｃ２」の状態に遷移する。
【０１４７】
一方、サーバ３０２は、アクション分岐状態８０５から通信処理を開始する。アクション分岐状態８０５は、クライアント３０１からのイベントである「Ａｃｃｅｐｔ」が発生し、ガードである「Ｇｕａｒｄ」の条件を満たすと、アクションである「Ａｃｃｅｐｔ」を実行する。図２０の例では、直後のアクション成否疑似状態８０６のガード８０７が「Ｓｕｃｃｅｓｓ」となっているため、アクション分岐状態８０５におけるアクションである「Ａｃｃｅｐｔ」が成功したとき、アクションである「ＳｔａｒｔＴｉｍｅｒ」を実行した後、区切り状態８０５が示す状態名である「Ｓ２」の状態に遷移する。
【０１４８】
図２１は、クライアント３０１とサーバ３０２との間における通信の接続失敗時の処理の手順を示す状態明示シーケンス図の一例を示す図である。
【０１４９】
図２１に示す状態明示シーケンス図では、アクション分岐状態８０９，８１３、およびアクション成否疑似状態８１０，８１４等が示されている。
【０１５０】
図２１に示すように、その他の状態明示シーケンス図（ここでは、図２０に示す状態明示シーケンス図）で示されたアクション分岐状態の他方（ここでは、Ｆａｉｌｕｒｅ）の遷移を記述する場合、アクション分岐状態は共通の状態（ここでは、クライアントは「Ｃ１」、サーバは「Ｓ１」）を与える。
【０１５１】
クライアント３０１は、アクション分岐状態８０９から通信処理を開始する。アクション分岐状態８０９は、外部からイベントである「Ｃｏｎｎｅｃｔ」が発生すると、サーバ３０２に対してアクションである「Ｃｏｎｎｅｃｔ」を実行する。このような遷移の情報は、図２０に示すアクション分岐状態８０１における遷移の情報と同一である。
【０１５２】
図２１に示すアクション分岐状態８０９は、図２０に示すアクション分岐状態８０１と状態名が同一である。従って、図２０に示すアクション成否疑似状態８０２における成功時の遷移と、図２１に示すアクション成否疑似状態８１０における失敗時の遷移とは対になることが分かる。アクション成否疑似状態８１０における失敗時の遷移では、区切り状態８１２が示す状態名が「Ｃ１」の状態に遷移することが示されている。
【０１５３】
一方、サーバ３０２は、アクション分岐状態８１３から通信処理を開始する。アクション分岐状態８１３は、クライアント３０１からのイベントである「Ａｃｃｅｐｔ」が発生し、ガードである「Ｇｕａｒｄ」の条件を満たすと、アクションである「Ａｃｃｅｐｔ」を実行する。このような遷移の情報は、図２０に示すアクション分岐状態８０５における遷移の情報と同一である。
【０１５４】
図２１に示すアクション分岐状態８１３は、図２０に示すアクション分岐状態８０５と状態名が同一である。従って、図２０に示すアクション成否疑似状態８０６における成功時の遷移と、図２１に示すアクション成否疑似状態８１４における失敗時の遷移とは対になることが分かる。アクション成否疑似状態８１４における失敗時の遷移では、区切り状態８１６が示す状態名が「Ｓ１」の状態に遷移することが示されている。
【０１５５】
本実施の形態３によるプログラム生成装置における状態遷移図生成部１０２は、状態明示シーケンス図格納部１０１に格納された少なくとも１つの状態明示シーケンス図に基づいて、アクションの成功および失敗による遷移の分岐があれば、当該分岐を反映させた状態遷移図を生成する。状態遷移図格納部１０３は、状態遷移図生成部１０２が生成した状態遷移図を格納する。すなわち、状態明示シーケンス図格納部１０１に格納される状態明示シーケンス図、および状態遷移図格納部１０３に格納される状態遷移図には、アクションの成功および失敗による遷移の分岐が含まれていてもよい。
【０１５６】
図２２は、図５，７，８，２０，２１に示す状態明示シーケンス図におけるサーバ３０２に基づいて生成される状態遷移図の一例を示す図であり、アクションの成功および失敗による遷移の分岐を含む状態遷移図を示している。
【０１５７】
図２２において、アクション分岐遷移線は途中で２つに分かれ、分かれた遷移線の各々はアクションの成功または失敗を示している。また、アクション分岐遷移線には、アクション分岐遷移情報、アクション成功時遷移情報、およびアクション失敗時遷移情報が関連付けられている。例えば、アクション成功時遷移情報のガードは「Ｓｕｃｃｅｓｓ」、アクション失敗時遷移情報のガードは「Ｆａｉｌｕｒｅ」によって区別する。なお、アクション成功時遷移情報およびアクション失敗時遷移情報では、アクションの処理を記述してもよい。
【０１５８】
図２２の例では、状態６０２のアクション分岐遷移線９０１には、アクション分岐遷移情報９０２、アクション成功時遷移情報９０３、およびアクション失敗時遷移情報９０４が対応している。状態６０２は、イベントである「Ａｃｃｅｐｔ」が発生し、ガードである「Ｇｕａｒｄ」を満たすと、アクションである「Ａｃｃｅｐｔ」を実行する。アクションである「Ａｃｃｅｐｔ」が成功すると、アクション成功時遷移情報９０３が示すアクションである「ＳｔａｒｔＴｉｍｅｒ」を実行した後、状態６０３に遷移する。また、アクションである「Ａｃｃｅｐｔ」が失敗すると、アクション失敗時遷移情報の遷移が示す状態６０２に遷移する。
【０１５９】
本実施の形態３によるプログラム生成装置が実施の形態１によるプログラム生成装置１００と同様の構成要素を有する場合において、振舞いプログラム生成部１０４は、状態遷移図格納部１０３に格納された状態遷移図に基づいて、アクションの成功および失敗による遷移の分岐があれば、当該分岐を反映させた振舞いプログラムを生成する。振舞いプログラム格納部１０５は、振舞いプログラム生成部１０４が生成した振舞いプログラムを格納する。すなわち、振舞いプログラム格納部１０５に格納される振舞いプログラムには、アクションの成功および失敗による遷移の分岐が含まれていてもよい。
【０１６０】
図２３は、図２２に示すサーバの状態遷移図に基づいて生成した、状態名が「Ｓ１」である状態６０２の振舞いプログラムの一部の一例を疑似コードで示した図である。
【０１６１】
図２３に示す振舞いプログラムは、状態名が「Ｓ１」である状態６０２に接続されているアクション分岐遷移線９０１に対応するアクション分岐遷移情報９０２、アクション成功時遷移情報９０３、およびアクション失敗時遷移情報９０４の振舞いを示している。
【０１６２】
具体的には、図２３に示す振舞いプログラムは、アクション分岐遷移情報９０２について、イベントである「Ａｃｃｅｐｔ」が発生し、ガードである「Ｇｕａｒｄ」の条件を満たせば、アクションである「Ａｃｃｅｐｔ」を実行することを示している。アクションである「Ａｃｃｅｐｔ」が失敗すると、アクション失敗時遷移情報９０４によって、状態名が「Ｓ１」である状態６０２に状態が遷移することを示している。アクションである「Ａｃｃｅｐｔ」が成功すると、アクション成功時遷移情報９０３によって「ＳｔａｒｔＴｉｍｅｒ」を実行し、状態名が「Ｓ２」である状態６０３に状態が遷移することを示している。
【０１６３】
本実施の形態３によるプログラム生成装置が実施の形態２によるプログラム生成装置１０９と同様の構成要素を有する場合において、状態遷移モデル生成部１１０は、状態遷移図格納部１０３に格納された状態遷移図に基づいて、アクションの成功および失敗による遷移の分岐があれば、当該分岐を反映させた状態遷移モデルを生成する。状態遷移モデル格納部１１１は、状態遷移モデル生成部１１０が生成した状態遷移モデルを格納する。すなわち、状態遷移モデル格納部１１１に格納される状態遷移モデルには、アクションの成功および失敗による遷移の分岐が含まれていてもよい。
【０１６４】
図２４は、図２２に示すサーバの状態遷移図に基づいて生成した、状態名が「Ｓ１」である状態６０２に関する状態遷移モデルの一例を示す図である。
【０１６５】
図２４に示す状態遷移モデルは、図２２に示す状態名が「Ｓ１」である状態６０２におけるアクション分岐遷移線９０１に関する遷移を、メッセージ名が「Ｍ１」である「Ｍｅｓｓａｇｅ」、メッセージ名が「Ｍ２」である「Ｍｅｓｓａｇｅ」、およびメッセージ名が「Ｍ３」である「Ｍｅｓｓａｇｅ」によって示している。アクション分岐遷移情報９０２は、図２４に示す「Ｍ１」の「Ｍｅｓｓａｇｅ」に対応している。アクション成功時遷移情報９０３は、図２４に示す「Ｍ２」の「Ｍｅｓｓａｇｅ」に対応している。アクション失敗時遷移情報９０４は、図２４に示す「Ｍ３」の「Ｍｅｓｓａｇｅ」に対応している。
【０１６６】
図２４において、「Ｍ１」の「ａｃｔｉｏｎ」、「Ｍ２」の「ｇｕａｒｄ」、および「Ｍ３」の「ｇｕａｒｄ」には、文字列の末尾に「Ｉｄ０１」が付与されており、これらが１つのアクション分岐遷移線９０１に関する遷移であることを示している。
【０１６７】
本実施の形態３によるプログラム生成装置が実施の形態２によるプログラム生成装置１０９と同様の構成要素を有する場合において、モデル振舞いプログラム生成部１１２は、状態遷移モデル格納部１１１に格納された状態遷移モデルに基づいて、アクションの成功および失敗による遷移の分岐があれば、当該分岐を反映させた振舞いプログラムを生成する。振舞いプログラム格納部１０５は、モデル振舞いプログラム生成部１１２が生成した振舞いモデルを格納する。すなわち、振舞いプログラム格納部１０５に格納される振舞いプログラムには、アクションの成功および失敗による遷移の分岐が含まれていてもよい。
【０１６８】
モデル振舞いプログラム生成部１１２が図２４に示す状態遷移モデルに基づいて生成する振舞いプログラムは、図２３に示す振舞いプログラムと同様である。
【０１６９】
＜動作＞
次に、本実施の形態３によるプログラム生成装置の内部処理手順について説明する。
【０１７０】
本実施の形態３によるプログラム生成装置が実施の形態１によるプログラム生成装置１００と同様の構成要素を有する場合において、当該プログラム生成装置を起動すると、まず、状態遷移図生成部１０２は、状態明示シーケンス図格納部１０１に格納された少なくとも１つの状態明示シーケンス図に基づいて状態遷移図を生成する状態遷移図生成処理を行う。次いで、振舞いプログラム生成部１０４は、状態遷移図格納部１０３に格納された状態遷移図に基づいて振舞いプログラムを生成する振舞いプログラム生成処理を行う。
【０１７１】
また、本実施の形態３によるプログラム生成装置が実施の形態２によるプログラム生成装置１０９と同様の構成要素を有する場合において、状態遷移モデル生成部１１０は、状態遷移図格納部１０３に格納された状態遷移図に基づいて状態遷移モデルを生成する状態遷移モデル生成処理を行う。次いで、モデル振舞いプログラム生成部１１２は、状態遷移モデル格納部１１１に格納された状態遷移モデルに基づいて振舞いプログラムを生成するモデル振舞いプログラム生成処理を行う。
【０１７２】
以下、図５，７，８，２０，２１に示すサーバ３０２を一例として説明する。以下では、アクションによる遷移の分岐を含む場合の処理について説明する。アクションによる遷移の分岐を含まない場合の処理は、実施の形態１または実施の形態２と同様である。
【０１７３】
＜状態遷移図生成処理＞
図２５は、状態遷移図生成部１０２の動作の一例を示すフローチャートであり、状態遷移図生成処理手順を示している。
【０１７４】
ステップＳ５０１において、状態遷移図生成部１０２は、アクションによる遷移の分岐を含む状態明示シーケンス図から図の基本情報を取得する。図の基本情報としては、少なくとも状態遷移図の生成の対象となっているライフライン名を取得する。具体的には、状態遷移図生成部１０２は、サーバ３０２が状態遷移図の生成の対象となっているため、サーバ３０２を示す矩形の内部に示されたライフライン名である「Ｓｅｒｖｅｒ」を図の基本情報として取得する。
【０１７５】
ステップＳ５０２において、状態遷移図生成部１０２は、アクションによる遷移の分岐を含む状態明示シーケンス図から状態の情報を取得する。具体的には、状態遷移図生成部１０２は、サーバ３０２の状態として、開始疑似状態５６０、状態名が「Ｓ１」であるアクション分岐状態８０５、状態名が「Ｓ１」であるアクション分岐状態８１３、状態名が「Ｓ１」である状態３１２、状態名が「Ｓ２」である状態４０３、状態名が「Ｓ２」である状態５０３、状態名が「Ｓ０」である状態５０５、状態名が「Ｓ１」である状態５０６、状態名が「Ｓ２」である区切り状態８０８、状態名が「Ｓ１」である区切り状態８８１６、状態名が「Ｓ２」である区切り状態３１３、状態名が「Ｓ２」である区切り状態４０４、状態名が「Ｓ１」である区切り状態５０４、状態名が「Ｓ０」である区切り状態５０７を取得する。なお、開始疑似状態５６０の状態名は「Ｓｔａｒｔ」とする。
【０１７６】
上記で取得した各状態のうち、状態名が等しい状態は同一の状態とする。従って、状態遷移図生成部１０２は、図４，５，７，８，２０，２１から、状態名が「Ｓｔａｒｔ」、状態名が「Ｓ０」、状態名が「Ｓ１」、および状態名が「Ｓ２」の４つの状態を取得する。
【０１７７】
ステップＳ５０３において、状態遷移図生成部１０２は、アクションによる遷移の分岐を含む状態明示シーケンス図からメッセージの情報を取得する。具体的には、状態遷移図生成部１０２は、状態明示シーケンス図に示された状態ごとに、その状態に関係するイベントガードメッセージ、アクションメッセージ、および複合メッセージのうちの少なくとも１つを取得する。また、メッセージの情報には、対象の状態名、アクション分岐状態か否か、アクション分岐状態であればその直後に接続されたアクション成否疑似状態におけるメッセージの情報、否であれば遷移先の状態名を関連付けて取得する。
【０１７８】
アクション成否疑似状態ごとに、その状態に関係するイベントガードメッセージ、アクションメッセージ、および複合メッセージのうちの少なくとも１つを取得する。また、メッセージの情報には、遷移先の状態名、およびアクションの成功または失敗のいずれであるかを関連付けて取得する。
【０１７９】
例えば、状態遷移図生成部１０２は、サーバ３０２のアクション分岐状態におけるメッセージの情報（以下、（Ａ）とする）として、アクション分岐状態８０５からイベントである「Ａｃｃｅｐｔ」、ガードである「Ｇｕａｒｄ」、およびアクションである「Ａｃｃｅｐｔ」を取得する。また、状態遷移図生成部１０２は、対象の状態名である「Ｓ１」、アクション分岐状態であること、およびアクション分岐状態８０５の直後に接続されたアクション成否疑似状態におけるメッセージの情報を関連付けて取得する。状態遷移図生成部１０２は、上記の（Ａ）に関連付けられるサーバ３０２のアクション成否疑似状態におけるメッセージの情報として、アクション成否疑似状態８０６からガードである「Ｓｕｃｃｅｓｓ」、およびアクションである「ＳｔａｒｔＴｉｍｅｒ」を取得する。また、状態遷移図生成部１０２は、遷移先の状態名である「Ｓ２」、およびアクションの成功を示すメッセージであることを関連付けて取得する。
【０１８０】
一方、状態遷移図生成部１０２は、サーバ３０２のアクション分岐状態におけるメッセージの情報（以下、（Ｂ）とする）として、アクション分岐状態８１３からイベントである「Ａｃｃｅｐｔ」、ガードである「Ｇｕａｒｄ」、およびアクションである「Ａｃｃｅｐｔ」を取得する。また、状態遷移図生成部１０２は、対象の状態名である「Ｓ１」、アクション分岐状態であること、およびアクション分岐状態８１３の直後に接続されたアクション成否疑似状態におけるメッセージの情報を関連付けて取得する。状態遷移図生成部１０２は、上記の（Ｂ）に関連付けられるサーバ３０２のアクション成否疑似状態におけるメッセージの情報として、アクション成否疑似状態８１４からガードである「Ｆａｉｌｕｒｅ」を取得する。また、状態遷移図生成部１０２は、遷移先の状態名である「Ｓ１」、およびアクションの失敗を示すメッセージであることを関連付けて取得する。
【０１８１】
上記の（Ａ），（Ｂ）は、いずれもアクション分岐状態であること、いずれも対象の状態名が「Ｓ１」で同一であること、いずれもイベント、ガード、およびアクションが同一であること、上記の（Ａ）ではアクションの成功を示すアクション成否疑似状態が接続されていること、上記の（Ｂ）ではアクションの失敗を示すアクション成否疑似状態が接続されていることから、これらが１つのアクションが分岐する遷移であることが分かる。
【０１８２】
なお、図５，７，８におけるメッセージの情報の取得は、実施の形態１と同様である。
【０１８３】
図２５に戻り、ステップＳ５０４において、状態遷移図生成部１０２は、ステップＳ５０１、ステップＳ５０２、ステップＳ５０３の各々で取得した図の基本情報、状態の情報、および遷移の情報に基づいて、アクションによる遷移の分岐を含む状態遷移図を生成する。アクションによる遷移の分岐を含む状態遷移図には、図の基本情報も含まれる。具体的には、状態遷移図生成部１０２は、図５，７，８，２０，２１に示すサーバ３０２の状態明示シーケンス図に基づいて、例えば図２２に示すような状態遷移図を生成する。
【０１８４】
なお、上記のステップＳ４０３において、状態遷移図生成部１０２は、メッセージの相手を識別する情報を併せて取得し、ステップＳ４０４において生成する状態遷移図に含めてもよい。
【０１８５】
＜振舞いプログラム生成処理＞
図２６は、振舞いプログラム生成部１０４の動作の一例を示すフローチャートであり、振舞いプログラム生成処理手順を示している。
【０１８６】
ステップＳ６０１において、振舞いプログラム生成部１０４は、アクションによる遷移の分岐を含む状態遷移図から図の基本情報を取得する。具体的には、振舞いプログラム生成部１０４は、図２２では図示していないが、振舞いプログラムの生成の対象となっているライフライン名である「Ｓｅｒｖｅｒ」を取得する。
【０１８７】
ステップＳ６０２において、振舞いプログラム生成部１０４は、アクションによる遷移の分岐を含む状態遷移図から状態の情報を取得する。具体的には、振舞いプログラム生成部１０４は、図２２に示す状態遷移図から、状態名が「Ｓｔａｒｔ」である開始疑似状態６０１、状態名が「Ｓ０」である状態６１１、状態名が「Ｓ１」である状態６０２、および状態名が「Ｓ２」である状態６０３を取得する。
【０１８８】
ステップＳ６０３において、振舞いプログラム生成部１０４は、アクションによる遷移の分岐を含む状態遷移図から遷移の情報を取得する。
【０１８９】
ここで、図２２に示す状態遷移図におけるアクション分岐遷移線９０１に関係する遷移を一例として説明する。振舞いプログラム生成部１０４は、アクション分岐遷移線９０１に関係する遷移情報として、アクション分岐遷移情報９０２、アクション成功時遷移情報９０３、およびアクション失敗時遷移情報９０４を取得する。
【０１９０】
振舞いプログラム生成部１０４は、アクション分岐遷移線９０１に関係する遷移は、状態名が「Ｓ１」である状態６０２において発生し、アクションが成功すると状態名が「Ｓ２」である状態６０３に遷移し、アクションが失敗すると状態名が「Ｓ１」である状態６０２に遷移することを、上記の遷移情報に関連付けて取得する。
【０１９１】
図２６に戻り、ステップＳ６０４において、振舞いプログラム生成部１０４は、ステップＳ６０１、ステップＳ６０２、およびステップＳ６０３の各々で取得した図の基本情報、状態の情報、および遷移の情報に基づいて、アクションによる遷移の分岐を含む振舞いプログラムを生成する。
【０１９２】
具体的には、振舞いプログラム生成部１０４は、図２２に示す状態遷移図における状態名が「Ｓ１」である状態６０２から、例えば図２３に示すような振舞いプログラムを生成する。
【０１９３】
図２３に示す振舞いプログラムでは、アクション分岐遷移情報９０２のイベントである「Ａｃｃｅｐｔ」が発生したか否かについて、例えばｉｆ文で判断する。条件を満たせば、次いでアクション分岐遷移情報９０２のガードである「Ｇｕａｒｄ」の条件を満たすか否かについて、例えばｉｆ文で判断する。条件を満たせば、アクション分岐遷移情報９０２のアクションである「Ａｃｃｅｐｔ」を、例えばｔｒｙ文で実行する。次いで、アクション失敗時遷移情報９０４のアクションを実行した後、状態名が「Ｓ１」である状態６０２に遷移する処理を、例えばｃａｔｃｈ文で実行する。なお、図２３に示すアクション失敗時遷移情報９０４にはアクションがないため実行されない。また、アクション成功時遷移情報９０３のアクションである「ＳｔａｒｔＴｉｍｅｒ」を実行した後、状態名が「Ｓ２」である状態６０３に遷移する処理を、例えばｔｒｙ文およびｃａｔｃｈ文の外で行う。
【０１９４】
これにより、「Ａｃｃｅｐｔ」処理が失敗すると、ｃａｔｃｈ文の処理が実行される。また、「Ａｃｃｅｐｔ」処理が成功すると、ｃａｔｃｈ文の処理は実行されず、ｔｒｙ文およびｃａｔｃｈ文の外の処理が実行される。
【０１９５】
なお、ステップＳ６０３において、振舞いプログラム生成部１０４は、メッセージの相手を識別する情報を併せて取得し、ステップＳ６０４において生成する振舞いプログラムに含めてもよい。
【０１９６】
＜状態遷移モデル生成処理＞
図２７は、状態遷移モデル生成部１１０の動作を示すフローチャートであり、状態遷移モデル生成処理手順を示している。
【０１９７】
ステップＳ７０１において、状態遷移モデル生成部１１０は、アクションによる遷移の分岐を含む状態遷移図から図の基本情報を取得する。図の基本情報の取得については、図２６のステップＳ６０１と同様である。
【０１９８】
ステップＳ７０２において、状態遷移モデル生成部１１０は、アクションによる遷移の分岐を含む状態遷移図から状態の情報を取得する。状態の情報の取得については、図２６のステップＳ６０２と同様である。
【０１９９】
ステップＳ７０３において、状態遷移モデル生成部１１０は、アクションによる遷移の分岐を含む状態遷移図から遷移の情報を取得する。遷移の情報の取得については、図２６のステップＳ６０３と同様である。
【０２００】
ステップＳ７０４において、状態遷移モデル生成部１１０は、ステップＳ７０１、ステップＳ７０２、およびステップＳ７０３の各々で取得した基本情報、状態の情報、および遷移の情報に基づいて、状態遷移モデルを生成する。
【０２０１】
具体的には、状態遷移モデル生成部１１０は、図２２に示す状態遷移図における状態名が「Ｓ１」である状態６０２から、例えば図２４に示すような状態遷移モデルを生成する。
【０２０２】
図２４に示す状態遷移モデルでは、アクション分岐遷移情報９０２、アクション成功時遷移情報９０３、およびアクション失敗時遷移情報９０４を、それぞれ別個の「Ｍｅｓｓａｇｅ」として生成している。これらは、アクション分岐遷移線９０１に関係する１つの遷移であるため、同一のＩＤを割り当てる。図２４では、アクション分岐遷移情報９０２のアクションである「Ａｃｃｅｐｔ」の末尾、アクション成功時遷移情報９０３のガードである「Ｓｕｃｃｅｓｓ」の末尾、およびアクション失敗時遷移情報９０４のガードである「Ｆａｉｌｕｒｅ」の末尾に同一のＩＤである「Ｉｄ０１」を割り当てている。
【０２０３】
なお、ステップＳ７０３においてメッセージの相手を識別する情報を併せて取得し、当該情報をステップＳ７０４で生成する状態遷移モデルに含めてもよい。
【０２０４】
＜モデル振舞いプログラム生成処理＞
図２８は、モデル振舞いプログラム生成部１１２の動作の一例を示すフローチャートであり、モデル振舞いプログラム生成処理手順を示している。以下、図２２に示す状態遷移図におけるアクション分岐遷移線９０１に関係する遷移を例に説明する。
【０２０５】
ステップＳ８０１において、モデル振舞いプログラム生成部１１２は、アクションによる遷移の分岐を含む状態遷移モデルから図の基本情報を取得する。具体的には、モデル振舞いプログラム生成部１１２は、図２４に示す状態遷移モデルでは省略されているが、「Ｍｏｄｅｌ」の名前である「Ｓｅｒｖｅｒ」を取得する。
【０２０６】
ステップＳ８０２において、モデル振舞いプログラム生成部１１２は、アクションによる遷移の分岐を含む状態遷移モデルから状態の情報を取得する。具体的には、モデル振舞いプログラム生成部１１２は、図２４に示す状態遷移モデルから、「Ｓｔａｔｅ」の状態名である「Ｓ１」を取得する。なお、省略された開始疑似状態および他の状態についても同様に取得する。
【０２０７】
ステップＳ８０３において、モデル振舞いプログラム生成部１１２は、アクションによる遷移の分岐を含む状態遷移モデルから遷移の情報を取得する。
【０２０８】
以下、図２４に示す状態遷移モデルにおける状態名が「Ｓ１」である「Ｓｔａｔｅ」における、図２２に示す状態遷移図におけるアクション分岐遷移線９０１に関係する遷移の「Ｍｅｓｓａｇｅ」を例に説明する。
【０２０９】
モデル振舞いプログラム生成部１１２は、名前が「Ｍ１」である「Ｍｅｓｓａｇｅ」の遷移の情報として、「ｅｖｅｎｔ」である「Ａｃｃｅｐｔ」と、「ｇｕａｒｄ」である「Ｇｕａｒｄ」と、「ａｃｔｉｏｎ」である「Ａｃｃｅｐｔ」（ＩＤは「Ｉｄ０１」）とを取得する。そして、モデル振舞いプログラム生成部１１２は、「Ｍｅｓｓａｇｅ」の名前である「Ｍ１」、および名前が「Ｍ１」である「Ｍｅｓｓａｇｅ」を要素とする「Ｓｔａｔｅ」の名前である「Ｓ１」を関連付けて取得する。
【０２１０】
また、モデル振舞いプログラム生成部１１２は、名前が「Ｍ２」である「Ｍｅｓｓａｇｅ」の遷移の情報として、「ｔａｒｇｅｔ」である「Ｓ２」と、「ｇｕａｒｄ」である「Ｓｕｃｃｅｓｓ」（ＩＤは「Ｉｄ０１」）と、「ａｃｔｉｏｎ」である「ＳｔａｒｔＴｉｍｅｒ」とを取得する。そして、モデル振舞いプログラム生成部１１２は、「Ｍｅｓｓａｇｅ」の名前である「Ｍ２」、および名前が「Ｍ２」である「Ｍｅｓｓａｇｅ」を要素とする「Ｓｔａｔｅ」の名前である「Ｓ１」を関連付けて取得する。
【０２１１】
また、モデル振舞いプログラム生成部１１２は、名前が「Ｍ３」である「Ｍｅｓｓａｇｅ」の遷移の情報として、「ｔａｒｇｅｔ」である「Ｓ１」、および「ｇｕａｒｄ」である「Ｆａｉｌｕｒｅ」（ＩＤは「Ｉｄ０１」）を取得する。そして、モデル振舞いプログラム生成部１１２は、「Ｍｅｓｓａｇｅ」の名前である「Ｍ３」、および名前が「Ｍ３」である「Ｍｅｓｓａｇｅ」を要素とする「Ｓｔａｔｅ」の名前である「Ｓ１」を関連付けて取得する。
【０２１２】
上記より、「Ｍ１」の「ａｃｔｉｏｎ」には「Ｉｄ０１」のアクションがあること、「Ｍ２」の「ｇｕａｒｄ」には「Ｉｄ０１」の「Ｓｕｃｃｅｓｓ」があること、「Ｍ３」には「Ｉｄ０１」の「Ｆａｉｌｕｒｅ」があること、および、いずれの「Ｍｅｓｓａｇｅ」も状態名が「Ｓ１」の状態の要素であることから、これらの「Ｍｅｓｓａｇｅ」は１つのアクション分岐遷移線９０１であることが分かる。なお、アクション分岐遷移情報９０２は「Ｍ１」、アクション成功時遷移情報９０３は「Ｍ２」、およびアクション失敗時遷移情報９０４は「Ｍ３」に対応する。
【０２１３】
図２８に戻り、ステップＳ８０４において、モデル振舞いプログラム生成部１１２は、ステップＳ８０１、ステップＳ８０２、およびステップＳ８０３の各々で取得した図の基本情報、状態の情報、および遷移の情報に基づいて、振舞いプログラムを生成する。
【０２１４】
図２８のステップＳ８０４における処理は、図２６のステップＳ６０４と同様である。すなわち、図２８ではモデル振舞いプログラム生成部１１２が状態遷移モデルから各情報を取得しているが、当該各情報の内容は図２６において振舞いプログラム生成部１０４が取得する各情報と同様である。従って、図２８においてモデル振舞いプログラム生成部１１２が生成する振舞いプログラムと、図２６において振舞いプログラム生成部１０４が生成する振舞いプログラムとは、同様となる。
【０２１５】
具体的には、モデル振舞いプログラム生成部１１２は、図２４に示す状態遷移モデルにおける状態名が「Ｓ１」である「Ｓｔａｔｅ」の名前が「Ｍ１」である「Ｍｅｓｓａｇｅ」、名前が「Ｍ２」である「Ｍｅｓｓａｇｅ」、および名前が「Ｍ３」である「Ｍｅｓｓａｇｅ」から、例えば少なくとも図２３に示す振舞いプログラムで示される処理と同様の振舞いを行う振舞いプログラムを生成する。
【０２１６】
ステップＳ８０３において、モデル振舞いプログラム生成部１１２は、メッセージの相手を識別する情報を併せて取得し、ステップＳ８０４において生成する振舞いプログラムに含めてもよい。
【０２１７】
以上のことから、本実施の形態３によれば、実施の形態１または実施の形態２による効果に加えて、アクションの成功および失敗による遷移の分岐を明示することができる。また、アクションの成功および失敗による分岐を振舞いプログラムとして生成することができる。
【０２１８】
なお、本発明は、その発明の範囲内において、各実施の形態を自由に組み合わせたり、各実施の形態を適宜、変形、省略することが可能である。
【符号の説明】
【０２１９】
１００  プログラム生成装置、１０１  状態明示シーケンス図格納部、１０２  状態遷移図生成部、１０３  状態遷移図格納部、１０４  振舞いプログラム生成部、１０５  振舞いプログラム格納部、１０６  プロセッサ、１０７  メモリ、１０８  外部記憶装置、１０９  プログラム生成装置、１１０  状態遷移モデル生成部、１１１  状態遷移モデル格納部、１１２  モデル振舞いプログラム生成部、２０１，２０２  ライフライン、２０３  開始疑似状態、２０５〜２０７  状態、２０８，２０９  区切り状態、２１０，２１１  イベントガードメッセージ線、２１２  イベント、２１３  ガード、２１４  アクションメッセージ線、２１５，２１７  アクション、２１６  複合メッセージ線、２１８  イベントガード、２１９〜２２３，２２５  接続線、２２６  外部イベント発生源、３０１  クライアント、３０２  サーバ、３１０，３１２  状態、３１１，３１３  区切り状態、４０１，４０３  状態、４０２，４０４  区切り状態、５０１，５０３，５０５，５０６  状態、５０２，５０４，５０７  区切り状態、５５０，５６０  開始疑似状態、６０１  開始疑似状態、６０２，６０３，６１１  状態、６０４，６０５，６０７，６０９，６１２，６１４  遷移線、６０６，６０８，６１０，６１３，６１５  遷移情報、７０１  開始疑似状態、７０２，７０３  状態、７０４，７０５，７０７，７０９  遷移線、７０６，７０８，７１０  遷移情報、８００  開始疑似状態、８０１，８０５，８０９，８１３  アクション分岐状態、８０２，８０６，８１０，８１４  アクション成否疑似状態、８０３，８０７，８１１，８１５  ガード、８０４，８０８，８１２，８１６  区切り状態、９０１  アクション分岐遷移線、９０２  アクション分岐遷移情報、９０３  アクション成功時遷移情報、９０４  アクション失敗時遷移情報。
【図１】
2017211800.tif 000003
【図２】
2017211800.tif 000004
【図３】
2017211800.tif 000005
【図４】
2017211800.tif 000006
【図５】
2017211800.tif 000007
【図６】
2017211800.tif 000008
【図７】
2017211800.tif 000009
【図８】
2017211800.tif 000010
【図９】
2017211800.tif 000011
【図１０】
2017211800.tif 000012
【図１１】
2017211800.tif 000013
【図１２】
2017211800.tif 000014
【図１３】
2017211800.tif 000015
【図１４】
2017211800.tif 000016
【図１５】
2017211800.tif 000017
【図１６】
2017211800.tif 000018
【図１７】
2017211800.tif 000019
【図１８】
2017211800.tif 000020
【図１９】
2017211800.tif 000021
【図２０】
2017211800.tif 000022
【図２１】
2017211800.tif 000023
【図２２】
2017211800.tif 000024
【図２３】
2017211800.tif 000025
【図２４】
2017211800.tif 000026
【図２５】
2017211800.tif 000027
【図２６】
2017211800.tif 000028
【図２７】
2017211800.tif 000029
【図２８】
2017211800.tif 000030