JP2013148953A - プログラムテンプレート自動生成プログラムおよびプログラムテンプレート自動生成装置 - Google Patents

プログラムテンプレート自動生成プログラムおよびプログラムテンプレート自動生成装置 Download PDF

Info

Publication number
JP2013148953A
JP2013148953A JP2012006949A JP2012006949A JP2013148953A JP 2013148953 A JP2013148953 A JP 2013148953A JP 2012006949 A JP2012006949 A JP 2012006949A JP 2012006949 A JP2012006949 A JP 2012006949A JP 2013148953 A JP2013148953 A JP 2013148953A
Authority
JP
Japan
Prior art keywords
variable
naming rule
program
rule
generation
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.)
Pending
Application number
JP2012006949A
Other languages
English (en)
Inventor
mayumi Hosaka
真由美 保坂
Rei Yano
令 矢野
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.)
Toshiba Corp
Toshiba Digital Solutions Corp
Original Assignee
Toshiba Corp
Toshiba Solutions 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 Toshiba Corp, Toshiba Solutions Corp filed Critical Toshiba Corp
Priority to JP2012006949A priority Critical patent/JP2013148953A/ja
Publication of JP2013148953A publication Critical patent/JP2013148953A/ja
Pending legal-status Critical Current

Links

Images

Landscapes

  • Stored Programmes (AREA)

Abstract

【課題】予め定められている命名規則が反映されたプログラムを自動生成するためのプログラムテンプレートを生成することが可能なプログラムテンプレート自動生成プログラムおよびプログラムテンプレート自動生成装置を提供することにある。
【解決手段】プログラムテンプレート自動生成プログラムは、コンピュータに、テンプレート格納手段に格納されている第1のプログラムテンプレート及び変数リスト格納手段に格納されている変数リストを取得するステップを実行させる。プログラムテンプレート自動生成プログラムは、コンピュータに、第1のプログラムテンプレートに含まれる変数を、当該変数に対応づけて前記取得された変数リストに保持されている置換情報で置換することによって、当該置換情報を含む第2のプログラムテンプレートを生成するステップを実行させる。
【選択図】図2

Description

