JP4835859B2 - 状態遷移図作成装置および状態遷移図作成方法 - Google Patents

状態遷移図作成装置および状態遷移図作成方法 Download PDF

Info

Publication number
JP4835859B2
JP4835859B2 JP2007035113A JP2007035113A JP4835859B2 JP 4835859 B2 JP4835859 B2 JP 4835859B2 JP 2007035113 A JP2007035113 A JP 2007035113A JP 2007035113 A JP2007035113 A JP 2007035113A JP 4835859 B2 JP4835859 B2 JP 4835859B2
Authority
JP
Japan
Prior art keywords
state
control block
list
transition
control
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
JP2007035113A
Other languages
English (en)
Other versions
JP2008198103A (ja
Inventor
純一 福本
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
NEC Corp
Original Assignee
NEC Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by NEC Corp filed Critical NEC Corp
Priority to JP2007035113A priority Critical patent/JP4835859B2/ja
Publication of JP2008198103A publication Critical patent/JP2008198103A/ja
Application granted granted Critical
Publication of JP4835859B2 publication Critical patent/JP4835859B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Stored Programmes (AREA)

Description

本発明は、状態遷移図作成装置および状態遷移図作成方法に関し、特には、ソースコードから状態遷移図(ステートマシン図)を作成する状態遷移図作成装置および状態遷移図作成方法に関する。
従来、ソースコードの開発の多くは、ステートマシン図を利用して行われる。「ステートマシン図」は、ステートチャート(図)および状態遷移図と同義である。
開発者の意図(設計情報)が正確に反映されていないステートマシン図に基づいて、ソースコードが作成されると、そのソースコードに基づく処理は、設計情報と乖離し、状態遷移に不整合が生じる。開発者は、状態遷移に生じる不整合を、ソースコードを一目で見て分からない。
この問題を解決する1つの方法は、ソースコードからステートマシン図をリバースし、そのステートマシン図に基づいて仕様の誤りをチェックする方法である。「リバース」とは、開発プロセス上で、前工程の成果から後工程の成果を作る通常の作業に対して、後工程の成果から前工程の成果を作ることを表わす。
なお、特許文献1には、イベントシーケンスからステートマシン図をリバースする手順が記述されている。
また、市販されているBorland社の「Together」やチェンジビジョン社の「JUDE」といったUML(Unified Modeling Language)記法のモデル記述ツールには、ソースコードからUML記法のモデルへリバースする機能が備わっている。
特開平11−24900号公報
特許文献1には、ソースコードからステートマシン図をリバースして生成するための方式や装置に関する記載はない。
また、Borland社の「Together」やチェンジビジョン社の「JUDE」といったUML記法のモデル記述ツールにおいても、生成できるモデルの種類は、プログラムを構成するクラスとその関係を表わすクラス図や、できても処理の流れを表わすシーケンス図、コミュニケーション図に限られており、ソースコードから状態遷移を表わすステートマシン図をリバースするツールは存在しなかった。
このため、開発者は、手作業で、ソースコードや設計書を解析してステートマシン図を描画するしかなく、ミスが発生したり、時間がかかるといった欠点もあった。
本発明の目的は、ソースコードからステートマシン図(状態遷移図)を自動的に作成可能な状態遷移図作成装置および状態遷移図作成方法を提供することである。
上記目的を達成するために、本発明の状態遷移図作成装置は、状態を変数として用いる処理を規定する複数のコード行と、前記複数のコード行のうち、状態の変化を表す状態変化コード行に付与された、前記変化の後の状態を表す状態宣言アノテーションと、前記複数のコード行のうち、状態に対する制御を表す制御コード行に付与された、前記制御による変化前の状態を表す条件宣言アノテーションと、を有するソースコードから、状態遷移図を作成する状態遷移図作成装置であって、前記ソースコードを解析して前記コード行の間の対応関係を特定し、前記対応関係と、前記状態宣言アノテーションと、前記条件宣言アノテーションと、に基づいて、遷移前の状態と遷移後の状態とを対応させた遷移リストを作成するリスト作成手段と、前記遷移リストに基づいて、前記状態遷移図を作成する状態遷移図作成手段と、を含む。
また、本発明の状態遷移図作成方法は、状態を変数として用いる処理を規定する複数のコード行と、前記複数のコード行のうち、状態の変化を表す状態変化コード行に付与された、前記変化の後の状態を表す状態宣言アノテーションと、前記複数のコード行のうち、状態に対する制御を表す制御コード行に付与された、前記制御による変化前の状態を表す条件宣言アノテーションと、を有するソースコードから、状態遷移図を作成する状態遷移図作成装置が行う状態遷移図作成方法であって、前記ソースコードを解析して前記コード行の間の対応関係を特定し、前記対応関係と、前記状態宣言アノテーションと、前記条件宣言アノテーションと、に基づいて、遷移前の状態と遷移後の状態とを対応させた遷移リストを作成するリスト作成ステップと、前記遷移リストに基づいて、前記状態遷移図を作成する状態遷移図作成ステップと、を含む。
状態宣言アノテーションは、変化の後の状態を表し、状態の変化を表す状態変化コード行に付与されている。条件宣言アノテーションは、制御による変化前の状態を表し、状態に対する制御を表す制御コード行に付与されている。
コード行の間の対応関係から、複数のコード行に応じた状態変化処理を行なった際の処理の流れを特定することが可能であり、その際の状態の変化を、状態宣言アノテーションと条件宣言アノテーションを用いて特定することが可能となる。
このため、上記発明によれば、コード行の間の対応関係と、状態宣言アノテーションと、条件宣言アノテーションとに基づいて、複数のコード行に応じた処理を行なった際の状態の変化の変遷を特定することが可能になる。よって、遷移前の状態と遷移後の状態を対応させた遷移リストを作成可能になり、その遷移リストに基づいて、状態遷移図を作成することが可能になる。
したがって、状態宣言アノテーションおよび条件宣言アノテーションが付与されたソースコードから状態遷移図を作成することが可能になる。
このため、ユーザは、ソースコードから作成された状態遷移図と設計情報とを比較することによって、ソースコードの実装の正しさを検証することが可能になる。
また、ソースコードから状態遷移図を自動作成できるので、人為的なミスを防止でき、短時間で状態遷移図を作成することが可能となる。
なお、前記リスト作成手段は、前記ソースコードを解析して、前記ソースコードにおけるコード行の入れ子構造および前記制御コード行を特定し、前記入れ子構造および前記制御コード行に基づいて、前記ソースコードから、複数の制御ブロックと、前記制御ブロックに入るための条件と、を抽出し、前記入れ子構造に基づいて、前記制御ブロックに関する制御ブロック木構造を特定し、前記条件を、前記制御ブロック木構造内の当該条件に対応する制御ブロックに付加する制御構造解析手段と、前記状態宣言アノテーション、前記条件宣言アノテーションおよび前記制御ブロック木構造に基づいて、前記制御ブロックごとに、当該制御ブロックがとり得る前の状態を表すイン状態リストと、当該制御ブロックがとり得る後の状態を表すアウト状態リストと、を生成し、前記制御ブロック木構造内の各制御ブロックに、対応する前記イン状態リストおよび前記アウト状態リストを付加して、イン/アウト状態付制御ブロック木構造を作成する状態解析手段と、前記状態宣言アノテーションを有する制御ブロックについて、当該制御ブロックの、イン状態リスト、アウト状態リスト、および、条件宣言アノテーションに基づいて、前記遷移リストを作成する遷移解析手段と、を含むことが望ましい。
上記発明によれば、高い確度で、状態遷移図を作成することが可能になる。
本発明によれば、ソースコードから状態遷移図を自動的に作成することが可能になる。
以下、本発明の実施例を図面を参照して説明する。
図1は、本発明の一実施例であるステートマシン図リバース装置100を示したブロック図である。
ステートマシン図リバース装置100は、状態遷移図作成装置の一例であり、アノテーション付きのソースコードAを入力としてステートマシン図Eを生成する。
ステートマシン図リバース装置100は、制御構造解析手段1、状態解析手段2、遷移解析手段3、および、ステートマシン図描画手段4を含み、中間生成物として、制御ブロック木構造B、in/out状態付き制御ブロック木構造C、および、遷移リストDを生成する。なお、制御構造解析手段1と、状態解析手段2と、遷移解析手段3とで、リスト作成手段5を構成する。
図2は、アノテーション付きのソースコードAの一例を示した説明図である。
ソースコードAは、アノテーション付きのプログラム、または、アノテーション付きのプログラムの一部である。
ソースコードAは、3つの要素、具体的には、状態宣言アノテーションと、条件宣言アノテーションと、業務ロジックが記述されたコード部(上記の2種類アノテーションに該当しないコード部)と、から成り立っている。
コード部は、状態を変数として用いる処理を規定する複数のコード行からなる。
状態の変化を表す状態変化コード行「state=・・・」には、変化の後の状態を表す状態宣言アノテーション「//@state=・・・」が付与されている。
具体的には、状態変化コード行「int state=0」には、状態宣言アノテーション「//@state=initial」が付与されている。また、状態変化コード行「state=prepare()」には状態宣言アノテーション「//@state=prepare」が、状態変化コード行「state=go()」には状態宣言アノテーション「//@state=go.first」が、状態変化コード行「state=next()」には状態宣言アノテーション「//@state=go.second」が、状態変化コード行「state=end()」には状態宣言アノテーション「//@state=end」が付与されている。
状態に対する制御を表す制御コード行「例えば、if(state==・・・)」には、制御による変化前の状態を表す条件宣言アノテーション「//@condition=・・・」が付与されている。
例えば、制御コード行「if(state==1)」には、条件宣言アノテーション「//@condition=prepare」が付与されている。
制御構造解析手段1は、ソースコードAを解析して、ソースコードA内の制御部(具体的には、条件分岐(if文、)と繰返し(while文、for文))および入れ子構造を特定する。なお、制御部は、状態に対する制御を表す制御コード行を含む。
制御構造解析手段1は、ソースコードA内の制御部および入れ子構造に基づいて、ソースコードAから複数の制御ブロックを抽出する。制御ブロックは、制御部および入れ子構造に基づいてソースコードAから分割されたプログラムの断片である。
なお、プログラム言語により、else節(if文のどの条件にもあてはまらない場合に実行されるブロック)の表記が省略される場合があるため、制御構造解析手段1は、省略されたelse節に関しても、何も処理を伴わない制御ブロックとして定義する。
図3は、制御構造解析手段1によって複数の制御ブロックに分割されたソースコードAの例を示した説明図である。
制御構造解析手段1は、個々の制御ブロックの入れ子構造を解析して、制御ブロックの木構造を構成し、その木構造を、制御ブロック木構造Bとする処理を行なう。
制御構造解析手段1は、親の制御ブロックと子の制御ブロックをつなぐ線をエッジとし、エッジには、種別(「排他」または「繰返し」またはNULLのいずれか)と、子の制御ブロックに制御が移るための条件を表わすラベルとを、属性として持たせる。
なお、制御構造解析手段1は、子の制御ブロックに制御が移るための条件を、入れ子構造および制御コード行に基づいて、ソースコードAから抽出する。
図4は、制御構造解析手段1が図3で示したソースコードAの各制御ブロックについて作成した制御ブロック木構造Bの例を示した説明図である。
状態解析手段2は、ソースコードAを順にたどることによって制御ブロック木構造Bを深さ優先で探索し、それぞれの制御ブロックに対して、木構造上の位置、状態宣言アノテーション、および、条件宣言アノテーションを基に、in(イン)状態リストおよびout(アウト)状態リストを作成する。
状態解析手段2は、in状態リストおよびout状態リストを、それらリストに対応する各制御ブロックに付加して、in/out状態付き制御ブロック木構造Cを作成する処理を行なう。
in状態リストとは、そのリストに対応する制御ブロックに制御が入る際にとりうる状態を表したリストのことであり、out状態リストとは、そのリストに対応する制御ブロックから制御が出る際にとりうる状態を表したリストのことである。
図5は、状態解析手段2が図4で示した制御ブロック木構造Bについて作成したin/out状態付き制御ブロック木構造Cの例を示した説明図である。
遷移解析手段3は、状態宣言アノテーションを有するそれぞれの制御ブロックに対して、制御ブロック内のコード、イン状態リスト、アウト状態リスト、および、条件宣言アノテーションに基づいて、イベント、条件、遷移前の状態、遷移後の状態を特定して、遷移リストDを作成する。
図7は、遷移解析手段3が図5で示したin/out状態付き制御ブロック木構造Cについて作成した遷移リストDの例を示した説明図である。
図7に示したように、遷移リストDは、遷移番号、イベント、条件、遷移前の状態、遷移後の状態から構成される。
ステートマシン図描画手段4は、状態遷移図作成手段の一例であり、遷移リストDに基づいて、ステートマシン図を作成する。具体的には、ステートマシン図描画手段4は、遷移リストD内の各状態、開始状態、終了状態をステートマシン図に描画し、また、遷移リストD内のそれぞれの遷移に対して、遷移前の状態から遷移後の状態への遷移を描画する処理を行なう。
図8は、ステートマシン図描画手段4が図7で示した遷移リストDについて作成したステートマシン図Eの例を示した説明図である。
リスト作成手段5は、ソースコードAを解析してコード行の間の対応関係(例えば、コード行における親子関係)を特定し、その対応関係と、状態宣言アノテーションと、条件宣言アノテーションと、に基づいて、遷移前の状態と遷移後の状態とを対応させた遷移リストDを作成する。
次に、動作を説明する。
図9は、ステートマシン図リバース装置100の動作を説明するためのフローチャートである。以下、図9のフローチャートを参照して、本実施例の全体の動作について詳細に説明する。
なお、以下の説明では、図2に示したソースコードAからステートマシン図を作成する動作を説明するが、ソースコードは、図2に示したものに限らず適宜変更可能である。
制御構造解析手段1は、ソースコードAを構文解析し、まず、ソースコードAの入れ子構造に基づいて、ソースコードAから複数の制御ブロックを抽出し、その後、それら制御ブロックを、条件分岐(if文)および繰返し(while文、for文)等の制御部の直前と直後で分割する。
具体的には、制御構造解析手段1は、まず、入れ子構造に基づいて、ソースコードAから、制御ブロックaと、制御ブロックb1〜b3をまとめた制御ブロックと、を抽出し、その後、制御部に基づいて、制御ブロックb1〜b3をまとめた制御ブロックを、制御ブロックb1、制御ブロックb2(制御部)、制御ブロックb3に分割して、制御ブロックb1〜b3を抽出する。
続いて、制御構造解析手段1は、制御部(制御ブロックb2)内部に関しても、入れ子構造に基づいて、複数の制御ブロック(制御ブロックb2−1、制御ブロックb2−2、制御ブロックc1、制御ブロックc2、制御ブロックc3、制御ブロックc4、制御ブロックe1、制御ブロックe2、制御ブロックe3)に分割して、それらを抽出する(ステップa)。
ここまでの動作で、図3に示した複数の制御ブロックが抽出される。
続いて、制御構造解析手段1は、個々の制御ブロックの入れ子構造を解析して木構造を構成し、その木構造を制御ブロック木構造Bとする。
その際に、制御ブロックが制御部で始まる場合、制御構造解析手段1は、子の制御ブロックに制御が移るための条件を、親の制御ブロックと子の制御ブロックとの関係として、木構造のエッジのラベルに記述し、エッジの種別も排他と繰返しに応じて変えておく。
また、その条件に条件宣言アノテーションが記述されている場合、制御構造解析手段1は、その条件宣言アノテーションの内容も、ラベルに”and”でつないで記述する(ステップb)。
ここまでの動作で、図4に示した制御ブロック木構造Bが作成される。
続いて、状態解析手段2は、対象ブロックを一番親の制御ブロック(制御ブロックa)とし、また、空の前out状態リストを作成する(ステップc)。
状態解析手段2は、対象ブロックを探索し、in状態リストおよびout状態リストを作成する。状態解析手段2は、制御ブロック木構造Bを全て探索して、in状態リストおよびout状態リストを、制御ブロック木構造B内の全ての制御ブロックについて付与したものを、in/out状態付き制御ブロック木構造Cとする(ステップd)
図10は、in状態リストおよびout状態リストを作成するための処理を説明するためのフローチャートである。
以下、図10を参照して、in状態リストおよびout状態リストの方法を説明する。
まず、状態解析手段2は、対象ブロックである制御ブロックのin状態リストおよびout状態リストがなければ、空のin状態リストとout状態リストを作成する(ステップd1)。
続いて、状態解析手段2は、前out状態リストの値を、対象ブロックである制御ブロックのin状態リストに追加登録する(ステップd3)。
続いて、状態解析手段2は、対象ブロックに対応する変数iおよびjを0にし(ステップd101)、対象ブロックとなっている制御ブロックに対応するソースコードAの断片を最初から最後まで順に走査していき(ステップd102A〜ステップd102B)、その走査中に以下の処理を行なう。
状態宣言アノテーションに到達した場合(ステップd103)(例えば図5の制御ブロックe1)、状態解析手段2は、状態遷移と判断して、状態宣言アノテーションの値ひとつをout状態リストに登録する。複数の状態宣言アノテーションがあった場合は、状態解析手段2は、その都度out状態リストの値を、新たな状態宣言アノテーションの値に置換していく(ステップd4)。その後、状態解析手段2は、対象ブロックに対応する変数iに1を加算する(ステップd104)。
状態宣言アノテーションに到達せずに子の制御ブロックに到達した場合(ステップd103、d105)(例えば図5の制御ブロックc4)、状態解析手段2は、対象ブロックに対応する変数jに1を加算し(ステップd106)、その後、子の制御ブロックを対象ブロックとして(ステップd107)、ステップdの処理を行なう。探索した制御ブロックと子の制御ブロックとの関係が繰返しの場合、状態解析手段2は、最後の子のout状態リストが変わらなくなるまで、子の制御ブロックの探索を順番に繰返し行なう(ステップd’)。
一方、状態宣言アノテーションが見つからなかった場合(ステップd103)、状態解析手段2は、変数i=0を保持しながら、以下の処理を行なう。
当該制御ブロックが子の制御ブロックを持たない場合(ステップd105)(例えば図5の制御ブロックe3)、j=0も保持され、状態解析手段2は、ステップd108およびd109を通り、in状態リストの値をそのままout状態リストに登録する(ステップd5)。
子の制御ブロックを持ち(この場合、j≠0となる。)、子の制御ブロックとの間のエッジの種別が排他の場合(例えば図5の制御ブロックc4)、状態解析手段2は、ステップd108、d109およびd110を通り、子の制御ブロックのout状態リストの各状態(値)を高々ひとつずつ当該制御ブロックのout状態リストに追加する(ステップd6)。
子の制御ブロックを持ち(この場合、j≠0となる。)、子の制御ブロックとの間のエッジの種別が繰返しの場合(例えば図5の制御ブロックc2)、状態解析手段2は、ステップd108、d109、d110およびd111を通り、当該制御ブロックのin状態リストの各状態と子の制御ブロックのout状態リストの各状態を高々ひとつずつ合わせて当該制御ブロックのout状態リストに登録する(ステップd10)。
子の制御ブロックを持ち(この場合、j≠0となる。)、その間のエッジの種別が排他でも繰返しでもない場合(例えば図5の制御ブロックa)、状態解析手段2は、ステップd108、d109、d110およびd111を通り、最後の子の制御ブロックのout状態リストの値を当該制御ブロックのout状態リストに登録する(ステップd7)。
また、探索した制御ブロックとその親の制御ブロックとの間のエッジの種別が排他の場合(ステップd112)(例えば図5の制御ブロックe3)、状態解析手段2は、当該制御ブロックのin状態リストの値を前out状態リストにコピーする(ステップd8)。
また、探索した制御ブロックとその親の制御ブロックとのエッジの種別が排他でない場合(ステップd112)(例えば図5の制御ブロックc3)、状態解析手段2は、当該制御ブロックのout状態リストの値を前out状態リストにコピーする(ステップd9)。
ここまでの動作で、図5に示したin/out状態付き制御ブロック木構造Cが作成される。
図11は、各制御ブロックに対して、図10に示したフローチャートの処理が適用される流れを示した説明図である。
遷移解析手段3は、遷移リストDを初期化して空のリストとしておく。
遷移解析手段3は、遷移番号として、遷移リストDに遷移が追加される順に連番をふることとする。
遷移解析手段3は、各制御ブロックに対して、対応するソースコードAの断片を走査して状態宣言アノテーションを見つけた場合、その制御ブロックのin状態リストの各状態を遷移前の状態とし、状態宣言アノテーションで記述された状態を遷移後の状態とする遷移を遷移リストDに加え、そのin状態リストを状態宣言アノテーションで記述された状態に更新する。
遷移解析手段3は、対応するソースコードAの断片が終了するまで走査を続ける。
なお、遷移解析手段3は、遷移のイベントには、状態宣言アノテーションが記述された行に記述された操作名(関数名:具体的には、prepare、go、next、end)を記述する。
また、遷移解析手段3は、当該制御ブロックの最初の状態の遷移を遷移リストDに追加する場合、遷移の条件として、木構造の親を全てたどってエッジに記述されたラベルを全て”and”でつないだものを記述する。
次に、遷移解析手段3は、遷移リストD内で、条件に状態が記述されている状況で、その状態が遷移前の条件(条件宣言アノテーションに表された状態)と合致しない場合(例えば図7の遷移番号4)、当該遷移を遷移リストDから削除する(ステップe)。
図6は、遷移解析手段3が、図5のin/out状態付き制御ブロック木構造Cに対して、ステップeを実行した後の状態のin/out状態付き制御ブロック木構造Cを示した説明図である。
ステートマシン図描画手段4は、開始状態と、遷移リストD内の各遷移の遷移前の状態に記述された状態と遷移後の状態に記述された状態を高々ひとつずつ、および、終了状態を順番に、例えば縦一列または横一列に、配置する。
ただし、ステートマシン図描画手段4は、状態がピリオドで区切られている場合は、コンポジット状態と判断して、入れ子にして状態を記述する。
ステートマシン図描画手段4は、コンポジット状態にも開始状態と終了状態をひとつずつ配置する(ステップf)。
次に、ステートマシン図描画手段4は、遷移リスト内のそれぞれの遷移に関して、イベントや条件を、UMLで決められた書式のラベルとして、遷移前の状態から遷移後の状態への結線を行なう。
状態前の遷移がNULLの場合、ステートマシン図描画手段4は、開始状態からの遷移とする。
また、状態後の遷移がNULLの場合、ステートマシン図描画手段4は、終了状態への遷移とする。
コンポジット状態の外から内への遷移の場合、ステートマシン図描画手段4は、コンポジット状態への遷移を記述し、またコンポジット状態内の開始状態から遷移後の状態への遷移も記述する。
ステートマシン図描画手段4は、条件を、前者の遷移のラベルとして描画する。
コンポジット状態の内から外への遷移の場合、ステートマシン図描画手段4は、遷移前の状態からコンポジット状態内の終了状態への遷移を記述し、またコンポジット状態から遷移後の状態への遷移も記述する。
ステートマシン図描画手段4は、条件を、後者の遷移のラベルとして描画する(ステップg)。
本実施例によれば、コード行の間の対応関係と、状態宣言アノテーションと、条件宣言アノテーションとに基づいて、複数のコード行に応じた処理を行なった際の状態の変化の変遷を特定することが可能になる。よって、遷移前の状態と遷移後の状態を対応させた遷移リストを作成可能になり、その遷移リストに基づいて、状態遷移図を作成することが可能になる。
本実施例によれば、以下の効果を奏する。
第1の効果は、ソースコードが設計通りに実装されているか検証を行なうことができる点にある。
その理由は、ソースコード上では人間が容易に状態遷移を把握することが困難であったが、本実施例によりリバースしたステートマシン図により人間が設計情報を比較して実装の正しさを判断できるためである。
第2の効果は、ステートマシン図の作成に関する正確性や開発生産性が向上する点にある。
その理由は、ソースコードから状態遷移図を手作業で書くのは、ミスが発生したり、時間がかかっていたが、本発明によりソースコードからステートマシン図を自動作成できるので、工数が削減できるためである。
なお、以上説明した実施例において、図示した構成は単なる一例であって、本発明はその構成に限定されるものではない。
例えば、プログラミング言語の仕様により、繰返し処理においては、
(1)図3で示したように繰返しループに入らない可能性がある場合(while文など)
(2)必ず一度は繰返しループに入る場合(do〜while文など)
(3)繰返しの回数が決まっている場合(for文で繰返し数が定数の場合など)
などの記法があるため、これを区別するようなアノテーションを定義して、リスト作成部5が、そのアノテーションを解析する。
例えば、リスト作成部5(状態解析手段2)は、(2)の場合、ステップd10でなくステップd7を通るような処理フローを実行し、(3)の場合、ステップd’の繰返し数を決めてステップd’をその数だけ繰り返すことによって、正確なステートマシン図を得ることが可能になる。
また、ステートマシン図リバース装置100が、プログラムにしたがって動作するコンピュータによって実現されてもよい。
この場合、制御構造解析手段1、状態解析手段2、遷移解析手段3、および、ステートマシン図描画手段4は、ステートマシン図リバース装置100の動作を規定するプログラムを読み取り実行するコンピュータによって実現される。
(発明の利用が考えられる分野)
本発明を利用すれば、実装まで開発を行なったソフトウェアのソースコードに対して、状態に関するアノテーションを記述しさえすれば、リバースしてステートマシン図を自動で生成して、状態遷移の検証に利用するといった用途に適用することが可能である。
本発明の一実施例であるステートマシン図リバース装置100を示したブロック図である。 アノテーション付きのソースコードAの一例を示した説明図である。 複数の制御ブロックに分割されたソースコードAの例を示した説明図である。 制御ブロック木構造Bの例を示した説明図である。 in/out状態付き制御ブロック木構造Cの例を示した説明図である。 修正されたin/out状態付き制御ブロック木構造Cの例を示した説明図である。 遷移リストDの例を示した説明図である。 ステートマシン図Eの例を示した説明図である。 ステートマシン図リバース装置100の動作を説明するためのフローチャートである。 ステートマシン図リバース装置100の動作を説明するためのフローチャートである。 ステートマシン図リバース装置100の動作を説明するための説明図である。
符号の説明
1 制御構造解析手段
2 状態解析手段
3 遷移解析手段
4 ステートマシン図描画手段
5 リスト作成手段
100 ステートマシン図リバース装置

Claims (2)

  1. 状態を変数として用いる処理を規定する複数のコード行と、前記複数のコード行のうち、状態の変化を表す状態変化コード行に付与された、前記変化の後の状態を表す状態宣言アノテーションと、前記複数のコード行のうち、状態に対する制御を表す制御コード行に付与された、前記制御による変化前の状態を表す条件宣言アノテーションと、を有するソースコードから、状態遷移図を作成する状態遷移図作成装置であって、
    前記ソースコードを解析して前記コード行の間の対応関係を特定し、前記対応関係と、前記状態宣言アノテーションと、前記条件宣言アノテーションと、に基づいて、遷移前の状態と遷移後の状態とを対応させた遷移リストを作成するリスト作成手段と、
    前記遷移リストに基づいて、前記状態遷移図を作成する状態遷移図作成手段と、を含み、
    前記リスト作成手段は、
    前記ソースコードを解析して、前記ソースコードにおけるコード行の入れ子構造および前記制御コード行を特定し、前記入れ子構造および前記制御コード行に基づいて、前記ソースコードから、複数の制御ブロックと、前記制御ブロックに入るための条件と、を抽出し、前記入れ子構造に基づいて、前記制御ブロックに関する制御ブロック木構造を特定し、前記条件を表すラベルを、前記制御ブロック木構造内の当該条件に対応する制御ブロックと当該制御ブロックの親制御ブロックとをつなぐ線であるエッジに、排他または繰返しまたはNULLである当該エッジの種別とともに属性として持たせる制御構造解析手段と、
    前記状態宣言アノテーション、前記条件宣言アノテーションおよび前記制御ブロック木構造に基づいて、前記制御ブロックごとに、当該制御ブロックに制御が入る際にとりうる状態を表すイン状態リストと、当該制御ブロックから制御が出る際にとりうる状態を表すアウト状態リストと、を生成し、前記制御ブロック木構造内の各制御ブロックに、対応する前記イン状態リストおよび前記アウト状態リストを付加して、イン/アウト状態付制御ブロック木構造を作成する状態解析手段と、
    前記状態宣言アノテーションを有する制御ブロックについて、当該制御ブロックの、イン状態リスト、アウト状態リスト、および、条件宣言アノテーションに基づいて、前記遷移リストを作成する遷移解析手段と、を含む、状態遷移図作成装置。
  2. 状態を変数として用いる処理を規定する複数のコード行と、前記複数のコード行のうち、状態の変化を表す状態変化コード行に付与された、前記変化の後の状態を表す状態宣言アノテーションと、前記複数のコード行のうち、状態に対する制御を表す制御コード行に付与された、前記制御による変化前の状態を表す条件宣言アノテーションと、を有するソースコードから、状態遷移図を作成する状態遷移図作成装置が行う状態遷移図作成方法であって、
    前記ソースコードを解析して前記コード行の間の対応関係を特定し、前記対応関係と、前記状態宣言アノテーションと、前記条件宣言アノテーションと、に基づいて、遷移前の状態と遷移後の状態とを対応させた遷移リストを作成するリスト作成ステップと、
    前記遷移リストに基づいて、前記状態遷移図を作成する状態遷移図作成ステップと、を含み、
    前記リスト作成ステップは、
    前記ソースコードを解析して、前記ソースコードにおけるコード行の入れ子構造および前記制御コード行を特定し、前記入れ子構造および前記制御コード行に基づいて、前記ソースコードから、複数の制御ブロックと、前記制御ブロックに入るための条件と、を抽出し、前記入れ子構造に基づいて、前記制御ブロックに関する制御ブロック木構造を特定し、前記条件を表すラベルを、前記制御ブロック木構造内の当該条件に対応する制御ブロックと当該制御ブロックの親制御ブロックとをつなぐ線であるエッジに、排他または繰返しまたはNULLである当該エッジの種別とともに属性として持たせる制御構造解析ステップと、
    前記状態宣言アノテーション、前記条件宣言アノテーションおよび前記制御ブロック木構造に基づいて、前記制御ブロックごとに、当該制御ブロックに制御が入る際にとりうる状態を表すイン状態リストと、当該制御ブロックから制御が出る際にとりうる状態を表すアウト状態リストと、を生成し、前記制御ブロック木構造内の各制御ブロックに、対応する前記イン状態リストおよび前記アウト状態リストを付加して、イン/アウト状態付制御ブロック木構造を作成する状態解析ステップと、
    前記状態宣言アノテーションを有する制御ブロックについて、当該制御ブロックの、イン状態リスト、アウト状態リスト、および、条件宣言アノテーションに基づいて、前記遷移リストを作成する遷移解析ステップと、を含む、状態遷移図作成方法。
JP2007035113A 2007-02-15 2007-02-15 状態遷移図作成装置および状態遷移図作成方法 Expired - Fee Related JP4835859B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2007035113A JP4835859B2 (ja) 2007-02-15 2007-02-15 状態遷移図作成装置および状態遷移図作成方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2007035113A JP4835859B2 (ja) 2007-02-15 2007-02-15 状態遷移図作成装置および状態遷移図作成方法

Publications (2)

Publication Number Publication Date
JP2008198103A JP2008198103A (ja) 2008-08-28
JP4835859B2 true JP4835859B2 (ja) 2011-12-14

Family

ID=39756961

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2007035113A Expired - Fee Related JP4835859B2 (ja) 2007-02-15 2007-02-15 状態遷移図作成装置および状態遷移図作成方法

Country Status (1)

Country Link
JP (1) JP4835859B2 (ja)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP5732992B2 (ja) * 2011-04-14 2015-06-10 富士電機株式会社 モデル図作成装置、モデル図作成方法、およびモデル図作成プログラム
JP5929297B2 (ja) * 2012-02-21 2016-06-01 富士電機株式会社 モデル図作成装置、モデル図作成方法、およびモデル図作成プログラム
JP5875681B2 (ja) * 2012-06-20 2016-03-02 株式会社日立製作所 制御ソフトウェアの設計支援装置
JP6239438B2 (ja) * 2014-04-28 2017-11-29 東芝デジタルソリューションズ株式会社 仕様抽出装置、仕様抽出方法およびプログラム
CN110209389B (zh) * 2019-06-05 2023-03-14 卡斯柯信号(成都)有限公司 一种基于xml的数据生成工具开发系统

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH05324289A (ja) * 1992-05-20 1993-12-07 Toshiba Corp プログラム設計書自動作成装置
JPH06215066A (ja) * 1993-01-19 1994-08-05 Fujitsu Ltd 状態遷移図生成方法およびその装置
JPH1124900A (ja) * 1997-06-30 1999-01-29 Canon Inc 状態遷移図作成装置、状態遷移図作成方法、記憶媒体

Also Published As

Publication number Publication date
JP2008198103A (ja) 2008-08-28

Similar Documents

Publication Publication Date Title
US8630824B1 (en) Comprehending waveforms of a circuit design
US9747079B2 (en) Method and system of software specification modeling
WO2005106649A2 (en) An analytical software design system
Julius et al. Transformation of GRAFCET to PLC code including hierarchical structures
US10459829B2 (en) Overall test tool migration pipeline
JP4835859B2 (ja) 状態遷移図作成装置および状態遷移図作成方法
Tisi et al. Improving higher-order transformations support in ATL
Wille et al. Custom-tailored variability mining for block-based languages
CN109522005A (zh) 跨平台图形化程序设计方法
Masci et al. An integrated development environment for the prototype verification system
JP2007011605A (ja) ソフトウェア動作仕様のモデル検査支援装置およびこれを備えたモデル検査システム並びにモデル検査支援プログラム
CN109062819B (zh) 一种软件测试用例的生成方法及装置
Kehrer et al. Propagation of software model changes in the context of industrial plant automation
Tounsi et al. From Event-B specifications to programs for distributed algorithms
US20160062738A1 (en) Methods and Apparatuses for Interactive Computer Programming
Zadahmad et al. Domain-specific model differencing in visual concrete syntax
Rahman et al. A DSL for importing models in a requirements management system
Gammaitoni et al. Verifying modelling languages using lightning: a case study
Alsarraj et al. Designing and implementing a tool to transform source code to UML diagrams
US20220091968A1 (en) System and method for automated generation of test cases and test data for validating a software application
Di Rocco et al. Bridging state-based differencing and co-evolution
Bouaziz et al. SysML model-driven approach to verify blocks compatibility
Kosower et al. Flowgen: Flowchart-based documentation framework for c++
Anjorin et al. A framework for bidirectional model-to-platform transformations
US20150199183A1 (en) Program analysis apparatus and program analysis method

Legal Events

Date Code Title Description
A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20110328

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20110622

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20110809

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20110831

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20110913

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20141007

Year of fee payment: 3

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees