(57)【要約】【課題】  複雑なＯＣＬ記述に対してもデータフロー情報を正しく読み取り、コンポーネント操作のパラメータと、コンポーネント内のクラスの属性値の間のデータフロー情報を可視化するＵＭＬ設計ツールを提供する。【解決手段】  情報処理装置に、オブジェクト制約言語で記述された操作の事後条件を解析してデータフロー情報を抽出するデータフロー解析部２０２と、抽出されたデータフロー情報を統一モデリング言語のモデルと対応づけて表示するモデル表示部２０４とを備える。【選択図】  図２
2013003853.tif 000002
【特許請求の範囲】
【請求項１】
オブジェクト制約言語で記述された操作の事後条件を解析してデータフロー情報を抽出する抽出手段と、
抽出された前記データフロー情報を統一モデリング言語のモデルと対応づけて表示する表示手段と
を備えることを特徴とする情報処理装置。
【請求項２】
前記データフロー情報は、コンポーネントが提供する操作のパラメータと、該コンポーネントに定義されたクラスの属性とを対応づけた情報であることを特徴とする請求項１に記載の情報処理装置。
【請求項３】
前記表示手段は、前記データフロー情報を、前記操作のパラメータと前記クラスの属性との間の有向線で表示することを特徴とする請求項２に記載の情報処理装置。
【請求項４】
前記表示手段は、前記データフロー情報を、前記操作の事後条件における前記操作のパラメータと前記クラスの属性とに対応する要素の間の有向線で表示することを特徴とする請求項２に記載の情報処理装置。
【請求項５】
前記抽出手段は、前記操作の事後条件における等価演算または包含演算から前記データフロー情報を抽出することを特徴とする請求項１に記載の情報処理装置。
【請求項６】
前記抽出手段は、前記操作の事後条件におけるオブジェクト制約言語の表現が由来する統一モデリング言語のモデルの名前付き要素の集合から、前記データフロー情報を抽出することを特徴とする請求項１に記載の情報処理装置。
【請求項７】
前記抽出手段は、前記操作の事後条件においてオブジェクト制約言語の表現の特定のキーワードが付与されているか否かに応じて、データフロー情報を抽出することを特徴とする請求項１に記載の情報処理装置。
【請求項８】
前記抽出手段は、前記操作の事後条件において参照されるパラメータの方向から、データフロー情報を抽出することを特徴とする請求項１に記載の情報処理装置。
【請求項９】
前記抽出手段は、前記操作の事後条件におけるオブジェクト制約言語の表現ノードが取りうる値から、データフロー情報を抽出することを特徴とする請求項１に記載の情報処理装置。
【請求項１０】
オブジェクト制約言語で記述された操作の事後条件を解析してデータフロー情報を抽出する抽出工程と、
抽出されたデータフロー情報を統一モデリング言語のモデルと対応づけて表示する表示工程と
を有することを特徴とする情報処理方法。
【請求項１１】
コンピュータに、請求項１０に記載の情報処理方法を実行させることを特徴とするコンピュータ読み取り可能なプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データフロー情報を抽出して表示する、データフロー解析技術に関するものである。
【背景技術】
【０００２】
従来、ソフトウェアの設計工程において、標準言語である統一モデリング言語（ＵＭＬ：Ｕｎｉｆｉｅｄ  Ｍｏｄｅｌｉｎｇ  Ｌａｎｇｕａｇｅ）を用いたモデリングが広く行われている。ＵＭＬはグラフィカルなモデリング言語であるが、制約記述言語であるオブジェクト制約言語（ＯＣＬ：Ｏｂｊｅｃｔ  Ｃｏｎｓｔｒａｉｎｔ  Ｌａｎｇｕａｇｅ）を用いて、ＵＭＬモデルの制約を記述することが可能である。多くのＵＭＬ設計ツールが、ＯＣＬの記述や、ＵＭＬモデルとの整合性チェックを行う機能を備えている。
【０００３】
ＯＣＬは宣言的な制約記述言語であり、ソフトウェアモジュールの操作を実行するための条件と、実行後に満たすべき状態を、事前条件、事後条件として記述するために用いられる。モジュールの振る舞いの具体的な動作ステップが未定義であっても、操作の振る舞い仕様を正確に定義することが出来る。このためＯＣＬは、ソフトウェア部品であるコンポーネントの振る舞いの仕様の記述に度々用いられる。コンポーネント利用者は、ＯＣＬで記述された仕様を元に、コンポーネント操作の利用手順の設計を行う。
【０００４】
コンポーネント操作のデータの流れ（データフロー）は、操作の仕様を理解するために重要な情報である。特に、操作のパラメータと、コンポーネント内のクラスの属性値の間のデータフロー情報は、操作の振る舞いを把握するために不可欠である。しかしＯＣＬ記述は宣言的であるため、データフロー情報を読み取ることが難しいという問題がある。コンポーネントの利用者が、データフローの仕様を正しく理解せずにコンポーネント操作を使用した場合に、誤った方法で使用してしまう恐れがある。
【０００５】
非特許文献１では、宣言的なＯＣＬ記述を、命令的なアクション記述に変換する手法が提案されている。命令的な記述にはデータの定義、使用関係が明示的に記述されるため、変換後のアクション記述からデータフロー情報を読み取ることが可能である。
【０００６】
また複雑なＯＣＬ記述の意味を、コンポーネント利用者が誤って解釈する恐れがある、という問題がある。非特許文献２では、誤って解釈されがちな複雑なＯＣＬ記述を、可読性の高い平易なＯＣＬ記述に変換するパターンが提案されている。
【先行技術文献】
【非特許文献】
【０００７】
【非特許文献１】Ｃａｂｏｔ，  Ｊ．：  Ｆｒｏｍ  Ｄｅｃｌａｒａｔｉｖｅ  ｔｏ  Ｉｍｐｅｒａｔｉｖｅ  ＵＭＬ／ＯＣＬ  Ｏｐｅｒａｔｉｏｎ  Ｓｐｅｃｉｆｉｃａｔｉｏｎｓ，  Ｃｏｎｃｅｐｔｕａｌ  Ｍｏｄｅｌｉｎｇ  −  ＥＲ  ２００７  （Ｐａｒｅｎｔ，  Ｃ．，  Ｓｃｈｅｗｅ，  Ｋ．Ｄ．，  Ｓｔｏｒｅｙ，  Ｖ．  ａｎｄ  Ｔｈａｌｈｅｉｍ，  Ｂ．，  ｅｄｓ．），  Ｌｅｃｔｕｒｅ  Ｎｏｔｅｓ  ｉｎ  Ｃｏｍｐｕｔｅｒ  Ｓｃｉｅｎｃｅ，  Ｖｏｌ．  ４８０１，  Ｓｐｒｉｎｇｅｒ  Ｂｅｒｌｉｎ  ／  Ｈｅｉｄｅｌｂｅｒｇ，  ｐｐ．  １９８−２１３  （２００７）．
【非特許文献２】Ｃｏｒｒｅａ，  Ａ．，  Ｗｅｒｎｅｒ，  Ｃ．  ａｎｄ  Ｂａｒｒｏｓ，  Ｍ．：  Ｒｅｆａｃｔｏｒｉｎｇ  ｔｏ  ｉｍｐｒｏｖｅ  ｔｈｅ  ｕｎｄｅｒｓｔａｎｄａｂｉｌｉｔｙ  ｏｆ  ｓｐｅｃｉｆｉｃａｔｉｏｎｓ  ｗｒｉｔｔｅｎ  ｉｎ  ｏｂｊｅｃｔ  ｃｏｎｓｔｒａｉｎｔ  ｌａｎｇｕａｇｅ，  Ｓｏｆｔｗａｒｅ，  ＩＥＴ，  Ｖｏｌ．３，  Ｎｏ．２，  ｐｐ．６９−９０  （２００９）．
【発明の概要】
【発明が解決しようとする課題】
【０００８】
しかしながら、前述の非特許文献１で述べられている変換技術は、パターンに基づく発見的な方法に基づいており、ＯＣＬ記述の意味を考慮した正しい変換できないケースがある。また非特許文献２で述べられている変換パターンは有用であるが、全てのコンポーネントの仕様中のＯＣＬ記述が、平易な記述に変換済みであることは期待出来ない。事実、非特許文献２では誤解釈されがちな複雑な記述がＵＭＬの仕様書に記載されている事例も挙げており、実開発で使用されるＯＣＬ記述にも、複雑な記述が含まれている可能性が高い。
【課題を解決するための手段】
【０００９】
そこで、本発明は、複雑なＯＣＬ記述に対してもデータフロー情報を正しく読み取り、可視化する情報処理装置を提供することを目的とする。
本発明によれば、情報処理装置に、オブジェクト制約言語で記述された操作の事後条件を解析してデータフロー情報を抽出する抽出手段と、抽出された前記データフロー情報を統一モデリング言語のモデルと対応づけて表示する表示手段とを備える。
【発明の効果】
【００１０】
本発明によれば、ＯＣＬ記述のデータフロー情報を正しく読み取り、把握することが可能になるという効果がある。
【図面の簡単な説明】
【００１１】
【図１】ＵＭＬ設計ツールが動作する情報処理装置のブロック構成例を示す図である。
【図２】ＵＭＬ設計ツールのソフトウェア構成を示す図である。
【図３】ＵＭＬ設計ツールの表示Ｗｉｎｄｏｗの構成を示す図である。
【図４】ＵＭＬ設計ツールの表示Ｗｉｎｄｏｗの構成を示す図である。
【図５】実施形態１に係るデータフロー解析部の処理手順を示すフローチャートである。
【図６】等価・包含関係の解析サブルーチンの手順を示すフローチャートである。
【図７】起源の解析サブルーチンの手順を示すフローチャートである。
【図８】データフローの決定サブルーチンの手順を示すフローチャートである。
【図９】抽象構文木の例を示す図である。
【図１０】起源の解析サブルーチンの説明図である。
【図１１】起源の解析サブルーチンの説明図である。
【図１２】決定表の例を示す図である。
【図１３】モデル表示部の処理手順を示すフローチャートである。
【図１４】実施形態２に係るデータフロー解析部の処理手順を示すフローチャートである。
【図１５】子ノード値の算出サブルーチンの手順を示すフローチャートである。
【図１６】子ノード値の算出サブルーチンの手順を示すフローチャートである。
【図１７】等価演算に係る子ノードの値の組み合わせパターン表である。
【図１８】論理演算に係る子ノードの値の組み合わせパターン表である。
【図１９】集合演算に係る子ノードの値の組み合わせパターン表である。
【図２０】事後条件の例を示す図である。
【発明を実施するための形態】
【００１２】
以下、添付図面を参照しながら本発明の実施形態を説明する。
【００１３】
＜実施形態１＞
図１は、本実施形態のＵＭＬ設計ツールが動作する情報処理装置のブロック構成例を示す図である。情報処理装置は、ＣＰＵ１０１、ＲＯＭ１０２、ＲＡＭ１０３、ＨＤＤ（ハードディスクドライブ）１０４、ＫＢ（キーボード）１０５、マウス１０６、モニタ１０７、ネットワークのインターフェース（Ｉ／Ｆ）１０８を有する。これらは、バス１０９を介して互いに通信可能に接続されて構成されている。
【００１４】
ＣＰＵ１０１は、情報処理装置全体の動作制御を司るものであり、ＲＯＭ１０２内のプログラムを実行するほか、ＨＤＤ１０４等から各種の処理プログラム（ソフトウェア）をＲＡＭ１０３に読み出して実行する。ＲＯＭ１０２は、プログラムやプログラム内で用いられる各種データ等を記憶する。ＲＡＭ１０３は、ＣＰＵ１０１での各種処理のために、処理プログラムや処理対象の情報を一時的に格納するための作業用エリア等として使用される。
【００１５】
ＨＤＤ１０４は、大容量記憶装置の一例としての構成要素であり、モデルやデータフローなどの各種データ、あるいは各種処理の実行時にＲＡＭ１２０３等へ転送される処理プログラム等を保存する。
【００１６】
キーボード１０５及びマウス１０６は、情報処理装置に対する各種指示等をユーザが入力するために用いられる。モニタ１０７は、ユーザへの各種指示情報や解析結果等の各種情報の表示を行う。インターフェース１０８は、ネットワークから情報を取り込んだり、ネットワークへ情報を発信したりするために用いられる。
【００１７】
本実施形態のＵＭＬ設計ツールのソフトウェア構成を図２に示す。ＵＭＬモデル・ＯＣＬ記述２０１は、統一モデリング言語（ＵＭＬ）で記述されたモデル及びオブジェクト制約言語（ＯＣＬ）で記述された情報であり、ＸＭＩ等の形式でＨＤＤ１０４に保持される。データフロー解析部２０２は、ＵＭＬモデル・ＯＣＬ記述２０１からデータフロー情報２０３を生成し、ＨＤＤ１０４上に格納する。ＵＭＬモデル・ＯＣＬ記述２０１とデータフロー情報２０３は、ネットワーク上のサーバストレージに保持されても良い。モデル表示部２０４は、ＵＭＬモデル・ＯＣＬ記述２０１とデータフロー情報２０３から生成したイメージを、モニタ１０７に表示する。
【００１８】
図３は、モデル表示部２０４によってモニタ１０７上に表示される、ＵＭＬ設計ツールの表示Ｗｉｎｄｏｗ３００の構成を示している。構成Ｖｉｅｗ３０１には、ＵＭＬモデルの構成に従って、システム、パッケージ、インターフェース、操作、コンポーネント、クラス、等のモデル要素が階層的に表示される。構造Ｖｉｅｗ３０２には、ユーザがマウス１０６を用いて、構成Ｖｉｅｗ３０１上で選択したモデル要素の構造が表示される。
【００１９】
図３では構成Ｖｉｅｗ３０１上でコンポーネントＣＰ１が選択されており、実線の枠によってそのことが表現されている。構造Ｖｉｅｗ３０２には、コンポーネントＣＰ１とコンポーネントＣＰ１が実現するインターフェースＩＦ１の構造が表示されている。構造Ｖｉｅｗ３０２では、ユーザがマウス１０６を用いて選択した操作Ｏｐ２が点線によって強調表示されており、構成Ｖｉｅｗ３０１でも同様に、操作Ｏｐ２が点線によって強調表示されている。制約Ｖｉｅｗ３０３には、構成Ｖｉｅｗ３０１あるいは構造Ｖｉｅｗ３０２で選択されたモデル要素に関するＯＣＬ記述の内容が表示される。図３の例では、操作Ｏｐ２に関する事後条件が表示されている。データフロー表示切り替えボタン３０４は、データフロー情報の表示、非表示を切り替えるために使用される。
【００２０】
コンポーネント利用者は、制約Ｖｉｅｗ３０３に表示される事後条件の内容から、操作Ｏｐ２のデータフローを理解する。図３の事後条件「ＣＬＳ１．ａｌｌＩｎｓｔａｎｃｅｓ（）〜−＞ｆｏｒＡｌｌ（ｋ｜ｐａｒａｍ３．ｉｎｃｌｕｄｅｓ（ｋ．Ａｔｔ１）））」を例に説明する。この事後条件は、ＣＬＳ１の、属性Ａｔｔ１の値が操作Ｏｐ２の入力パラメータｐａｒａｍ１の値に等しい全てのインスタンス集合ＩＳの性質を記述している。ＩＳの全ての要素は、操作Ｏｐ２の実行後に属性Ａｔｔ２の値が入力パラメータｐａｒａｍ２に等しく、さらにリンクを持つＣＬＳ２のインスタンスの属性Ａｔｔ１の値の集合が、出力パラメータｐａｒａｍ３に含まれる。つまり入力パラメータｐａｒａｍ２からクラスＣＬＳ１の属性Ａｔｔ２にデータフロー（Ａ）が発生し、クラスＣＬＳ２の属性Ａｔｔ１から出力パラメータｐａｒａｍ３にデータフロー（Ｂ）が発生することが分かる。ここで＠ｐｒｅは、ＯＣＬで定義されている、操作実行前の属性値を参照するための特定のキーワードである。
【００２１】
しかし、図３のようにテキスト形式で記述されたＯＣＬの論理式から、上記のデータフロー情報を読み取ることは容易ではない。また非特許文献２では、図３の例のように「ｆｏｒＡｌｌ」演算子を入れ子状に使用したＯＣＬ記述は、誤って解釈される恐れが高い、と報告されている。
【００２２】
本実施形態に示すＵＭＬ設計ツールでは、ユーザがマウス１０６を用いて、データフロー表示切り替えボタン３０４を押下することによって、データフロー解析部２０２が上記のデータフロー情報を自動的に抽出する。さらに図４の画面に遷移して、モデル表示部２０４がデータフロー情報（Ａ）（Ｂ）を有向線で表示する。図４の表示内容から、コンポーネント利用者が、データフロー情報を誤解なく理解できることは明らかである。図４の画面で、データフロー表示切り替えボタン４０４を押下することにより、再び図３に示すデータフロー情報の表示を伴わない画面に遷移することも出来る。
【００２３】
図５は、データフロー解析部２０２の処理手順を示すフローチャートである。ステップＳ５０１において、ユーザが選択したＵＭＬモデル要素のＯＣＬ記述を読み出し、ＯＣＬ記述中の各事後条件について、ステップＳ５０２からＳ５１１までの処理を繰り返す。先ずステップＳ５０３において、事後条件の構文解析を行い、抽象構文木を生成する。この処理は既存の構文解析木を用いて行うことが出来る。例として図９に、図３と図４の制約Ｖｉｅｗに示した事後条件の抽象構文木を示す。
【００２４】
次にステップＳ５０４において、抽象構文木上のノードを示す変数Ｎ、リスト変数Ｌ、ハッシュ変数Ｈ、リスト変数Ｆを、それぞれ抽象構文木のルートノード、空リスト、空ハッシュ、空リストに初期化する。そしてステップＳ５０５において等価・包含関係の解析サブルーチンを呼び出し、さらにリストＬ中の各要素ｎについて、ステップＳ５０６からＳ５１０の処理を行う。ステップＳ５０７においてｎの左オペランドのノードを引数にして起源の解析サブルーチンを呼び出し、ステップＳ５０８においてｎの右オペランドのノードを引数にして起源の解析サブルーチンを呼び出す。ステップＳ５０９においてｎを引数にしてデータフローの決定サブルーチンを呼び出す。ステップＳ５０７とＳ５０８の処理順序を入れ替えても良い。
【００２５】
図６は、等価・包含関係の解析サブルーチンの手順を示すフローチャートである。このサブルーチンは、データフローを表す可能性があるＯＣＬ表現として、抽象構文木中の等価演算＝、あるいは包含演算Ｉｎｃｌｕｄｅｓ、ＩｎｃｌｕｄｅｓＡｌｌに対応するＯＣＬの表現ノードを抜き出す処理を行う。ステップＳ６０１において、引数で渡された抽象構文木ノードＮが、演算を表すＯｐｅｒａｔｉｏｎＣａｌｌＥｘｐのインスタンスに該当するか確認する。該当する場合には、ステップＳ６０２で、その名前が＝、Ｉｎｃｌｕｄｅｓ、ＩｎｃｌｕｄｅｓＡｌｌの何れかに一致するか確認する。名前が一致する場合には、ステップＳ６０３においてノードＮをリストＬに追加する。図９の抽象構文木の例では、ノード９０１、９０２、９０３が上記の等価演算、包含演算に該当する。そしてステップＳ６０４からＳ６０６において、子ノードとリストＬを指定して、再帰的に自身のサブルーチンを呼び出す。
【００２６】
図７は、起源の解析サブルーチンの手順を示すフローチャートである。このサブルーチンは、引数リストに含まれる、等価演算、包含演算を表す抽象構文木ノードの各々について、演算の両オペランドの値が由来する、ＵＭＬモデルの構造Ｖｉｅｗ上の名前付き要素の集合を特定する。例えば図４のデータフロー（Ａ）に対応する等価演算の左オペランドは「ｊ．Ａｔｔ２」であるが、これはクラスＣＬＳ１の属性Ａｔｔ２の値集合であるため、このオペランドの起源はクラスＣＬＳ１の属性Ａｔｔ２である。起源の解析サブルーチンは複数のＯＣＬ表現に対して実行されるため、求めた名前付き要素の集合をハッシュＨにメモ化して、再利用する。
【００２７】
まずステップＳ７０１で、ハッシュＨに引数ノードＮをキーにして値を取得した値でリスト変数ＯＬを初期化し、ステップＳ７０２で、その値がＮＵＬＬか否かを判定する。ＮＵＬＬで無い場合には、指定された引数ノードＮの起源は既に算出済みであるため、リターンする。ステップＳ７０３でＯＬを空リストに初期化した後、ステップＳ７０４においてＮがＬｉｔｅｒａｌＥｘｐのインスタンスに該当するか確認する。該当する場合は、ＮがＵＭＬモデルの構造に関連しない即値を表し、Ｎの起源は存在しないため、リターンする。ステップＳ７０４で該当しない場合には、ステップＳ７０５において、ＮがＰｒｏｐｅｒｔｙＣａｌｌＥｘｐのインスタンスに該当するか確認する。
【００２８】
ステップＳ７０５で該当する場合は、Ｎがクラスの属性を参照することを意味するため、ステップＳ７１１でこの属性をリストＯＬに追加する。ステップＳ７０５で該当しない場合には、ステップＳ７０６においてＮがＰａｒａｍｅｔｅｒのインスタンスに該当するか確認する。ステップＳ７０６で該当する場合は、Ｎがパラメータを参照することを意味するため、ステップＳ７１２でこのパラメータをリストＯＬに追加する。ステップＳ７０６で該当しない場合には、Ｎの起源が一部の子ノード集合の起源を合わせたものになる。そこでこれらの子ノード集合について、ステップＳ７０７からＳ７１０の処理を繰り返す。ステップＳ７０８で子ノードの起源を求め、ステップＳ７０９でＯＬに加える。
【００２９】
ステップＳ７０７からＳ７１０の処理を行う子ノード集合Ｓは、Ｎの種類に依存する。例えば、Ｎがｓｅｌｅｃｔ演算を表すＯｐｅｒａｔｉｏｎＣａｌｌＥｘｐのインスタンスの場合には、図１０に示すように、Ｎの起源１００２はＮの第１子ノードＳｏｕｒｃｅＥｘｐｒｅｓｓｉｏｎの起源１００１と同一の値になるため、Ｓ＝｛第１子ノード｝である。一方、Ｎがｉｎｃｌｕｄｉｎｇ演算を表すＯｐｅｒａｔｉｏｎＣａｌｌＥｘｐのインスタンスである、図１１のケースを考える。この場合には、Ｎの起源１１０３は、Ｎの第１子ノードＳｏｕｒｃｅＥｘｐｒｅｓｓｉｏｎの起源１１０１と、第２子ノードＡｒｇｕｍｅｎｔＥｘｐｒｅｓｓｉｏｎの起源１１０２を合わせた値になり、Ｓ＝｛第１子ノード，第２子ノード｝である。他の種類のノードについても、同様にＳを定義することが出来る。最後にステップＳ７１３で、ハッシュＨにＮをキー値に指定してリストＯＬを登録し、リターンする。
【００３０】
図８は、データフローの決定サブルーチンの手順を示すフローチャートである。ステップＳ８０１においてリスト変数ＬＬ、ＬＲを、引数ノードＮの左オペランドと右オペランドをキーにして、それぞれハッシュＨに登録された起源集合で初期化する。ＬＬとＬＲの全ての要素の組み合わせについて、ステップＳ８０４からＳ８０７の処理を繰り返す。ステップＳ８０４で、ＬＬの要素ｌとＬＲの要素ｒがパラメータとクラスの属性の組み合わせに該当するか判断し、該当する場合は、ステップＳ８０５においてｌとｒの組み合わせのフローの方向を決定する。この処理は図１２に示す決定表に従って行う。
【００３１】
決定表では、起源に含まれるパラメータの方向（ｉｎ、ｏｕｔ、ｒｅｔｕｒｎのいずれか）と、ＯＣＬの＠ｐｒｅキーワードが起源に含まれるクラスの属性に付与されているか否かによって、データフローの方向が決定される。パラメータの方向がｉｎで、属性に＠ｐｒｅキーワードが付与されている場合、これらの値は何れも操作の実行を通じて更新されない。従ってこの等価演算もしくは包含演算は、データフローではなく条件判断の論理式を表しているため、フローの方向は決定されない（表中のＮＡによって表現されている）。例えば図９の抽象構文木の例では、ノード９０１の左オペランドの属性には＠ｐｒｅキーワードが付与されているため、データフローの決定サブルーチンにおいて、データフローでは無いと判断される。ステップＳ８０６において、フローが決定されたか否かの判断を行い、決定された場合にはステップＳ８０７において、該パラメータと属性の組み合わせをデータフロー情報として、リストＦに追加する。
【００３２】
図１３は、モデル表示部２０４の処理手順を示すフローチャートである。ステップＳ１３０１においてＵＭＬモデルを、ステップＳ１３０２においてＯＣＬ制約を、それぞれ構造Ｖｉｅｗと制約Ｖｉｅｗに表示する。ステップＳ１３０３において、データフロー表示を行う表示設定が行われているか判断し、設定が行われている場合には、リストＦの各要素について、ステップＳ１３０４からＳ１３０８の処理を繰り返す。ステップＳ１３０５でリストＦの要素のパラメータを変数Ｐに、属性を変数Ａｔｔに設定して、ステップＳ１３０６で制約Ｖｉｅｗ上にＰとＡｔｔの間のデータフローを表示する。この時のフローの方向は、図８のデータフローの決定サブルーチンで決定された方向を用いる。ステップＳ１３０７においても同様に、ＰとＡｔｔの間のデータフローを表示する。その結果、図４に示すようなデータフロー情報の表示が実現される。
【００３３】
＜実施形態２＞
実施形態１では、等価演算＝、あるいは包含演算Ｉｎｃｌｕｄｅｓ、ＩｎｃｌｕｄｅｓＡｌｌに対応するＯＣＬ表現ノードを抜き出し、データフローを抽出した。本実施形態では、さらに各ＯＣＬ表現ノードが取りうる値を考慮することにより、より精度の高い抽出を行う実施形態を説明する。
【００３４】
本実施形態と実施形態１では、データフロー解析部２０２の動作フローが異なる。図１４は、本実施形態におけるデータフロー解析部２０２の処理手順を示すフローチャートである。図５のフローチャートと比較して、ステップＳ１４０４としてハッシュＶの初期化が追加され、さらにステップＳ１４０５、Ｓ１４０６の処理が追加されている。ハッシュＶは、ＯＣＬ表現ノードをキーとして、各ＯＣＬ表現ノードが取りうる値のリストを保持する。ステップＳ１４０５において、抽象構文木のルートノードＮの値を、要素Ｔから成るリストで初期化する。これは、事後条件は真となる制約が課されてことに対応している。Ｔは真（Ｔｒｕｅ）を表す値である。さらにステップＳ１４０６で子ノード値の算出サブルーチンを呼び出す。
【００３５】
図１５は、子ノード値の算出サブルーチンの手順を示すフローチャートである。サブルーチンは、与えられたノードとその値を元に、子ノードが取りうる値を算出する。子ノードの値の組み合わせには複数のパターンがあり得るため、各パターン毎に各ノードＭについてステップＳ１５０３からＳ１５０５の処理を繰り返す。ステップＳ１５０３において、子ノードの値の組み合わせパターン表に従って、ノードＭの値ｖを取得する。組み合わせパターン表は、親ノードの値に対する子ノードの値の組み合わせであり、ＯＣＬ表現の種類毎に定義される。
【００３６】
等価演算、論理演算、集合演算についてのパターン表を、それぞれ図１７、図１８、図１９に示す。各表の行と列は親ノードの取りうる値と親ノードの種類を示し，交点のセルはリンクする子ノードに割り当てるべき値を示す。子ノードが複数存在する場合は，構文木と同一の順序で子ノード毎にセルを設けている．ＯＣＬの非決定性により，子ノードの抽象値が一意に定まらない場合があり、そのような場合は取り得る値を／で区切って記載している。Ｆは偽（Ｆａｌｓｅ）、Ｕは未定義値を表す。図１７、図１８、図１９に示したＯＣＬ表現以外のＯＣＬ表現についても、同様にパターン表を定義することが出来る。
【００３７】
図１６は、ステップＳ１４０７において呼び出される子ノード値の算出サブルーチンの手順を示すフローチャートである。図６のフローチャートと比較すると、条件判断処理を行うステップＳ１６０３が追加されており、引数ノードＮの値がＴと判断された場合にのみ、データフローを表す可能性があるＯＣＬ表現として、ステップＳ１６０４でノードＮをリストＬに追加する。
【００３８】
本実施形態によって、各ＯＣＬ表現ノードが取りうる値を考慮し、データフローをより正確に抽出することが出来る。例えば図２０に示す事後条件は、ｎｏｔ演算子によって、図３、図４に示した事後条件の内容を否定する。実施形態１に示した方法では、このｎｏｔ演算子の意味を考慮しないため、図２０の事後条件から、図４の２つのデータフロー（Ａ）（Ｂ）が抽出、表示されるが、実際にはこれらのデータフローは発生しない。
【００３９】
一方、本実施形態ではｎｏｔ演算子の意味を考慮するため、データフロー（Ａ）（Ｂ）は抽出されない。このように、本実施形態では、より精度の高いデータフロー情報をユーザに提供する。
【００４０】
＜その他の実施形態＞
以上、実施形態を詳述したが、本発明は、例えば、システム、装置、方法、コンピュータ読み取り可能なプログラムもしくは記憶媒体等としての実施態様をとることが可能である。具体的には、複数の機器から構成されるシステムに適用しても良いし、また、一つの機器からなる装置に適用しても良い。
【００４１】
更に、本発明は、ソフトウェアのプログラムをシステム或いは装置に直接或いは遠隔から供給し、そのシステム或いは装置のコンピュータが該供給されたプログラムコードを読み出して実行することによって前述した実施形態の機能が達成される場合を含む。この場合、供給されるプログラムは実施形態で図に示したフローチャートに対応したコンピュータプログラムである。
【００４２】
また、コンピュータが、読み出したプログラムを実行することによって、前述した実施形態の機能が実現される他、そのプログラムの指示に基づき、コンピュータ上で稼動しているＯＳなどとの協働で実施形態の機能が実現されてもよい。この場合、ＯＳなどが、実際の処理の一部または全部を行い、その処理によって前述した実施形態の機能が実現される。
【図１】
2013003853.tif 000003
【図２】
2013003853.tif 000004
【図３】
2013003853.tif 000005
【図４】
2013003853.tif 000006
【図５】
2013003853.tif 000007
【図６】
2013003853.tif 000008
【図７】
2013003853.tif 000009
【図８】
2013003853.tif 000010
【図９】
2013003853.tif 000011
【図１０】
2013003853.tif 000012
【図１１】
2013003853.tif 000013
【図１２】
2013003853.tif 000014
【図１３】
2013003853.tif 000015
【図１４】
2013003853.tif 000016
【図１５】
2013003853.tif 000017
【図１６】
2013003853.tif 000018
【図１７】
2013003853.tif 000019
【図１８】
2013003853.tif 000020
【図１９】
2013003853.tif 000021
【図２０】
2013003853.tif 000022