本発明の実施形態は、プログラムを自動生成するためのプログラムテンプレート自動生成プログラムおよびプログラム自動生成装置に関する。
近年、例えばプログラムテンプレートを用いてプログラム(アプリケーション)を自動生成することが可能なシステムが開発されている。
ところで、プログラムを生成する際には、予め定められている命名規則(例えば、プロジェクト等で定められている命名規則)を反映させることが好ましい。このプロジェクト等で定められている命名規則には、例えば自動生成されるプログラムにおけるクラス名を当該プロジェクト名とすること等が含まれる。
特開2006−4145号公報
しかしながら、上記したようなプログラムを自動生成するシステムにおいては、予め定められている命名規則を反映したプログラムを生成することはできない。
命名規則をプログラムに反映させるためには、ユーザは、自動生成されたプログラムに対して当該命名規則を手作業で反映させる必要があるが、この作業はユーザにとって非常に煩雑である。
また、命名規則を反映したプログラムを生成するために、各種テーブルが定義された情報に含まれる当該命名規則を反映するような情報を、プログラムを自動生成するために用いられるテンプレート(プログラムテンプレート)中に埋めこむことが考えられる。
しかしながら、このようなプログラムテンプレートを予め用意しておいた場合において命名規則(例えば、クラス名等)を変更するような場合には、当該テンプレート中の該当箇所を全て変更しなければならず、手間がかかる。
そこで、本発明が解決しようとする課題は、予め定められている命名規則が反映されたプログラムを自動生成するためのプログラムテンプレートを生成することが可能なプログラムテンプレート自動生成プログラムおよびプログラムテンプレート自動生成装置を提供することにある。
実施形態によれば、プログラムの自動生成に用いられる変数を含む第1のプログラムテンプレートを格納するテンプレート格納手段と、前記変数に対応づけて当該変数に対して置換される前記データ要素を含む置換情報であって前記自動生成されるプログラムに対して予め定められた命名規則を反映するための置換情報を保持する変数リストを格納する変数リスト格納手段とを有する外部記憶装置と、当該外部記憶装置を利用するコンピュータとから構成されるプログラムテンプレート自動生成装置において、前記コンピュータによって実行されるプログラムテンプレート自動生成プログラムが提供される。
実施形態に係るプログラムテンプレート自動生成プログラムは、前記コンピュータに、前記テンプレート格納手段に格納されている第1のプログラムテンプレートを取得するステップを実行させる。
実施形態に係るプログラムテンプレート自動生成プログラムは、前記コンピュータに、前記変数リスト格納手段に格納されている変数リストを取得するステップを実行させる。
実施形態に係るプログラムテンプレート自動生成プログラムは、前記コンピュータに、前記取得された第1のプログラムテンプレートに含まれる変数を、当該変数に対応づけて前記取得された変数リストに保持されている置換情報で置換することによって、当該置換情報を含む第2のプログラムテンプレートを生成するステップを実行させる。
第1の実施形態に係るプログラムテンプレート自動生成装置のハードウェア構成を示すブロック図。 図1に示すプログラムテンプレート自動生成装置30の主として機能構成を示すブロック図。 図2に示すテンプレート格納部22に格納されているプログラムテンプレートのデータ構造の一例を示す図。 図2に示すテーブル定義格納部23に格納されているテーブル情報のデータ構造の一例を示す図。 図2に示す変数リスト格納部24に格納されている変数リストのデータ構造の一例を示す図。 本実施形態に係るプログラムテンプレート自動生成装置30の処理手順を示すフローチャート。 図6に示すステップS4の置換処理が実行されることによって生成されたプログラムテンプレートの一例を示す図。 図6に示すステップS5の置換処理が実行されることによって生成されたプログラムの一例を示す図。 第2の実施形態に係るプログラムテンプレート自動生成装置の主として機能構成を示すブロック図。 図9に示す命名規則格納部25に格納されている命名規則ユーザ定義のデータ構造の一例を示す図。 図9に示す変数生成ルール格納部26に格納されている変数生成ルールのデータ構造の一例を示す図。 本実施形態に係るプログラムテンプレート自動生成装置50によって実行される変数リスト生成処理の処理手順を示すフローチャート。 本実施形態に係るプログラムテンプレート自動生成装置50によって実行される変数リスト生成処理の処理手順を示すフローチャート。 第1の文字列置換処理の処理手順を示すフローチャート。 変数リスト生成処理において生成される変数リストAの一例を示す図。 変数リスト生成処理において生成される変数リストBの一例を示す図。 第1の命名規則検証処理の処理手順を示すフローチャート。 第2の命名規則検証処理の処理手順を示すフローチャート。 第3の文字列置換処理の処理手順を示すフローチャート。 第3の文字列置換処理の処理手順を示すフローチャート。 命名規則格納部25に格納されている命名規則ユーザ定義の一例を示す図。 左辺のドットより前がclassである変数生成ルールの一例を示す図。 図22に示す変数生成ルールの左辺のドットより後ろを左辺とする命名規則ユーザ定義の一例を示す図。 第3の文字列置換処理において生成される変数リストCの一例を示す図。 第3の文字列置換処理において生成される変数リストDの一例を示す図。 第3の命名規則検証処理の処理手順を示すフローチャート。 命名規則格納部25に格納されている命名規則ユーザ定義の一例を示す図。
以下、図面を参照して、各実施形態について説明する。
(第1の実施形態)
図1は、第1の実施形態に係るプログラムテンプレート自動生成装置のハードウェア構成を示すブロック図である。図1に示すように、コンピュータ10は、例えばハードディスクドライブ(HDD:Hard Disk Drive)のような外部記憶装置20と接続されている。この外部記憶装置20は、コンピュータ10によって実行されるプログラム21を格納する。コンピュータ10および外部記憶装置20は、プログラムテンプレート自動生成装置30を構成する。
このプログラムテンプレート自動生成装置30は、後述するプログラムテンプレートを用いて、プログラム(アプリケーション)を自動生成する機能を有する。また、プログラムテンプレート自動生成装置30は、予め定められた命名規則(例えば、プロジェクトで決まっている命名規則)が反映されたプログラムの自動生成に用いられるプログラムテンプレートを生成する機能を有する。
図2は、図1に示すプログラムテンプレート自動生成装置30の主として機能構成を示すブロック図である。
図2に示すように、プログラムテンプレート自動生成装置30は、プログラム自動生成部31を含む。本実施形態において、プログラム自動生成部31は、図1に示すコンピュータ10が外部記憶装置20に格納されているプログラム(プログラムテンプレート自動生成プログラム)21を実行することにより実現されるものとする。このプログラム21は、コンピュータ読み取り可能な記憶媒体に予め格納して頒布可能である。また、このプログラム21が、例えばネットワークを介してコンピュータ10にダウンロードされても構わない。
また、プログラムテンプレート自動生成装置30は、テンプレート格納部22、テーブル定義格納部23および変数リスト格納部24を含む。本実施形態において、テンプレート格納部22、テーブル定義格納部23および変数リスト格納部24は、例えば外部記憶装置20に格納される。
テンプレート格納部22には、プログラムの自動生成に用いられるプログラムテンプレート(第1のプログラムテンプレート)が予め格納される。テンプレート格納部22に格納されているプログラムテンプレートには、変数が含まれる。なお、テンプレート格納部22には、自動生成されるプログラム毎のプログラムテンプレートが格納されている。
テーブル定義格納部23には、プログラムテンプレート自動生成装置30において自動生成されるプログラムにおいて用いられるテーブルの構造を定義するテーブル情報が格納される。テーブル定義格納部23に格納されているテーブル情報は、テーブルのデータ要素および当該データ要素の値が含まれる。なお、テーブル情報に含まれるデータ要素には、当該テーブルを識別するためのテーブルIDおよび当該テーブルを構成するカラムを識別するためのカラムID等が含まれる。また、テーブル情報に含まれるデータ要素の値には、テーブルIDおよびカラムIDの値等が含まれる。
変数リスト格納部24には、テンプレート格納部22に格納されているプログラムテンプレートに含まれる変数に対応づけて、当該変数に対して置換される値(以下、置換情報と表記)を保持する変数リストが格納される。変数リスト格納部24に格納されている変数リストに保持される置換情報には、テーブル定義格納部23に格納されているテーブル情報に含まれるデータ要素が含まれる。なお、この置換情報は、プログラムテンプレート自動生成装置30において自動生成されるプログラムに対して予め定められた命名規則を反映するために用いられる。また、変数リスト格納部24に格納されている変数リストは、例えばプログラムにおいて定義されるクラス名または属性名等の単位で定義される。
プログラム自動生成部31は、変数リスト格納部24に格納されている変数リストに基づいて、テンプレート格納部22に格納されているプログラムテンプレートに対して置換処理を実行することによって、上記した命名規則を反映したプログラムを自動生成するためのプログラムテンプレート(以下、単に命名規則を反映したプログラムテンプレートと表記)を生成する処理を実行する。
具体的には、プログラム自動生成部31は、テンプレート格納部22に格納されているプログラムテンプレートに含まれる変数を、当該変数に対応づけて変数リスト(変数リスト格納部24に格納されている変数リスト)に保持されている置換情報で置換することによって、当該置換情報を含むプログラムテンプレート(第2のプログラムテンプレート)を生成する。
プログラム自動生成部31は、生成された命名規則を反映したプログラムテンプレートに含まれる置換情報に含まれるデータ要素を、テーブル情報(テーブル定義格納部23に格納されているテーブル情報)に含まれる当該データ要素の値で置換することによって、プログラムを自動生成する。これにより、命名規則を反映したプログラムが自動生成される。
図3は、図2に示すテンプレート格納部22に格納されているプログラムテンプレートのデータ構造の一例を示す。
図3に示すプログラムテンプレートの例では、例えば「${class.Dataset クラス名}」が変数(名)を表している。なお、図3に示す「${class.Action クラス名}」および「${attribute.自テーブルの属性名}」も同様である。
図3では、1つのプログラムテンプレートについて説明したが、テンプレート格納部22には、上記したように自動生成されるプログラム毎のプログラムテンプレート(つまり、複数のプログラムテンプレート)が格納されていてもよい。
図4は、図2に示すテーブル定義格納部23に格納されているテーブル情報のデータ構造の一例を示す。
図4に示す例では、テーブルIDの値が「Emp」であるテーブル(以下、Empテーブルと表記)の構造を定義するテーブル情報およびテーブルIDの値が「Dept」であるテーブル(以下、Deptテーブルと表記)の構造を定義するテーブル情報が示されている。なお、Empテーブルの構造を定義するテーブル情報(以下、Empテーブルのテーブル情報と表記)は図4の1行目〜10行目であり、Deptテーブルの構造を定義するテーブル情報(以下、Deptテーブルのテーブル情報と表記)は図4の12行目〜15行目である。
図4に示すEmpテーブルのテーブル情報においては、最初の行(ここでは、図4の1行目)にテーブルID(テーブル名)が記述され、次の行以降(ここでは、図4の2〜8行目)に当該Empテーブルを構成するカラムの定義が記述されている。なお、カラムの定義の記述の後(ここでは、図4の9および10行目)に、外部キーの定義が記述されている。
また、図4に示すDeptテーブルのテーブル情報においては、最初の行(ここでは、図4の12行目)にテーブルID(テーブル名)が記述され、次の行以降(ここでは、図4の13〜15行目)に当該Deptテーブルを構成するカラムの定義が記述されている。
なお、図4に示すテーブルIDおよびカラムID等は、テーブル情報に含まれるデータ要素である。また、例えばEmpテーブルのテーブル情報に含まれるデータ要素「テーブルID」の値は、Empである。
図5は、図2に示す変数リスト格納部24に格納されている変数リストのデータ構造の一例を示す。
図5に示すように、変数リストの左辺には、テンプレート格納部22に格納されているプログラムテンプレートに含まれる変数(名)が記述されている。一方、変数リストの右辺には、左辺の変数に対して置換される置換情報(値)が記述されている。
具体的には、図5に示す変数リストの1行目は、例えば「class.Action クラス名」がプログラムテンプレートに含まれている場合には、当該プログラムテンプレート中の「class.Action クラス名」が$[テーブルID]Actionで置換されることを示している。
なお、図5に示すように、変数リストの右辺の置換情報には、$[テーブルID]のように図4に示すテーブル情報に含まれるデータ要素が含まれている。つまり、この$[テーブルID]は、テーブル情報から取得できる値を示している。
つまり、上記したようにプログラムテンプレート中の「class.Action クラス名」が$[テーブルID]Actionで置換された場合、当該プログラムテンプレート中の$[テーブルID]は、テーブル情報に含まれるデータ要素「テーブルID」の値(例えば、Emp)で更に置換される。
次に、図6のフローチャートを参照して、本実施形態に係るプログラムテンプレート自動生成装置30の処理手順について説明する。
ここでは、テーブル定義格納部23に格納されているテーブル情報の各々について以下のステップS1〜S6の処理が実行される。
まず、プログラム自動生成部31は、テーブル定義格納部23に格納されているテーブル情報を1つ取得する(ステップS1)。つまり、プログラム自動生成部31は、テーブル定義格納部23から、1テーブル分のテーブル情報を取得する。
次に、プログラム自動生成部31は、変数リスト格納部24に格納されている変数リストを取得する(ステップS2)。
以下、テンプレート格納部22に格納されているプログラムテンプレートの各々についてステップS3〜S5の処理が実行される。
プログラム自動生成部31は、テンプレート格納部22に格納されているプログラムテンプレート(第1のプログラムテンプレート)を1つ取得する(ステップS3)。
プログラム自動生成部31は、ステップS3において取得されたプログラムテンプレートに含まれる変数を、ステップS2において取得された変数リストの値で置換する(ステップS4)。具体的には、プログラム自動生成部31は、プログラムテンプレートに含まれる変数を、当該変数に対応づけて変数リストに保持されている値(置換情報)で置換する。
ここで、ステップS4の置換処理について具体的に説明する。ここでは、上記したステップS2において、上述した図5に示す変数リストが取得されたものとする。また、上記したステップS3において、上述した図3に示すプログラムテンプレートが取得されたものとする。
まず、図3に示すプログラムテンプレートの1行目の「${class.Dataset クラス名}」の{}の内容は、図5に示す変数リストの3行目の左辺と一致する。この場合、図3に示すプログラムテンプレートの1行目の「${class.Dataset クラス名}」は、図5に示す変数リストの3行目の右辺の値「$[テーブルID]DS」で置換される。
また、図3に示すプログラムテンプレートの3行目の「${class.Action クラス名}」の{}の内容は、図5に示す変数リストの1行目の左辺と一致する。このため、図3に示すプログラムテンプレートの3行目の「${class.Action クラス名}」は、図5に示す変数リストの1行目の右辺の値「$[テーブルID]Action」で置換される。
更に、図3に示すプログラムテンプレートの4行目の「${attribute.自テーブルの属性名}」の{}の内容は、図5に示す変数リストの4行目の左辺と一致する。このため、図3に示すプログラムテンプレートの4行目の「${attribute.自テーブルの属性名}」は、図5に示す変数リストの4行目の右辺の値「$[カラムID]」で置換される。
このようにステップS4の置換処理が実行されることによって、プログラムテンプレートに含まれる変数が変数リストの値で置換されたプログラムテンプレート(第2のプログラムテンプレート)が生成される。
なお、図7は、上記したようにステップS4の置換処理が実行されることによって生成されたプログラムテンプレートの一例を示す。図7に示す例では、ステップS4の置換処理が実行されることによって生成されたプログラムテンプレートには、テーブルIDおよびカラムID等のテーブル情報に含まれるデータ要素が含まれている。
再び図6に戻ると、プログラム自動生成部31は、ステップS4で置換処理が実行されることによって生成されたプログラムテンプレートに含まれるデータ要素を、ステップS1において取得されたテーブル情報(に含まれる当該データの要素の値)で置換する(ステップS5)。
ここで、ステップS5の置換処理について具体的に説明する。ここでは、上記したステップS1において、上述した図4に示すEmpテーブル(テーブルIDがEmpであるテーブル)のテーブル情報(つまり、図4の1行目〜10行目)が取得されたものとする。また、上記したステップS4の置換処理が実行されることによって、図7に示すプログラムテンプレートが得られたものとする。
まず、図7に示すプログラムテンプレートの1行目の「$[テーブルID]」の[]の内容は、図1に示すEmpテーブルのテーブル情報の1行目に存在する。この場合、図7に示すプログラムテンプレートの1行目の「$[テーブルID]」は、図4に示すEmpテーブルを示すテーブル情報の1行目のテーブルID(データ要素)の値「Emp」で置換される。
また、図7に示すプログラムテンプレートの3行目の「$[テーブルID]」の[]の内容は、図1に示すEmpテーブルのテーブル情報の1行目に存在する。この場合、図7に示すプログラムテンプレートの3行目の「$[テーブルID]」は、図4に示すEmpテーブルのテーブル情報の1行目のテーブルID(データ要素)の値「Emp」で置換される。
更に、図7に示すプログラムテンプレートの4行目の「$[カラムID]」の[]の内容は、図1に示すEmpテーブルのテーブル情報の2行目〜8行目に存在する。この場合、図7に示すプログラムテンプレートの4行目の「$[カラムID]」は、図4に示すEmpテーブルのテーブル情報の2行目〜8行目のカラムID(データ要素)の値「empno」、[ename]、[job]、[mgr]、[hiredate]、[sal]、[deptno]でそれぞれ置換される。
このようにステップS5の置換処理が実行されることによって、命名規則を反映したプログラムが自動生成される。
なお、図8は、上記したようにステップS5の置換処理が実行されることによって生成されたプログラムの一例を示す。上記したようにステップS4およびS5の置換処理が実行されることによって、この図8に示すプログラムは、予め定められた命名規則を反映したプログラムとなる。
再び図6に戻ると、テンプレート格納部22に格納されている全てのプログラムテンプレートについて上記したステップS3〜S5の処理が実行されたか否かが判定される。
全てのプログラムテンプレートについて処理が実行されていないと判定された場合(ステップS6のNO)、上記したステップS3に戻って処理が繰り返される。
一方、全てのプログラムテンプレートについて処理が実行されたと判定された場合(ステップS6のYES)、テーブル定義格納部23に格納されている全てのテーブル情報について上記したステップS1〜S6の処理が実行されたか否かが判定される(ステップS7)。
全てのテーブル情報について処理が実行されていないと判定された場合(ステップS7のNO)、上記したステップS1に戻って処理が繰り返される。
一方、全てのテーブル情報について処理が実行されたと判定された場合(ステップS7のYES)、本実施形態に係るプログラムテンプレート自動生成装置30の処理は終了される。
上記したように、プログラムテンプレート自動生成装置30に含まれるプログラム自動生成部31は、テンプレート格納部22に格納されているプログラムテンプレートおよび変数リスト格納部24に格納されている変数リストに基づいて命名規則を反映したプログラムテンプレートを生成し、当該プログラムテンプレートを用いてプログラムを自動生成することができる。
なお、図6においては、命名規則を反映したプログラムテンプレートの生成処理及びプログラムの生成処理が一連の処理として実行されるものとして説明したが、例えばプログラムテンプレートの生成処理(つまり、図6に示すステップS5以外の処理)のみが実行され、プログラムの生成処理は後で行われるような構成としても構わない。
上記したように本実施形態においては、テンプレート格納部22に格納されているプログラムテンプレート(第1のプログラムテンプレート)に含まれる変数を、当該変数に対応づけて変数リストに保持されている値(置換情報)で置換することによって当該置換情報を含むプログラムテンプレート(第2のプログラムテンプレート)を生成する構成により、予め定められた(例えばプロジェクト等で決まっている)命名規則を反映したプログラムを自動生成するためのプログラムテンプレートを生成することが可能となる。
つまり、本実施形態においては、例えばクラス名または属性名等の単位で定義されている変数リストを利用することにより、例えばプログラムテンプレートに反映された命名規則を変更する場合であっても、当該変数リストを変更した上でプログラムテンプレートを再生成することで容易に当該変更をプログラムテンプレートに反映することができる。
また、本実施形態においては、上記したように生成されたプログラムテンプレートに含まれる置換情報に含まれるデータ要素を、テーブル定義格納部23に格納されているテーブル情報に含まれる当該データ要素の値で置換することによってプログラムを生成する構成により、予め定められた命名規則を反映したプログラム(アプリケーション)を自動生成することができ、ユーザのプログラム開発の効率を向上させることが可能となる。
(第2の実施形態)
次に、第2の実施形態について説明する。図9は、本実施形態に係るプログラムテンプレート自動生成装置の主として機能構成を示すブロック図である。なお、前述した図2と同様の部分には同一参照符号を付してその詳しい説明を省略する。ここでは、図2と異なる部分について主に述べる。
また、本実施形態に係るプログラムテンプレート自動生成装置のハードウェア構成は、前述した第1の実施形態と同様であるため、適宜、図1を用いて説明する。
本実施形態においては、ユーザによって定義された命名規則(以下、命名規則ユーザ定義と表記)を前述した第1の実施形態において用いられる変数リストに自動的に反映させる点および当該命名規則ユーザ定義が予め定められている形式で定義されているか否かを検証する点が、前述した第1の実施形態とは異なる。
図9に示すように、本実施形態に係るプログラムテンプレート自動生成装置30は、変数リスト生成部51および命名規則検証部52を含む。本実施形態において、変数リスト生成部51および命名規則検証部52は、図1に示すコンピュータ10が外部記憶装置20に格納されているプログラム(プログラムテンプレート自動生成プログラム)21を実行することにより実現されるものとする。このプログラム21は、コンピュータ読み取り可能な記憶媒体に予め格納して頒布可能である。また、このプログラム21が、例えばネットワークを介してコンピュータ10にダウンロードされても構わない。
また、プログラムテンプレート自動生成装置30は、命名規則格納部25、変数生成ルール格納部26および検証結果格納部27を含む。本実施形態において、命名規則格納部25、変数生成ルール格納部26および検証結果格納部27は、例えば外部記憶装置20に格納される。
命名規則格納部25には、命名規則ユーザ定義(ユーザによって定義された命名規則)が予め格納されている。この命名規則ユーザ定義は、前述した第1の実施形態において説明したようにプログラムに対して反映されるべきものである。
変数生成ルール格納部26には、変数に対応づけて当該変数が変換される値を含む変数生成ルールが予め格納されている。この変数生成ルール格納部26に格納されている変数生成ルールは、前述した第1の実施形態における変数リストを生成するために用いられる。
なお、命名規則格納部25に格納されている命名規則ユーザ定義および変数生成ルール格納部26に格納されている変数生成ルールの具体的なデータ構造については、後述する。
変数リスト生成部51は、命名規則格納部25に格納されている命名規則ユーザ定義を変数生成ルール格納部26に格納されている変数生成ルール(に含まれる値)に適用することによって、変数に対応づけて置換情報を保持する変数リストを生成する。なお、変数リスト生成部51によって生成された変数リストは、変数リスト格納部24に格納される。
命名規則検証部52は、命名規則格納部25に格納されている命名規則ユーザ定義が予め定められている形式で定義されているか否かを検証する。命名規則検証部52による検証結果は、検証結果格納部27に出力される(格納される)。なお、検証結果格納部27に格納された検証結果は、例えばユーザに対して提示される。
図10は、図9に示す命名規則格納部25に格納されている命名規則ユーザ定義のデータ構造の一例を示す。なお、命名規則ユーザ定義は、ユーザによって設定される。
図10に示す例において、命名規則ユーザ定義の1行目は、クラス名の先頭に“Stv”をつけるという命名規則を表している。具体的には、この命名規則ユーザ定義の左辺は、後述する変数生成ルール(の左辺)のドットより前がclassであるもの全てに当該命名規則ユーザ定義が適用されることを表す。一方、この命名規則ユーザ定義の右辺は、[this]の箇所に該当する変数生成ルールの右辺が挿入されることを表す。
命名規則ユーザ定義の2行目は、変数生成ルール(の右辺)の末尾に“Logic”をつけることによってServiceクラス名とすることを表している。なお、この命名規則ユーザ定義の右辺の[class.Serviceクラス名]は、変数生成ルールの左辺が同名のものと対応する。
命名規則ユーザ定義の3行目は、変数生成ルールを利用することなく、当該命名規則ユーザ定義において記述されている$[テーブルID]DataSetを利用することを表している。なお、$[テーブルID]は、テーブル定義格納部23に格納されているテーブル情報に含まれているデータ要素を表す。
命名規則ユーザ定義の4行目は、変数生成ルールのものをそのまま利用することを表している。なお、後述するように対応する命名規則ユーザ定義が命名規則格納部25に格納されていない場合には、変数生成ルールが利用される。つまり、命名規則ユーザ定義の4行目が定義されていない場合であっても、同様の結果を得ることは可能である。命名規則ユーザ定義は、全ての変数生成ルールに対応して作成される必要はない。
上記したような命名規則ユーザ定義の左辺に定義できるものは、変数生成ルールの左辺のドットより前と一致するもの(class、attribute等)および変数生成ルールの左辺のドットより後ろと一致するもの(図10の例では、Serviceクラス名、DataSetクラス名、自テーブルの属性名等)である。
また、命名規則ユーザ定義の[]に定義できるものは、命名規則ユーザ定義の左辺に一致するもの(図10に示す例では、Serviceクラス名、DataSetクラス名、自テーブルの属性名等)、変数生成ルールの左辺と一致するもの(図10に示す例では、class.Serviceクラス名、attribute.自テーブルの属性名等)およびthisである。
図11は、図9に示す変数生成ルール格納部26に格納されている変数生成ルールのデータ構造の一例を示す。
図11に示すように、変数生成ルールの左辺は、前述したプログラムテンプレートの変数(名)と対応している。一方、変数生成ルールの右辺は、対応する変数が変換される値を表す。
図11に示す例では、変数生成ルールの1行目は、プログラムテンプレートにclass.Actionクラス名という変数が含まれている場合に、当該class.Actionクラス名という変数を$[テーブルID]Actionに変換することを表している。
また、変数生成ルールの2行目は、プログラムテンプレートにclass.Serviceクラス名という変数が含まれている場合に、当該class.Serviceクラス名という変数を$[テーブルID]Serviceに変換することを表している。
変数生成ルールの3行目は、プログラムテンプレートにclass.Datasetクラス名という変数が含まれている場合に、当該class.Datasetクラス名という変数を$[テーブルID]DSに変換することを表している。
変数生成ルールの4行目は、プログラムテンプレートにattribute.自テーブルの属性名という変数が含まれている場合に、当該attribute.自テーブルの属性名という変数を$[カラムID]に変換することを表している。
更に、変数生成ルールの5行目は、プログラムテンプレートにattribute.親テーブルの属性名という変数が含まれている場合に、当該attribute.親テーブルの属性名という変数を$[テーブルID]_$[カラムID]に変換することを表している。
また、変数生成ルールの6行目は、プログラムテンプレートにattribute.参照先のテーブルの属性名という変数が含まれている場合に、当該attribute.参照先のテーブルの属性名という変数を$[カラムID]_$[参照先カラムID]に変換することを表している。
上記した変数生成ルールに含まれる$[テーブルID]、$[カラムID]および$[参照先カラムID]は、テーブル定義格納部23に格納されているテーブル情報に含まれているデータ要素を表す。
なお、図11に示すように、変数生成ルール格納部26に格納されている変数生成ルールは、前述した第1の実施形態における変数リストと同様の形式である。
以下、本実施形態に係るプログラムテンプレート自動生成装置50の動作について説明する。本実施形態に係るプログラムテンプレート自動生成装置50は、後述するように変数リスト生成処理および命名規則検証処理を実行する。
まず、図12および図13のフローチャートを参照して、本実施形態に係るプログラムテンプレート自動生成装置50によって実行される変数リスト生成処理の処理手順について説明する。
なお、変数リスト生成処理においては、命名規則格納部25に格納されている命名規則ユーザ定義を変数生成ルール格納部26に格納されている変数生成ルールに適用することによって変数リストが生成される。この変数リスト生成処理において生成された変数リストは、前述した第1の実施形態において説明したようにプログラムテンプレートの自動生成に用いられる。
変数リスト生成処理においては、まず、変数生成ルール格納部26に格納されている変数生成ルールの各々について以下のステップS11〜S16の処理が実行される。なお、以下の説明においては、上述した図11に示す各行がそれぞれ1つの変数生成ルールであるものとして説明する。
変数リスト生成部51は、変数生成ルール格納部26に格納されている変数生成ルールを1つ取得する(ステップS11)。
次に、変数リスト生成部51は、命名規則格納部25に格納されている命名規則ユーザ定義を1つ取得する(ステップS12)。なお、上述した図10に示す各行がそれぞれ1つの命名規則ユーザ定義であるものとする。
変数リスト生成部51は、ステップS11において取得された変数生成ルールおよびステップS12において取得された命名規則ユーザ定義を比較することによって、該当箇所が一致するか否かを判定する(ステップS13)。なお、ステップS13における該当箇所とは、ステップS11において取得された変数生成ルールの左辺のドットより後ろおよびステップS12において取得された命名規則ユーザ定義の左辺を指す。つまり、ステップS13においては、変数生成ルールの左辺のドットより後ろと命名規則ユーザ定義の左辺とが一致するか否かが判定される。
該当箇所が一致しない(つまり、変数生成ルールの左辺のドットより後ろと命名規則ユーザ定義の左辺とが一致しない)と判定された場合(ステップS13のNO)、変数リスト生成部51は、命名規則格納部25に他の命名規則ユーザ定義があるか否かを判定する(ステップS14)。
命名規則格納部25に他の命名規則ユーザ定義があると判定された場合(ステップS14のYES)、上記したステップS12に戻って処理が繰り返される。
一方、命名規則格納部25に他の命名規則ユーザ定義がないと判定された場合、後述するステップS16の処理が実行される。
また、上記したステップS13において、該当箇所が一致する(つまり、変数生成ルールの左辺のドットより後ろと命名規則ユーザ定義の左辺とが一致する)と判定された場合、変数リスト生成部51は、第1の文字列置換処理を実行する(ステップS15)。この第1の文字列置換処理では、変数生成ルール格納部26に格納されている変数生成ルールにステップS12において取得された命名規則ユーザ定義を適用することによって当該命名規則ユーザ定義(または変数生成ルール)の文字列を置換(変換)し、新たな変数生成ルールが取得される。なお、第1の文字列置換処理の詳細については後述する。
変数リスト生成部51は、第1の文字列置換処理が実行されることによって取得された新たな変数生成ルールを変数リストAに追加する(ステップS16)。
なお、上記したようにステップS14において命名規則格納部25に他の命名規則ユーザ定義がないと判定された場合にはステップS16の処理が実行されるが、この場合、ステップS11において取得された変数生成ルールがそのまま新たな変数生成ルールとして変数リストAに追加される。
ステップS16の処理が実行されると、変数リスト生成部51は、変数生成ルール格納部26に他の変数生成ルールがあるか否かを判定する(ステップS17)。
変数生成ルール格納部26に他の変数生成ルールがあると判定された場合(ステップS17のYES)、上記したステップS11に戻って処理が繰り返される。
一方、変数生成ルール格納部26に他の変数生成ルールがないと判定された場合(ステップS17のNO)、変数生成ルール格納部26に格納されている変数生成ルールの各々について以下のステップS18〜S23の処理が実行される。
変数リスト生成部51は、上記した変数リストAに追加された変数生成ルール(新たな変数生成ルール)を1つ取得する(ステップS18)。
次に、変数リスト生成部51は、命名規則格納部25に格納されている命名規則ユーザ定義を1つ取得する(ステップS19)。
変数リスト生成部51は、ステップS18において取得された変数生成ルールおよびステップS19において取得された命名規則ユーザ定義を比較することによって、該当箇所が一致するか否かを判定する(ステップS20)。なお、ステップS20における該当箇所とは、ステップS18において取得された変数生成ルールの左辺のドットより前およびステップS19において取得された命名規則ユーザ定義の左辺を指す。つまり、ステップS20においては、変数生成ルールの左辺のドットより前と命名規則ユーザ定義の左辺とが一致するか否かが判定される。
該当箇所が一致しない(つまり、変数生成ルールの左辺のドットより前と命名規則ユーザ定義の左辺とが一致しない)と判定された場合(ステップS20のNO)、変数リスト生成部51は、命名規則格納部25に他の命名規則ユーザ定義があるか否かを判定する(ステップS21)。
命名規則格納部25に他の命名規則ユーザ定義があると判定された場合(ステップS21のYES)、上記したステップS19に戻って処理が繰り返される。
一方、命名規則格納部25に他の命名規則ユーザ定義がないと判定された場合(ステップS21のNO)、後述するステップS23の処理が実行される。
また、上記したステップS20において、該当箇所が一致する(つまり、変数生成ルールの左辺のドットより前と命名規則ユーザ定義の左辺とが一致する)と判定された場合、変数リスト生成部51は、第2の文字列置換処理を実行する(ステップS22)。この第2の文字列置換処理では、上述した変数リストAに追加された変数生成ルールにステップS19において取得された命名規則ユーザ定義を適用することによって当該命名規則ユーザ定義(または変数生成ルール)の文字列を置換(変換)し、新たな変数生成ルールが取得される。なお、第2の文字列置換処理の詳細については後述する。
変数リスト生成部51は、第2の文字列置換処理が実行されることによって取得された新たな変数生成ルールを変数リストBに追加する(ステップS23)。
なお、上記したようにステップS21において命名規則格納部25に他の命名規則ユーザ定義がないと判定された場合にはステップS23の処理が実行されるが、この場合、ステップS18において取得された変数生成ルールがそのまま新たな変数生成ルールとして変数リストBに追加される。
ステップS23の処理が実行されると、変数リスト生成部51は、変数リストAに他の変数生成ルールがあるか否かを判定する(ステップS24)。
変数リストAに他の変数生成ルールがあると判定された場合(ステップS24のYES)、上記したステップS18に戻って処理が繰り返される。
一方、変数リストAに他の変数生成ルールがないと判定された場合(ステップS24のNO)、変数リスト生成処理は終了される。
なお、変数リスト生成処理が終了されると、変数リストB(の内容)が変数リストとして変数リスト格納部24に格納される。
次に、図14のフローチャートを参照して、前述した第1の文字列置換処理(図12に示すステップS15の処理)の処理手順について説明する。この第1の文字列置換処理によれば、上述したように新たな変数生成ルールが取得される。
ここでは、図12に示すステップS11において取得された変数生成ルール(つまり、図12に示すステップS13において該当箇所が一致すると判定された変数生成ルール)を対象変数生成ルール、図12に示すステップS12において取得された命名規則ユーザ定義(つまり、図12に示すステップS13において該当箇所が一致すると判定された命名規則ユーザ定義)を対象命名規則ユーザ定義と称する。
まず、変数リスト生成部51は、対象命名規則ユーザ定義の右辺の大括弧に囲まれた文字列がthisであるか否かを判定する(ステップS31)。
対象命名規則ユーザ定義の右辺の大括弧に囲まれた文字列がthisでないと判定された場合(ステップS31のNO)、変数リスト生成部51は、対象変数生成ルールおよび対象命名規則ユーザ定義を比較することによって、該当箇所が一致するか否かを判定する(ステップS32)。なお、ステップS32における該当箇所とは、対象変数生成ルールの左辺および対象命名規則ユーザ定義の右辺の大括弧に囲まれた文字列を指す。つまり、ステップS32においては、対象変数生成ルールの左辺と対象命名規則ユーザ定義の右辺の大括弧に囲まれた文字列とが一致するか否かが判定される。
該当箇所が一致する(つまり、対象変数生成ルールの左辺と対象命名規則ユーザ定義の右辺の大括弧に囲まれた文字列とが一致する)と判定された場合(ステップS32のYES)、変数リスト生成部51は、新たな変数生成ルールの左辺を、対象変数生成ルールの左辺とする(ステップS33)。
次に、変数リスト生成部51は、対象命名規則ユーザ定義の右辺の大括弧および当該大括弧に囲まれた文字列(大括弧の文字列)を対象変数生成ルールの右辺で置換する(ステップS34)。この場合、変数リスト生成部51は、大括弧および当該大括弧に囲まれた文字列が対象変数生成ルールの右辺で置換された後の対象命名規則ユーザ定義の右辺を、新たな変数生成ルールの右辺とする。
なお、対象命名規則ユーザ定義の右辺の大括弧に囲まれた文字列がthisであると判定された場合(ステップS31のYES)、変数リスト生成部51は、ステップS33およびS34の処理を実行する。具体的には、変数リスト生成部51は、新たな変数生成ルールの左辺を対象変数生成ルールの左辺とし、対象命名規則ユーザ定義の右辺の大括弧および当該大括弧に囲まれた文字列(ここでは、this)を対象変数生成ルールの右辺で置換して新たな変数生成ルールの右辺とする。
これにより、対象命名規則ユーザ定義の右辺の大括弧に囲まれた文字列がthisであると判定された場合、および対象命名規則ユーザ定義の右辺の大括弧に囲まれた文字列がthisでないと判定され、かつ、該当箇所が一致すると判定された場合には、対象変数生成ルールの左辺を左辺とし、大括弧および当該大括弧に囲まれた文字列が対象変数生成ルールの右辺で置換された後の対象命名規則ユーザ定義の右辺を右辺とする、新たな変数生成ルールが取得される。
一方、該当箇所が一致しない(つまり、対象変数生成ルールの左辺と対象命名規則ユーザ定義の右辺の大括弧に囲まれた文字列とが一致しない)と判定された場合(ステップS32のNO)、変数リスト生成部51は、新たな変数生成ルールの左辺を、対象変数生成ルールの左辺とする(ステップS35)。
次に、変数生成リスト生成部51は、新たな変数生成ルールの右辺を、対象命名規則ユーザ定義の右辺とする(ステップS36)。
これにより、該当箇所が一致すると判定された場合には、対象変数生成ルールの左辺を左辺とし、対象命名規則ユーザ定義の右辺を右辺とする、新たな変数生成ルールが取得される。
ここでは、第1の文字列置換処理について説明したが、前述した第2の文字列置換処理(図13に示すステップS22の処理)においても上述した図14に示す処理と同様の処理が実行される。なお、第2の文字列置換処理においては、図13に示すステップS18において取得された変数生成ルール(つまり、図13に示すステップS20において該当箇所が一致すると判定された変数生成ルール)を対象変数生成ルール、図13に示すステップS19に示すステップS19において取得された命名規則ユーザ定義(つまり、図13に示すステップS20において該当箇所が一致すると判定された命名規則ユーザ定義)を対象命名規則ユーザ定義として、図14に示す処理が実行される。
ここで、上述した変数リスト生成処理について具体的に説明する。ここでは、便宜的に、図10(に示す命名規則ユーザ定義)および図11(に示す変数生成ルール)を用いて説明する。
まず、上述した図12に示す変数リスト生成処理におけるステップS11〜S17の処理について具体的に説明する。
この場合、変数リスト生成部51は、変数生成ルールを1つ取得する。ここでは、変数生成ルールとして、図11の1行目(class.Actionクラス名=$[テーブルID]Action)が取得されたものとする。
また、変数リスト生成部51は、命名規則ユーザ定義を1つ取得する。ここでは、命名規則ユーザ定義として、図10の1行目(class=Stv[this])が取得されたものとする。
この場合、変数リスト生成部51は、取得された変数生成ルール「class.Actionクラス名=$[テーブルID]Action」の左辺のドットより後ろと取得された命名規則ユーザ定義「class=Stv[this]」の左辺とが一致するか否かを判定する。
ここで、変数リスト生成部51によって取得された変数生成ルールの左辺のドットより後ろはActionクラス名であり、変数リスト生成部51によって取得された命名規則ユーザ定義の左辺はclassであるため、変数リスト生成部51は、該当箇所(つまり、変数生成ルールの左辺のドットより後ろおよび命名規則ユーザ定義の左辺)が一致しないと判定する。
このように該当箇所が一致しないと判定された場合、上述したように他の命名規則ユーザ定義についても同様の処理が実行されるが、変数生成ルール「class.Actionクラス名=$[テーブルID]Action」の左辺のドットより後ろは、図10に示す全ての命名規則ユーザ定義の左辺と一致しない。このため、この変数生成ルール「class.Actionクラス名=$[テーブルID]Action」は、そのまま新たな変数生成ルールとして変数リストAに追加されることになる。
同様に、変数リスト生成部51は、次の変数生成ルールを1つ取得する。ここでは、変数生成ルールとして、図11の2行目(class.Serviceクラス名=$[テーブルID]Service)が取得されたものとする。
また、変数リスト生成部51は、命名規則ユーザ定義を1つ取得する。ここでは、命名規則ユーザ定義として、図10の1行目(class=Stv[this])が取得されたものとする。
この場合、変数リスト生成部51は、取得された変数生成ルール「class.Serviceクラス名=$[テーブルID]Service」の左辺のドットより後ろと取得された命名規則ユーザ定義「class=Stv[this]」の左辺とが一致するか否かを判定する。
ここで、変数リスト生成部51によって取得された変数生成ルールの左辺のドットより後ろはServiceクラス名であり、変数リスト生成部51によって取得された命名規則ユーザ定義の左辺はclassであるため、変数リスト生成部51は、該当箇所が一致しないと判定する。
この場合、変数リスト生成部51は、次の命名規則ユーザ定義を1つ取得する。ここでは、命名規則ユーザ定義として、図10の2行目(Serviceクラス名=[class.Serviceクラス名]Logic)が取得されたものとする。
次に、変数リスト生成部51は、取得された変数生成ルール「class.Serviceクラス名=$[テーブルID]Service」の左辺のドットより後ろと取得された命名規則ユーザ定義「Serviceクラス名=[class.Serviceクラス名]Logic」の左辺とが一致するか否かを判定する。
ここで、変数リスト生成部51によって取得された変数生成ルールの左辺のドットより後ろはServiceクラス名であり、変数リスト生成部51によって取得された命名規則ユーザ定義の左辺はServiceクラス名であるため、変数リスト生成部51は、該当箇所が一致すると判定する。
このように該当箇所が一致すると判定された場合、上述したように第1の文字列置換処理が実行される。
第1の文字列置換処理においては、変数リスト生成部51は、命名規則ユーザ定義「Serviceクラス名=[class.Serviceクラス名]Logic」の右辺の大括弧(つまり、[])に囲まれた文字列がthisであるか否かを判定する。ここでは、命名規則ユーザ定義の右辺の大括弧に囲まれた文字列は、class.Serviceクラス名である。したがって、変数リスト生成部51は、命名規則ユーザ定義の右辺の大括弧に囲まれた文字列がthisでないと判定する。
この場合、変数リスト生成部51は、変数生成ルール「class.Serviceクラス名=$[テーブルID]Service」の左辺と命名規則ユーザ定義「Serviceクラス名=[class.Serviceクラス名]Logic」の右辺の大括弧に囲まれた文字列とが一致するか否かを判定する。
ここで、変数生成ルールの左辺はclass.Serviceクラス名であり、命名規則ユーザ定義の右辺の大括弧に囲まれた文字列はclass.Serviceクラス名であるため、変数リスト生成部51は、該当箇所(つまり、変数生成ルールの左辺および命名規則ユーザ定義の右辺の大括弧に囲まれた文字列)が一致すると判定する。
この場合、変数リスト生成部51は、変数生成ルール「class.Serviceクラス名=$[テーブルID]Service」の左辺を新たな変数生成ルールの左辺とする。
また、変数リスト生成部51は、命名規則ユーザ定義の右辺の大括弧および当該大括弧に囲まれた文字列(ここでは、[class.Serviceクラス名])を、変数生成ルールの右辺(ここでは、$[テーブルID]Service)で置換する。変数リスト生成部51は、置換処理後の命名規則ユーザ定義の右辺(ここでは、$[テーブルID]ServiceLogic)を新たな変数生成ルールの右辺とする。
これにより、変数リスト生成部51は、新たな変数生成ルールとして「class.Serviceクラス名=$[テーブルID]ServiceLogic」を取得し、当該新たな変数生成ルールを変数リストAに追加する。
ここでは、図11に示す変数生成ルールのうち、1行目(class.Actionクラス名=$[テーブルID]Action)および2行目(class.Serviceクラス名=$[テーブルID]Service)について主に説明したが、他の変数生成ルールについても同様の処理が実行される。
なお、図15は、図12に示すステップS11〜S17の処理が実行されることによって生成された変数リストAを示す。図15に示す例では、変数リストAには、新たな変数生成ルールとして、「class.Actionクラス名=$[テーブルID]Action」、「class.Serviceクラス名=$[テーブルID]ServiceLogic」、「class.Datasetクラス名=$[テーブルID]Dataset」、「attribute.自テーブルの属性名=$[カラムID]」、「attribute.親テーブルの属性名=$[テーブルID]_$[カラムID]」および「attribute.参照先テーブルの属性名=$[カラムID]_$[参照先カラムID]」が追加されている。
次に、上述した図13に示す変数リスト生成処理におけるステップS18〜S24の処理について具体的に説明する。
この場合、変数リスト生成部51は、変数リストAから変数生成ルール(新たな変数生成ルール)を1つ取得する。ここでは、変数生成ルールとして、図15の1行目(class.Actionクラス名=$[テーブルID]Action)が取得されたものとする。
また、変数リスト生成部51は、命名規則ユーザ定義を1つ取得する。ここでは、命名規則ユーザ定義として、図10の1行目(class=Stv[this])が取得されたものとする。
この場合、変数リスト生成部51は、取得された変数生成ルール「class.Actionクラス名=$[テーブルID]Action」の左辺のドットより前と取得された命名規則ユーザ定義「class=Stv[this]」の左辺とが一致するか否かを判定する。
ここで、変数リスト生成部51によって取得された変数生成ルールの左辺のドットより前はclassであり、変数リスト生成部51によって取得された命名規則ユーザ定義の左辺はclassであるため、変数リスト生成部51は、該当箇所(つまり、変数生成ルールの左辺のドットより前および命名規則ユーザ定義の左辺)が一致すると判定する。
このように該当箇所が一致すると判定された場合、上述したように第2の文字列置換処理が実行される。
第2の文字列置換処理においては、変数リスト生成部51は、命名規則ユーザ定義「class=Stv[this]」の右辺の大括弧に囲まれた文字列がthisであるか否かを判定する。ここでは、命名規則ユーザ定義の右辺の大括弧に囲まれた文字列は、thisである。したがって、変数リスト生成部51は、命名規則ユーザ定義の右辺の大括弧に囲まれた文字列がthisであると判定する。
この場合、変数リスト生成部51は、変数生成ルール「class.Actionクラス名=$[テーブルID]Action」の左辺を新たな変数生成ルールの左辺とする。
また、変数リスト生成部51は、命名規則ユーザ定義の右辺の大括弧および当該大括弧に囲まれた文字列(ここでは、[this])を、変数生成ルールの右辺(ここでは、$[テーブルID]Action)で置換する。変数リスト生成部51は、置換処理後の命名規則ユーザ定義の右辺(ここでは、Stv$[テーブルID]Action)を新たな変数生成ルールの右辺とする。
これにより、変数リスト生成部51は、新たな変数生成ルールとして「class.Actionクラス名=Stv$[テーブルID]Action」を取得し、当該新たな変数生成ルールを変数リストBに追加する。
なお、図15に示す変数リストAの「class.Serviceクラス名=$[テーブルID]ServiceLogic」および「class.Datasetクラス名=$[テーブルID]Dataset」についても、上記した「class.Actionクラス名=$[テーブルID]Action」と同様な処理が実行されることにより、「class.Serviceクラス名=Stv$[テーブルID]ServiceLogic」および「class.Datasetクラス名=Stv$[テーブルID]Dataset」が変数リストBに追加される。
上述したように命名規則ユーザ定義「class=Stv[this]」は、クラス名の先頭に“Stv”をつけるという命名規則である。このため、変数リストAに追加された「class.Actionクラス名=$[テーブルID]Action」、「class.Serviceクラス名=$[テーブルID]ServiceLogic」および「class.Datasetクラス名=$[テーブルID]Dataset」に命名規則ユーザ定義「class=Stv[this]」が適用されると、「class.Actionクラス名=Stv$[テーブルID]Action」、「class.Serviceクラス名=Stv$[テーブルID]ServiceLogic」および「class.Datasetクラス名=Stv$[テーブルID]Dataset」となる。
同様に、変数リスト生成部51は、次の変数生成ルールを1つ取得する。ここでは、変数生成ルールとして、図15の4行目(attribute.自テーブルの属性名=$[カラムID])が取得されたものとする。
また、変数リスト生成部51は、命名規則ユーザ定義を1つ取得する。ここでは、命名規則ユーザ定義として、図10の1行目(class=Stv[this])が取得されたものとする。
この場合、変数リスト生成部51は、取得された変数生成ルール「attribute.自テーブルの属性名=$[カラムID]」の左辺のドットより前と取得された命名規則ユーザ定義「class=Stv[this]」の左辺とが一致するか否かを判定する。
ここで、変数リスト生成部51によって取得された変数生成ルールの左辺のドットより前はattributeであり、変数リスト生成部51によって取得された命名規則ユーザ定義の左辺はclassであるため、変数リスト生成部51は、該当箇所が一致しないと判定する。
このように該当箇所が一致しないと判定された場合、上述したように他の命名規則ユーザ定義についても同様の処理が実行されるが、変数生成ルール「attribute.自テーブルの属性名=$[カラムID]」の左辺のドットより前は、図10に示す全ての命名規則ユーザ定義の左辺と一致しない。このため、この変数生成ルール「attribute.自テーブルの属性名=$[カラムID]」は、そのまま新たな変数生成ルールとして変数リストBに追加されることになる。
なお、図15に示す変数リストAの「attribute.親テーブルの属性名=$[テーブルID]_$[カラムID]」および「attribute.参照先テーブルの属性名=$[カラムID]_$[参照先カラムID]」についても、上記した「attribute.自テーブルの属性名=$[カラムID]」と同様な処理が実行されることにより、「attribute.親テーブルの属性名=$[テーブルID]_$[カラムID]」および「attribute.参照先テーブルの属性名=$[カラムID]_$[参照先カラムID]」が変数リストBに追加される。
なお、図16は、図15に示す全ての変数生成ルールに対して前述した図13に示すステップS19〜S23の処理が実行されることによって生成された変数リストBを示す。図16に示す例では、変数リストBには、新たな変数生成ルールとして、上記したように「class.Actionクラス名=Stv$[テーブルID]Action」、「class.Serviceクラス名=Stv$[テーブルID]ServiceLogic」、「class.Datasetクラス名=Stv$[テーブルID]Dataset」、「attribute.自テーブルの属性名=$[カラムID]」、「attribute.親テーブルの属性名=$[テーブルID]_$[カラムID]」および「attribute.参照先テーブルの属性名=$[カラムID]_$[参照先カラムID]」が追加されている。
このように変数リスト生成処理が実行されることによって生成された図16に示すような変数リストBは、変数リストとして用いられることができる。この場合、変数リストBは、変数リストとして変数リスト格納部24に格納される。
なお、図10に示す命名規則ユーザ定義の例では、図14に示すステップS31において右辺の大括弧に囲まれた文字列がthisでないと判定されるものはないが、例えば「class=Stv[class.Serviceクラス名]」のような命名規則ユーザ定義が定義されている場合には、当該右辺の大括弧に囲まれた文字列がthisでないと判定される。
次に、本実施形態に係るプログラムテンプレート自動生成装置50によって実行される命名規則検証処理について説明する。命名規則検証処理は、上述した変数リスト生成処理において用いられる命名規則ユーザ定義に問題があるか否かを検証するために実行される処理である。なお、命名規則検証処理は、命名規則ユーザ定義がユーザによって定義された後、命名規則検証部52によって実行される。
この命名規則検証処理は、第1〜第3の命名規則検証処理を含む。以下、この第1〜第3の命名規則検証処理の各々について説明する。
まず、図17のフローチャートを参照して、第1の命名規則検証処理の処理手順について説明する。第1の命名規則検証処理は、命名規則ユーザ定義において左辺に定義できないものが定義されていないかを検証するための処理である。なお、上述したように命名規則ユーザ定義の左辺に定義できるものは、変数生成ルールの左辺のドットより前または後ろと一致するものである。
第1の命名規則検証処理においては、命名規則格納部25に格納されている命名規則ユーザ定義の各々について以下のステップS41〜S46の処理が実行される。
命名規則検証部52は、命名規則格納部25に格納されている命名規則ユーザ定義を1つ取得する(ステップS41)。
次に、命名規則検証部52は、変数生成ルール格納部26に格納されている変数生成ルールを1つ取得する(ステップS42)。
命名規則検証部52は、ステップS41において取得された命名規則ユーザ定義の左辺がステップS42において取得された変数生成ルールの左辺のドットより後ろと一致するか否かを判定する(ステップS43)。
命名規則ユーザ定義の左辺が変数生成ルールの左辺のドットより後ろと一致しないと判定された場合(ステップS43のNO)、命名規則検証部52は、ステップS41において取得された命名規則ユーザ定義の左辺がステップS42において取得された変数生成ルールの左辺のドットより前と一致するか否かを判定する(ステップS44)。
命名規則ユーザ定義の左辺が変数生成ルールの左辺のドットより前と一致しないと判定された場合(ステップS44のNO)、命名規則検証部52は、変数生成ルール格納部26に他の変数生成ルールがあるか否かを判定する(ステップS45)。
変数生成ルール格納部26に他の変数生成ルールがあると判定された場合(ステップS45のYES)、上記したステップS42に戻って処理が繰り返される。
一方、変数生成ルール格納部26に他の変数生成ルールがないと判定された場合(ステップS45のNO)、命名規則検証部52は、検証結果としてエラーメッセージを検証結果格納部27に出力する(ステップS46)。このステップS46において出力されるエラーメッセージは、命名規則ユーザ定義の左辺に定義できないものが定義されていることを警告するメッセージである。なお、このエラーメッセージは、例えばユーザに対して提示されることができる。
ステップS46の処理が実行されると、命名規則検証部52は、命名規則格納部25に他の命名規則ユーザ定義があるか否かを判定する(ステップS47)。
命名規則格納部25に他の命名規則ユーザ定義があると判定された場合(ステップS47のYES)、上記したステップS41に戻って処理が繰り返される。
一方、命名規則格納部25に他の命名規則ユーザ定義がないと判定された場合(ステップS47のNO)、第1の命名規則検証処理は終了される。
上記したように第1の命名規則検証処理が実行されることによって、命名規則格納部25に格納されている命名規則ユーザ定義の各々が当該命名規則ユーザ定義の左辺に定義できないものを定義している場合に、その旨を警告するエラーメッセージを出力することができる。
次に、図18のフローチャートを参照して、第2の命名規則検証処理の処理手順について説明する。第2の命名規則検証処理は、命名規則ユーザ定義においてクラス名が重複していないかを検証するための処理である。
なお、命名規則ユーザ定義においてクラス名が重複している場合、当該命名規則ユーザ定義に基づいて生成されたプログラムテンプレートを用いて生成されたプログラムをコンパイルした際にエラーが発生してしまう。このため、第2の命名規則検証処理によってクラス名の重複が検証される。
まず、命名規則検証部52は、変数生成ルール格納部26に格納されている変数生成ルールのうち、左辺のドットより前がclassである変数生成ルールを取得する(ステップS51)。なお、左辺のドットより前がclassである変数生成ルールが変数生成ルール格納部26内に複数存在する場合には、全ての変数生成ルールが取得される。
次に、命名規則検証部52は、ステップS51において取得された変数生成ルールの左辺のドットより後ろを左辺とする命名規則ユーザ定義(つまり、当該変数生成ルールの左辺のドットより後ろと左辺が一致する命名規則ユーザ定義)が命名規則格納部25内にあるか否かを判定する(ステップS52)。
変数生成ルールの左辺のドットより後ろを左辺とする命名規則ユーザ定義が命名規則格納部25内にあると判定された場合(ステップS52のYES)、命名規則検証部52は、命名規則格納部25から当該命名規則ユーザ定義を取得する(ステップS53)。なお、ステップS53においては、複数の命名規則ユーザ定義が取得されても構わない。
次に、命名規則検証部52は、ステップS51において取得された変数生成ルールおよびステップS53において取得された命名規則ユーザ定義を用いて、第3の文字列置換処理を実行する(ステップS54)。この第3の文字列置換処理においては、ステップS51において取得された変数生成ルールにステップS53において取得された命名規則ユーザ定義を適用することによって当該命名規則ユーザ定義(または変数生成ルール)の文字列を置換し、当該置換結果を含む変数リストが生成される。この第3の文字列置換処理において生成される変数リストには、変数を左辺とし、当該変数に対して置換される値を右辺とする情報が保持される。なお、この第3の文字列置換処理の詳細については後述する。
命名規則検証部52は、第3の文字列置換処理において生成された変数リスト内において右辺が重複したものがあるか否かを判定する(ステップS55)。
変数リスト内において右辺が重複したものがあると判定された場合(ステップS55のYES)、命名規則検証部52は、検証結果としてエラーメッセージを検証結果格納部27に出力する(ステップS56)。このステップS56において出力されるエラーメッセージは、命名規則ユーザ定義においてクラス名が重複していることを警告するメッセージである。なお、このエラーメッセージは、例えばユーザに対して提示されることができる。
一方、ステップS52において変数生成ルールの左辺のドットより後ろを左辺とする命名規則ユーザ定義が命名規則格納部25内にないと判定された場合および変数リスト内において右辺が重複したものがないと判定された場合、ステップS56の処理は実行されず、第2の命名規則検証処理は終了される。
ここで、図19および図20のフローチャートを参照して、上述した第3の文字列置換処理(図18に示すステップS54の処理)の処理手順について説明する。ここでは、図18に示すステップS51において取得された変数生成ルールを対象変数生成ルール、ステップS53において取得された命名規則ユーザ定義を対象命名規則ユーザ定義と称する。
第3の文字列置換処理においては、まず、対象命名規則ユーザ定義の各々について以下のステップS61〜S66の処理が実行される。
命名規則検証部52は、対象命名規則ユーザ定義のうちの1つを取得する(ステップS61)。
次に、命名規則検証部52は、対象変数生成ルールのうちの1つを取得する(ステップS62)。
命名規則検証部52は、ステップS61において取得された対象命名規則ユーザ定義およびステップS62において取得された対象変数生成ルールを比較することによって、該当箇所が一致するか否かを判定する(ステップS63)。なお、ステップS63における該当箇所とは、ステップS61において取得された対象命名規則ユーザ定義の右辺の大括弧に囲まれた文字列およびステップS62において取得された対象変数生成ルールの左辺を指す。つまり、ステップS63においては、対象命名規則ユーザ定義の右辺の大括弧に囲まれた文字列と対象変数生成ルールの左辺とが一致するか否かが判定される。
該当箇所が一致しない(つまり、対象命名規則ユーザ定義の右辺の大括弧に囲まれた文字列と対象変数生成ルールの左辺とが一致しない)と判定された場合(ステップS63のNO)、命名規則検証部52は、他の対象変数生成ルールがあるか否かを判定する(ステップS64)。
他の対象変数生成ルールがあると判定された場合(ステップS64のYES)、上記したステップS62に戻って処理が繰り返される。
一方、他の対象変数生成ルールがないと判定された場合(ステップS64のNO)、後述するステップS66の処理が実行される。
また、上記したステップS63において、該当箇所が一致する(つまり、対象命名規則ユーザ定義の右辺の大括弧に囲まれた文字列と対象変数生成ルールの左辺とが一致する)と判定された場合、命名規則検証部52は、当該対象命名規則ユーザ定義の右辺の大括弧および当該大括弧に囲まれた文字列を当該対象変数生成ルールの右辺で置換する(ステップS65)。
命名規則検証部52は、置換結果、つまり、右辺の大括弧および当該大括弧に囲まれた文字列が対象変数生成ルールの右辺で置換された対象命名規則ユーザ定義を、変数リストCに追加する(ステップS66)。
なお、上記したようにステップS64において他の対象変数生成ルールがないと判定された場合にはステップS66の処理が実行されるが、この場合、ステップS61において取得された対象命名規則ユーザ定義がそのまま変数リストCに追加される。
ステップS66の処理が実行されると、命名規則検証部52は、他の対象命名規則ユーザ定義があるか否かを判定する(ステップS67)。
他の対象命名規則ユーザ定義があると判定された場合(ステップS67のYES)、上記したステップS61に戻って処理が繰り返される。
一方、他の対象命名規則ユーザ定義がないと判定された場合(ステップS67のNO)、対象変数生成ルールの各々について以下のステップS68〜S73の処理が実行される。
命名規則検証部52は、対象変数生成ルールのうちの1つを取得する(ステップS68)。
次に、命名規則検証部52は、上記した変数リストCに追加された対象命名規則ユーザ定義を1つ取得する(ステップS69)。
命名規則検証部52は、ステップS68において取得された対象変数生成ルールおよびステップS69において取得された対象命名規則ユーザ定義を比較することによって、該当箇所が一致するか否かを判定する(ステップS70)。なお、ステップS70における該当箇所とは、ステップS68において取得された対象変数生成ルールの左辺のドットより後ろおよびステップS69において取得された対象命名規則ユーザ定義の左辺を指す。つまり、ステップS70においては、対象変数生成ルールの左辺のドットより後ろと対象命名規則ユーザ定義の左辺とが一致するか否かが判定される。
該当箇所が一致しない(つまり、対象変数生成ルールの左辺のドットより後ろと対象命名規則ユーザ定義の左辺とが一致しない)と判定された場合(ステップS70のNO)、命名規則検証部52は、他の対象命名規則ユーザ定義があるか否かを判定する(ステップS71)。
他の対象命名規則ユーザ定義があると判定された場合(ステップS71のYES)、上記したステップS69の処理が実行される。
一方、他の対象命名規則ユーザ定義がないと判定された場合(ステップS71のNO)、後述するステップS73の処理が実行される。
また、上記したステップS70において、該当箇所が一致する(つまり、対象変数生成ルールの左辺のドットより後ろと対象命名規則ユーザ定義の左辺とが一致する)と判定された場合、命名規則検証部52は、当該対象変数生成ルールの右辺を当該対象命名規則ユーザ定義の右辺で置換する(ステップS72)。
命名規則検証部52は、置換結果、つまり、右辺が対象命名規則ユーザ定義の右辺で置換された対象変数生成ルールを、変数リストDに追加する(ステップS73)。
なお、上記したようにステップS71において他の対象命名規則ユーザ定義がないと判定された場合にはステップS73の処理が実行されるが、この場合、ステップS68において取得された対象変数生成ルールがそのまま変数リストDに追加される。
ステップS73の処理が実行されると、命名規則検証部52は、他の対象変数生成ルールがあるか否かを判定する(ステップS74)。
他の対象変数生成ルールがあると判定された場合(ステップS74のYES)、上記したステップS68に戻って処理が繰り返される。
一方、他の対象変数生成ルールがないと判定された場合(ステップS74のNO)、第3の文字列置換処理は終了される。
なお、上述した図18に示すステップS54において生成される変数リストとは上記した変数リストDであり、上述したステップS55の処理は、当該変数リストDを用いて実行される。
ここで、上述した第2の命名規則検証処理について具体的に説明する。ここでは、変数生成ルール格納部26には、前述した図11に示す変数生成ルールが格納されているものとする。また、命名規則格納部25には、図21に示す命名規則ユーザ定義が格納されているものとする。
まず、命名規則検証部52は、変数生成ルール格納部26に格納されている変数生成ルールのうち、左辺のドットより前がclassである変数生成ルールを取得する。ここでは、図11に示す変数生成ルールのうち、図22に示す変数生成ルール「class.Actionクラス名=$[テーブル名]Action」、「class.Serviceクラス名=$[テーブルID]Service」および「class.Datasetクラス名=$[テーブルID]DS」が取得される。
次に、命名規則検証部52は、取得された変数生成ルールの左辺のドットより後ろを左辺とする命名規則ユーザ定義が命名規則格納部25内にあるか否かを判定する。図21を参照すると、取得された変数生成ルール「class.Actionクラス名=$[テーブル名]Action」の左辺のドットより後ろ(つまり、「Actionクラス名」)を左辺とする命名規則ユーザ定義「Actionクラス名=[class.Actionクラス名]Service」および取得された変数生成ルール「class.Serviceクラス名=$[テーブルID]Service」の左辺のドットより後ろ(つまり、「Serviceクラス名」)を左辺とする命名規則ユーザ定義「Serviceクラス名=$[テーブルID]ActionService」が命名規則格納部25内に存在する。
この場合、命名規則検証部52は、取得された変数生成ルールの左辺のドットより後ろを左辺とする命名規則ユーザ定義が命名規則格納部25内にあると判定し、図23に示す命名規則ユーザ定義「Actionクラス名=[class.Actionクラス名]Service」および「Serviceクラス名=$[テーブルID]ActionService」を取得する。
次に、命名規則検証部52は、図22に示す変数生成ルール「class.Actionクラス名=$[テーブル名]Action」、「class.Serviceクラス名=$[テーブルID]Service」および「class.Datasetクラス名=$[テーブルID]DS」と図23に示す命名規則ユーザ定義「Actionクラス名=[class.Actionクラス名]Service」および「Serviceクラス名=$[テーブルID]ActionService」とを用いて、第3の文字列置換処理を実行する。
まず、上述した図19に示す第3の文字列置換処理におけるステップS61〜S67の処理について具体的に説明する。
この場合、命名規則検証部52は、図23に示す命名規則ユーザ定義のうちの1つを取得する。ここでは、図23に示す命名規則ユーザ定義のうち、命名規則ユーザ定義「Actionクラス名=[class.Actionクラス名]Service」が取得されたものとする。
また、命名規則検証部52は、図22に示す変数生成ルールのうちの1つを取得する。ここでは、図22に示す変数生成ルールのうち、変数生成ルール「class.Actionクラス名=$[テーブルID]Action」が取得されたものとする。
命名規則検証部52は、取得された命名規則ユーザ定義「Actionクラス名=[class.Actionクラス名]Service」の右辺の大括弧に囲まれた文字列と取得された変数生成ルール「class.Actionクラス名=$[テーブルID]Action」の左辺とが一致するか否かを判定する。
ここで、命名規則ユーザ定義「Actionクラス名=[class.Actionクラス名]Service」の右辺の大括弧に囲まれた文字列は「class.Actionクラス名」であり、変数生成ルール「class.Actionクラス名=$[テーブルID]Action」の左辺は「class.Actionクラス名」である。このため、命名規則検証部52は、命名規則ユーザ定義の右辺の大括弧に囲まれた文字列と変数生成ルールの左辺とが一致すると判定する。
この場合、命名規則検証部52は、命名規則ユーザ定義「Actionクラス名=[class.Actionクラス名]Service」の右辺の大括弧および当該大括弧に囲まれた文字列(つまり、[class.Actionクラス名])を、変数生成ルール「class.Actionクラス名=$[テーブルID]Action」の右辺(つまり、$[テーブルID]Action)で置換する。
命名規則検証部52は、置換後の命名規則ユーザ定義「Actionクラス名=$[テーブルID]ActionService」を変数リストCに追加する。
同様に、命名規則検証部52は、図23に示す命名規則ユーザ定義のうちの1つを取得する。ここでは、図23に示す命名規則ユーザ定義のうち、命名規則ユーザ定義「Serviceクラス名=$[テーブルID]ActionService」が取得される。
また、命名規則検証部52は、図22に示す変数生成ルールのうちの1つを取得する。ここでは、図22に示す変数生成ルールのうち、変数生成ルール「class.Actionクラス名=$[テーブルID]Action」が取得されたものとする。
命名規則検証部52は、取得された命名規則ユーザ定義「Serviceクラス名=$[テーブルID]ActionService」の右辺の大括弧に囲まれた文字列と取得された変数生成ルール「class.Actionクラス名=$[テーブルID]Action」の左辺とが一致するか否かを判定する。
ここで、命名規則ユーザ定義「Serviceクラス名=$[テーブルID]ActionService」の右辺の大括弧に囲まれた文字列は「テーブルID」であり、変数生成ルール「class.Actionクラス名=$[テーブルID]Action」の左辺は「class.Actionクラス名」である。このため、命名規則検証部52は、命名規則検証部52は、命名規則ユーザ定義の右辺の大括弧に囲まれた文字列と変数生成ルールの左辺とが一致しないと判定する。
この場合、命名規則検証部52は、命名規則ユーザ定義「Serviceクラス名=$[テーブルID]ActionService」を変数リストCに追加する。
上記したように図19に示すステップS61〜S67の処理が実行された場合、変数リストCには、図24に示す命名規則ユーザ定義「Actionクラス名=$[テーブル名]ActionService」および「Serviceクラス名=$[テーブルID]ActionService」が追加される。
次に、上述した図20に示す第3の文字列置換処理におけるステップS68〜S74の処理について具体的に説明する。
この場合、命名規則検証部52は、上記した図22に示す変数生成ルールのうちの1つを取得する。ここでは、図22に示す変数生成ルールのうち、変数生成ルール「class.Actionクラス名=$[テーブルID]Action」が取得されたものとする。
また、命名規則検証部52は、上記した図24に示す変数リストCに追加された命名規則ユーザ定義のうちの1つを取得する。ここでは、図24に示す変数リストCに追加された命名規則ユーザ定義のうち、命名規則ユーザ定義「Actionクラス名=$[テーブルID]ActionService」が取得されたものとする。
命名規則検証部52は、取得された変数生成ルール「class.Actionクラス名=$[テーブルID]Action」の左辺のドットより後ろと取得された命名規則ユーザ定義「Actionクラス名=$[テーブルID]ActionService」の左辺とが一致するか否かを判定する。
ここで、変数生成ルール「class.Actionクラス名=$[テーブルID]Action」の左辺のドットより後ろは「Actionクラス名」であり、命名規則ユーザ定義「Actionクラス名=$[テーブルID]ActionService」の左辺は「Actionクラス名」である。このため、命名規則検証部52は、変数生成ルールの左辺のドットより後ろと命名規則ユーザ定義の左辺とが一致すると判定する。
この場合、命名規則検証部52は、変数生成ルール「class.Actionクラス名=$[テーブルID]Action」の右辺を命名規則ユーザ定義「Actionクラス名=$[テーブルID]ActionService」の右辺で置換する。
命名規則検証部52は、置換後の変数生成ルール「class.Actionクラス名=$[テーブルID]ActionService」を変数リストDに追加する。
同様に、命名規則検証部52は、図22に示す変数生成ルールのうちの1つを取得する。ここでは、図22に示す変数生成ルールのうち、変数生成ルール「class.Serviceクラス名=$[テーブルID]Service」が取得されたものとする。
また、命名規則検証部52は、上記した図24に示す変数リストCに追加された命名規則ユーザ定義のうちの1つを取得する。ここでは、図24に示す変数リストCに追加された命名規則ユーザ定義のうち、命名規則ユーザ定義「Serviceクラス名=$[テーブルID]ActionService」が取得されたものとする。
命名規則検証部52は、取得された変数生成ルール「class.Serviceクラス名=$[テーブルID]Service」の左辺のドットより後ろと取得された命名規則ユーザ定義「Serviceクラス名=$[テーブルID]ActionService」の左辺とが一致するか否かを判定する。
ここで、変数生成ルール「class.Serviceクラス名=$[テーブルID]Service」の左辺のドットより後ろは「Serviceクラス名」であり、命名規則ユーザ定義「Serviceクラス名=$[テーブルID]ActionService」の左辺は「Serviceクラス名」である。このため、命名規則検証部52は、変数生成ルールの左辺のドットより後ろと命名規則ユーザ定義の左辺とが一致すると判定する。
この場合、命名規則検証部52は、変数生成ルール「class.Serviceクラス名=$[テーブルID]Service」の右辺を命名規則ユーザ定義「Serviceクラス名=$[テーブルID]ActionService」の右辺で置換する。
命名規則検証部52は、置換後の変数生成ルール変数生成ルール「class.Serviceクラス名=$[テーブルID]ActionService」を変数リストDに追加する。
なお、図22に示す変数生成ルールのうちの変数生成ルール「class.Datasetクラス名=$[テーブルID]DS」についても同様の処理(図20に示すステップS68〜73の処理)が実行される。この場合、詳しい説明は省略するが、変数生成ルール「class.Datasetクラス名=$[テーブルID]DS」の左辺のドットより後ろを左辺とする命名規則ユーザ定義は変数リストC内に存在しないため、当該変数生成ルール「class.Datasetクラス名=$[テーブルID]DS」が変数リストDに追加される。
上記したように図20に示すステップS68〜S74の処理が実行された場合、変数リストDには、図25に示す変数生成ルール「class.Actionクラス名=$[テーブルID]ActionService」、「class.Serviceクラス名=$[テーブルID]ActionService」および「class.Datasetクラス名=$[テーブルID]DS」が追加される。
第3の文字列置換処理が実行されることによって変数リストDが生成されると、命名規則検証部52は、当該変数リストD内において右辺が重複したものがあるか否かを判定する。
ここで、図25を参照すると、変数リストD内の「class.Actionクラス名=$[テーブルID]ActionService」および「class.Serviceクラス名=$[テーブルID]ActionService」は、右辺が一致している。
この場合、命名規則検証部52は、変数リストD内において右辺が重複したものがあると判定し、命名規則ユーザ定義においてクラス名が重複していることを警告するエラーメッセージを出力する。
上記したように第2の命名規則検証処理が実行されることによって、命名規則ユーザ定義においてクラス名が重複している場合に、エラーメッセージを出力することができる。
なお、本実施形態においては、第2の命名規則検証処理が命名規則ユーザ定義においてクラス名が重複していないかを検証するための処理であるものとして説明したが、第2の命名規則検証処理によって例えば命名規則ユーザ定義において属性名が重複していないかを検証することも可能である。この場合、図18に示すステップS51において左辺のドットより前がattributeである変数生成ルールを取得することによって、命名規則ユーザ定義において属性名が重複していないかを検証することができる。
更に、第2の命名規則検証処理において、クラス名および属性名の一方のみでなく、両方が重複していないかを検証することも可能である。
次に、図26のフローチャートを参照して、第3の命名規則検証処理の処理手順について説明する。第3の命名規則検証処理は、命名規則ユーザ定義が循環していないかを検証するための処理である。命名規則ユーザ定義が循環している場合とは、当該命名規則ユーザ定義が自身の定義を利用している場合および例えば2つの命名規則ユーザ定義が互いに参照している場合等をいう。
なお、このように命名規則ユーザ定義が循環している場合、適切に変数リストを生成することができない。このため、第3の命名規則検証処理によって命名規則ユーザ定義の循環が検証される。
第3の命名規則検証処理においては、命名規則格納部25に格納されている命名規則ユーザ定義の各々について以下のステップS81〜S86の処理が実行される。
命名規則検証部52は、命名規則格納部25に格納されている命名規則ユーザ定義を1つ取得する(ステップS81)。以下、ステップS81において取得された命名規則ユーザ定義を、便宜的に第1の命名規則ユーザ定義と称する。
次に、命名規則検証部52は、第1の命名規則ユーザ定義の右辺の大括弧に囲まれた文字列がthisであるか否かを判定する(ステップS82)。
第1の命名規則ユーザ定義の右辺の大括弧に囲まれた文字列がthisでないと判定された場合(ステップS82のNO)、命名規則検証部52は、対象の命名規則ユーザ定義が命名規則格納部25内にあるか否かを判定する(ステップS83)。なお、このステップS83における対象の命名規則ユーザ定義は、ここでは、第1の命名規則ユーザ定義の右辺の大括弧に囲まれた文字列を左辺とする命名規則ユーザ定義(つまり、第1の命名規則ユーザ定義の右辺の大括弧に囲まれた文字列と左辺が一致する命名規則ユーザ定義)である。
対象の命名規則ユーザ定義が命名規則格納部25内にあると判定された場合(ステップS83のYES)、命名規則検証部52は、命名規則格納部25から当該対象の命名規則ユーザ定義(つまり、第1の命名規則ユーザ定義の右辺の大括弧に囲まれた文字列を左辺とする命名規則ユーザ定義)を取得する(ステップS84)。以下、ステップS84において取得された命名規則ユーザ定義を、便宜的に第2の命名規則ユーザ定義と称する。
次に、命名規則検証部52は、第2の命名規則ユーザ定義が第1の命名規則ユーザ定義(つまり、既に取得されていた命名規則ユーザ定義)と一致するか否かを判定する(ステップS85)。
第2の命名規則ユーザ定義が第1の命名規則ユーザ定義と一致すると判定された場合(ステップS85のYES)、命名規則検証部52は、検証結果としてエラーメッセージを検証結果格納部27に出力する(ステップS86)。このステップS86において出力されるエラーメッセージは、命名規則ユーザ定義が循環していることを警告するメッセージである。このエラーメッセージは、例えばユーザに対して提示されることができる。ステップS86の処理が実行されると、第3の命名規則検証処理は終了される。
一方、第2の命名規則ユーザ定義が第1の命名規則ユーザ定義と一致しないと判定された場合(ステップS85のNO)、ステップS83に戻って処理が繰り返される。
ここで、第2の命名規則ユーザ定義が第1の命名規則ユーザ定義と一致しないと判定され、ステップS83に戻って処理が繰り返される場合における当該ステップS83以降の処理について説明する。
この場合、命名規則検証部52は、上述した第1の命名規則ユーザ定義を第2の命名規則ユーザ定義としてステップS83の処理を実行する。つまり、この場合のステップS83における対象の命名規則ユーザ定義は、第2の命名規則ユーザ定義の右辺の大括弧に囲まれた文字列を左辺とする命名規則ユーザ定義となる。
ここで、対象の命名規則ユーザ定義が命名規則格納部25内にあると判定された場合(ステップS83のYES)、命名規則検証部52は、命名規則格納部25から当該対象の命名規則ユーザ定義(つまり、第2の命名規則ユーザ定義の右辺の大括弧に囲まれた文字列を左辺とする命名規則ユーザ定義)を取得する(ステップS84)。
このステップS84において取得された命名規則ユーザ定義を便宜的に第3の命名規則ユーザ定義とすると、命名規則検証部52は、当該第3の命名規則ユーザ定義が第1または第2の命名規則ユーザ定義と一致するか否かを判定する(ステップS85)。
このステップS85において第3の命名規則ユーザ定義が第1または第2の命名規則ユーザ定義と一致すると判定された場合には、上述したステップS86の処理が実行される。一方、第3の命名規則ユーザ定義が第1または第2の命名規則と一致しないと判定された場合には、再びステップS83に戻って処理が繰り返される。この場合、命名規則検証部52は、上述した第2の命名規則ユーザ定義を第3の命名規則ユーザ定義としてステップS83の処理を実行する。以下、同様に処理が繰り返される。
なお、ステップS82において第1の命名規則ユーザ定義の右辺の大括弧に囲まれた文字列がthisであると判定された場合およびステップS83において対象の命名規則ユーザ定義が命名規則格納部25内にないと判定された場合、命名規則検証部52は、命名規則格納部25に他の命名規則ユーザ定義があるか否かを判定する(ステップS87)。
命名規則格納部25に他の命名規則ユーザ定義があると判定された場合(ステップS87のYES)、上記したステップS81に戻って処理が繰り返される。
一方、命名規則格納部25に他の命名規則ユーザ定義がないと判定された場合(ステップS87のNO)、第3の命名規則検証処理は終了される。
以下、上述した第3の命名規則検証処理について具体的に説明する。ここでは、命名規則格納部25には、図27に示す命名規則ユーザ定義が格納されているものとする。
ここで、図27を参照して、命名規則ユーザ定義が循環している場合について具体的に説明する。
まず、図27の1行目の命名規則ユーザ定義(Actionクラス名=Stv[Actionクラス名])について説明すると、1行目の命名規則ユーザ定義の右辺の大括弧に囲まれている「Actionクラス名」は、当該1行目の命名規則ユーザ定義の左辺と一致している。この図27の1行目の命名規則ユーザ定義のように、命名規則ユーザ定義が自身の定義を利用しようとしている場合には循環していると判断される。
次に、図27の2行目の命名規則ユーザ定義(Serviceクラス名=Stv1[Datasetクラス名])および3行目の命名規則ユーザ定義(Datasetクラス名=Stv2[Serviceクラス名])について説明すると、2行目の命名規則ユーザ定義の右辺の大括弧に囲まれている「Datasetクラス名」は3行目の命名規則ユーザ定義の左辺「Datasetクラス名」と一致しており、かつ、3行目の命名規則ユーザ定義の右辺の大括弧に囲まれている「Serviceクラス名」は2行目の命名規則ユーザ定義の左辺「Serviceクラス名」と一致している。このような場合には、図27の2行目の命名規則ユーザ定義および図27の3行目の命名規則ユーザ定義は、参照が循環していると判断される。
第3の命名規則検証処理においては、命名規則格納部25に格納されている命名規則ユーザ定義の各々について処理が実行される。
まず、図27に示す命名規則ユーザ定義のうち、命名規則ユーザ定義「Actionクラス名=Stv[Actionクラス名]」について説明する。
この場合、命名規則検証部52は、命名規則ユーザ定義「Actionクラス名=Stv[Actionクラス名]」を取得する。なお、ここで取得された命名規則ユーザ定義を第1の命名規則ユーザ定義と称する。
次に、命名規則検証部52は、第1の命名規則ユーザ定義の右辺の大括弧に囲まれた文字列がthisであるか否かを判定する。ここでは、第1の命名規則ユーザ定義「Actionクラス名=Stv[Actionクラス名]」の右辺の大括弧に囲まれた文字列は「Actionクラス名」であるため、当該第1の命名規則ユーザ定義「Actionクラス名=Stv[Actionクラス名]」の右辺の大括弧に囲まれた文字列はthisでないと判定される。
この場合、命名規則検証部52は、第1の命名規則ユーザ定義の右辺の大括弧に囲まれた文字列を左辺とする命名規則ユーザ定義が命名規則格納部25内にあるか否かを判定する。
ここで、図27に示す命名規則ユーザ定義の中には、第1の命名規則ユーザ定義「Actionクラス名=Stv[Actionクラス名]」の右辺の大括弧に囲まれた文字列「Actionクラス名」を左辺とする命名規則ユーザ定義「Actionクラス名=Stv[Actionクラス名]」が存在する。
この場合、命名規則検証部52は、第1の命名規則ユーザ定義の右辺の大括弧に囲まれた文字列を左辺とする命名規則ユーザ定義が命名規則格納部25内にあると判定し、命名規則格納部25から命名規則ユーザ定義「Actionクラス名=Stv[Actionクラス名]」を取得する。なお、ここで取得された命名規則ユーザ定義を第2の命名規則ユーザ定義と称する。
次に、命名規則検証部52は、第2の命名規則ユーザ定義が第1の命名規則ユーザ定義と一致するか否かを判定する。
ここでは、第2の命名規則ユーザ定義が「Actionクラス名=Stv[Actionクラス名]」であり、第1の命名規則ユーザ定義が「Actionクラス名=Stv[Actionクラス名]」であるため、第2の命名規則ユーザ定義が第1の命名規則ユーザ定義と一致すると判定される。
この場合、命名規則検証部52は、命名規則ユーザ定義が循環していることを警告するエラーメッセージを出力する。
このように第3の命名規則検証処理によれば、図27の1行目の命名規則ユーザ定義が循環していることを検出し、エラーメッセージを出力することができる。
次に、図27に示す命名規則ユーザ定義のうち、命名規則ユーザ定義「Serviceクラス名=Stv1[Datasetクラス名]」について説明する。
この場合、命名規則検証部52は、命名規則ユーザ定義「Serviceクラス名=Stv1[Datasetクラス名]」を取得する。なお、ここで取得された命名規則ユーザ定義を第1の命名規則ユーザ定義と称する。
次に、命名規則検証部52は、第1の命名規則ユーザ定義の右辺の大括弧に囲まれた文字列がthisであるか否かを判定する。ここでは、第1の命名規則ユーザ定義「Serviceクラス名=Stv1[Datasetクラス名]」の右辺の大括弧に囲まれた文字列は「Datasetクラス名」であるため、当該第1の命名規則ユーザ定義「Serviceクラス名=Stv1[Datasetクラス名]」の右辺の大括弧に囲まれた文字列はthisでないと判定される。
この場合、命名規則検証部52は、第1の命名規則ユーザ定義の右辺の大括弧に囲まれた文字列を左辺とする命名規則ユーザ定義が命名規則格納部25内にあるか否かを判定する。
ここで、図27に示す命名規則ユーザ定義の中には、第1の命名規則ユーザ定義「Serviceクラス名=Stv1[Datasetクラス名]」の右辺の大括弧に囲まれた文字列「Datasetクラス名」を左辺とする命名規則ユーザ定義「Datasetクラス名=Stv2[Serviceクラス名]」が存在する。
この場合、命名規則検証部52は、第1の命名規則ユーザ定義の右辺の大括弧に囲まれた文字列を左辺とする命名規則ユーザ定義が命名規則格納部25内にあると判定し、命名規則格納部25から命名規則ユーザ定義「Datasetクラス名=Stv2[Serviceクラス名]」を取得する。なお、ここで取得された命名規則ユーザ定義を第2の命名規則ユーザ定義と称する。
次に、命名規則検証部52は、第2の命名規則ユーザ定義が第1の命名規則ユーザ定義と一致するか否かを判定する。
ここでは、第2の命名規則ユーザ定義が「Datasetクラス名=Stv2[Serviceクラス名]」であり、第1の命名規則ユーザ定義が「Serviceクラス名=Stv1[Datasetクラス名]」であるため、第2の命名規則ユーザ定義が第1の命名規則ユーザ定義と一致しないと判定される。
この場合、命令規則検証部52は、第2の命名規則ユーザ定義の右辺の大括弧に囲まれた文字列を左辺とする命名規則ユーザ定義が命名規則格納部25内にあるか否かを判定する。
ここで、図27に示す命名規則ユーザ定義の中には、第2の命名規則ユーザ定義「Datasetクラス名=Stv2[Serviceクラス名]」の右辺の大括弧に囲まれた文字列「Serviceクラス名」を左辺とする命名規則ユーザ定義「Serviceクラス名=Stv1[Datasetクラス名]」が存在する。
この場合、命名規則検証部52は、第2の命名規則ユーザ定義の右辺の大括弧に囲まれた文字列を左辺とする命名規則ユーザ定義が命名規則格納部25内にあると判定し、命名規則格納部25から命名規則ユーザ定義「Serviceクラス名=Stv1[Datasetクラス名]」を取得する。なお、ここで取得された命名規則ユーザ定義を第3の命名規則ユーザ定義と称する。
次に、命名規則検証部52は、第3の命名規則ユーザ定義が第1の命名規則ユーザ定義または第2の命名規則ユーザ定義と一致するか否かを判定する。
ここでは、第3の命名規則ユーザ定義が「Serviceクラス名=Stv1[Datasetクラス名]」であり、第1の命名規則ユーザ定義が「Serviceクラス名=Stv1[Datasetクラス名]」であり、第2の命名規則ユーザ定義が「Datasetクラス名=Stv2[Serviceクラス名]」であるため、当該第3の命名規則ユーザ定義が当該第1の命名規則ユーザ定義と一致する。したがって、第3の命名規則ユーザ定義が第1の命名規則ユーザ定義または第2の命名規則ユーザ定義と一致すると判定される。
この場合、命名規則検証部52は、命名規則ユーザ定義が循環していることを警告するエラーメッセージを出力する。
このように第3の命名規則検証処理によれば、図27の2行目および3行目の命名規則ユーザ定義が循環していることを検出し、エラーメッセージを出力することができる。
ここでは、図27の1行目の命名規則ユーザ定義(Actionクラス名=Stv[Actionクラス名])および2行目の命名規則ユーザ定義(Serviceクラス名=Stv1[Datasetクラス名])について主に述べたが、図27の3行目の命名規則ユーザ定義(Datasetクラス名=Stv2[Serviceクラス名])について処理が実行された場合にも同様にエラーメッセージが出力される。
上記したように第3の命名規則検証処理が実行されることによって、命名規則ユーザ定義が循環している場合に、エラーメッセージを出力することができる。
なお、本実施形態においては、第1〜第3の命名規則検証処理においてエラーメッセージが出力されるものとして説明したが、命名規則ユーザ定義が予め定められている形式(つまり、問題のない形式)で定義されている場合には、その旨のメッセージが出力される構成であってもよい。
上記したように本実施形態においては、命名規則格納部25に格納されている命名規則を変数生成ルール格納部26に格納されている変数生成ルールに含まれる値に適用することによって変数に対応づけて置換情報を保持する変数リストを生成し、当該生成された変数リストを変数リスト格納部24に格納する構成により、変数リストをユーザが設定する手間を省くことができ、かつ、例えばプロジェクト等で決まっている命名規則の反映を容易に行うことが可能となる。
また、本実施形態においては、命名規則格納部25に格納されている命名規則ユーザ定義が予め定められている形式で定義されているかを検証し、当該検証結果(例えば、エラーメッセージ)を出力する構成により、問題のある形式で定義された命名規則ユーザ定義を用いて変数リストが生成されることを防止することができる。
なお、本願発明は、上記各実施形態そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化できる。また、上記各実施形態に開示されている複数の構成要素の適宜な組合せにより種々の発明を形成できる。例えば、各実施形態に示される全構成要素から幾つかの構成要素を削除してもよい。更に、異なる実施形態に亘る構成要素を適宜組合せてもよい。
10…コンピュータ、20…外部記憶装置、22…テンプレート格納部、23…テーブル定義格納部、24…変数リスト格納部、25…命名規則格納部、26…変数生成ルール格納部、27…検証結果格納部、30,50…プログラムテンプレート自動生成装置、31…プログラム自動生成部、51…変数リスト生成部、52…命名規則検証部。

