(57)【要約】【課題】データフローモデルのエディタの応答性能を向上させる。【解決手段】記憶部１１は、データフローモデル１３とモデル変換ルール１７ａ，１７ｂとを記憶する。処理部１２は、データノード１４ａから処理ノード１６ａ，１６ｂおよびデータノード１４ｃを経由してデータノード１４ｂに到達するデータフローを検出する。処理部１２は、処理ノード１６ａ，１６ｂに対応するモデル変換ルール１７ａ，１７ｂを合成して合成モデル変換ルール１８を生成する。処理部１２は、データノード１４ａが示すデータ型１５ａが変更された後に所定条件が満たされたタイミングで、データ型１５ａおよび合成モデル変換ルール１８を用いて、データノード１４ｃが示すデータ型１５ｃの更新をスキップしてデータノード１４ｂが示すデータ型１５ｂを更新する。【選択図】図１
2018077613.tif 000002
【特許請求の範囲】
【請求項１】
データ型を示す複数のデータノードとデータ処理を示す複数の処理ノードとを含んでおり前記複数のデータノードおよび前記複数の処理ノードの間の入出力関係を示すデータフローモデルと、前記複数の処理ノードに対応しておりそれぞれが入力のデータ型から出力のデータ型を生成するルールを示す複数のモデル変換ルールと、を記憶する記憶部と、
前記データフローモデルの中から、第１のデータノードから２以上の処理ノードおよび１以上の第３のデータノードを経由して第２のデータノードに到達するデータフローを検出し、前記複数のモデル変換ルールのうち前記２以上の処理ノードに対応する２以上のモデル変換ルールを合成して合成モデル変換ルールを生成し、前記第１のデータノードが示す第１のデータ型が変更された後に所定条件が満たされたタイミングで、変更された前記第１のデータ型および前記合成モデル変換ルールを用いて、前記１以上の第３のデータノードが示す１以上の第３のデータ型の更新をスキップして前記第２のデータノードが示す第２のデータ型を更新する処理部と、
を有する開発支援装置。
【請求項２】
前記所定条件は、前記第２のデータ型の情報を出力させる要求が発生したことである、
請求項１記載の開発支援装置。
【請求項３】
前記処理部は更に、前記複数のデータノードのうちの１つのデータノードが示すデータ型が変更される毎に前記１つのデータノードに対応付けて変更時刻を記録し、前記データフローモデルの中の開始点と前記第２のデータノードとの間に存在するデータノードのうち前記変更時刻が最も遅いデータノードを前記第１のデータノードとして選択する、
請求項１記載の開発支援装置。
【請求項４】
コンピュータが実行する開発支援方法であって、
データ型を示す複数のデータノードとデータ処理を示す複数の処理ノードとを含んでおり前記複数のデータノードおよび前記複数の処理ノードの間の入出力関係を示すデータフローモデルの中から、第１のデータノードから２以上の処理ノードおよび１以上の第３のデータノードを経由して第２のデータノードに到達するデータフローを検出し、
前記複数の処理ノードに対応しておりそれぞれが入力のデータ型から出力のデータ型を生成するルールを示す複数のモデル変換ルールのうち、前記２以上の処理ノードに対応する２以上のモデル変換ルールを合成して合成モデル変換ルールを生成し、
前記第１のデータノードが示す第１のデータ型が変更された後に所定条件が満たされたタイミングで、変更された前記第１のデータ型および前記合成モデル変換ルールを用いて、前記１以上の第３のデータノードが示す１以上の第３のデータ型の更新をスキップして前記第２のデータノードが示す第２のデータ型を更新する、
開発支援方法。
【請求項５】
コンピュータに、
データ型を示す複数のデータノードとデータ処理を示す複数の処理ノードとを含んでおり前記複数のデータノードおよび前記複数の処理ノードの間の入出力関係を示すデータフローモデルの中から、第１のデータノードから２以上の処理ノードおよび１以上の第３のデータノードを経由して第２のデータノードに到達するデータフローを検出し、
前記複数の処理ノードに対応しておりそれぞれが入力のデータ型から出力のデータ型を生成するルールを示す複数のモデル変換ルールのうち、前記２以上の処理ノードに対応する２以上のモデル変換ルールを合成して合成モデル変換ルールを生成し、
前記第１のデータノードが示す第１のデータ型が変更された後に所定条件が満たされたタイミングで、変更された前記第１のデータ型および前記合成モデル変換ルールを用いて、前記１以上の第３のデータノードが示す１以上の第３のデータ型の更新をスキップして前記第２のデータノードが示す第２のデータ型を更新する、
処理を実行させる開発支援プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は開発支援装置、開発支援方法および開発支援プログラムに関する。
【背景技術】
【０００２】
ソフトウェア開発においては、開発支援環境として、ソフトウェアの設計図の作成を支援するビジュアルエディタ（単にエディタと言うことがある）が使用されることがある。設計図の典型例としては、データフローモデル（データフローダイアグラム（ＤＦＤ）と言うこともある）が挙げられる。データフローモデルは、複数のデータノードと、複数の処理ノードと、データノードと処理ノードとを結ぶ結線を含む。
【０００３】
各データノードは、データ型（データクラスと言うこともある）のインスタンスである。エディタ上では、データ型を編集できることがある。各処理ノードは、処理型（処理クラスと言うこともある）のインスタンスである。エディタ上では、意図する処理内容に合わせて処理ノードのプロパティを編集できることがある。データノードから処理ノードへの有向線はデータ入力を意味し、処理ノードからデータノードへの有向線はデータ出力を意味する。エディタ上では、結線の追加や削除を行えることがある。エディタの中には、設計図から、ソースコードや設定情報の少なくとも一部分を自動生成するものがある。
【０００４】
なお、開発支援環境の例として、データフロー全体の実行コストが低くなるように、データフローダイアグラムに含まれる複数の処理ノードそれぞれに対して適切な処理エンジンを選択するソフトウェア選択装置が提案されている。また、開発支援環境の例として、データフローモデルに含まれるデータノードおよび処理ノードそれぞれに対して適用するモデル変換エンジンおよびモデル変換ルールを選択し、実行環境に依存する設定情報を自動生成する定義ファイル生成方法が提案されている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２０１５−２１２９１１号公報
【特許文献２】特開２０１６−１２６４７４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
エディタの中には、データフローモデルの中の１つの要素が編集されると、データフローの入出力関係が整合するように関連する要素を自動的に更新するものがある。そのようなエディタは、データフローの上流に位置するデータノードのデータ型や処理ノードのプロパティなどが編集されると、それより下流に位置するデータノードのデータ型を自動的に更新することがある。あるデータノードのデータ型の変化は、更に下流に位置するデータノードのデータ型に影響を与えるため、連鎖的にデータ型が更新され得る。
【０００７】
しかし、データフローモデルの中の１つの要素が編集される毎に、それより下流に位置する全てのデータノードのデータ型を更新することは、エディタの負荷を増大させる。そのため、編集操作に対するエディタの応答性能が低下するという問題がある。
【０００８】
１つの側面では、本発明は、データフローモデルのエディタの応答性能を向上できる開発支援装置、開発支援方法および開発支援プログラムを提供することを目的とする。
【課題を解決するための手段】
【０００９】
１つの態様では、記憶部と処理部とを有する開発支援装置が提供される。記憶部は、データ型を示す複数のデータノードとデータ処理を示す複数の処理ノードとを含んでおり複数のデータノードおよび複数の処理ノードの間の入出力関係を示すデータフローモデルを記憶する。また、記憶部は、複数の処理ノードに対応しておりそれぞれが入力のデータ型から出力のデータ型を生成するルールを示す複数のモデル変換ルールを記憶する。処理部は、データフローモデルの中から、第１のデータノードから２以上の処理ノードおよび１以上の第３のデータノードを経由して第２のデータノードに到達するデータフローを検出する。処理部は、複数のモデル変換ルールのうち２以上の処理ノードに対応する２以上のモデル変換ルールを合成して合成モデル変換ルールを生成する。処理部は、第１のデータノードが示す第１のデータ型が変更された後に所定条件が満たされたタイミングで、変更された第１のデータ型および合成モデル変換ルールを用いて、１以上の第３のデータノードが示す１以上の第３のデータ型の更新をスキップして第２のデータノードが示す第２のデータ型を更新する。
【００１０】
また、１つの態様では、コンピュータが実行する開発支援方法が提供される。また、１つの態様では、コンピュータに実行させる開発支援プログラムが提供される。
【発明の効果】
【００１１】
１つの側面では、データフローモデルのエディタの応答性能が向上する。
【図面の簡単な説明】
【００１２】
【図１】第１の実施の形態の開発支援装置の例を示す図である。
【図２】開発支援装置のハードウェア例を示すブロック図である。
【図３】データフローモデルの例を示す図である。
【図４】エディタ画面の表示例を示す図である。
【図５】モデル変換ルールの例を示す図である。
【図６】データ型の自動更新のタイミング例を示す図である。
【図７】データ型の自動更新のタイミング例を示す図（続き）である。
【図８】合成モデル変換ルールの例を示す図である。
【図９】合成モデル変換ルールの生成ステップ例を示す図である。
【図１０】基準データノードの選択例を示す図である。
【図１１】開発支援装置の機能例を示すブロック図である。
【図１２】モデル編集の手順例を示すフローチャートである。
【図１３】モデル編集の手順例を示すフローチャート（続き）である。
【図１４】基準データ判定の手順例を示すフローチャートである。
【図１５】ルールチェーン算出の手順例を示すフローチャートである。
【図１６】ルール合成の手順例を示すフローチャートである。
【発明を実施するための形態】
【００１３】
以下、本実施の形態を図面を参照して説明する。
［第１の実施の形態］
第１の実施の形態を説明する。
【００１４】
図１は、第１の実施の形態の開発支援装置の例を示す図である。
開発支援装置１０は、モデル駆動型のソフトウェア開発を支援する。開発支援装置１０は、ユーザからの入力に応じてソフトウェアの設計図としてのデータフローモデルを生成し、データフローモデルをディスプレイなどの出力デバイスに対して出力する。開発支援装置１０は、ユーザが操作する端末装置などのクライアント装置でもよいし、１以上のクライアント装置からアクセスされるサーバ装置でもよい。
【００１５】
開発支援装置１０は、記憶部１１および処理部１２を有する。記憶部１１は、ＲＡＭ（Random Access Memory）などの揮発性半導体メモリでもよいし、ＨＤＤ（Hard Disk Drive）やフラッシュメモリなどの不揮発性ストレージでもよい。処理部１２は、例えば、ＣＰＵ（Central Processing Unit）やＤＳＰ（Digital Signal Processor）などのプロセッサである。ただし、処理部１２は、ＡＳＩＣ（Application Specific Integrated Circuit）やＦＰＧＡ（Field Programmable Gate Array）などの特定用途の電子回路を含んでもよい。プロセッサは、ＲＡＭなどのメモリに記憶されたプログラムを実行する。プログラムには、後述する処理を実行させる開発支援プログラムが含まれる。複数のプロセッサの集合を「マルチプロセッサ」または単に「プロセッサ」と言うこともある。
【００１６】
記憶部１１は、データフローモデル１３を記憶する。データフローモデル１３は、ソフトウェアのデータフローを示す設計図であり、データフローダイアグラムと言うこともある。データフローモデル１３は、それぞれがデータ型を示す複数のデータノードと、それぞれがデータ処理を示す複数の処理ノードとを含む。データ型は、例えば、整数や文字列などの属性を１つ以上含むデータ構造であり、データクラスと言うこともある。データフローモデル１３は、これらデータノードおよび処理ノードの間の入出力関係を示す。入出力関係は、例えば、データノードと処理ノードとを結ぶ有向線によって表現される。１つのデータノードから１つの処理ノードへの有向線はデータ処理への入力を表し、１つの処理ノードから１つのデータノードへの有向線はデータ処理からの出力を表す。
【００１７】
また、記憶部１１は、データフローモデル１３に含まれる複数の処理ノードに対応する複数のモデル変換ルールを記憶する。モデル変換ル−ルは、入力のデータ型から出力のデータ型を生成するルールを示す。モデル変換ルールは、処理ノードが示すデータ処理の種類に応じたルールであり、例えば、データ処理のテンプレートと併せて予め用意されている。モデル変換ルールは、例えば、入力のデータ型に含まれる属性の全部または一部を出力のデータ型にコピーすることを示す式や、入力のデータ型に含まれていない新たな属性を出力のデータ型に追加することを示す式などを含む。
【００１８】
モデル変換ルールを利用することで、ユーザがデータフローモデル１３を編集していく過程で、編集漏れによりデータ型の整合性が損なわれることを抑制できる。また、モデル変換ルールを利用することで、ユーザが全てのデータ型を明示的に定義しなくてもよく、データフローモデル１３を作成するユーザの負担が軽減される。例えば、あるデータ処理に使用される入力のデータ型が変更されたときに、モデル変換ルールを利用して、そのデータ処理の出力のデータ型を自動的に更新することが可能となる。
【００１９】
一例として、データフローモデル１３は、データノード１４ａ，１４ｂ，１４ｃおよび処理ノード１６ａ，１６ｂを含む。データノード１４ａはデータ型１５ａを示し、データノード１４ｂはデータ型１５ｂを示し、データノード１４ｃはデータ型１５ｃを示す。処理ノード１６ａ，１６ｂおよびデータノード１４ｃは、データノード１４ａからデータノード１４ｂに到達するデータフローの途中に位置する。このデータフローは、例えば、データノード１４ａが処理ノード１６ａの入力に相当し、データノード１４ｃが処理ノード１６ａの出力かつ処理ノード１６ｂの入力に相当し、データノード１４ｂが処理ノード１６ｂの出力に相当することを示す。ただし、データノード１４ａとデータノード１４ｂの間に更に他の処理ノードおよび他のデータノードが存在してもよい。また、一例として、記憶部１１はモデル変換ルール１７ａ，１７ｂを記憶する。モデル変換ルール１７ａは処理ノード１６ａに対応し、モデル変換ルール１７ｂは処理ノード１６ｂに対応する。
【００２０】
処理部１２は、データフローモデル１３の中から上記のデータフローを検出する。すなわち、処理部１２は、データノード１４ａから、２以上の処理ノード（処理ノード１６ａ，１６ｂ）および１以上のデータノード（データノード１４ｃ）を経由して、データノード１４ｂに到達するデータフローを検出する。すると、処理部１２は、記憶部１１に記憶されたモデル変換ルールのうち、上記データフローが経由する処理ノード１６ａ，１６ｂに対応するモデル変換ルール１７ａ，１７ｂを抽出する。処理部１２は、抽出したモデル変換ルール１７ａ，１７ｂを合成することで合成モデル変換ルール１８を生成する。
【００２１】
例えば、処理部１２は、モデル変換ルール１７ａとモデル変換ルール１７ｂとに重複する式が存在する場合、重複を排除する。また、例えば、処理部１２は、モデル変換ルール１７ａとモデル変換ルール１７ｂとに競合しない異なる式が含まれている場合、両方の式を合成モデル変換ルール１８に挿入する。また、例えば、処理部１２は、モデル変換ルール１７ａとモデル変換ルール１７ｂとに競合する異なる式が含まれている場合、モデル変換ルール１７ｂに含まれる方を優先して合成モデル変換ルール１８に挿入する。
【００２２】
ここで、処理部１２は、データノード１４ａが示すデータ型１５ａが変更されたとき、データノード１４ａより下流に位置するデータノード１４ｂ，１４ｃが示すデータ型１５ｂ，１５ｃを即時には更新せず、データ型１５ｂ，１５ｃの更新を遅延させる。このとき、一時的にデータ型１５ａとデータ型１５ｂ，１５ｃとが整合していないことになる。その後、処理部１２は、所定条件が満たされたタイミングでデータ型１５ｂを更新する。このとき、処理部１２は、変更されたデータ型１５ａおよび合成モデル変換ルール１８を用いて、データ型１５ｃの更新をスキップしてデータ型１５ｂを更新する。
【００２３】
データ型１５ｂを更新する契機となる所定条件は、例えば、ユーザがデータノード１４ｂを選択したことなど、データ型１５ｂの情報を出力させる要求が発生したことである。処理部１２は、データ型１５ｂの情報を出力させる要求が発生するまで、データ型１５ｂの更新を保留することが可能である。また、処理部１２は、データ型１５ｃの情報を出力させる要求が発生しない限り、データ型１５ｃを更新しなくてよい。処理部１２は、更新したデータ型１５ｂの情報を、ディスプレイに表示させるなど出力デバイスに出力する。
【００２４】
なお、処理部１２は、所定条件が満たされてから合成モデル変換ルール１８を生成してもよいし、所定条件が満たされる前に合成モデル変換ルール１８を生成しておいてもよい。また、処理部１２は、生成した合成モデル変換ルール１８を記憶部１１に保存しておき、次にデータ型１５ｂを更新するときに合成モデル変換ルール１８を再利用してもよい。上記データフローの先頭のデータノード１４ａは、例えば、データノード１４ｂの上流に位置するデータノードのうち変更時刻が最も遅いデータノードである。データノード１４ｂが選択されてからデータフローを検出する場合、検出すべきデータフローの末尾のデータノード（対象データノード）は、選択されたデータノード１４ｂである。また、検出すべきデータフローの先頭のデータノード（基準データノード）は、データノード１４ｂより上流に位置するデータノードのうち変更時刻が最も遅いデータノードである。
【００２５】
第１の実施の形態の開発支援装置１０によれば、データノード１４ａから処理ノード１６ａ，１６ｂおよびデータノード１４ｃを経由してデータノード１４ｂに到達するデータフローが検出される。処理ノード１６ａ，１６ｂに対応するモデル変換ルール１７ａ，１７ｂを合成した合成モデル変換ルール１８が生成される。そして、データノード１４ａが示すデータ型１５ａが変更された後に所定条件が満たされたタイミングで、データ型１５ａおよび合成モデル変換ルール１８を用いて、データノード１４ｂが示すデータ型１５ｂが更新される。データノード１４ｃが示すデータ型１５ｃの更新はスキップされる。
【００２６】
これにより、データフローモデル１３の整合性を維持することができる。また、ユーザはデータ型１５ａに依存する全てのデータ型を明示的に変更しなくてもよく、データフローモデル１３を編集する負担が軽減される。また、データ型１５ａが変更されたときに、変更の影響を受けるデータ型１５ｂ，１５ｃの更新を遅延させることができる。また、所定条件が満たされたときに、更新を要するデータ型１５ｂのみを更新し、更新を要さないデータ型１５ｃの更新をスキップできる。よって、データ型１５ａが変更されたときの開発支援装置１０の負荷を軽減でき、応答性能を向上させることができる。
【００２７】
［第２の実施の形態］
次に、第２の実施の形態を説明する。
図２は、開発支援装置のハードウェア例を示すブロック図である。
【００２８】
開発支援装置１００は、ＣＰＵ１０１、ＲＡＭ１０２、ＨＤＤ１０３、画像信号処理部１０４、入力信号処理部１０５、媒体リーダ１０６および通信インタフェース１０７を有する。開発支援装置１００が有する上記ユニットは、バスに接続されている。
【００２９】
ＣＰＵ１０１は、プログラムの命令を実行する演算回路を含むプロセッサである。ＣＰＵ１０１は、ＨＤＤ１０３に記憶されたプログラムやデータの少なくとも一部をＲＡＭ１０２にロードし、プログラムを実行する。なお、ＣＰＵ１０１は複数のプロセッサコアを備えてもよく、開発支援装置１００は複数のプロセッサを備えてもよく、後述する処理を複数のプロセッサまたはプロセッサコアを用いて並列に実行してもよい。また、複数のプロセッサの集合を「マルチプロセッサ」または単に「プロセッサ」と言うことがある。
【００３０】
ＲＡＭ１０２は、ＣＰＵ１０１が実行するプログラムやＣＰＵ１０１が演算に用いるデータを一時的に記憶する揮発性の半導体メモリである。なお、開発支援装置１００は、ＲＡＭ以外の種類のメモリを備えてもよく、複数個のメモリを備えてもよい。
【００３１】
ＨＤＤ１０３は、ＯＳ（Operating System）やミドルウェアやアプリケーションソフトウェアなどのソフトウェアのプログラム、および、データを記憶する不揮発性の記憶装置である。なお、開発支援装置１００は、フラッシュメモリやＳＳＤ（Solid State Drive）など他の種類の記憶装置を備えてもよく、複数の不揮発性の記憶装置を備えてもよい。
【００３２】
画像信号処理部１０４は、ＣＰＵ１０１からの命令に従って、開発支援装置１００に接続されたディスプレイ１１１に画像を出力する。ディスプレイ１１１としては、ＣＲＴ（Cathode Ray Tube）ディスプレイ、液晶ディスプレイ（ＬＣＤ：Liquid Crystal Display）、プラズマディスプレイ、有機ＥＬ（ＯＥＬ：Organic Electro-Luminescence）ディスプレイなど様々な種類のディスプレイを用いることができる。
【００３３】
入力信号処理部１０５は、開発支援装置１００に接続された入力デバイス１１２から入力信号を取得し、ＣＰＵ１０１に出力する。入力デバイス１１２としては、マウスやタッチパネルやタッチパッドやトラックボールなどのポインティングデバイス、キーボード、リモートコントローラ、ボタンスイッチなどを用いることができる。また、開発支援装置１００に、複数の種類の入力デバイスが接続されていてもよい。
【００３４】
媒体リーダ１０６は、記録媒体１１３に記録されたプログラムやデータを読み取る読み取り装置である。記録媒体１１３として、例えば、磁気ディスク、光ディスク、光磁気ディスク（ＭＯ：Magneto-Optical disk）、半導体メモリなどを使用できる。磁気ディスクには、フレキシブルディスク（ＦＤ：Flexible Disk）やＨＤＤが含まれる。光ディスクには、ＣＤ（Compact Disc）やＤＶＤ（Digital Versatile Disc）が含まれる。
【００３５】
媒体リーダ１０６は、例えば、記録媒体１１３から読み取ったプログラムやデータを、ＲＡＭ１０２やＨＤＤ１０３などの他の記録媒体にコピーする。読み取られたプログラムは、例えば、ＣＰＵ１０１によって実行される。なお、記録媒体１１３は可搬型記録媒体であってもよく、プログラムやデータの配布に用いられることがある。また、記録媒体１１３やＨＤＤ１０３を、コンピュータ読み取り可能な記録媒体と言うことがある。
【００３６】
通信インタフェース１０７は、ネットワーク１１４に接続され、ネットワーク１１４を介して他の装置と通信を行うインタフェースである。通信インタフェース１０７は、スイッチなどの通信装置とケーブルで接続される有線通信インタフェースでもよいし、基地局と無線リンクで接続される無線通信インタフェースでもよい。
【００３７】
次に、開発支援装置１００が扱うデータフローモデルについて説明する。
図３は、データフローモデルの例を示す図である。
データフローモデルは、ソフトウェアのデータフローを示すモデルである。データフローモデルは、データの種類（データ型）のインスタンスと処理の種類（処理型）のインスタンスとを含み、データ型のインスタンスおよび処理型のインスタンスの間の入出力関係を示す。データ型のインスタンスから処理型のインスタンスへのフローはデータ入力を表し、処理型のインスタンスからデータ型のインスタンスへのフローはデータ出力を表す。
【００３８】
データ型のインスタンスはデータノードとして視覚的に表記され、処理型のインスタンスは処理ノードとして視覚的に表記される。また、データ型のインスタンスから処理型のインスタンスへのフローは、データノードから処理ノードへの結線（有向線）として視覚的に表記される。これは、データノードが示すデータを、処理ノードが示すデータ処理において入力データとして使用することを示す。また、処理型のインスタンスからデータ型のインスタンスへのフローは、処理ノードからデータノードへの結線（有向線）として視覚的に表記される。これは、データノードが示すデータを、処理ノードが示すデータ処理において出力データとして生成することを示す。
【００３９】
一例として、データフローモデルは、インスタンスを視覚的に表したノード２１〜２５を含む。ノード２１，２３，２５はデータノード（データノードＤ１，Ｄ２，Ｄ３）であり、ノード２２，２４は処理ノード（処理ノードＰ１，Ｐ２）である。ノード２１はノード２２の入力に相当し、ノード２３はノード２２の出力かつノード２４の入力に相当し、ノード２５はノード２４の出力に相当する。
【００４０】
視覚的表記としてのノード２１〜２５に対しては、メタモデル要素としての型３１〜３５と、型３１〜３５から派生した実体的要素（モデル要素）であるインスタンス４１〜４５とが定義される。型３１〜３５をクラスと言うことがある。型３１，３３，３５はデータ型であり、型３２，３４は処理型である。インスタンス４１は、型３１から生成されてノード２１として表記される。インスタンス４２は、型３２から生成されてノード２２として表記される。インスタンス４３は、型３３から生成されてノード２３として表記される。インスタンス４４は、型３４から生成されてノード２４として表記される。インスタンス４５は、型３５から生成されてノード２５として表記される。
【００４１】
データ型である型３１，３３，３５には、１以上のデータ要素を示す１以上の属性が定義される。各属性は、データ要素名である属性名と、整数型（ｉｎｔ）や文字列型（ｓｔｒｉｎｇ）などのデータ要素型とを含む。例えば、型３１の名称は「ＥｖｅｎｔＤａｔａ」である。型３１は属性として、整数型の「ｅｖｅｎｔＩｄ」と文字列型の「ｔｉｍｅＳｔｒ」と文字列型の「ｍｉｌｌｉｓＳｔｒ」と文字列型の「ｖａｌｕｅ」を含む。
【００４２】
また、型３３の名称は「ＴｅｍｐｏｒａｒｙＤａｔａ」である。型３３は、整数型の「ｅｖｅｎｔＩｄ」と文字列型の「ｔｉｍｅＳｔｒ」と文字列型の「ｍｉｌｌｉｓＳｔｒ」と文字列型の「ｖａｌｕｅ」と文字列型の「ｔｉｍｅｓｔａｍｐ」を含む。５つの属性のうち最初の４つの属性は、型３１と同じ値が代入されることを想定している。また、型３５の名称は「ＳｃｏｒｅＤａｔａ」である。型３５は、整数型の「ｅｖｅｎｔＩｄ」と文字列型の「ｔｉｍｅＳｔｒ」と文字列型の「ｍｉｌｌｉｓＳｔｒ」と文字列型の「ｖａｌｕｅ」と文字列型の「ｔｉｍｅｓｔａｍｐ」と整数型の「ｓｃｏｒｅ」を含む。６つの属性のうち最初の５つの属性は、型３３と同じ値が代入されることを想定している。
【００４３】
処理型である型３２，３４には、データ処理の挙動を外部から変更できるようにするための１以上のプロパティが定義されていることがある。各プロパティは、プロパティ名とプロパティ型とを含む。型３２，３４に対応するインスタンス４２，４４では、プロパティに具体的な値を代入することでデータ処理の挙動を定義できる。
【００４４】
例えば、型３２の名称は「ＡｄｄＴｉｍｅｓｔａｍｐ」である。型３２は、文字列型の「ｔｉｍｅ」と文字列型の「ｍｉｌｌｉｓ」と文字列型の「ｓｔｏｒｅｄＩｎ」を含む。型３２は、プロパティ「ｔｉｍｅ」および「ｍｉｌｌｉｓ」で指定された属性の値を使用して、プロパティ「ｓｔｏｒｅｄＩｎ」で指定された属性の値を算出するデータ処理を想定している。そこで、インスタンス４２は、プロパティ「ｔｉｍｅ」に「ｔｉｍｅＳｔｒ」を代入し、プロパティ「ｍｉｌｌｉｓ」に「ｍｉｌｌｉｓＳｔｒ」を代入し、プロパティ「ｓｔｏｒｅｄＩｎ」に「ｔｉｍｅｓｔａｍｐ」を代入している。これにより、インスタンス４２は、型３１の属性「ｔｉｍｅＳｔｒ」および「ｍｉｌｌｉｓＳｔｒ」の値を使用して、型３３の属性「ｔｉｍｅｓｔａｍｐ」の値を算出する挙動を表すことになる。
【００４５】
また、型３４の名称は「ＣａｌｃＳｃｏｒｅ」である。型３４は、文字列型の「ａｒｇ１」と文字列型の「ａｒｇ２」を含む。型３４は、プロパティ「ａｒｇ１」および「ａｒｇ２」で指定された属性の値を使用して、属性「ｓｃｏｒｅ」の値を算出するデータ処理を想定している。そこで、インスタンス４４は、プロパティ「ａｒｇ１」に「ｖａｌｕｅ」を代入し、プロパティ「ａｒｇ２」に「ｔｉｍｅｓｔａｍｐ」を代入している。これにより、インスタンス４４は、型３３の属性「ｖａｌｕｅ」および「ｔｉｍｅｓｔａｍｐ」の値を使用して、型３５の属性「ｓｃｏｒｅ」の値を算出する挙動を表すことになる。
【００４６】
このようにして、型３１〜３５から派生したインスタンス４１〜４５を連結し、一連のデータフローを表現することができる。なお、処理型である型３２，３４は、テンプレートとして予め開発支援装置１００に用意されている。ユーザは、予め用意された処理型の集合の中から所望のデータ処理の種類を表す処理型３２，３４を選択し、処理型３２，３４のプロパティに値を代入して使用する。一方、データ型である型３１，３３，３５は、個々のデータフローモデルに合わせて作成することになる。
【００４７】
図４は、エディタ画面の表示例を示す図である。
ディスプレイ１１１にはエディタ画面５０が表示される。エディタ画面５０は、表示領域としてパレット５１、キャンバス５２およびプロパティウィンドウ５３を含む。
【００４８】
パレット５１には、処理型およびデータ型のリストが表示される。パレット５１に列挙される処理型は、データフローモデルを作成するために使用可能な処理型であり開発支援装置１００に予め用意されている。パレット５１に列挙されるデータ型の一部は、ユーザが明示的に作成したデータ型である。パレット５１に列挙される他のデータ型は、ユーザが作成したデータ型に基づいて開発支援装置１００が自動生成したデータ型である。
【００４９】
キャンバス５２には、データノードと処理ノードと結線を用いて視覚的に表されたデータフローモデルが描画される。ユーザは、パレット５１から１つの処理型を選択してキャンバス５２にドロップすることで、処理型のインスタンスを作成してキャンバス５２に新たな処理ノードを追加することができる。また、ユーザは、パレット５１から１つのデータ型を選択してキャンバス５２にドロップすることで、データ型のインスタンスを作成してキャンバス５２に新たなデータノードを追加することができる。
【００５０】
プロパティウィンドウ５３には、選択中のノードの詳細情報が表示される。キャンバス５２に描画されたデータフローモデルの中からユーザが１つの処理ノードを選択すると、プロパティウィンドウ５３には、選択された処理ノードに関するプロパティ名とプロパティ値が列挙される。ユーザは、プロパティウィンドウ５３を利用してプロパティ値を変更する操作を行うことができる。また、キャンバス５２に描画されたデータフローモデルの中からユーザが１つのデータノードを選択すると、プロパティウィンドウ５３には、選択されたデータノードに関する属性名と属性型が列挙される。ユーザは、プロパティウィンドウ５３を利用して属性名の追加や属性型の変更などの操作を行うことができる。
【００５１】
ここで、データフローの途中に現れる全てのデータ型をユーザが明示的に作成することは、ユーザの負担が大きく、また、整合性が損なわれた間違ったデータフローモデルが作成されてしまう可能性がある。一方、処理型が予め定義されているため、選択された処理型と指定されたプロパティと入力としてのデータ型から、出力としてのデータ型を自動的に算出できることがある。例えば、図３の例では、型３１，３２とインスタンス４２が示すプロパティから、出力としての型３３を一意に定義できる。また、型３３，３４とインスタンス４４が示すプロパティから、型３５を一意に定義できる。そこで、開発支援装置１００は、データフローの先頭以外のデータ型を自動生成することで、ユーザによるデータフローモデルの作成を支援する。
【００５２】
図５は、モデル変換ルールの例を示す図である。
開発支援装置１００は、モデル変換ルール６１，６２を有する。モデル変換ルール６１は、処理型である型３２に対応付けて予め用意されている。また、モデル変換ルール６２は、処理型である型３４に対応付けて予め用意されている。
【００５３】
モデル変換ルール６１は、データ型ｉｎｐｕｔとプロパティｐからデータ型ｏｕｔｐｕｔを生成する関数ｇｅｎ（ｉｎｐｕｔ，ｐ）を含む。関数ｇｅｎは、データ型ｏｕｔｐｕｔの名称を「ＴｅｍｐｏｒａｒｙＤａｔａ」に設定する。また、関数ｇｅｎは、データ型ｉｎｐｕｔに含まれる全ての属性をデータ型ｏｕｔｐｕｔにコピーする。また、関数ｇｅｎは、プロパティｐに含まれる「ｓｔｏｒｅｄＩｎ」の値を属性名としてもつ新たな属性を、データ型ｏｕｔｐｕｔに追加する。モデル変換ルール６１に型３１とインスタンス４２のプロパティを入力することで、型３３を生成することができる。
【００５４】
モデル変換ルール６２は、同様に、データ型ｉｎｐｕｔとプロパティｐからデータ型ｏｕｔｐｕｔを生成する関数ｇｅｎ（ｉｎｐｕｔ，ｐ）を含む。関数ｇｅｎは、データ型ｏｕｔｐｕｔの名称を「ＳｃｏｒｅＤａｔａ」に設定する。また、関数ｇｅｎは、データ型ｉｎｐｕｔに含まれる全ての属性をデータ型ｏｕｔｐｕｔにコピーする。また、関数ｇｅｎは、属性名が「ｓｃｏｒｅ」である新たな属性をデータ型ｏｕｔｐｕｔに追加する。モデル変換ルール６２に型３３とインスタンス４４のプロパティを入力することで、型３５を生成することができる。このように、モデル変換ルール６１，６２を用いることで、型３１より下流のデータ型を連鎖的に生成することができる。
【００５５】
上流に位置するデータノードのデータ型が変更されると、下流に位置するデータノードのデータ型がその影響を受ける。データフローモデルの整合性を維持するため、影響を受けるデータ型を、モデル変換ルールを用いて連鎖的に自動更新することが考えられる。しかし、ユーザがデータフローモデルの１箇所を編集する毎にその影響を受ける全てのデータ型を自動更新していると、応答性能が低下するおそれがある。そこで、開発支援装置１００は、影響を受けるデータ型の更新を、そのデータ型が選択されるまで（そのデータ型の詳細情報をプロパティウィンドウ５３に表示するまで）遅延させる。
【００５６】
図６は、データ型の自動更新のタイミング例を示す図である。
開発支援装置１００は、更新時刻テーブル１２４を有する。更新時刻テーブル１２４は、データフローモデルに含まれるデータノードそれぞれについて、最後にデータ型が変更された更新時刻を記録する。ここでは、ノード２１，２２，２４，２５がキャンバス５２に配置され、ノード２１とノード２２が結線され、ノード２４とノード２５が結線されているとする。ノード２３はまだ配置されておらず、ノード２２とノード２４の間に結線は存在しない。また、ノード２１（データノードＤ１）の更新時刻が「１０：００」であり、ノード２５（データノードＤ２）の更新時刻が「１０：０５」であるとする。
【００５７】
ここで、ノード２３（データノードＤ３）が追加され、ノード２２とノード２３が結線され、ノード２３とノード２４が結線される。すると、更新時刻テーブル１２４に、ノード２３の更新時刻「１０：１０」が記録される。このとき、ノード２３の追加によってノード２５のデータ型が影響を受け、入力としてのノード２３と出力としてのノード２５が整合しなくなる。しかし、開発支援装置１００はノード２５のデータ型を更新しない。
【００５８】
次に、ユーザがノード２５を選択する。すると、開発支援装置１００は、ノード２５の詳細情報を表示することになるため、ノード２５のデータ型を更新する。具体的には、開発支援装置１００は、選択されたノード２５を対象データノードとする。また、開発支援装置１００は、対象データノードの上流に位置するデータノードのうち更新時刻が最も遅いデータノードを更新時刻テーブル１２４から検索し、基準データノードとする。ここでは、ノード２５が対象データノードであり、ノード２３が基準データノードである。
【００５９】
開発支援装置１００は、基準データノードから対象データノードに至る経路上に位置する処理ノードを特定し、特定した処理ノードに対応するモデル変換ルールを取得する。そして、開発支援装置１００は、取得したモデル変換ルールと基準データノードのデータ型と経由する処理ノードのプロパティを用いて、対象データノードのデータ型を自動更新する。ここでは、開発支援装置１００は、ノード２４に対応するモデル変換ルール６２を取得する。そして、開発支援装置１００は、モデル変換ルール６２とノード２３のデータ型とノード２４のプロパティを用いて、ノード２５のデータ型を更新する。これにより、ノード２５の最新のデータ型がディスプレイ１１１に表示される。また、更新時刻テーブル１２４に、ノード２５の更新時刻「１０：２０」が記録される。
【００６０】
図７は、データ型の自動更新のタイミング例を示す図（続き）である。
次に、ノード２２のプロパティが編集される。すると、開発支援装置１００は、ノード２２のプロパティに直接的に依存するノード２３のデータ型を自動更新する。具体的には、開発支援装置１００は、編集されたプロパティに依存するノード２３を対象データノードとし、対象データノードの上流に位置するデータノードのうち更新時刻が最も遅いノード２１を基準データノードとする。開発支援装置１００は、モデル変換ルール６１とノード２１のデータ型とノード２２のプロパティを用いて、ノード２３のデータ型を更新する。更新時刻テーブル１２４には、ノード２３の更新時刻「１０：３０」が記録される。
【００６１】
ここで、ノード２３のデータ型が更新されると、ノード２５のデータ型が影響を受け、入力としてのノード２３と出力としてのノード２５が整合しなくなる。しかし、開発支援装置１００は連鎖的にノード２５のデータ型を更新することはしない。
【００６２】
次に、ノード２１のデータ型が編集される。すると、更新時刻テーブル１２４に、ノード２１の更新時刻「１０：４０」が記録される。このとき、ノード２１のデータ型の更新によってノード２３のデータ型が影響を受け、入力としてのノード２１と出力としてのノード２３が整合しなくなる。また、連鎖的にノード２５のデータ型が影響を受ける。しかし、開発支援装置１００はノード２３，２５のデータ型を更新しない。
【００６３】
次に、ユーザがノード２５を選択する。すると、開発支援装置１００はノード２５のデータ型を更新する。具体的には、開発支援装置１００は、選択されたノード２５を対象データノードとし、対象データノードの上流に位置するデータノードのうち更新時刻が最も遅い（更新が最も新しい）ノード２１を基準データノードとする。開発支援装置１００は、基準データノードと対象データノードの間に位置する処理ノードに対応するモデル変換ルール６１，６２を取得する。複数のモデル変換ルールが取得されたため、開発支援装置１００は、モデル変換ルール６１，６２を合成した合成モデル変換ルールを生成する。
【００６４】
そして、開発支援装置１００は、合成モデル変換ルールとノード２１のデータ型とノード２２，２４のプロパティを用いて、ノード２５のデータ型を更新する。更新時刻テーブル１２４には、ノード２５の更新時刻「１０：５０」が記録される。このとき、ノード２３はまだ選択されていないため、開発支援装置１００は、ノード２３のデータ型を更新しなくてよい。すなわち、ノード２３のデータ型の更新を更に遅延させることができる。合成モデル変換ルールを用いることで、開発支援装置１００は、ノード２３のデータ型の更新をスキップしてノード２５のデータ型のみを更新することが可能となる。
【００６５】
図８は、合成モデル変換ルールの例を示す図である。
合成モデル変換ルール６３は、モデル変換ルール６１，６２から生成される。合成モデル変換ルール６３は、データがｉｎｐｕｔとプロパティｐ１，ｐ２からデータ型ｏｕｔｐｕｔを生成する関数ｇｅｎ（ｉｎｐｕｔ，ｐ１，ｐ２）を含む。関数ｇｅｎは、データ型ｏｕｔｐｕｔの名称を「ＳｃｏｒｅＤａｔａ」に設定する。また、関数ｇｅｎは、データ型ｉｎｐｕｔに含まれる全ての属性をデータ型ｏｕｔｐｕｔにコピーする。また、関数ｇｅｎは、プロパティｐ１に含まれる「ｓｔｏｒｅｄＩｎ」の値を属性名としてもつ新たな属性を、データ型ｏｕｔｐｕｔに追加する。また、関数ｇｅｎは、属性名が「ｓｃｏｒｅ」である新たな属性をデータ型ｏｕｔｐｕｔに追加する。
【００６６】
合成モデル変換ルール６３に型３１とインスタンス４２，４４のプロパティを入力することで、型３３をスキップして型３５を生成することができる。このような合成モデル変換ルール６３は、原則として、モデル変換ルール６１に含まれる式とモデル変換ルール６２に含まれる式を合計することで生成できる。ただし、同じ式がモデル変換ルール６１，６２に含まれる場合、重複する式は除去される。また、競合する異なる式がモデル変換ルール６１，６２に含まれる場合、データフローの後方に位置するノード２４に対応するモデル変換ルール６２の式が優先される。
【００６７】
図９は、合成モデル変換ルールの生成ステップ例を示す図である。
開発支援装置１００は、以下のステップＳＴ１〜ＳＴ８を通じて、図５のモデル変換ルール６１，６２から図８の合成モデル変換ルール６３を生成する。
【００６８】
開発支援装置１００は、モデル変換ルール６１に含まれる３つの式を取得する（ＳＴ１）。１番目は、データ型ｏｕｔｐｕｔの名称を「ＴｅｍｐｏｒａｒｙＤａｔａ」に設定する式である。２番目は、データ型ｉｎｐｕｔに含まれる全ての属性をデータ型ｏｕｔｐｕｔにコピーするものである。３番目は、プロパティｐの「ｓｔｏｒｅｄＩｎ」の値を属性名とする属性を、データ型ｏｕｔｐｕｔに追加する式である。
【００６９】
開発支援装置１００は、合成モデル変換ルール６３が空であるため、ステップＳＴ１で取得した１番目の式を合成モデル変換ルール６３に転記する（ＳＴ２）。また、開発支援装置１００は、現時点で合成モデル変換ルール６３に含まれる１つの式と重複も競合もしないため、ステップＳＴ１で取得した２番目の式を合成モデル変換ルール６３に転記する（ＳＴ３）。また、開発支援装置１００は、現時点で合成モデル変換ルール６３に含まれる２つの式の何れとも重複も競合もしないため、ステップＳＴ１で取得した３番目の式を合成モデル変換ルール６３に転記する（ＳＴ４）。
【００７０】
次に、開発支援装置１００は、ステップＳＴ１の全ての式を処理したため、モデル変換ルール６２に含まれる３つの式を取得する（ＳＴ５）。１番目は、データ型ｏｕｔｐｕｔの名称を「ＳｃｏｒｅＤａｔａ」に設定する式である。２番目は、データ型ｉｎｐｕｔに含まれる全ての属性をデータ型ｏｕｔｐｕｔにコピーするものである。３番目は、「ｓｃｏｒｅ」という属性名をもつ属性を、データ型ｏｕｔｐｕｔに追加する式である。
【００７１】
開発支援装置１００は、合成モデル変換ルール６３に含まれる３つの式のうち１番目の式と競合するため、合成モデル変換ルール６３の中の競合する式をステップＳＴ５で取得した１番目の式によって上書きする（ＳＴ６）。すなわち、データ型ｏｕｔｐｕｔの名称を「ＴｅｍｐｏｒａｒｙＤａｔａ」に設定することをキャンセルし、データ型ｏｕｔｐｕｔの名称を「ＳｃｏｒｅＤａｔａ」に設定するように変更する。これは、競合する式を残しておくと無駄な変換処理が発生するためである。
【００７２】
また、開発支援装置１００は、合成モデル変換ルール６３に含まれる３つの式のうち２番目の式と同じであるため、ステップＳＴ５で取得した２番目の式を破棄して重複を除去する（ＳＴ７）。また、開発支援装置１００は、開発支援装置１００は、現時点で合成モデル変換ルール６３に含まれる３つの式の何れとも重複も競合もしないため、ステップＳＴ５で取得した３番目の式を合成モデル変換ルール６３に転記する（ＳＴ８）。以上により、モデル変換ルール６１，６２から合成モデル変換ルール６３が生成される。
【００７３】
上記では、データフローに分岐が存在せず、１つの対象データノードに対して１つの基準データノードが特定される例を説明した。一方、１つの処理ノードに対して複数の入力のデータノードが存在するものや、１つの処理ノードに対して複数の出力のデータノードが存在するものなど、分岐のあるデータフローモデルを作成することもできる。この場合、１つの対象データノードに対して２以上の基準データノードが特定されることがある。
【００７４】
図１０は、基準データノードの選択例を示す図である。
このデータフローモデルは、データノードとしてノード２６ａ，２６ｂ，２６ｃ，２６ｄ，２６ｅ，２６ｆ，２６ｇ，２６ｈ，２６ｉ，２６ｊ（データノードＤ１〜Ｄ１０）を含む。また、このデータフローモデルは、処理ノードとしてノード２７ａ，２７ｂ，２７ｃ，２７ｄ，２７ｅ，２７ｆ（処理ノードＰ１〜Ｐ６）を含む。
【００７５】
ノード２６ａは先頭でありノード２７ａの入力に相当する。ノード２６ｂは先頭でありノード２７ｂの入力に相当する。ノード２６ｃは先頭でありノード２７ｃの入力に相当する。ノード２６ｄはノード２７ａの出力かつノード２７ｄの入力に相当する。ノード２６ｅはノード２７ｂの出力かつノード２７ｄの入力に相当する。ノード２６ｆはノード２７ｃの出力かつノード２７ｅの入力に相当する。ノード２６ｇはノード２７ｄの出力かつノード２７ｆの入力に相当する。ノード２６ｈはノード２７ｄの出力かつノード２７ｅの入力に相当する。ノード２６ｉはノード２７ｅの出力かつノード２７ｆの入力に相当する。ノード２６ｊは末尾でありノード２７ｆの出力に相当する。
【００７６】
ノード２６ａの更新時刻は「１０：４０」である。ノード２６ｂの更新時刻は「１０：２０」である。ノード２６ｃの更新時刻は「１０：３０」である。ノード２６ｄの更新時刻は「１０：１０」である。ノード２６ｅの更新時刻は「１０：３５」である。ノード２６ｆの更新時刻は「１０：２５」である。ノード２６ｇの更新時刻は「１０：４５」である。ノード２６ｈの更新時刻は「１０：０５」である。ノード２６ｉの更新時刻は「１０：１０」である。そして、ノード２６ｊがユーザにより選択されたとする。
【００７７】
この場合、開発支援装置１００は、ノード２６ｊを対象データノードとして選択する。開発支援装置１００は、データフローをノード２６ｊから上流に向かって逆順に辿る。すると、ノード２７ｆで分岐しノード２６ｇを経由するパスが検出される。このパスの中ではノード２６ｇの更新時刻が最も遅い。よって、開発支援装置１００は、ノード２６ｇを基準データノードとして選択する。更に、ノード２７ｅで分岐しノード２６ｆを経由するパスが検出される。このパスの中ではノード２６ｃの更新時刻が最も遅い。よって、開発支援装置１００は、ノード２６ｃを基準データノードとして選択する。
【００７８】
更に、ノード２７ｄで分岐しノード２６ｄを経由するパスが検出される。このパスの中ではノード２６ａの更新時刻が最も遅い。よって、開発支援装置１００は、ノード２６ａを基準データノードとして選択する。更に、ノード２６ｅを経由するパスが検出される。このパスの中ではノード２６ｅの更新時刻が最も遅い。よって、開発支援装置１００は、ノード２６ｅを基準データノードとして選択する。
【００７９】
これにより、ノード２６ａ，２６ｃ，２６ｅ，２６ｇが基準データノードとして選択される。開発支援装置１００は、ノード２６ａ，２６ｃ，２６ｅ，２６ｇからノード２６ｊへ至るパスの途中に位置するノード２７ａ，２７ｃ，２７ｄ，２７ｅ，２７ｆのモデル変換ルールを合成して合成モデル変換ルールを生成する。具体的には、ノード２７ａ，２７ｃ，２７ｄ，２７ｅ，２７ｆに対応するモデル変換ルールをＲ１，Ｒ３，Ｒ４，Ｒ５，Ｒ６を表すと、（（（（Ｒ１，Ｒ４），Ｒ３），Ｒ５），Ｒ６）という順序で合成される。これは、ノード２６ａに関する「Ｒ１，Ｒ４，Ｒ５，Ｒ６」と、ノード２６ｃに関する「Ｒ３，Ｒ５，Ｒ６」と、ノード２６ｅに関する「Ｒ４，Ｒ５，Ｒ６」と、ノード２６ｇに関する「Ｒ６」というモデル変換ルール列を合成したものに相当する。
【００８０】
なお、ノード２７ｄに対応するモデル変換ルールは、ノード２６ｇのデータ型を生成する関数ｇｅｎ１（ｉｎｐｕｔ１，ｉｎｐｕｔ２，ｐ）と、ノード２６ｈのデータ型を生成する関数ｇｅｎ２（ｉｎｐｕｔ１，ｉｎｐｕｔ２，ｐ）とを含む。ただし、ノード２６ｇのデータ型は更新しなくてよいため、関数ｇｅｎ１は合成対象から除外してよい。
【００８１】
次に、開発支援装置１００の機能について説明する。
図１１は、開発支援装置の機能例を示すブロック図である。
開発支援装置１００は、モデル記憶部１２１、変換ルール記憶部１２２および更新時刻記憶部１２３を有する。これら３つのユニットは、例えば、ＲＡＭ１０２またはＨＤＤ１０３に確保した記憶領域を用いて実装される。また、開発支援装置１００は、操作検出部１３１、基準データ判定部１３２、ルールチェーン算出部１３３、ルール合成部１３４、データ型生成部１３５、モデル更新部１３６、モデル表示部１３７およびソースコード生成部１３８を有する。これら８つのユニットは、例えば、ＣＰＵ１０１が実行するプログラムモジュールを用いて実装される。
【００８２】
モデル記憶部１２１は、データフローモデルを記憶する。データフローモデルには、データ型、データ型のインスタンス、プロパティ値を含む処理型のインスタンス、データ型のインスタンスおよび処理型のインスタンスの間の依存関係を示す情報などが含まれる。
【００８３】
変換ルール記憶部１２２は、データ処理の種類毎に予め定義された処理型を記憶する。ユーザが新たな処理型を追加できるようにしてもよい。また、変換ルール記憶部１２２は、処理型のインスタンスからソースコードや環境設定情報を生成するためのテンプレートを記憶する。また、変換ルール記憶部１２２は、処理型に対応するモデル変換ルールを記憶する。テンプレートおよびモデル変換ルールは、処理型と併せて予め用意されている。
【００８４】
更新時刻記憶部１２３は、前述の更新時刻テーブル１２４を記憶する。
操作検出部１３１は、データフローモデルに対するエディタ上の操作を検出する。検出される操作には、データノードのデータ型の変更、処理ノードのプロパティ値の変更、データノードの削除、処理ノードの削除、結線の追加、結線の削除、データノードの選択（フォーカス）などが含まれる。操作検出部１３１は、検出された操作に応じて、データフローモデルの更新をモデル更新部１３６に指示する。また、操作検出部１３１は、所定の操作が検出されたときは、データフローモデルの中から対象データノードを選択する。操作検出部１３１は、選択した対象データノードを基準データ判定部１３２に通知する。
【００８５】
基準データ判定部１３２は、操作検出部１３１から対象データノードが通知されると、データフローモデルの中から１以上の基準データノードを選択する。前述のように、基準データ判定部１３２は、対象データノードから上流に向かってデータフローを逆順に辿ることで基準データノードを選択する。このとき、基準データ判定部１３２は、更新時刻記憶部１２３に記憶された更新時刻テーブル１２４を参照する。基準データ判定部１３２は、選択された対象データノードおよび基準データノードを、ルールチェーン算出部１３３およびデータ型生成部１３５に通知する。
【００８６】
ルールチェーン算出部１３３は、データフローモデルから、基準データノードから対象データノードに至るパス上に存在する処理ノードを抽出する。ルールチェーン算出部１３３は、抽出した処理ノードが示す処理型に対応するモデル変換ルールを変換ルール記憶部１２２から抽出する。そして、ルールチェーン算出部１３３は、抽出した２以上のモデル変換ルールをデータフローに沿って並べたモデル変換ルールチェーンを算出し、算出したモデル変換ルールチェーンをルール合成部１３４に通知する。
【００８７】
ルール合成部１３４は、ルールチェーン算出部１３３から通知されたモデル変換ルールチェーンに含まれるモデル変換ルールを、そのチェーンの先頭から末尾に向かって順番に合成していくことで合成モデル変換ルールを生成する。ルール合成部１３４は、生成した合成モデル変換ルールをデータ型生成部１３５に通知する。なお、生成された合成モデル変換ルールは、各処理型のモデル変換ルールが変更されない限り再利用することが可能である。そこで、ルール合成部１３４は、生成した合成モデル変換ルールを変換ルール記憶部１２２に保存してもよい。後に同じモデル変換ルールチェーンが生じた場合、ルール合成部１３４は、合成モデル変換ルールの生成を省略し、変換ルール記憶部１２２に記憶された合成モデル変換ルールを再利用することができる。
【００８８】
データ型生成部１３５は、データフローモデルから、基準データノードと対象データノードの間に位置する処理ノードのプロパティ（処理型のインスタンス）を取得する。データ型生成部１３５は、基準データノードが示すデータ型と取得したプロパティを、ルール合成部１３４から通知された合成モデル変換ルールに適用する。これにより、途中のデータ型をスキップして対象データノードのデータ型を生成できる。データ型生成部１３５は、生成したデータ型をモデル更新部１３６に通知する。
【００８９】
モデル更新部１３６は、操作検出部１３１からの指示に応じて、モデル記憶部１２１に記憶されたデータフローモデルを更新する。また、モデル更新部１３６は、データ型生成部１３５からデータ型が通知されると、データフローモデルに含まれている対象データノードの古いデータ型を、通知された新たなデータ型に置換する。また、モデル更新部１３６は、１つのデータノードのデータ型を更新する毎に、更新時刻記憶部１２３に記憶された更新時刻テーブル１２４に、当該データノードと対応付けて更新時刻を記録する。データノードが削除された場合、モデル更新部１３６は、当該データノードに対応する更新時刻を更新時刻テーブル１２４から削除する。
【００９０】
モデル表示部１３７は、モデル記憶部１２１に記憶されたデータフローモデルに基づいて、ディスプレイ１１１にエディタ画面５０を表示する。ユーザがキャンバス５２上の１つのデータノードを選択した場合、モデル表示部１３７は、データ型生成部１３５によって生成された最新のデータ型をプロパティウィンドウ５３に表示することになる。
【００９１】
ソースコード生成部１３８は、ユーザからの要求に応じて、モデル記憶部１２１に記憶されたデータフローモデルに対応するソースコードおよび環境設定情報を生成する。例えば、ソースコード生成部１３８は、各データ型から、当該データ型に含まれる属性をメンバ変数としてもつクラスのソースコードを生成する。また、例えば、ソースコード生成部１３８は、各処理型のインスタンスから、当該処理型に対応するテンプレートにプロパティ値を埋め込むことでクラスのソースコードを生成する。
【００９２】
次に、開発支援装置１００の処理手順について説明する。
図１２は、モデル編集の手順例を示すフローチャートである。
（Ｓ１０）操作検出部１３１は、エディタ画面５０に対する操作を検出する。
【００９３】
（Ｓ１１）操作検出部１３１は、検出した操作がデータノードの選択（フォーカス）であるか判断する。検出した操作がデータノードの選択である場合はステップＳ１２に処理が進み、それ以外の操作である場合はステップＳ１３に処理が進む。
【００９４】
（Ｓ１２）操作検出部１３１は、ユーザによって選択されたデータノードを対象データノードと判定する。そして、ステップＳ２０に処理が進む。
（Ｓ１３）モデル更新部１３６は、操作に応じてデータフローモデルを更新する。操作がデータノードに対するデータ型の変更である場合、モデル更新部１３６は、そのデータ型に含まれる属性を更新する。操作が処理ノードに対するプロパティ値の変更である場合、モデル更新部１３６は、処理型のインスタンスが有するプロパティ値を更新する。操作がデータノードの削除である場合、モデル更新部１３６は、データフローモデルからデータ型のインスタンスを削除する。操作が処理ノードの削除である場合、モデル更新部１３６は、データフローモデルから処理型のインスタンスを削除する。操作が結線の追加または削除である場合、モデル更新部１３６は、インスタンス間の依存関係を更新する。
【００９５】
（Ｓ１４）操作検出部１３１は、検出した操作が処理ノードに対するプロパティ値の変更または結線の追加であるか判断する。検出した操作がこれに該当する場合はステップＳ１５に処理が進み、該当しない場合はステップＳ１６に処理が進む。
【００９６】
（Ｓ１５）操作検出部１３１は、変更箇所の直後に位置するデータノード（変更の影響を直接的に受けるデータノード）を対象データノードと判定する。そして、ステップＳ２０に処理が進む。なお、キャンバス５２上で１つの処理ノードと他の１つの処理ノードとを結線しようとすると、実際には、その２つの処理ノードの間にデータノードが挿入される。そして、当該１つの処理ノードと追加のデータノードとが結線され、追加のデータノードと当該他の１つのノードとが結線される。その場合、操作検出部１３１は、追加のデータノードを対象データノードと判定する。
【００９７】
（Ｓ１６）モデル更新部１３６は、実行した更新内容がデータノードの削除であるか判定する。データノードの削除である場合はステップＳ１７に処理が進み、それ以外の更新内容である場合はステップＳ１８に処理が進む。
【００９８】
（Ｓ１７）モデル更新部１３６は、削除したデータノードについてのレコードを更新時刻テーブル１２４から削除する。そして、モデル編集が終了する。
（Ｓ１８）モデル更新部１３６は、実行した更新内容がデータ型の変更であるか判定する。データ型の変更である場合ばステップＳ１９に処理が進み、それ以外の更新内容である場合はモデル編集が終了する。
【００９９】
（Ｓ１９）モデル更新部１３６は、更新時刻テーブル１２４に、変更されたデータ型を示すデータノードと対応付けて更新時刻（現在時刻）を記録する。
図１３は、モデル編集の手順例を示すフローチャート（続き）である。
【０１００】
（Ｓ２０）基準データ判定部１３２は、対象データノードの上流に位置する基準データノードを判定する。基準データ判定の詳細は後述する。
（Ｓ２１）基準データ判定部１３２は、１以上の基準データノードが存在するか判定する。１以上の基準データノードが存在する場合はステップＳ２２に処理が進み、１つの基準データノードも存在しない場合はステップＳ２７に処理が進む。
【０１０１】
（Ｓ２２）ルールチェーン算出部１３３は、基準データノードから対象データノードへ至るパスに沿ってデータ型を変換する場合に使用するモデル変換ルールの列（モデル変換ルールチェーン）を算出する。ルールチェーン算出の詳細は後述する。
【０１０２】
（Ｓ２３）ルール合成部１３４は、モデル変換ルールチェーンに含まれるモデル変換ルールを合成して合成モデル変換ルールを生成する。ルール合成の詳細は後述する。
（Ｓ２４）データ型生成部１３５は、基準データノードのデータ型と、基準データノードと対象データノードの間に位置する中間の処理ノードのプロパティを取得する。データ型生成部１３５は、基準データノードのデータ型と中間の処理ノードのプロパティと合成モデル変換ルールから、対象データノードのデータ型を生成する。
【０１０３】
（Ｓ２５）モデル更新部１３６は、対象データノードのデータ型をステップＳ２４で生成されたデータ型に置換して、データフローモデルを更新する。
（Ｓ２６）モデル更新部１３６は、更新時刻テーブル１２４に、対象データノードと対応付けて更新時刻（現在時刻）を記録する。
【０１０４】
（Ｓ２７）モデル表示部１３７は、対象データノードのデータ型が含む属性（属性名と属性型）をプロパティウィンドウ５３に表示させる。そして、モデル編集が終了する。
図１４は、基準データ判定の手順例を示すフローチャートである。
【０１０５】
（Ｓ３０）基準データ判定部１３２は、Ｄoutに対象データノードを代入する。
以下のステップＳ３１〜Ｓ３９は再帰関数として実行される。この再帰関数は、Ｄoutを引数として取得し、Ｄminを戻り値として出力する。
【０１０６】
（Ｓ３１）基準データ判定部１３２は、Ｄoutが最前段のデータノードであるか判断する。最前段のデータノードは、そのデータノードを出力とする処理ノードが存在しないものである。例えば、図１０の例の場合、ノード２６ａ，２６ｂ，２６ｃが最前段のデータノードである。Ｄoutが最前段のデータノードである場合はステップＳ３９に処理が進み、最前段のデータノードでない場合はステップＳ３２に処理が進む。
【０１０７】
（Ｓ３２）基準データ判定部１３２は、Ｄoutを出力とする処理ノードをＰとする。
（Ｓ３３）基準データ判定部１３２は、Ｐの入力となるデータノードを１つ選択する（ｋ番目のデータノード）。選択したデータノードをＤinとする。
【０１０８】
（Ｓ３４）基準データ判定部１３２は、Ｄinを再帰関数の引数として用いてステップＳ３１〜Ｓ３９を再帰的に実行し、再帰関数の戻り値をＤkminとする。
（Ｓ３５）基準データ判定部１３２は、ステップＳ３３においてＰの入力となるデータノードを全て選択したか判断する。Ｐの入力を全て選択した場合はステップＳ３６に処理が進み、未選択の入力が存在する場合はステップＳ３３に処理が進む。
【０１０９】
（Ｓ３６）基準データ判定部１３２は、更新時刻テーブル１２４を参照して、Ｄkmin（ｋ＝１，２，…）のうち更新時刻が最大のデータノードをＤとして選択する。
（Ｓ３７）基準データ判定部１３２は、更新時刻テーブル１２４を参照して、Ｄの更新時刻とＤoutの更新時刻を比較する。Ｄの更新時刻がＤoutの更新時刻より大きい（遅い）場合、ステップＳ３８に処理が進む。Ｄの更新時刻がＤoutの更新時刻以下である（同じかまたは早い）場合、ステップＳ３９に処理が進む。
【０１１０】
（Ｓ３８）基準データ判定部１３２は、ＤminとしてＤkmin（ｋ＝１，２，…）の集合を出力する。そして、再帰関数が終了する。最上位の再帰関数の呼び出しに対して戻り値Ｄminが得られた場合、ステップＳ４０に処理が進む。
【０１１１】
（Ｓ３９）基準データ判定部１３２は、ＤminとしてＤoutを出力する。そして、再帰関数が終了する。最上位の再帰関数の呼び出しに対して戻り値Ｄminが得られた場合、ステップＳ４０に処理が進む。
【０１１２】
（Ｓ４０）基準データ判定部１３２は、Ｄminが対象データノードであるか判断する。Ｄminが対象データノードである場合はステップＳ４１に処理が進み、Ｄminが対象データノードでない場合はステップＳ４２に処理が進む。
【０１１３】
（Ｓ４１）基準データ判定部１３２は、基準データノードなしと判定する。
（Ｓ４２）基準データ判定部１３２は、Ｄminを基準データノードと判定する。Ｄminが複数のデータノードの集合である場合、複数の基準データノードが選択される。
【０１１４】
図１５は、ルールチェーン算出の手順例を示すフローチャートである。
（Ｓ５０）ルールチェーン算出部１３３は、モデル変換ルールチェーンを空とする。
（Ｓ５１）ルールチェーン算出部１３３は、対象データノードをＤtとする。
【０１１５】
（Ｓ５２）ルールチェーン算出部１３３は、基準データノードを１つ選択し（ｉ番目の基準データノード）、選択した基準データノードをＤbとする。
（Ｓ５３）ルールチェーン算出部１３３は、データフローモデルから、ＤbからＤtへ至るパス上に存在する処理ノードの列を抽出する。
【０１１６】
（Ｓ５４）ルールチェーン算出部１３３は、変換ルール記憶部１２２から、ステップＳ５３の処理ノードの列に対応するモデル変換ルールの列を抽出する。
（Ｓ５５）ルールチェーン算出部１３３は、ステップＳ５４で抽出したモデル変換ルールの列を現在のモデル変換ルールチェーンに合成する。このとき、ルールチェーン算出部１３３は、モデル変換ルールチェーンがデータフロー構造に対応した木構造になるように、共通部分（共通するモデル変換ルールの部分列）を重ね合わせる。
【０１１７】
（Ｓ５６）ルールチェーン算出部１３３は、ステップＳ５２において全ての基準データノードを選択したか判断する。全ての基準データノードを選択した場合はルールチェーン算出が終了し、未選択の基準データノードがある場合はステップＳ５２に処理が進む。
【０１１８】
図１６は、ルール合成の手順例を示すフローチャートである。
（Ｓ６０）ルール合成部１３４は、合成モデル変換ルールを空とする。
（Ｓ６１）ルール合成部１３４は、モデル変換ルールチェーンの中から、未抽出のモデル変換ルールのうち最前段のモデル変換ルールを１つ抽出する。
【０１１９】
（Ｓ６２）ルール合成部１３４は、ステップＳ６１で抽出したモデル変換ルールから式を１つ抽出する。抽出する式は、例えば、関数ｇｅｎに含まれている式である。
（Ｓ６３）ルール合成部１３４は、ステップＳ６２で抽出した式と左辺が同じ式が、合成モデル変換ルールの中に既に存在しているか判断する。左辺が同じ式が存在する場合はステップＳ６４に処理が進み、存在しない場合はステップＳ６５に処理が進む。
【０１２０】
（Ｓ６４）ルール合成部１３４は、ステップＳ６２で抽出した式が代入式であるか判断する。代入式は、左辺と右辺が等号で結合された式であり、左辺の値を右辺に置換することを示す式である。「ｎａｍｅ：＝’ＴｅｍｐｏｒａｒｙＤａｔａ’」や「ａｔｔｒ：＝ｉｎｐｕｔ．ａｔｔｒ」は代入式である。一方、「ａｔｔｒ＋＝ｎｅｗ  ｓｔｒｉｎｇ（ｐ．ｓｔｏｒｅｄＩｎ）」は属性の追加を示す式であり代入式でない。代入式である場合はステップＳ６６に処理が進み、代入式でない場合はステップＳ６５に処理が進む。
【０１２１】
（Ｓ６５）ルール合成部１３４は、ステップＳ６２で抽出した式を合成モデル変換ルールに追加する。そして、ステップＳ６９に処理が進む。
（Ｓ６６）ルール合成部１３４は、代入式が全属性のコピーを示す式であるか判断する。「ａｔｔｒ：＝ｉｎｐｕｔ．ａｔｔｒ」は全属性のコピーを示す式である。全属性のコピーを示す式である場合はステップＳ６７に処理が進み、それ以外の式（例えば、データ型の名称を設定する式など）である場合はステップＳ６８に処理が進む。
【０１２２】
（Ｓ６７）ルール合成部１３４は、合成モデル変換ルールの中に同じ代入式が既に存在する場合、重複排除のためその代入式を破棄する。一方、合成モデル変換ルールの中にその代入式が存在しない場合、ルール合成部１３４は、ステップＳ６２で抽出した代入式を合成モデル変換ルールに追加する。そして、ステップＳ６９に処理が進む。
【０１２３】
（Ｓ６８）ルール合成部１３４は、合成モデル変換ルールの中の競合する代入式をステップＳ６２の代入式で上書きする。すなわち、ルール合成部１３４は、左辺が同じ代入式を合成モデル変換ルールから削除し、ステップＳ６２で抽出した代入式を合成モデル変換ルールに追加する。そして、ステップＳ６９に処理が進む。
【０１２４】
（Ｓ６９）ルール合成部１３４は、ステップＳ６２においてモデル変換ルール内の全ての式を抽出したか判断する。全ての式を抽出した場合はステップＳ７０に処理が進み、未抽出の式が存在する場合はステップＳ６２に処理が進む。
【０１２５】
（Ｓ７０）ルール合成部１３４は、ステップＳ６１で抽出したモデル変換ルールに独自定義関数（ユーティリティ関数）が含まれるか判断する。ユーティリティ関数が含まれる場合、ルール合成部１３４は、ユーティリティ関数を合成モデル変換ルールに追加する。
【０１２６】
（Ｓ７１）ルール合成部１３４は、ステップＳ６１において全てのモデル変換ルールを抽出したか判断する。全てのモデル変換ルールを抽出した場合はルール合成が終了し、未抽出のモデル変換ルールがある場合はステップＳ６１に処理が進む。
【０１２７】
第２の実施の形態の開発支援装置１００によれば、上流のデータノードのデータ型が変更されたとき、下流のデータノードのデータ型がモデル変換ルールに基づいて自動的に更新される。よって、ユーザは全てのデータ型を明示的に変更しなくてもよく、データフローモデル作成の負担が軽減される。また、データフローモデルの整合性を維持することができる。また、上流のデータノードのデータ型が変更されたときに、下流の全てのデータノードのデータ型が即時に更新されるわけではなく、少なくとも一部のデータ型の更新が遅延される。よって、開発支援装置１００の負荷が軽減され、ユーザ操作に対する応答性能が向上する。また、ユーザがデータノードを選択したときに、選択されたデータノードのデータ型が更新されるため、正しいデータ型を表示することができる。また、複数のモデル変換ルールを合成した合成モデル変換ルールを利用するため、途中のデータノードのデータ型の更新をスキップして、所望のデータノードのデータ型のみ更新できる。
【符号の説明】
【０１２８】
１０  開発支援装置
１１  記憶部
１２  処理部
１３  データフローモデル
１４ａ，１４ｂ，１４ｃ  データノード
１５ａ，１５ｂ，１５ｃ  データ型
１６ａ，１６ｂ  処理ノード
１７ａ，１７ｂ  モデル変換ルール
１８  合成モデル変換ルール
【図１】
2018077613.tif 000003
【図２】
2018077613.tif 000004
【図３】
2018077613.tif 000005
【図４】
2018077613.tif 000006
【図５】
2018077613.tif 000007
【図６】
2018077613.tif 000008
【図７】
2018077613.tif 000009
【図８】
2018077613.tif 000010
【図９】
2018077613.tif 000011
【図１０】
2018077613.tif 000012
【図１１】
2018077613.tif 000013
【図１２】
2018077613.tif 000014
【図１３】
2018077613.tif 000015
【図１４】
2018077613.tif 000016
【図１５】
2018077613.tif 000017
【図１６】
2018077613.tif 000018