JP2018077613A - 開発支援装置、開発支援方法および開発支援プログラム - Google Patents

開発支援装置、開発支援方法および開発支援プログラム Download PDF

Info

Publication number
JP2018077613A
JP2018077613A JP2016217900A JP2016217900A JP2018077613A JP 2018077613 A JP2018077613 A JP 2018077613A JP 2016217900 A JP2016217900 A JP 2016217900A JP 2016217900 A JP2016217900 A JP 2016217900A JP 2018077613 A JP2018077613 A JP 2018077613A
Authority
JP
Japan
Prior art keywords
data
node
nodes
type
processing
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.)
Granted
Application number
JP2016217900A
Other languages
English (en)
Other versions
JP6744549B2 (ja
Inventor
功作 木村
Kosaku Kimura
功作 木村
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.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
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 Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2016217900A priority Critical patent/JP6744549B2/ja
Publication of JP2018077613A publication Critical patent/JP2018077613A/ja
Application granted granted Critical
Publication of JP6744549B2 publication Critical patent/JP6744549B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Stored Programmes (AREA)

Abstract

【課題】データフローモデルのエディタの応答性能を向上させる。【解決手段】記憶部11は、データフローモデル13とモデル変換ルール17a,17bとを記憶する。処理部12は、データノード14aから処理ノード16a,16bおよびデータノード14cを経由してデータノード14bに到達するデータフローを検出する。処理部12は、処理ノード16a,16bに対応するモデル変換ルール17a,17bを合成して合成モデル変換ルール18を生成する。処理部12は、データノード14aが示すデータ型15aが変更された後に所定条件が満たされたタイミングで、データ型15aおよび合成モデル変換ルール18を用いて、データノード14cが示すデータ型15cの更新をスキップしてデータノード14bが示すデータ型15bを更新する。【選択図】図1

Description

本発明は開発支援装置、開発支援方法および開発支援プログラムに関する。
ソフトウェア開発においては、開発支援環境として、ソフトウェアの設計図の作成を支援するビジュアルエディタ(単にエディタと言うことがある)が使用されることがある。設計図の典型例としては、データフローモデル(データフローダイアグラム(DFD)と言うこともある)が挙げられる。データフローモデルは、複数のデータノードと、複数の処理ノードと、データノードと処理ノードとを結ぶ結線を含む。
各データノードは、データ型(データクラスと言うこともある)のインスタンスである。エディタ上では、データ型を編集できることがある。各処理ノードは、処理型(処理クラスと言うこともある)のインスタンスである。エディタ上では、意図する処理内容に合わせて処理ノードのプロパティを編集できることがある。データノードから処理ノードへの有向線はデータ入力を意味し、処理ノードからデータノードへの有向線はデータ出力を意味する。エディタ上では、結線の追加や削除を行えることがある。エディタの中には、設計図から、ソースコードや設定情報の少なくとも一部分を自動生成するものがある。
なお、開発支援環境の例として、データフロー全体の実行コストが低くなるように、データフローダイアグラムに含まれる複数の処理ノードそれぞれに対して適切な処理エンジンを選択するソフトウェア選択装置が提案されている。また、開発支援環境の例として、データフローモデルに含まれるデータノードおよび処理ノードそれぞれに対して適用するモデル変換エンジンおよびモデル変換ルールを選択し、実行環境に依存する設定情報を自動生成する定義ファイル生成方法が提案されている。
特開2015−212911号公報 特開2016−126474号公報
エディタの中には、データフローモデルの中の1つの要素が編集されると、データフローの入出力関係が整合するように関連する要素を自動的に更新するものがある。そのようなエディタは、データフローの上流に位置するデータノードのデータ型や処理ノードのプロパティなどが編集されると、それより下流に位置するデータノードのデータ型を自動的に更新することがある。あるデータノードのデータ型の変化は、更に下流に位置するデータノードのデータ型に影響を与えるため、連鎖的にデータ型が更新され得る。
しかし、データフローモデルの中の1つの要素が編集される毎に、それより下流に位置する全てのデータノードのデータ型を更新することは、エディタの負荷を増大させる。そのため、編集操作に対するエディタの応答性能が低下するという問題がある。
1つの側面では、本発明は、データフローモデルのエディタの応答性能を向上できる開発支援装置、開発支援方法および開発支援プログラムを提供することを目的とする。
1つの態様では、記憶部と処理部とを有する開発支援装置が提供される。記憶部は、データ型を示す複数のデータノードとデータ処理を示す複数の処理ノードとを含んでおり複数のデータノードおよび複数の処理ノードの間の入出力関係を示すデータフローモデルを記憶する。また、記憶部は、複数の処理ノードに対応しておりそれぞれが入力のデータ型から出力のデータ型を生成するルールを示す複数のモデル変換ルールを記憶する。処理部は、データフローモデルの中から、第1のデータノードから2以上の処理ノードおよび1以上の第3のデータノードを経由して第2のデータノードに到達するデータフローを検出する。処理部は、複数のモデル変換ルールのうち2以上の処理ノードに対応する2以上のモデル変換ルールを合成して合成モデル変換ルールを生成する。処理部は、第1のデータノードが示す第1のデータ型が変更された後に所定条件が満たされたタイミングで、変更された第1のデータ型および合成モデル変換ルールを用いて、1以上の第3のデータノードが示す1以上の第3のデータ型の更新をスキップして第2のデータノードが示す第2のデータ型を更新する。
また、1つの態様では、コンピュータが実行する開発支援方法が提供される。また、1つの態様では、コンピュータに実行させる開発支援プログラムが提供される。
1つの側面では、データフローモデルのエディタの応答性能が向上する。
第1の実施の形態の開発支援装置の例を示す図である。 開発支援装置のハードウェア例を示すブロック図である。 データフローモデルの例を示す図である。 エディタ画面の表示例を示す図である。 モデル変換ルールの例を示す図である。 データ型の自動更新のタイミング例を示す図である。 データ型の自動更新のタイミング例を示す図(続き)である。 合成モデル変換ルールの例を示す図である。 合成モデル変換ルールの生成ステップ例を示す図である。 基準データノードの選択例を示す図である。 開発支援装置の機能例を示すブロック図である。 モデル編集の手順例を示すフローチャートである。 モデル編集の手順例を示すフローチャート(続き)である。 基準データ判定の手順例を示すフローチャートである。 ルールチェーン算出の手順例を示すフローチャートである。 ルール合成の手順例を示すフローチャートである。
以下、本実施の形態を図面を参照して説明する。
[第1の実施の形態]
第1の実施の形態を説明する。
図1は、第1の実施の形態の開発支援装置の例を示す図である。
開発支援装置10は、モデル駆動型のソフトウェア開発を支援する。開発支援装置10は、ユーザからの入力に応じてソフトウェアの設計図としてのデータフローモデルを生成し、データフローモデルをディスプレイなどの出力デバイスに対して出力する。開発支援装置10は、ユーザが操作する端末装置などのクライアント装置でもよいし、1以上のクライアント装置からアクセスされるサーバ装置でもよい。
開発支援装置10は、記憶部11および処理部12を有する。記憶部11は、RAM(Random Access Memory)などの揮発性半導体メモリでもよいし、HDD(Hard Disk Drive)やフラッシュメモリなどの不揮発性ストレージでもよい。処理部12は、例えば、CPU(Central Processing Unit)やDSP(Digital Signal Processor)などのプロセッサである。ただし、処理部12は、ASIC(Application Specific Integrated Circuit)やFPGA(Field Programmable Gate Array)などの特定用途の電子回路を含んでもよい。プロセッサは、RAMなどのメモリに記憶されたプログラムを実行する。プログラムには、後述する処理を実行させる開発支援プログラムが含まれる。複数のプロセッサの集合を「マルチプロセッサ」または単に「プロセッサ」と言うこともある。
記憶部11は、データフローモデル13を記憶する。データフローモデル13は、ソフトウェアのデータフローを示す設計図であり、データフローダイアグラムと言うこともある。データフローモデル13は、それぞれがデータ型を示す複数のデータノードと、それぞれがデータ処理を示す複数の処理ノードとを含む。データ型は、例えば、整数や文字列などの属性を1つ以上含むデータ構造であり、データクラスと言うこともある。データフローモデル13は、これらデータノードおよび処理ノードの間の入出力関係を示す。入出力関係は、例えば、データノードと処理ノードとを結ぶ有向線によって表現される。1つのデータノードから1つの処理ノードへの有向線はデータ処理への入力を表し、1つの処理ノードから1つのデータノードへの有向線はデータ処理からの出力を表す。
また、記憶部11は、データフローモデル13に含まれる複数の処理ノードに対応する複数のモデル変換ルールを記憶する。モデル変換ル−ルは、入力のデータ型から出力のデータ型を生成するルールを示す。モデル変換ルールは、処理ノードが示すデータ処理の種類に応じたルールであり、例えば、データ処理のテンプレートと併せて予め用意されている。モデル変換ルールは、例えば、入力のデータ型に含まれる属性の全部または一部を出力のデータ型にコピーすることを示す式や、入力のデータ型に含まれていない新たな属性を出力のデータ型に追加することを示す式などを含む。
モデル変換ルールを利用することで、ユーザがデータフローモデル13を編集していく過程で、編集漏れによりデータ型の整合性が損なわれることを抑制できる。また、モデル変換ルールを利用することで、ユーザが全てのデータ型を明示的に定義しなくてもよく、データフローモデル13を作成するユーザの負担が軽減される。例えば、あるデータ処理に使用される入力のデータ型が変更されたときに、モデル変換ルールを利用して、そのデータ処理の出力のデータ型を自動的に更新することが可能となる。
一例として、データフローモデル13は、データノード14a,14b,14cおよび処理ノード16a,16bを含む。データノード14aはデータ型15aを示し、データノード14bはデータ型15bを示し、データノード14cはデータ型15cを示す。処理ノード16a,16bおよびデータノード14cは、データノード14aからデータノード14bに到達するデータフローの途中に位置する。このデータフローは、例えば、データノード14aが処理ノード16aの入力に相当し、データノード14cが処理ノード16aの出力かつ処理ノード16bの入力に相当し、データノード14bが処理ノード16bの出力に相当することを示す。ただし、データノード14aとデータノード14bの間に更に他の処理ノードおよび他のデータノードが存在してもよい。また、一例として、記憶部11はモデル変換ルール17a,17bを記憶する。モデル変換ルール17aは処理ノード16aに対応し、モデル変換ルール17bは処理ノード16bに対応する。
処理部12は、データフローモデル13の中から上記のデータフローを検出する。すなわち、処理部12は、データノード14aから、2以上の処理ノード(処理ノード16a,16b)および1以上のデータノード(データノード14c)を経由して、データノード14bに到達するデータフローを検出する。すると、処理部12は、記憶部11に記憶されたモデル変換ルールのうち、上記データフローが経由する処理ノード16a,16bに対応するモデル変換ルール17a,17bを抽出する。処理部12は、抽出したモデル変換ルール17a,17bを合成することで合成モデル変換ルール18を生成する。
例えば、処理部12は、モデル変換ルール17aとモデル変換ルール17bとに重複する式が存在する場合、重複を排除する。また、例えば、処理部12は、モデル変換ルール17aとモデル変換ルール17bとに競合しない異なる式が含まれている場合、両方の式を合成モデル変換ルール18に挿入する。また、例えば、処理部12は、モデル変換ルール17aとモデル変換ルール17bとに競合する異なる式が含まれている場合、モデル変換ルール17bに含まれる方を優先して合成モデル変換ルール18に挿入する。
ここで、処理部12は、データノード14aが示すデータ型15aが変更されたとき、データノード14aより下流に位置するデータノード14b,14cが示すデータ型15b,15cを即時には更新せず、データ型15b,15cの更新を遅延させる。このとき、一時的にデータ型15aとデータ型15b,15cとが整合していないことになる。その後、処理部12は、所定条件が満たされたタイミングでデータ型15bを更新する。このとき、処理部12は、変更されたデータ型15aおよび合成モデル変換ルール18を用いて、データ型15cの更新をスキップしてデータ型15bを更新する。
データ型15bを更新する契機となる所定条件は、例えば、ユーザがデータノード14bを選択したことなど、データ型15bの情報を出力させる要求が発生したことである。処理部12は、データ型15bの情報を出力させる要求が発生するまで、データ型15bの更新を保留することが可能である。また、処理部12は、データ型15cの情報を出力させる要求が発生しない限り、データ型15cを更新しなくてよい。処理部12は、更新したデータ型15bの情報を、ディスプレイに表示させるなど出力デバイスに出力する。
なお、処理部12は、所定条件が満たされてから合成モデル変換ルール18を生成してもよいし、所定条件が満たされる前に合成モデル変換ルール18を生成しておいてもよい。また、処理部12は、生成した合成モデル変換ルール18を記憶部11に保存しておき、次にデータ型15bを更新するときに合成モデル変換ルール18を再利用してもよい。上記データフローの先頭のデータノード14aは、例えば、データノード14bの上流に位置するデータノードのうち変更時刻が最も遅いデータノードである。データノード14bが選択されてからデータフローを検出する場合、検出すべきデータフローの末尾のデータノード(対象データノード)は、選択されたデータノード14bである。また、検出すべきデータフローの先頭のデータノード(基準データノード)は、データノード14bより上流に位置するデータノードのうち変更時刻が最も遅いデータノードである。
第1の実施の形態の開発支援装置10によれば、データノード14aから処理ノード16a,16bおよびデータノード14cを経由してデータノード14bに到達するデータフローが検出される。処理ノード16a,16bに対応するモデル変換ルール17a,17bを合成した合成モデル変換ルール18が生成される。そして、データノード14aが示すデータ型15aが変更された後に所定条件が満たされたタイミングで、データ型15aおよび合成モデル変換ルール18を用いて、データノード14bが示すデータ型15bが更新される。データノード14cが示すデータ型15cの更新はスキップされる。
これにより、データフローモデル13の整合性を維持することができる。また、ユーザはデータ型15aに依存する全てのデータ型を明示的に変更しなくてもよく、データフローモデル13を編集する負担が軽減される。また、データ型15aが変更されたときに、変更の影響を受けるデータ型15b,15cの更新を遅延させることができる。また、所定条件が満たされたときに、更新を要するデータ型15bのみを更新し、更新を要さないデータ型15cの更新をスキップできる。よって、データ型15aが変更されたときの開発支援装置10の負荷を軽減でき、応答性能を向上させることができる。
[第2の実施の形態]
次に、第2の実施の形態を説明する。
図2は、開発支援装置のハードウェア例を示すブロック図である。
開発支援装置100は、CPU101、RAM102、HDD103、画像信号処理部104、入力信号処理部105、媒体リーダ106および通信インタフェース107を有する。開発支援装置100が有する上記ユニットは、バスに接続されている。
CPU101は、プログラムの命令を実行する演算回路を含むプロセッサである。CPU101は、HDD103に記憶されたプログラムやデータの少なくとも一部をRAM102にロードし、プログラムを実行する。なお、CPU101は複数のプロセッサコアを備えてもよく、開発支援装置100は複数のプロセッサを備えてもよく、後述する処理を複数のプロセッサまたはプロセッサコアを用いて並列に実行してもよい。また、複数のプロセッサの集合を「マルチプロセッサ」または単に「プロセッサ」と言うことがある。
RAM102は、CPU101が実行するプログラムやCPU101が演算に用いるデータを一時的に記憶する揮発性の半導体メモリである。なお、開発支援装置100は、RAM以外の種類のメモリを備えてもよく、複数個のメモリを備えてもよい。
HDD103は、OS(Operating System)やミドルウェアやアプリケーションソフトウェアなどのソフトウェアのプログラム、および、データを記憶する不揮発性の記憶装置である。なお、開発支援装置100は、フラッシュメモリやSSD(Solid State Drive)など他の種類の記憶装置を備えてもよく、複数の不揮発性の記憶装置を備えてもよい。
画像信号処理部104は、CPU101からの命令に従って、開発支援装置100に接続されたディスプレイ111に画像を出力する。ディスプレイ111としては、CRT(Cathode Ray Tube)ディスプレイ、液晶ディスプレイ(LCD:Liquid Crystal Display)、プラズマディスプレイ、有機EL(OEL:Organic Electro-Luminescence)ディスプレイなど様々な種類のディスプレイを用いることができる。
入力信号処理部105は、開発支援装置100に接続された入力デバイス112から入力信号を取得し、CPU101に出力する。入力デバイス112としては、マウスやタッチパネルやタッチパッドやトラックボールなどのポインティングデバイス、キーボード、リモートコントローラ、ボタンスイッチなどを用いることができる。また、開発支援装置100に、複数の種類の入力デバイスが接続されていてもよい。
媒体リーダ106は、記録媒体113に記録されたプログラムやデータを読み取る読み取り装置である。記録媒体113として、例えば、磁気ディスク、光ディスク、光磁気ディスク(MO:Magneto-Optical disk)、半導体メモリなどを使用できる。磁気ディスクには、フレキシブルディスク(FD:Flexible Disk)やHDDが含まれる。光ディスクには、CD(Compact Disc)やDVD(Digital Versatile Disc)が含まれる。
媒体リーダ106は、例えば、記録媒体113から読み取ったプログラムやデータを、RAM102やHDD103などの他の記録媒体にコピーする。読み取られたプログラムは、例えば、CPU101によって実行される。なお、記録媒体113は可搬型記録媒体であってもよく、プログラムやデータの配布に用いられることがある。また、記録媒体113やHDD103を、コンピュータ読み取り可能な記録媒体と言うことがある。
通信インタフェース107は、ネットワーク114に接続され、ネットワーク114を介して他の装置と通信を行うインタフェースである。通信インタフェース107は、スイッチなどの通信装置とケーブルで接続される有線通信インタフェースでもよいし、基地局と無線リンクで接続される無線通信インタフェースでもよい。
次に、開発支援装置100が扱うデータフローモデルについて説明する。
図3は、データフローモデルの例を示す図である。
データフローモデルは、ソフトウェアのデータフローを示すモデルである。データフローモデルは、データの種類(データ型)のインスタンスと処理の種類(処理型)のインスタンスとを含み、データ型のインスタンスおよび処理型のインスタンスの間の入出力関係を示す。データ型のインスタンスから処理型のインスタンスへのフローはデータ入力を表し、処理型のインスタンスからデータ型のインスタンスへのフローはデータ出力を表す。
データ型のインスタンスはデータノードとして視覚的に表記され、処理型のインスタンスは処理ノードとして視覚的に表記される。また、データ型のインスタンスから処理型のインスタンスへのフローは、データノードから処理ノードへの結線(有向線)として視覚的に表記される。これは、データノードが示すデータを、処理ノードが示すデータ処理において入力データとして使用することを示す。また、処理型のインスタンスからデータ型のインスタンスへのフローは、処理ノードからデータノードへの結線(有向線)として視覚的に表記される。これは、データノードが示すデータを、処理ノードが示すデータ処理において出力データとして生成することを示す。
一例として、データフローモデルは、インスタンスを視覚的に表したノード21〜25を含む。ノード21,23,25はデータノード(データノードD1,D2,D3)であり、ノード22,24は処理ノード(処理ノードP1,P2)である。ノード21はノード22の入力に相当し、ノード23はノード22の出力かつノード24の入力に相当し、ノード25はノード24の出力に相当する。
視覚的表記としてのノード21〜25に対しては、メタモデル要素としての型31〜35と、型31〜35から派生した実体的要素(モデル要素)であるインスタンス41〜45とが定義される。型31〜35をクラスと言うことがある。型31,33,35はデータ型であり、型32,34は処理型である。インスタンス41は、型31から生成されてノード21として表記される。インスタンス42は、型32から生成されてノード22として表記される。インスタンス43は、型33から生成されてノード23として表記される。インスタンス44は、型34から生成されてノード24として表記される。インスタンス45は、型35から生成されてノード25として表記される。
データ型である型31,33,35には、1以上のデータ要素を示す1以上の属性が定義される。各属性は、データ要素名である属性名と、整数型(int)や文字列型(string)などのデータ要素型とを含む。例えば、型31の名称は「EventData」である。型31は属性として、整数型の「eventId」と文字列型の「timeStr」と文字列型の「millisStr」と文字列型の「value」を含む。
また、型33の名称は「TemporaryData」である。型33は、整数型の「eventId」と文字列型の「timeStr」と文字列型の「millisStr」と文字列型の「value」と文字列型の「timestamp」を含む。5つの属性のうち最初の4つの属性は、型31と同じ値が代入されることを想定している。また、型35の名称は「ScoreData」である。型35は、整数型の「eventId」と文字列型の「timeStr」と文字列型の「millisStr」と文字列型の「value」と文字列型の「timestamp」と整数型の「score」を含む。6つの属性のうち最初の5つの属性は、型33と同じ値が代入されることを想定している。
処理型である型32,34には、データ処理の挙動を外部から変更できるようにするための1以上のプロパティが定義されていることがある。各プロパティは、プロパティ名とプロパティ型とを含む。型32,34に対応するインスタンス42,44では、プロパティに具体的な値を代入することでデータ処理の挙動を定義できる。
例えば、型32の名称は「AddTimestamp」である。型32は、文字列型の「time」と文字列型の「millis」と文字列型の「storedIn」を含む。型32は、プロパティ「time」および「millis」で指定された属性の値を使用して、プロパティ「storedIn」で指定された属性の値を算出するデータ処理を想定している。そこで、インスタンス42は、プロパティ「time」に「timeStr」を代入し、プロパティ「millis」に「millisStr」を代入し、プロパティ「storedIn」に「timestamp」を代入している。これにより、インスタンス42は、型31の属性「timeStr」および「millisStr」の値を使用して、型33の属性「timestamp」の値を算出する挙動を表すことになる。
また、型34の名称は「CalcScore」である。型34は、文字列型の「arg1」と文字列型の「arg2」を含む。型34は、プロパティ「arg1」および「arg2」で指定された属性の値を使用して、属性「score」の値を算出するデータ処理を想定している。そこで、インスタンス44は、プロパティ「arg1」に「value」を代入し、プロパティ「arg2」に「timestamp」を代入している。これにより、インスタンス44は、型33の属性「value」および「timestamp」の値を使用して、型35の属性「score」の値を算出する挙動を表すことになる。
このようにして、型31〜35から派生したインスタンス41〜45を連結し、一連のデータフローを表現することができる。なお、処理型である型32,34は、テンプレートとして予め開発支援装置100に用意されている。ユーザは、予め用意された処理型の集合の中から所望のデータ処理の種類を表す処理型32,34を選択し、処理型32,34のプロパティに値を代入して使用する。一方、データ型である型31,33,35は、個々のデータフローモデルに合わせて作成することになる。
図4は、エディタ画面の表示例を示す図である。
ディスプレイ111にはエディタ画面50が表示される。エディタ画面50は、表示領域としてパレット51、キャンバス52およびプロパティウィンドウ53を含む。
パレット51には、処理型およびデータ型のリストが表示される。パレット51に列挙される処理型は、データフローモデルを作成するために使用可能な処理型であり開発支援装置100に予め用意されている。パレット51に列挙されるデータ型の一部は、ユーザが明示的に作成したデータ型である。パレット51に列挙される他のデータ型は、ユーザが作成したデータ型に基づいて開発支援装置100が自動生成したデータ型である。
キャンバス52には、データノードと処理ノードと結線を用いて視覚的に表されたデータフローモデルが描画される。ユーザは、パレット51から1つの処理型を選択してキャンバス52にドロップすることで、処理型のインスタンスを作成してキャンバス52に新たな処理ノードを追加することができる。また、ユーザは、パレット51から1つのデータ型を選択してキャンバス52にドロップすることで、データ型のインスタンスを作成してキャンバス52に新たなデータノードを追加することができる。
プロパティウィンドウ53には、選択中のノードの詳細情報が表示される。キャンバス52に描画されたデータフローモデルの中からユーザが1つの処理ノードを選択すると、プロパティウィンドウ53には、選択された処理ノードに関するプロパティ名とプロパティ値が列挙される。ユーザは、プロパティウィンドウ53を利用してプロパティ値を変更する操作を行うことができる。また、キャンバス52に描画されたデータフローモデルの中からユーザが1つのデータノードを選択すると、プロパティウィンドウ53には、選択されたデータノードに関する属性名と属性型が列挙される。ユーザは、プロパティウィンドウ53を利用して属性名の追加や属性型の変更などの操作を行うことができる。
ここで、データフローの途中に現れる全てのデータ型をユーザが明示的に作成することは、ユーザの負担が大きく、また、整合性が損なわれた間違ったデータフローモデルが作成されてしまう可能性がある。一方、処理型が予め定義されているため、選択された処理型と指定されたプロパティと入力としてのデータ型から、出力としてのデータ型を自動的に算出できることがある。例えば、図3の例では、型31,32とインスタンス42が示すプロパティから、出力としての型33を一意に定義できる。また、型33,34とインスタンス44が示すプロパティから、型35を一意に定義できる。そこで、開発支援装置100は、データフローの先頭以外のデータ型を自動生成することで、ユーザによるデータフローモデルの作成を支援する。
図5は、モデル変換ルールの例を示す図である。
開発支援装置100は、モデル変換ルール61,62を有する。モデル変換ルール61は、処理型である型32に対応付けて予め用意されている。また、モデル変換ルール62は、処理型である型34に対応付けて予め用意されている。
モデル変換ルール61は、データ型inputとプロパティpからデータ型outputを生成する関数gen(input,p)を含む。関数genは、データ型outputの名称を「TemporaryData」に設定する。また、関数genは、データ型inputに含まれる全ての属性をデータ型outputにコピーする。また、関数genは、プロパティpに含まれる「storedIn」の値を属性名としてもつ新たな属性を、データ型outputに追加する。モデル変換ルール61に型31とインスタンス42のプロパティを入力することで、型33を生成することができる。
モデル変換ルール62は、同様に、データ型inputとプロパティpからデータ型outputを生成する関数gen(input,p)を含む。関数genは、データ型outputの名称を「ScoreData」に設定する。また、関数genは、データ型inputに含まれる全ての属性をデータ型outputにコピーする。また、関数genは、属性名が「score」である新たな属性をデータ型outputに追加する。モデル変換ルール62に型33とインスタンス44のプロパティを入力することで、型35を生成することができる。このように、モデル変換ルール61,62を用いることで、型31より下流のデータ型を連鎖的に生成することができる。
上流に位置するデータノードのデータ型が変更されると、下流に位置するデータノードのデータ型がその影響を受ける。データフローモデルの整合性を維持するため、影響を受けるデータ型を、モデル変換ルールを用いて連鎖的に自動更新することが考えられる。しかし、ユーザがデータフローモデルの1箇所を編集する毎にその影響を受ける全てのデータ型を自動更新していると、応答性能が低下するおそれがある。そこで、開発支援装置100は、影響を受けるデータ型の更新を、そのデータ型が選択されるまで(そのデータ型の詳細情報をプロパティウィンドウ53に表示するまで)遅延させる。
図6は、データ型の自動更新のタイミング例を示す図である。
開発支援装置100は、更新時刻テーブル124を有する。更新時刻テーブル124は、データフローモデルに含まれるデータノードそれぞれについて、最後にデータ型が変更された更新時刻を記録する。ここでは、ノード21,22,24,25がキャンバス52に配置され、ノード21とノード22が結線され、ノード24とノード25が結線されているとする。ノード23はまだ配置されておらず、ノード22とノード24の間に結線は存在しない。また、ノード21(データノードD1)の更新時刻が「10:00」であり、ノード25(データノードD2)の更新時刻が「10:05」であるとする。
ここで、ノード23(データノードD3)が追加され、ノード22とノード23が結線され、ノード23とノード24が結線される。すると、更新時刻テーブル124に、ノード23の更新時刻「10:10」が記録される。このとき、ノード23の追加によってノード25のデータ型が影響を受け、入力としてのノード23と出力としてのノード25が整合しなくなる。しかし、開発支援装置100はノード25のデータ型を更新しない。
次に、ユーザがノード25を選択する。すると、開発支援装置100は、ノード25の詳細情報を表示することになるため、ノード25のデータ型を更新する。具体的には、開発支援装置100は、選択されたノード25を対象データノードとする。また、開発支援装置100は、対象データノードの上流に位置するデータノードのうち更新時刻が最も遅いデータノードを更新時刻テーブル124から検索し、基準データノードとする。ここでは、ノード25が対象データノードであり、ノード23が基準データノードである。
開発支援装置100は、基準データノードから対象データノードに至る経路上に位置する処理ノードを特定し、特定した処理ノードに対応するモデル変換ルールを取得する。そして、開発支援装置100は、取得したモデル変換ルールと基準データノードのデータ型と経由する処理ノードのプロパティを用いて、対象データノードのデータ型を自動更新する。ここでは、開発支援装置100は、ノード24に対応するモデル変換ルール62を取得する。そして、開発支援装置100は、モデル変換ルール62とノード23のデータ型とノード24のプロパティを用いて、ノード25のデータ型を更新する。これにより、ノード25の最新のデータ型がディスプレイ111に表示される。また、更新時刻テーブル124に、ノード25の更新時刻「10:20」が記録される。
図7は、データ型の自動更新のタイミング例を示す図(続き)である。
次に、ノード22のプロパティが編集される。すると、開発支援装置100は、ノード22のプロパティに直接的に依存するノード23のデータ型を自動更新する。具体的には、開発支援装置100は、編集されたプロパティに依存するノード23を対象データノードとし、対象データノードの上流に位置するデータノードのうち更新時刻が最も遅いノード21を基準データノードとする。開発支援装置100は、モデル変換ルール61とノード21のデータ型とノード22のプロパティを用いて、ノード23のデータ型を更新する。更新時刻テーブル124には、ノード23の更新時刻「10:30」が記録される。
ここで、ノード23のデータ型が更新されると、ノード25のデータ型が影響を受け、入力としてのノード23と出力としてのノード25が整合しなくなる。しかし、開発支援装置100は連鎖的にノード25のデータ型を更新することはしない。
次に、ノード21のデータ型が編集される。すると、更新時刻テーブル124に、ノード21の更新時刻「10:40」が記録される。このとき、ノード21のデータ型の更新によってノード23のデータ型が影響を受け、入力としてのノード21と出力としてのノード23が整合しなくなる。また、連鎖的にノード25のデータ型が影響を受ける。しかし、開発支援装置100はノード23,25のデータ型を更新しない。
次に、ユーザがノード25を選択する。すると、開発支援装置100はノード25のデータ型を更新する。具体的には、開発支援装置100は、選択されたノード25を対象データノードとし、対象データノードの上流に位置するデータノードのうち更新時刻が最も遅い(更新が最も新しい)ノード21を基準データノードとする。開発支援装置100は、基準データノードと対象データノードの間に位置する処理ノードに対応するモデル変換ルール61,62を取得する。複数のモデル変換ルールが取得されたため、開発支援装置100は、モデル変換ルール61,62を合成した合成モデル変換ルールを生成する。
そして、開発支援装置100は、合成モデル変換ルールとノード21のデータ型とノード22,24のプロパティを用いて、ノード25のデータ型を更新する。更新時刻テーブル124には、ノード25の更新時刻「10:50」が記録される。このとき、ノード23はまだ選択されていないため、開発支援装置100は、ノード23のデータ型を更新しなくてよい。すなわち、ノード23のデータ型の更新を更に遅延させることができる。合成モデル変換ルールを用いることで、開発支援装置100は、ノード23のデータ型の更新をスキップしてノード25のデータ型のみを更新することが可能となる。
図8は、合成モデル変換ルールの例を示す図である。
合成モデル変換ルール63は、モデル変換ルール61,62から生成される。合成モデル変換ルール63は、データがinputとプロパティp1,p2からデータ型outputを生成する関数gen(input,p1,p2)を含む。関数genは、データ型outputの名称を「ScoreData」に設定する。また、関数genは、データ型inputに含まれる全ての属性をデータ型outputにコピーする。また、関数genは、プロパティp1に含まれる「storedIn」の値を属性名としてもつ新たな属性を、データ型outputに追加する。また、関数genは、属性名が「score」である新たな属性をデータ型outputに追加する。
合成モデル変換ルール63に型31とインスタンス42,44のプロパティを入力することで、型33をスキップして型35を生成することができる。このような合成モデル変換ルール63は、原則として、モデル変換ルール61に含まれる式とモデル変換ルール62に含まれる式を合計することで生成できる。ただし、同じ式がモデル変換ルール61,62に含まれる場合、重複する式は除去される。また、競合する異なる式がモデル変換ルール61,62に含まれる場合、データフローの後方に位置するノード24に対応するモデル変換ルール62の式が優先される。
図9は、合成モデル変換ルールの生成ステップ例を示す図である。
開発支援装置100は、以下のステップST1〜ST8を通じて、図5のモデル変換ルール61,62から図8の合成モデル変換ルール63を生成する。
開発支援装置100は、モデル変換ルール61に含まれる3つの式を取得する(ST1)。1番目は、データ型outputの名称を「TemporaryData」に設定する式である。2番目は、データ型inputに含まれる全ての属性をデータ型outputにコピーするものである。3番目は、プロパティpの「storedIn」の値を属性名とする属性を、データ型outputに追加する式である。
開発支援装置100は、合成モデル変換ルール63が空であるため、ステップST1で取得した1番目の式を合成モデル変換ルール63に転記する(ST2)。また、開発支援装置100は、現時点で合成モデル変換ルール63に含まれる1つの式と重複も競合もしないため、ステップST1で取得した2番目の式を合成モデル変換ルール63に転記する(ST3)。また、開発支援装置100は、現時点で合成モデル変換ルール63に含まれる2つの式の何れとも重複も競合もしないため、ステップST1で取得した3番目の式を合成モデル変換ルール63に転記する(ST4)。
次に、開発支援装置100は、ステップST1の全ての式を処理したため、モデル変換ルール62に含まれる3つの式を取得する(ST5)。1番目は、データ型outputの名称を「ScoreData」に設定する式である。2番目は、データ型inputに含まれる全ての属性をデータ型outputにコピーするものである。3番目は、「score」という属性名をもつ属性を、データ型outputに追加する式である。
開発支援装置100は、合成モデル変換ルール63に含まれる3つの式のうち1番目の式と競合するため、合成モデル変換ルール63の中の競合する式をステップST5で取得した1番目の式によって上書きする(ST6)。すなわち、データ型outputの名称を「TemporaryData」に設定することをキャンセルし、データ型outputの名称を「ScoreData」に設定するように変更する。これは、競合する式を残しておくと無駄な変換処理が発生するためである。
また、開発支援装置100は、合成モデル変換ルール63に含まれる3つの式のうち2番目の式と同じであるため、ステップST5で取得した2番目の式を破棄して重複を除去する(ST7)。また、開発支援装置100は、開発支援装置100は、現時点で合成モデル変換ルール63に含まれる3つの式の何れとも重複も競合もしないため、ステップST5で取得した3番目の式を合成モデル変換ルール63に転記する(ST8)。以上により、モデル変換ルール61,62から合成モデル変換ルール63が生成される。
上記では、データフローに分岐が存在せず、1つの対象データノードに対して1つの基準データノードが特定される例を説明した。一方、1つの処理ノードに対して複数の入力のデータノードが存在するものや、1つの処理ノードに対して複数の出力のデータノードが存在するものなど、分岐のあるデータフローモデルを作成することもできる。この場合、1つの対象データノードに対して2以上の基準データノードが特定されることがある。
図10は、基準データノードの選択例を示す図である。
このデータフローモデルは、データノードとしてノード26a,26b,26c,26d,26e,26f,26g,26h,26i,26j(データノードD1〜D10)を含む。また、このデータフローモデルは、処理ノードとしてノード27a,27b,27c,27d,27e,27f(処理ノードP1〜P6)を含む。
ノード26aは先頭でありノード27aの入力に相当する。ノード26bは先頭でありノード27bの入力に相当する。ノード26cは先頭でありノード27cの入力に相当する。ノード26dはノード27aの出力かつノード27dの入力に相当する。ノード26eはノード27bの出力かつノード27dの入力に相当する。ノード26fはノード27cの出力かつノード27eの入力に相当する。ノード26gはノード27dの出力かつノード27fの入力に相当する。ノード26hはノード27dの出力かつノード27eの入力に相当する。ノード26iはノード27eの出力かつノード27fの入力に相当する。ノード26jは末尾でありノード27fの出力に相当する。
ノード26aの更新時刻は「10:40」である。ノード26bの更新時刻は「10:20」である。ノード26cの更新時刻は「10:30」である。ノード26dの更新時刻は「10:10」である。ノード26eの更新時刻は「10:35」である。ノード26fの更新時刻は「10:25」である。ノード26gの更新時刻は「10:45」である。ノード26hの更新時刻は「10:05」である。ノード26iの更新時刻は「10:10」である。そして、ノード26jがユーザにより選択されたとする。
この場合、開発支援装置100は、ノード26jを対象データノードとして選択する。開発支援装置100は、データフローをノード26jから上流に向かって逆順に辿る。すると、ノード27fで分岐しノード26gを経由するパスが検出される。このパスの中ではノード26gの更新時刻が最も遅い。よって、開発支援装置100は、ノード26gを基準データノードとして選択する。更に、ノード27eで分岐しノード26fを経由するパスが検出される。このパスの中ではノード26cの更新時刻が最も遅い。よって、開発支援装置100は、ノード26cを基準データノードとして選択する。
更に、ノード27dで分岐しノード26dを経由するパスが検出される。このパスの中ではノード26aの更新時刻が最も遅い。よって、開発支援装置100は、ノード26aを基準データノードとして選択する。更に、ノード26eを経由するパスが検出される。このパスの中ではノード26eの更新時刻が最も遅い。よって、開発支援装置100は、ノード26eを基準データノードとして選択する。
これにより、ノード26a,26c,26e,26gが基準データノードとして選択される。開発支援装置100は、ノード26a,26c,26e,26gからノード26jへ至るパスの途中に位置するノード27a,27c,27d,27e,27fのモデル変換ルールを合成して合成モデル変換ルールを生成する。具体的には、ノード27a,27c,27d,27e,27fに対応するモデル変換ルールをR1,R3,R4,R5,R6を表すと、((((R1,R4),R3),R5),R6)という順序で合成される。これは、ノード26aに関する「R1,R4,R5,R6」と、ノード26cに関する「R3,R5,R6」と、ノード26eに関する「R4,R5,R6」と、ノード26gに関する「R6」というモデル変換ルール列を合成したものに相当する。
なお、ノード27dに対応するモデル変換ルールは、ノード26gのデータ型を生成する関数gen1(input1,input2,p)と、ノード26hのデータ型を生成する関数gen2(input1,input2,p)とを含む。ただし、ノード26gのデータ型は更新しなくてよいため、関数gen1は合成対象から除外してよい。
次に、開発支援装置100の機能について説明する。
図11は、開発支援装置の機能例を示すブロック図である。
開発支援装置100は、モデル記憶部121、変換ルール記憶部122および更新時刻記憶部123を有する。これら3つのユニットは、例えば、RAM102またはHDD103に確保した記憶領域を用いて実装される。また、開発支援装置100は、操作検出部131、基準データ判定部132、ルールチェーン算出部133、ルール合成部134、データ型生成部135、モデル更新部136、モデル表示部137およびソースコード生成部138を有する。これら8つのユニットは、例えば、CPU101が実行するプログラムモジュールを用いて実装される。
モデル記憶部121は、データフローモデルを記憶する。データフローモデルには、データ型、データ型のインスタンス、プロパティ値を含む処理型のインスタンス、データ型のインスタンスおよび処理型のインスタンスの間の依存関係を示す情報などが含まれる。
変換ルール記憶部122は、データ処理の種類毎に予め定義された処理型を記憶する。ユーザが新たな処理型を追加できるようにしてもよい。また、変換ルール記憶部122は、処理型のインスタンスからソースコードや環境設定情報を生成するためのテンプレートを記憶する。また、変換ルール記憶部122は、処理型に対応するモデル変換ルールを記憶する。テンプレートおよびモデル変換ルールは、処理型と併せて予め用意されている。
更新時刻記憶部123は、前述の更新時刻テーブル124を記憶する。
操作検出部131は、データフローモデルに対するエディタ上の操作を検出する。検出される操作には、データノードのデータ型の変更、処理ノードのプロパティ値の変更、データノードの削除、処理ノードの削除、結線の追加、結線の削除、データノードの選択(フォーカス)などが含まれる。操作検出部131は、検出された操作に応じて、データフローモデルの更新をモデル更新部136に指示する。また、操作検出部131は、所定の操作が検出されたときは、データフローモデルの中から対象データノードを選択する。操作検出部131は、選択した対象データノードを基準データ判定部132に通知する。
基準データ判定部132は、操作検出部131から対象データノードが通知されると、データフローモデルの中から1以上の基準データノードを選択する。前述のように、基準データ判定部132は、対象データノードから上流に向かってデータフローを逆順に辿ることで基準データノードを選択する。このとき、基準データ判定部132は、更新時刻記憶部123に記憶された更新時刻テーブル124を参照する。基準データ判定部132は、選択された対象データノードおよび基準データノードを、ルールチェーン算出部133およびデータ型生成部135に通知する。
ルールチェーン算出部133は、データフローモデルから、基準データノードから対象データノードに至るパス上に存在する処理ノードを抽出する。ルールチェーン算出部133は、抽出した処理ノードが示す処理型に対応するモデル変換ルールを変換ルール記憶部122から抽出する。そして、ルールチェーン算出部133は、抽出した2以上のモデル変換ルールをデータフローに沿って並べたモデル変換ルールチェーンを算出し、算出したモデル変換ルールチェーンをルール合成部134に通知する。
ルール合成部134は、ルールチェーン算出部133から通知されたモデル変換ルールチェーンに含まれるモデル変換ルールを、そのチェーンの先頭から末尾に向かって順番に合成していくことで合成モデル変換ルールを生成する。ルール合成部134は、生成した合成モデル変換ルールをデータ型生成部135に通知する。なお、生成された合成モデル変換ルールは、各処理型のモデル変換ルールが変更されない限り再利用することが可能である。そこで、ルール合成部134は、生成した合成モデル変換ルールを変換ルール記憶部122に保存してもよい。後に同じモデル変換ルールチェーンが生じた場合、ルール合成部134は、合成モデル変換ルールの生成を省略し、変換ルール記憶部122に記憶された合成モデル変換ルールを再利用することができる。
データ型生成部135は、データフローモデルから、基準データノードと対象データノードの間に位置する処理ノードのプロパティ(処理型のインスタンス)を取得する。データ型生成部135は、基準データノードが示すデータ型と取得したプロパティを、ルール合成部134から通知された合成モデル変換ルールに適用する。これにより、途中のデータ型をスキップして対象データノードのデータ型を生成できる。データ型生成部135は、生成したデータ型をモデル更新部136に通知する。
モデル更新部136は、操作検出部131からの指示に応じて、モデル記憶部121に記憶されたデータフローモデルを更新する。また、モデル更新部136は、データ型生成部135からデータ型が通知されると、データフローモデルに含まれている対象データノードの古いデータ型を、通知された新たなデータ型に置換する。また、モデル更新部136は、1つのデータノードのデータ型を更新する毎に、更新時刻記憶部123に記憶された更新時刻テーブル124に、当該データノードと対応付けて更新時刻を記録する。データノードが削除された場合、モデル更新部136は、当該データノードに対応する更新時刻を更新時刻テーブル124から削除する。
モデル表示部137は、モデル記憶部121に記憶されたデータフローモデルに基づいて、ディスプレイ111にエディタ画面50を表示する。ユーザがキャンバス52上の1つのデータノードを選択した場合、モデル表示部137は、データ型生成部135によって生成された最新のデータ型をプロパティウィンドウ53に表示することになる。
ソースコード生成部138は、ユーザからの要求に応じて、モデル記憶部121に記憶されたデータフローモデルに対応するソースコードおよび環境設定情報を生成する。例えば、ソースコード生成部138は、各データ型から、当該データ型に含まれる属性をメンバ変数としてもつクラスのソースコードを生成する。また、例えば、ソースコード生成部138は、各処理型のインスタンスから、当該処理型に対応するテンプレートにプロパティ値を埋め込むことでクラスのソースコードを生成する。
次に、開発支援装置100の処理手順について説明する。
図12は、モデル編集の手順例を示すフローチャートである。
(S10)操作検出部131は、エディタ画面50に対する操作を検出する。
(S11)操作検出部131は、検出した操作がデータノードの選択(フォーカス)であるか判断する。検出した操作がデータノードの選択である場合はステップS12に処理が進み、それ以外の操作である場合はステップS13に処理が進む。
(S12)操作検出部131は、ユーザによって選択されたデータノードを対象データノードと判定する。そして、ステップS20に処理が進む。
(S13)モデル更新部136は、操作に応じてデータフローモデルを更新する。操作がデータノードに対するデータ型の変更である場合、モデル更新部136は、そのデータ型に含まれる属性を更新する。操作が処理ノードに対するプロパティ値の変更である場合、モデル更新部136は、処理型のインスタンスが有するプロパティ値を更新する。操作がデータノードの削除である場合、モデル更新部136は、データフローモデルからデータ型のインスタンスを削除する。操作が処理ノードの削除である場合、モデル更新部136は、データフローモデルから処理型のインスタンスを削除する。操作が結線の追加または削除である場合、モデル更新部136は、インスタンス間の依存関係を更新する。
(S14)操作検出部131は、検出した操作が処理ノードに対するプロパティ値の変更または結線の追加であるか判断する。検出した操作がこれに該当する場合はステップS15に処理が進み、該当しない場合はステップS16に処理が進む。
(S15)操作検出部131は、変更箇所の直後に位置するデータノード(変更の影響を直接的に受けるデータノード)を対象データノードと判定する。そして、ステップS20に処理が進む。なお、キャンバス52上で1つの処理ノードと他の1つの処理ノードとを結線しようとすると、実際には、その2つの処理ノードの間にデータノードが挿入される。そして、当該1つの処理ノードと追加のデータノードとが結線され、追加のデータノードと当該他の1つのノードとが結線される。その場合、操作検出部131は、追加のデータノードを対象データノードと判定する。
(S16)モデル更新部136は、実行した更新内容がデータノードの削除であるか判定する。データノードの削除である場合はステップS17に処理が進み、それ以外の更新内容である場合はステップS18に処理が進む。
(S17)モデル更新部136は、削除したデータノードについてのレコードを更新時刻テーブル124から削除する。そして、モデル編集が終了する。
(S18)モデル更新部136は、実行した更新内容がデータ型の変更であるか判定する。データ型の変更である場合ばステップS19に処理が進み、それ以外の更新内容である場合はモデル編集が終了する。
(S19)モデル更新部136は、更新時刻テーブル124に、変更されたデータ型を示すデータノードと対応付けて更新時刻(現在時刻)を記録する。
図13は、モデル編集の手順例を示すフローチャート(続き)である。
(S20)基準データ判定部132は、対象データノードの上流に位置する基準データノードを判定する。基準データ判定の詳細は後述する。
(S21)基準データ判定部132は、1以上の基準データノードが存在するか判定する。1以上の基準データノードが存在する場合はステップS22に処理が進み、1つの基準データノードも存在しない場合はステップS27に処理が進む。
(S22)ルールチェーン算出部133は、基準データノードから対象データノードへ至るパスに沿ってデータ型を変換する場合に使用するモデル変換ルールの列(モデル変換ルールチェーン)を算出する。ルールチェーン算出の詳細は後述する。
(S23)ルール合成部134は、モデル変換ルールチェーンに含まれるモデル変換ルールを合成して合成モデル変換ルールを生成する。ルール合成の詳細は後述する。
(S24)データ型生成部135は、基準データノードのデータ型と、基準データノードと対象データノードの間に位置する中間の処理ノードのプロパティを取得する。データ型生成部135は、基準データノードのデータ型と中間の処理ノードのプロパティと合成モデル変換ルールから、対象データノードのデータ型を生成する。
(S25)モデル更新部136は、対象データノードのデータ型をステップS24で生成されたデータ型に置換して、データフローモデルを更新する。
(S26)モデル更新部136は、更新時刻テーブル124に、対象データノードと対応付けて更新時刻(現在時刻)を記録する。
(S27)モデル表示部137は、対象データノードのデータ型が含む属性(属性名と属性型)をプロパティウィンドウ53に表示させる。そして、モデル編集が終了する。
図14は、基準データ判定の手順例を示すフローチャートである。
(S30)基準データ判定部132は、Doutに対象データノードを代入する。
以下のステップS31〜S39は再帰関数として実行される。この再帰関数は、Doutを引数として取得し、Dminを戻り値として出力する。
(S31)基準データ判定部132は、Doutが最前段のデータノードであるか判断する。最前段のデータノードは、そのデータノードを出力とする処理ノードが存在しないものである。例えば、図10の例の場合、ノード26a,26b,26cが最前段のデータノードである。Doutが最前段のデータノードである場合はステップS39に処理が進み、最前段のデータノードでない場合はステップS32に処理が進む。
(S32)基準データ判定部132は、Doutを出力とする処理ノードをPとする。
(S33)基準データ判定部132は、Pの入力となるデータノードを1つ選択する(k番目のデータノード)。選択したデータノードをDinとする。
(S34)基準データ判定部132は、Dinを再帰関数の引数として用いてステップS31〜S39を再帰的に実行し、再帰関数の戻り値をDk minとする。
(S35)基準データ判定部132は、ステップS33においてPの入力となるデータノードを全て選択したか判断する。Pの入力を全て選択した場合はステップS36に処理が進み、未選択の入力が存在する場合はステップS33に処理が進む。
(S36)基準データ判定部132は、更新時刻テーブル124を参照して、Dk min(k=1,2,…)のうち更新時刻が最大のデータノードをDとして選択する。
(S37)基準データ判定部132は、更新時刻テーブル124を参照して、Dの更新時刻とDoutの更新時刻を比較する。Dの更新時刻がDoutの更新時刻より大きい(遅い)場合、ステップS38に処理が進む。Dの更新時刻がDoutの更新時刻以下である(同じかまたは早い)場合、ステップS39に処理が進む。
(S38)基準データ判定部132は、DminとしてDk min(k=1,2,…)の集合を出力する。そして、再帰関数が終了する。最上位の再帰関数の呼び出しに対して戻り値Dminが得られた場合、ステップS40に処理が進む。
(S39)基準データ判定部132は、DminとしてDoutを出力する。そして、再帰関数が終了する。最上位の再帰関数の呼び出しに対して戻り値Dminが得られた場合、ステップS40に処理が進む。
(S40)基準データ判定部132は、Dminが対象データノードであるか判断する。Dminが対象データノードである場合はステップS41に処理が進み、Dminが対象データノードでない場合はステップS42に処理が進む。
(S41)基準データ判定部132は、基準データノードなしと判定する。
(S42)基準データ判定部132は、Dminを基準データノードと判定する。Dminが複数のデータノードの集合である場合、複数の基準データノードが選択される。
図15は、ルールチェーン算出の手順例を示すフローチャートである。
(S50)ルールチェーン算出部133は、モデル変換ルールチェーンを空とする。
(S51)ルールチェーン算出部133は、対象データノードをDtとする。
(S52)ルールチェーン算出部133は、基準データノードを1つ選択し(i番目の基準データノード)、選択した基準データノードをDbとする。
(S53)ルールチェーン算出部133は、データフローモデルから、DbからDtへ至るパス上に存在する処理ノードの列を抽出する。
(S54)ルールチェーン算出部133は、変換ルール記憶部122から、ステップS53の処理ノードの列に対応するモデル変換ルールの列を抽出する。
(S55)ルールチェーン算出部133は、ステップS54で抽出したモデル変換ルールの列を現在のモデル変換ルールチェーンに合成する。このとき、ルールチェーン算出部133は、モデル変換ルールチェーンがデータフロー構造に対応した木構造になるように、共通部分(共通するモデル変換ルールの部分列)を重ね合わせる。
(S56)ルールチェーン算出部133は、ステップS52において全ての基準データノードを選択したか判断する。全ての基準データノードを選択した場合はルールチェーン算出が終了し、未選択の基準データノードがある場合はステップS52に処理が進む。
図16は、ルール合成の手順例を示すフローチャートである。
(S60)ルール合成部134は、合成モデル変換ルールを空とする。
(S61)ルール合成部134は、モデル変換ルールチェーンの中から、未抽出のモデル変換ルールのうち最前段のモデル変換ルールを1つ抽出する。
(S62)ルール合成部134は、ステップS61で抽出したモデル変換ルールから式を1つ抽出する。抽出する式は、例えば、関数genに含まれている式である。
(S63)ルール合成部134は、ステップS62で抽出した式と左辺が同じ式が、合成モデル変換ルールの中に既に存在しているか判断する。左辺が同じ式が存在する場合はステップS64に処理が進み、存在しない場合はステップS65に処理が進む。
(S64)ルール合成部134は、ステップS62で抽出した式が代入式であるか判断する。代入式は、左辺と右辺が等号で結合された式であり、左辺の値を右辺に置換することを示す式である。「name:=’TemporaryData’」や「attr:=input.attr」は代入式である。一方、「attr+=new string(p.storedIn)」は属性の追加を示す式であり代入式でない。代入式である場合はステップS66に処理が進み、代入式でない場合はステップS65に処理が進む。
(S65)ルール合成部134は、ステップS62で抽出した式を合成モデル変換ルールに追加する。そして、ステップS69に処理が進む。
(S66)ルール合成部134は、代入式が全属性のコピーを示す式であるか判断する。「attr:=input.attr」は全属性のコピーを示す式である。全属性のコピーを示す式である場合はステップS67に処理が進み、それ以外の式(例えば、データ型の名称を設定する式など)である場合はステップS68に処理が進む。
(S67)ルール合成部134は、合成モデル変換ルールの中に同じ代入式が既に存在する場合、重複排除のためその代入式を破棄する。一方、合成モデル変換ルールの中にその代入式が存在しない場合、ルール合成部134は、ステップS62で抽出した代入式を合成モデル変換ルールに追加する。そして、ステップS69に処理が進む。
(S68)ルール合成部134は、合成モデル変換ルールの中の競合する代入式をステップS62の代入式で上書きする。すなわち、ルール合成部134は、左辺が同じ代入式を合成モデル変換ルールから削除し、ステップS62で抽出した代入式を合成モデル変換ルールに追加する。そして、ステップS69に処理が進む。
(S69)ルール合成部134は、ステップS62においてモデル変換ルール内の全ての式を抽出したか判断する。全ての式を抽出した場合はステップS70に処理が進み、未抽出の式が存在する場合はステップS62に処理が進む。
(S70)ルール合成部134は、ステップS61で抽出したモデル変換ルールに独自定義関数(ユーティリティ関数)が含まれるか判断する。ユーティリティ関数が含まれる場合、ルール合成部134は、ユーティリティ関数を合成モデル変換ルールに追加する。
(S71)ルール合成部134は、ステップS61において全てのモデル変換ルールを抽出したか判断する。全てのモデル変換ルールを抽出した場合はルール合成が終了し、未抽出のモデル変換ルールがある場合はステップS61に処理が進む。
第2の実施の形態の開発支援装置100によれば、上流のデータノードのデータ型が変更されたとき、下流のデータノードのデータ型がモデル変換ルールに基づいて自動的に更新される。よって、ユーザは全てのデータ型を明示的に変更しなくてもよく、データフローモデル作成の負担が軽減される。また、データフローモデルの整合性を維持することができる。また、上流のデータノードのデータ型が変更されたときに、下流の全てのデータノードのデータ型が即時に更新されるわけではなく、少なくとも一部のデータ型の更新が遅延される。よって、開発支援装置100の負荷が軽減され、ユーザ操作に対する応答性能が向上する。また、ユーザがデータノードを選択したときに、選択されたデータノードのデータ型が更新されるため、正しいデータ型を表示することができる。また、複数のモデル変換ルールを合成した合成モデル変換ルールを利用するため、途中のデータノードのデータ型の更新をスキップして、所望のデータノードのデータ型のみ更新できる。
10 開発支援装置
11 記憶部
12 処理部
13 データフローモデル
14a,14b,14c データノード
15a,15b,15c データ型
16a,16b 処理ノード
17a,17b モデル変換ルール
18 合成モデル変換ルール

Claims (5)

  1. データ型を示す複数のデータノードとデータ処理を示す複数の処理ノードとを含んでおり前記複数のデータノードおよび前記複数の処理ノードの間の入出力関係を示すデータフローモデルと、前記複数の処理ノードに対応しておりそれぞれが入力のデータ型から出力のデータ型を生成するルールを示す複数のモデル変換ルールと、を記憶する記憶部と、
    前記データフローモデルの中から、第1のデータノードから2以上の処理ノードおよび1以上の第3のデータノードを経由して第2のデータノードに到達するデータフローを検出し、前記複数のモデル変換ルールのうち前記2以上の処理ノードに対応する2以上のモデル変換ルールを合成して合成モデル変換ルールを生成し、前記第1のデータノードが示す第1のデータ型が変更された後に所定条件が満たされたタイミングで、変更された前記第1のデータ型および前記合成モデル変換ルールを用いて、前記1以上の第3のデータノードが示す1以上の第3のデータ型の更新をスキップして前記第2のデータノードが示す第2のデータ型を更新する処理部と、
    を有する開発支援装置。
  2. 前記所定条件は、前記第2のデータ型の情報を出力させる要求が発生したことである、
    請求項1記載の開発支援装置。
  3. 前記処理部は更に、前記複数のデータノードのうちの1つのデータノードが示すデータ型が変更される毎に前記1つのデータノードに対応付けて変更時刻を記録し、前記データフローモデルの中の開始点と前記第2のデータノードとの間に存在するデータノードのうち前記変更時刻が最も遅いデータノードを前記第1のデータノードとして選択する、
    請求項1記載の開発支援装置。
  4. コンピュータが実行する開発支援方法であって、
    データ型を示す複数のデータノードとデータ処理を示す複数の処理ノードとを含んでおり前記複数のデータノードおよび前記複数の処理ノードの間の入出力関係を示すデータフローモデルの中から、第1のデータノードから2以上の処理ノードおよび1以上の第3のデータノードを経由して第2のデータノードに到達するデータフローを検出し、
    前記複数の処理ノードに対応しておりそれぞれが入力のデータ型から出力のデータ型を生成するルールを示す複数のモデル変換ルールのうち、前記2以上の処理ノードに対応する2以上のモデル変換ルールを合成して合成モデル変換ルールを生成し、
    前記第1のデータノードが示す第1のデータ型が変更された後に所定条件が満たされたタイミングで、変更された前記第1のデータ型および前記合成モデル変換ルールを用いて、前記1以上の第3のデータノードが示す1以上の第3のデータ型の更新をスキップして前記第2のデータノードが示す第2のデータ型を更新する、
    開発支援方法。
  5. コンピュータに、
    データ型を示す複数のデータノードとデータ処理を示す複数の処理ノードとを含んでおり前記複数のデータノードおよび前記複数の処理ノードの間の入出力関係を示すデータフローモデルの中から、第1のデータノードから2以上の処理ノードおよび1以上の第3のデータノードを経由して第2のデータノードに到達するデータフローを検出し、
    前記複数の処理ノードに対応しておりそれぞれが入力のデータ型から出力のデータ型を生成するルールを示す複数のモデル変換ルールのうち、前記2以上の処理ノードに対応する2以上のモデル変換ルールを合成して合成モデル変換ルールを生成し、
    前記第1のデータノードが示す第1のデータ型が変更された後に所定条件が満たされたタイミングで、変更された前記第1のデータ型および前記合成モデル変換ルールを用いて、前記1以上の第3のデータノードが示す1以上の第3のデータ型の更新をスキップして前記第2のデータノードが示す第2のデータ型を更新する、
    処理を実行させる開発支援プログラム。
JP2016217900A 2016-11-08 2016-11-08 開発支援装置、開発支援方法および開発支援プログラム Active JP6744549B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2016217900A JP6744549B2 (ja) 2016-11-08 2016-11-08 開発支援装置、開発支援方法および開発支援プログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2016217900A JP6744549B2 (ja) 2016-11-08 2016-11-08 開発支援装置、開発支援方法および開発支援プログラム

Publications (2)

Publication Number Publication Date
JP2018077613A true JP2018077613A (ja) 2018-05-17
JP6744549B2 JP6744549B2 (ja) 2020-08-19

Family

ID=62150361

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2016217900A Active JP6744549B2 (ja) 2016-11-08 2016-11-08 開発支援装置、開発支援方法および開発支援プログラム

Country Status (1)

Country Link
JP (1) JP6744549B2 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2021527249A (ja) * 2018-06-06 2021-10-11 アビニシオ テクノロジー エルエルシー 実行可能グラフの更新

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH02151933A (ja) * 1988-12-05 1990-06-11 Hitachi Ltd 仕様模擬実行方式
JP2008544423A (ja) * 2005-06-27 2008-12-04 エービー イニティオ ソフトウェア コーポレーション グラフ型計算のためのメタデータ管理
JP2016126474A (ja) * 2014-12-26 2016-07-11 富士通株式会社 定義ファイル生成プログラム、定義ファイル生成方法、および情報処理装置

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH02151933A (ja) * 1988-12-05 1990-06-11 Hitachi Ltd 仕様模擬実行方式
JP2008544423A (ja) * 2005-06-27 2008-12-04 エービー イニティオ ソフトウェア コーポレーション グラフ型計算のためのメタデータ管理
US20130297562A1 (en) * 2005-06-27 2013-11-07 Ab Initio Technology Llc Managing metadata for graph-based computations
JP2016126474A (ja) * 2014-12-26 2016-07-11 富士通株式会社 定義ファイル生成プログラム、定義ファイル生成方法、および情報処理装置

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2021527249A (ja) * 2018-06-06 2021-10-11 アビニシオ テクノロジー エルエルシー 実行可能グラフの更新
JP7200266B2 (ja) 2018-06-06 2023-01-06 アビニシオ テクノロジー エルエルシー 実行可能グラフの更新
JP2023033306A (ja) * 2018-06-06 2023-03-10 アビニシオ テクノロジー エルエルシー 実行可能グラフの更新
JP7381705B2 (ja) 2018-06-06 2023-11-15 アビニシオ テクノロジー エルエルシー 実行可能グラフの更新

Also Published As

Publication number Publication date
JP6744549B2 (ja) 2020-08-19

Similar Documents

Publication Publication Date Title
US8892504B2 (en) Method and system for reconciling meta-data in a data warehouse
JP5852967B2 (ja) Guiプログラム作成支援装置、guiプログラム作成支援方法、プログラム、及び集積回路
US8667411B2 (en) Using style elements to copy and paste a selected area of a screen display
JPWO2006098031A1 (ja) キーワード管理装置
CN109614565B (zh) 网页生成方法与装置
US20080208554A1 (en) Simulator development system and simulator development method
US20110126171A1 (en) Dynamic native editor code view facade
JP5426938B2 (ja) 情報処理装置、情報処理方法
US20200174757A1 (en) Application development preview tool and methods
JP6744549B2 (ja) 開発支援装置、開発支援方法および開発支援プログラム
JP2020123175A (ja) コード管理システムおよびコード管理方法
US9244651B2 (en) Document revision control
JP2001357095A (ja) 半導体装置設計支援装置
KR20110012541A (ko) 디지털 스토리보드 생성 시스템
JP2012088940A (ja) 情報処理装置、情報処理方法、及びプログラム
US11809844B2 (en) Creating an app method and system
CN113296759B (zh) 用户界面处理方法、用户界面处理系统、设备及存储介质
JP4885569B2 (ja) スタイルシート生成装置及びスタイルシート生成プログラム
JP6993573B2 (ja) プログラム解析方法、プログラム解析装置およびプログラム解析プログラム
CN113377368A (zh) 项目开发方法、装置、服务器及存储介质
CN105094845A (zh) 流程建模装置和方法
JP2019153204A (ja) 文書管理プログラム、文書管理装置および文書管理方法
CN106528183B (zh) 一种创建控件的方法、装置和计算机程序
JP2008234469A (ja) 制御システム開発支援装置、制御システム開発支援方法およびその方法をコンピュータに実行させるプログラム
JP3019730B2 (ja) メンテナンス情報管理装置

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20190807

RD02 Notification of acceptance of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7422

Effective date: 20190815

RD04 Notification of resignation of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7424

Effective date: 20190815

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20200610

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: 20200630

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20200713

R150 Certificate of patent or registration of utility model

Ref document number: 6744549

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150