Claims (5)

  1. プログラムの自動生成に用いられる変数を含む第1のプログラムテンプレートを格納するテンプレート格納手段と、前記変数に対応づけて当該変数に対して置換される前記データ要素を含む置換情報であって前記自動生成されるプログラムに対して予め定められた命名規則を反映するための置換情報を保持する変数リストを格納する変数リスト格納手段とを有する外部記憶装置と、当該外部記憶装置を利用するコンピュータとから構成されるプログラムテンプレート自動生成装置において、前記コンピュータによって実行されるプログラムテンプレート自動生成プログラムであって、
    前記コンピュータに、
    前記テンプレート格納手段に格納されている第1のプログラムテンプレートを取得するステップと、
    前記変数リスト格納手段に格納されている変数リストを取得するステップと、
    前記取得された第1のプログラムテンプレートに含まれる変数を、当該変数に対応づけて前記取得された変数リストに保持されている置換情報で置換することによって、当該置換情報を含む第2のプログラムテンプレートを生成するステップと
    を実行させるためのプログラムテンプレート自動生成プログラム。
  2. 前記外部記憶装置は、前記自動生成されるプログラムにおいて用いられるテーブルのデータ要素および当該データ要素の値を含むテーブル情報を格納するテーブル定義格納手段を更に有し、
    前記コンピュータに、
    前記テーブル定義格納手段に格納されているテーブル情報を取得するステップと、
    前記生成された第2のプログラムテンプレートに含まれる置換情報に含まれるデータ要素を、前記取得されたテーブル情報に含まれる当該データ要素の値で置換することによって、前記プログラムを生成するステップと
    を更に実行させる
    ことを特徴とする請求項1記載のプログラムテンプレート自動生成プログラム。
  3. 前記外部記憶装置は、ユーザによって定義された前記命名規則を予め格納する命名規則格納手段と、前記変数に対応づけて当該変数が変換される値を含む変数生成ルールを予め格納する変数生成ルール格納手段とを更に有し、
    前記コンピュータに、
    前記命名規則格納手段に格納されている命名規則を前記変数生成ルール格納手段に格納されている変数生成ルールに含まれる値に適用することによって、前記変数に対応づけて前記置換情報を保持する変数リストを生成するステップと、
    前記生成された変数リストを前記変数リスト格納手段に格納するステップと
    を更に実行させる
    ことを特徴とする請求項1記載のプログラムテンプレート自動生成プログラム。
  4. 前記コンピュータに、
    前記命名規則格納手段に格納されている命名規則が予め定められている形式で定義されているかを検証するステップと、
    前記検証結果を出力するステップと
    を更に実行させる
    ことを特徴とする請求項3記載のプログラムテンプレート自動生成プログラム。
  5. プログラムの自動生成に用いられる変数を含む第1のプログラムテンプレートを格納するテンプレート格納手段と、
    前記変数に対応づけて当該変数に対して置換される前記データ要素を含む置換情報であって前記自動生成されるプログラムに対して予め定められた命名規則を反映するための置換情報を保持する変数リストを格納する変数リスト格納手段と、
    前記テンプレート格納手段に格納されている第1のプログラムテンプレートを取得する第1の取得手段と、
    前記変数リスト格納手段に格納されている変数リストを取得する第2の取得手段と、
    前記第1の取得手段によって取得された第1のプログラムテンプレートに含まれる変数を、当該変数に対応づけて前記第2の取得手段によって取得された変数リストに保持されている置換情報で置換することによって、当該置換情報を含む第2のプログラムテンプレートを生成する生成手段と
    を具備することを特徴とするプログラムテンプレート自動生成装置。
JP2012006949A 2012-01-17 2012-01-17 プログラムテンプレート自動生成プログラムおよびプログラムテンプレート自動生成装置 Pending JP2013148953A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2012006949A JP2013148953A (ja) 2012-01-17 2012-01-17 プログラムテンプレート自動生成プログラムおよびプログラムテンプレート自動生成装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2012006949A JP2013148953A (ja) 2012-01-17 2012-01-17 プログラムテンプレート自動生成プログラムおよびプログラムテンプレート自動生成装置

Publications (1)

Publication Number Publication Date
JP2013148953A true JP2013148953A (ja) 2013-08-01

Family

ID=49046421

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2012006949A Pending JP2013148953A (ja) 2012-01-17 2012-01-17 プログラムテンプレート自動生成プログラムおよびプログラムテンプレート自動生成装置

Country Status (1)

Country Link
JP (1) JP2013148953A (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2018110020A (ja) * 2018-02-28 2018-07-12 キヤノン株式会社 情報処理装置とその制御方法、及びプログラム
CN108763341A (zh) * 2018-05-14 2018-11-06 中国平安人寿保险股份有限公司 电子装置、自动化建表方法及存储介质

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2018110020A (ja) * 2018-02-28 2018-07-12 キヤノン株式会社 情報処理装置とその制御方法、及びプログラム
CN108763341A (zh) * 2018-05-14 2018-11-06 中国平安人寿保险股份有限公司 电子装置、自动化建表方法及存储介质

Similar Documents

Publication Publication Date Title
JP5159713B2 (ja) システムの構成要素の設計アーキテクチャを自動設計する自動設計装置、自動設計方法及び自動設計プログラム
CN104461484B (zh) 前端模板的实现方法和装置
CN115617327A (zh) 低代码页面搭建系统、方法及计算机可读存储介质
JP2014191672A (ja) プログラムおよびバージョン管理方法
US20120266131A1 (en) Automatic program generation device, method, and computer program
CN111124379B (zh) 页面生成方法、装置、电子设备及存储介质
CN108647025A (zh) 文档对象模型中节点的处理方法及装置、电子和存储设备
US10380011B2 (en) Method, apparatus, and computer-readable medium for performing functional testing of software
US20030097637A1 (en) Schema generation apparatus, data processor, and program for processing in the same data processor
JP2013516701A5 (ja)
JP5634374B2 (ja) 仕様作成支援装置、及び、プログラム
JP2013148953A (ja) プログラムテンプレート自動生成プログラムおよびプログラムテンプレート自動生成装置
JP6044960B2 (ja) シリアライザを特化する方法、装置及びコンピュータプログラム
JP5316485B2 (ja) ソフトウェア開発支援装置、ソフトウェア開発支援方法およびソフトウェア開発支援プログラム
CN115904480B (zh) 代码重构方法、装置、电子设备及存储介质
US20120117117A1 (en) Aiding report construction based on inference of implicit application level relationships
JP5275087B2 (ja) プログラム生成装置およびブロック線図生成装置
CN105094845A (zh) 流程建模装置和方法
JPWO2012049816A1 (ja) モデル検査装置、方法及びプログラム
US9052906B2 (en) Modularized customization of a model in a model driven development environment
JP2015022356A (ja) テストシナリオバリエーション生成装置及び方法及びプログラム
JP2016042317A (ja) ソフトウェア設計支援装置、および方法
JP6109766B2 (ja) ルールテーブル生成装置、生成方法および生成プログラム
JP5600826B1 (ja) 非構造化データ処理システム、非構造化データ処理方法およびプログラム
JP2011003033A (ja) 情報処理装置及びプログラム

Legal Events

Date Code Title Description
RD04 Notification of resignation of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7424

Effective date: 20131205

RD04 Notification of resignation of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7424

Effective date: 20131212

RD04 Notification of resignation of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7424

Effective date: 20131219

RD04 Notification of resignation of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7424

Effective date: 20131226

RD04 Notification of resignation of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7424

Effective date: 20140109