以下、本発明の一実施形態に係るモックアップ開発支援システムについて、図面を参照して説明する。本実施形態に係るモックアップ開発支援システムは、プロトタイピング時に開発した画面モックアッププログラムから本番システム用のプログラムコードを自動生成するプログラム自動生成装置であり、画面モックアップから本番システムへ完全移行することを可能とする。それにより、モックアップを用いて顧客と合意した仕様と実際に開発した画面プログラムと食い違いが発生することを防止し、また画面プログラムの再開発の工数を削減するという目的を、例えば以下に説明するような構成ないし機能を有することにより実現した。
(1)異なる実行アーキテクチャにおける機能等価なコンポーネントを予め用意する。
(2)開発者の入力した画面モックアップ情報に対応するコンポーネントを実行アーキテクチャにより自動選択および設定を自動補完する。
(3)予め用意されたコンポーネント外の機能について追記された情報を記録する。
(4)実行アーキテクチャに応じたプログラムコードを自動生成する。
図1は、本実施形態に係るモックアップ開発支援システム100の全体構成図である。本システム100は、同図に示すように、ネットワーク190を介してモックアップ開発環境191及びモックアップレビュー環境192と接続されている。モックアップ開発環境191は、開発者が画面モックアップの作成もしくは修正を行う開発環境である。モックアップレビュー環境192は、モックアップを動作させるための環境であり、顧客レビューなどに用いられる動作環境である。モックアップ開発環境191及びモックアップレビュー環境192は、モックアップ開発支援システム100に包含されていても良い。
モックアップ開発支援システム100は、同図に示すように、CPU(Central Processing Unit)101、メモリ102、外部インターフェース105を有し、これらがバス104を介して相互に接続されている。
外部インターフェース105には、外部記憶装置103、入力装置106、出力装置107、及び通信装置108が接続されている。
外部記憶装置103は、CPU101において実行される処理プログラムとして、モックアップ設計情報解析プログラム110P、コンポーネント設定生成プログラム120P、コンポーネント実行アーキテクチャ決定プログラム130P、プログラムコード生成プログラム140Pを保持している。また、外部記憶装置103は、入力モックアップ設計情報記憶部150と、アーキテクチャ毎コンポーネント一覧記憶部160と、入力画面モックアップ記憶部170とを有する。
図2は、モックアップ開発支援システム100の機能構成図を示す。モックアップ開発支援システム100は、モックアップ設計情報解析プログラム110P、コンポーネント設定生成プログラム120P、コンポーネント実行アーキテクチャ決定プログラム130P、プログラムコード生成プログラム140Pが、それぞれCPU101で実行されて生成された、モックアップ設計情報解析部110、コンポーネント設定生成部120、コンポーネント実行アーキテクチャ決定部130、及びプログラムコード生成部140を有する。
入力画面モックアップ記憶部170には、入力画面モックアップデータが記憶される。本実施形態では、入力画面モックアップデータには、画面モックアッププログラム1720(図3参照)と、コンポーネント設定ファイル1730(図4参照)と、実行アーキテクチャ定義情報1760(図5参照)が含まれる。これらの入力画面モックアップデータは、入力装置106乃至通信装置108を介して入力され、モックアップ設計情報解析部110によって入力画面モックアップ記憶部170へ書き込まれる。
図3は、画面モックアッププログラム1720の説明図である。画面モックアッププログラム1720は、ソフトウェアのGUI(Graphical User Interface)を中心に記述したソースプログラムであり、本発明のモックアップ設計情報解析部110により解析が可能なように命名規則や特定の属性を定義する等、一定のルールに従って記述されている。図3の例は、Flex(R)による画面モックアッププログラムである。同図Aは、画面モックアッププログラム1720のスクリプトである。同図Bは、画面モックアッププログラム1720を実行した結果表示されるモックアップ画面1710の一例を示す。文字列入力欄1711、1712及び1713は、それぞれエレメント1721、1722及び1723により定義され、動的データを扱う事を示すためにid属性にそれぞれデータ名(Shimei、Bukamei、ShainBangou)が入力されている。ボタン1714は、エレメント1724により定義され、クリック時に何らかの動作を発生させる事を示すため、クリック属性にトリガー名(SearchEvent)が入力されている。
図4は、コンポーネント設定ファイル1730の説明図である。コンポーネント設定ファイル1730は、画面モックアッププログラム1720に示すモックアップ画面から呼び出されるコンポーネントに関する設定を記述するファイルである。例えば、コンポーネント設定ファイル1730は、コンポーネントの種別1731と、コンポーネントに設定するための属性データとして、コンポーネント名1732、検索キー入力画面1733、検索条件1734、トリガーイベント1735、及び検索結果出力画面1736と、このコンポーネントでは実現できない、顧客から要望された事柄に関する顧客要求1737とを有する。同図の例は、図3に示す画面モックアッププログラム1720のトリガーイベントであるSearchEventによって動作するコンポーネントの設定が記述されている。
図5は、実行アーキテクチャ定義情報1760の説明図である。実行アーキテクチャ定義情報1760は、本番システムでの実行アーキテクチャを指定する情報である。ここで、アーキテクチャには物理的及び論理的なアーキテクチャを含み、例えば、物理的なコンピュータマシンの構成をどのようにするか(例えば、スタンドアロン、またはクライアント−サーバ構成など)、各マシンでの実行基盤及びその実行基盤上で動作するコンポーネントの構成などを含む。
実行アーキテクチャ定義情報1760は、同図に示すように、アーキテクチャ実行基盤設定1761、コンポーネント配置概要設定1763、及びコンポーネント配置詳細設定1764を含む。
アーキテクチャ実行基盤設定1761は、ソフトウェアアーキテクチャにおけるプログラムの実行基盤について定義する。同図の例では、クライアント開発言語1762としてFlex(R)、サーバ開発言語としてJava(登録商標)(R)、データベースとしてRDB(Relational DataBase)製品であるHiRDB(R)が設定されている。なお、クライアント開発言語1762はモックアップをそのまま本番開発へ移行するという本発明の目的から、画面モックアップの開発言語と同じ言語となるため、開発者による定義は不要としても良い。
コンポーネント配置概要設定1763は、コンポーネントのグループ単位で、アーキテクチャ上のどこにプログラムを配置するか定義する。同図の例では、画面グループはクライアント上に、ロジックグループ及びデータグループについてはサーバ上に配置するよう設定している。
コンポーネント配置詳細設定1764は、アーキテクチャ実行基盤設定1761及びコンポーネント配置概要設定1763の定義についての例外を詳細に記述するものである。コンポーネント配置詳細設定1764では、コンポーネント種別1765、コンポーネントの配置1766及びコンポーネントの実行基盤1767が設定される。同図の例では、データグループの一時データ保管コンポーネントについては、クライアント上配置し、実行基盤はFlex(R)となるように設定している。
ここで、図6には、モックアップを実行するためのアーキテクチャであるモックアップ実行アーキテクチャA1を示し、図7には、本番システムを実行するためのアーキテクチャである本番実行アーキテクチャA2を示す。図6のモックアップ実行アーキテクチャA1は、スタンドアロン構成であり、基本OS、Webブラウザ及びAdobe Flash Player(R)からなる実行基盤A10において、画面グループ、ロジックグループ及びデータグループのコンポーネントプログラムA12が動作するアーキテクチャである。図7の本番実行アーキテクチャA2は、図5の実行アーキテクチャ定義情報1760に対応する。すなわち、同図の本番実行アーキテクチャA2は、クライアント−サーバ構成であって、クライアントでは、基本OS、Webブラウザ及びAdobe Flash Player(R)からなる実行基盤A20において、画面グループ、及びデータ一時保管のコンポーネントプログラムA21が動作し、サーバでは、Java(R)仮想マシン及びHiRDB(R)からなる実行基盤A22において、ロジックグループ、及びデータグループのコンポーネントプログラムA23が動作する。
図2に戻ると、入力モックアップ設計情報記憶部150には、モックアップ設計情報解析部110が入力画面モックアップ記憶部170に記憶されている入力画面モックアップデータを解析した結果が格納される。入力モックアップ設計情報記憶部150は、画面モックアップ抽出情報記憶部151と、モックアップ構成コンポーネント情報記憶部152と、ユーザ追記情報記憶部153と、アーキテクチャ情報記憶部154とを有する。入力モックアップ設計情報記憶部150に格納されるデータの詳細は、モックアップ設計情報解析部110の処理とともに後述する。
アーキテクチャ毎コンポーネント一覧記憶部160には、アーキテクチャ別に予め定義されている、複数のコンポーネント種別のコンポーネントの仕様を含むコンポーネントデータが記憶される。例えば、アーキテクチャ毎コンポーネント一覧記憶部160には、コンポーネント一覧1610と、コンポーネント設定属性定義1620と、アーキテクチャ毎コンポーネントコード片群1630と、インターフェース生成用コード片1640とが記憶される。
図8は、本システムにおいて使用可能なコンポーネントの一覧を示すコンポーネント一覧1610の一例を示す。コンポーネント一覧1610は、例えば、同図に示すように、アーキテクチャグループ1611と、項番1612と、コンポーネント種別1613とをデータ項目として含む。
アーキテクチャグループ1611は、各コンポーネントが属するアーキテクチャのグループであり、本実施形態では「画面」、「ロジック」及び「データ」がある。これが、上述のコンポーネントプログラムのグループと対応する。
項番1612は、コンポーネント種別1613に係るコンポーネントの識別情報である。
図9は、各コンポーネントの定義情報を含むコンポーネント設定属性定義1620の一例を示す。コンポーネント設定属性定義1620は、コンポーネントの仕様を示す。例えば、コンポーネント設定属性定義1620は、コンポーネント項番1621と、設定属性名1622と、繰り返し数1623と、データ型1624と、デフォルト値1625と、必須か否かを示す必須フラグ1626とをデータ項目として有する。
設定属性名1622は、各コンポーネントが有する属性項目を示す。同図中の「遷移元画面」のように、他の項目と階層的な関係を有するものもある。
繰り返し数1623は、設定属性名1622に示す属性項目のうち、上位の階層の項目に対する繰り返しの個数を示す。例えば、同図中の「トリガーイベント名」は「遷移元画面名」に対しn個定義することができる。
デフォルト値1625は、ユーザによって値が設定されていないときに設定されるデフォルト値である。デフォルト値1625が「ユニークID」と設定されていれば、その項目は本システムが任意の一意IDを割り当てることを意味する。また、デフォルト値1625が、等号に設定属性名が連結されている場合(例えば「=遷移元画面名」)は、その設定属性名(遷移元画面名)と同値を代入するということを意味する。さらには、デフォルト値1625がダブルクォーテーションによりクォートされている文字列(例えば“AND”)であれば、クォートされた値そのものを代入することを意味する。
必須フラグ1626は、設定属性名1622が必須項目であるか否かを示す。
図10は、アーキテクチャ毎コンポーネントコード片群1630の一例を示す。アーキテクチャ毎コンポーネントコード片群1630は、モックアップ実行アーキテクチャ用コンポーネント及び本番実行アーキテクチャ用コンポーネントの双方を含む。アーキテクチャ毎コンポーネントコード片群1630は、プログラム実行基盤別のプログラムコード片を含む。アーキテクチャ毎コンポーネントコード片群1630は、各コンポーネントの実行時の環境を示す情報を記憶する。例えば、アーキテクチャ毎コンポーネントコード片群1630は、コンポーネント項番1631と、実行時配置場所1632と、実行基盤1633と、プログラムコード片格納場所1634とをデータ項目として有する。すなわち、アーキテクチャ毎コンポーネントコード片群1630により、コンポーネント項番1631のコンポーネントが、実行時配置場所1632で示すサーバまたはクライアントの実行基盤1633に示す実行基盤上で動作するコンポーネントコード片が、プログラムコード片格納場所1634に格納されていることを示す。
図11は、インターフェース生成用コード片1640の一例を示す。インターフェース生成用コード片1640には、コンポーネント間のインターフェースに必要なコード片について定義する。例えば、図11の例では、クライアントとサーバの実行基盤が、それぞれクライアント側インターフェース基盤1641とサーバ側インターフェース基盤1642であるときに、インターフェースコード片保存場所1643と設定ファイルテンプレート保存場所1644に示す場所にそれぞれインターフェースコード片と設定ファイルのテンプレートが保存されていることを示している。
次に、図12は、モックアップ設計情報解析部110の詳細な機能構成図である。すなわち、モックアップ設計情報解析部110は、同図に示すように、画面モックアップ解析部111、データ構造体抽出部112、トリガーイベント抽出部113、コンポーネント設定情報抽出部114、ユーザ追記情報抽出部116、及び実行対象アーキテクチャ設定解析部117を有する。
画面モックアップ解析部111は、入力画面モックアップ記憶部170から画面モックアッププログラム1720を読み出し、プログラムファイルの拡張子やファイルのヘッダなどの特徴情報から画面モックアップの開発言語を特定する。
画面モックアップ解析部111は、アーキテクチャ毎コンポーネントコード片群1630(図10参照)を参照しながら、入力された画面モックアップの開発言語が本システムで対応可能か否かを判定する。例えば、画面モックアップ解析部111は、ここで特定された画面モックアッププログラム1720のプログラミング言語が画面用のコンポーネント(コンポーネント項番1631が「V」から始まり、実行時配置場所1632が「クライアント」)の実行基盤1633に存在するか否かにより、本システムで対応可能な開発言語であるか否かを判定する。 例えば、図3の画面モックアッププログラム1720の開発言語は「Flex(R)」である。従って、アーキテクチャ毎コンポーネントコード片群1630に、コンポーネント項番1631が「V」から始まり、実行時配置場所1632が「クライアント」で、実行基盤1633が「Flex(R)」のコンポーネントが存在するので、画面モックアップ解析部111は、画面モックアッププログラム1720が実行可能であると判定する。
なお、本実施形態では、アーキテクチャ毎コンポーネントコード片群1630を用いて実行可能性の判定を行ったが、実行基盤に関する別の情報を予め用意しておいて、それと対比してもよい。
画面モックアップ解析部111は、プログラムを解析する際に、次に説明するデータ構造体抽出部112及びトリガーイベント抽出部113を利用する。画面モックアップ解析部111の解析結果を示す情報は、画面モックアップ抽出情報記憶部151に保存される。
データ構造体抽出部112は、画面モックアッププログラム1720からデータ構造体に関する記述を抽出する。ここで、データ構造体には、例えば、モックアップ画面内に設けられたデータの入力項目及び出力項目を含む。データ構造体抽出部112は、例えば、構造体を示す、プログラミング言語の特定の属性を検出し、構造体を定義するエレメントを抽出する。例えば、図3の画面モックアッププログラム1720では、まず、プログラムファイル名である”ShainSearch”を最上位のデータ構造体として抽出する。さらに、ファイル中に定義されているエレメントのうち、”id”属性に名称が記述されているエレメント1721、1722、1723をShainSearch構造体の中に含まれている動的データとして抽出する。データ構造体抽出部112は、画面モックアッププログラム1720に、特定のルールに従って定義されたデータ名称が与えられた動的データを抽出する。
図13は、データ構造体抽出部112によって抽出されたデータ構造体1510の一例を示す。データ構造体1510は、画面モックアッププログラム名1511と、データ構造体構成1512と、階層の深さを示すレベル1513と、データ型1514と、繰り返し数1515とをデータ項目として有する。
図12に戻ると、トリガーイベント抽出部113は、画面モックアッププログラム1720からトリガーイベントに関する記述を抽出する。トリガーイベントとは、例えば、モックアップ画面内でユーザからのイベント入力を受け付けるボタンなどである。トリガーイベント抽出部113は、例えば、画面モックアッププログラム1720のフレームワークが提供するイベント発生定義を検索する。例えば、Flex(R)であれば、”click”や”keyDown”等のイベントである。図3の画面モックアッププログラム1720であれば、トリガーイベント抽出部113は、エレメント1724をトリガーイベントとして抽出する。
図14は、トリガーイベント抽出部113によって抽出されたトリガーイベント1517の一例を示す。トリガーイベント1517は、画面モックアッププログラム名1518と、トリガーイベント名1519とをデータ項目として有する。
図12に戻ると、コンポーネント設定情報抽出部114は、アーキテクチャ毎コンポーネント一覧記憶部160及び入力画面モックアップ記憶部170を参照して、画面モックアッププログラム1720から呼び出されるコンポーネントの設計情報(構成コンポーネント設定情報)を生成する。
図15は、コンポーネント設定情報抽出部114が生成したコンポーネントの設計情報である構成コンポーネント設定情報1520の一例を示す。構成コンポーネント設定情報1520は、コンポーネント名1521と、コンポーネント種別1522と、設定属性名1523と、属性値1524とをデータ項目として有する。
例えば、コンポーネント設定情報抽出部114は、コンポーネント一覧1610(図8参照)を参照して、コンポーネント設定ファイル1730のコンポーネント種別1731に割り当てられている項番1612を特定する。次に、コンポーネント設定情報抽出部114は、コンポーネント設定属性定義1620(図9参照)から、ここで特定された項番1612(1621)のコンポーネントが有する設定属性名1622を取得する。ここで取得した情報を、構成コンポーネント設定情報1520のそれぞれ対応する項目に格納する。さらに、コンポーネント設定情報抽出部114は、コンポーネント設定ファイル1730で定義されているコンポーネントの属性データ1732〜1736を取得して、構成コンポーネント設定情報1520のそれぞれ対応する設定属性名1523の属性値1524に保存する。ここで、コンポーネント設定ファイル1730に対応する属性データが設定されていないときは、属性値1524はブランクにしておく。コンポーネント設定情報抽出部114は、顧客要求1737に記述されている情報を抽出して、ユーザ追記情報記憶部153に保存する。
また、コンポーネント設定情報抽出部114及びユーザ追記情報抽出部116は、アーキテクチャ毎コンポーネント一覧記憶部160に記憶されている複数のコンポーネント種別のいずれでも実現できない機能に関する記述を、入力画面モックアップデータから抽出する。
例えば、コンポーネント設定情報抽出部114は、コンポーネント設定ファイル1730のコンポーネント種別1731がコンポーネント一覧1610(図8参照)に登録されていない場合、及び「画面その他」などの「その他」に対応する場合は、コンポーネント種別1522をそれぞれの対応するアーキテクチャグループ1611の「その他」に対応する項番(V−0,L−0,D−0)に設定する。コンポーネント種別1522が「その他」に分類されたコンポーネントは、設定属性名1523及び属性値1524はブランクである。従って、このコンポーネントは、本システムが自動でプログラムコードを生成する対象外である。コンポーネント種別1522が「その他」に分類されたコンポーネントの属性1732〜1736及び顧客要求1737に設定されているすべての情報がユーザ追記情報記憶部153に保存される。
ユーザ追記情報抽出部116は、入力画面モックアップ記憶部170の画面モックアッププログラム1720及び実行アーキテクチャ定義情報1760から、ユーザがコンポーネントで予め用意されている範囲を超えて独自に定義したプログラムコード及びコメントを抽出し、ユーザ追記情報記憶部153へ書き込む。ここで言う、独自に定義したプログラムコードとは、本システムが生成する部品では対応しきれなかった細かな表現などを実現するために、コンポーネントに対して追記したプログラムコードである。ユーザ追記情報抽出部116は、コンポーネントが定める拡張個所や、生成コードとの差分検出によって抽出するようにしてもよい。ユーザ追記情報は、例えば、コンポーネントの振る舞いを直接定義するものではなく、本番開発へ向けてユーザ要望などをテキストで記述したものなどでもよい。
ユーザ追記情報記憶部153に保存された情報は、様々な方法で出力可能としてもよい。例えば、後述するプログラムコード生成部140が、実際には何も動作しないスケルトンコードか、もしくはコンポーネント呼び出し時にポップアップ等により、後に何らかの実装が行われることの表示を実行するプログラムコード内にコメントとして含めてもよい。例えば、図27は、コンポーネント呼び出し時に表示されるポップアップに、ユーザ追記情報記憶部153に保存された情報を出力する例を示す。また、ユーザ追記情報記憶部153に保存されている情報が、本番開発に向けて懸案管理表または仕様書として出力されるようにしてもよい。これにより、顧客要求に対する対応の漏れを低減することができる。
図12に戻ると、実行対象アーキテクチャ設定解析部117は、実行アーキテクチャ定義情報1760に基づいて、実行アーキテクチャ定義情報1760で指定された実行アーキテクチャに対応するプログラム実行基盤を示す実行アーキテクチャ設定情報1540を生成する。実行アーキテクチャ設定情報1540は、アーキテクチャ情報記憶部154に保存される。つまり、実行対象アーキテクチャ設定解析部117は、本番実行アーキテクチャについて、実行アーキテクチャ設定情報1540を生成する。
図18は、実行アーキテクチャ設定情報1540の一例を示す。実行アーキテクチャ設定情報1540は、同図に示すように、アーキテクチャ定義項目1541と、属性値1542とを有する。同図Aが実行アーキテクチャ定義情報1760から生成されたものである。
図19は、コンポーネント設定生成プログラム120PがCPU101で実行されたときに実現されるコンポーネント設定生成部120の機能構成図である。すなわち、コンポーネント設定生成部120は、対象アーキテクチャ補完部121、及びコンポーネント設定補完部123を有する。
対象アーキテクチャ補完部121は、実行アーキテクチャ定義情報1760が存在しないときに、画面モックアッププログラム1720を参照して、すべてのコンポーネントをクライアント上で実行するモックアップの実行アーキテクチャを想定した実行アーキテクチャ設定情報1540を生成する。すなわち、開発者が実行アーキテクチャ定義情報1760を指定しない場合、本システムでは、モックアップ用のプロトタイピング向けアーキテクチャでプログラムコードが生成される。実行アーキテクチャ定義情報1760が存在しないときに生成される実行アーキテクチャ設定情報1540の例を図18Bに示す。このときのプログラミング言語は、画面モックアッププログラム1720と同じとしてもよい。
コンポーネント設定補完部123は、入力画面モックアップデータの解析結果に対する補完処理を行う。例えば、コンポーネント設定補完部123は、まず、画面モックアップ解析部111〜コンポーネント設定情報抽出部114の抽出結果を検証する。例えば、コンポーネント設定補完部123は、データ構造体1510、トリガーイベント1517、及び構成コンポーネント設定情報1520と、コンポーネント設定属性定義1620とを参照して、以下の点を検証してもよい。
(1)データ構造体1510のデータ型1514及び繰り返し数1515が適切か
(2)構成コンポーネント設定情報1520において、必須項目であるのに値が定義されていない項目の有無など、定義としての正しさ
(3)コンポーネント設定属性定義1620と、既に抽出されているデータ構造体1510、及びトリガーイベント1517と矛盾が無いか
例えば、コンポーネント設定補完部123は、この検証の結果に基づいて、必要な箇所に対して所定の補完処理を行う。例えば、コンポーネント設定補完部123は、属性値1524が未設定の設定属性名1523が必須項目であるか否かを、コンポーネント設定属性定義1620の必須フラグ1626により判定する。そして、必須フラグ1626で必須項目と設定されているときは、対応するデフォルト値1625を属性値1524に設定する。
コンポーネント設定補完部123は、上記のデフォルト値1625を属性値1524に設定する処理を行った後、改めて、構成コンポーネント設定情報1520の内、コンポーネント設定属性定義1620で必須フラグ1626がセットされている必須項目のすべてに値が設定されているか否かを判定する。いずれかの必須項目に値が設定されていないときは、そのコンポーネントのコンポーネント種別1522を「その他」に変更する。必須項目が未設定の場合、このコンポーネントの実行可能なプログラムコードを生成できないからである。
例えば、図15の構成コンポーネント設定情報1520の「トリガーイベント」の「入力画面名(2)」の属性値1524が未設定である。そこで、コンポーネント設定補完部123が、コンポーネント設定属性定義1620に定義されている「=入力画面名(1)」というルールによりデフォルト値を補完すると、図16に示す通りとなる。
また、コンポーネント設定補完部123は、コンポーネント設定ファイル1730の検索キー入力画面1733や検索条件1734のキー項目名(ShainSearch、Shimei、Bukamei、ShainBangou)が、データ構造体1510のデータ構造体構成1512に存在しているか否かによって整合状態を確認してもよい。あるいは、コンポーネント設定補完部123は、コンポーネント設定ファイル1730のトリガーイベント名1735(SearchEvent)についても、トリガーイベント1517のトリガーイベント名1519と一致するか否かによって整合状態を確認してもよい。
改めて図2を参照すると、コンポーネント実行アーキテクチャ決定部130は、コンポーネントの設計情報に基づいて、設定されたプログラム実行基盤で動作するプログラムコード片を選択する。プログラムコード生成部140は、選択されたプログラムコード片に属性データを設定してプログラムコードを生成する。
コンポーネント実行アーキテクチャ決定部130は、実行アーキテクチャ設定情報1540に定義されているアーキテクチャを実現するために必要なプログラムコード片を、構成コンポーネント設定情報1520及びアーキテクチャ毎コンポーネントコード片群1630を参照して特定する。コンポーネント実行アーキテクチャ決定部130は、ここで特定した情報を構成コンポーネント設定情報1520に追加する。コンポーネント実行アーキテクチャ決定部130が行う処理の具体例を以下に説明する。
まず、コンポーネント実行アーキテクチャ決定部130は、構成コンポーネント設定情報1520(図15,図16参照)から、対象のコンポーネントを特定する。例えば、ここでは「ShainSearchAction」を対象とする。コンポーネント実行アーキテクチャ決定部130は、対象のコンポーネント「ShainSearchAction」のコンポーネント種別1522「L−1」をキーにして、コンポーネント一覧1610(図8参照)から、対応するアーキテクチャグループ1611「ロジックグループ」を特定する。次に、コンポーネント実行アーキテクチャ決定部130は、実行アーキテクチャ設定情報1540(図18A参照)の「コンポーネント配置概要設定」より、「ロジックグループ」が配置されるマシンが「サーバ」であることを特定する。さらに、コンポーネント実行アーキテクチャ決定部130は、サーバ開発言語が「Java(R)」であることを特定する。
次に、コンポーネント実行アーキテクチャ決定部130が、上記の処理で取得したコンポーネント項番「L−1」、アーキテクチャ定義情報「サーバ」、サーバ開発言語「Java(R)」の3つの情報をキーにして、アーキテクチャ毎コンポーネントコード片群1630(図10参照)のコンポーネント項番1631、実行時配置場所1632、及び実行基盤1633を検索し、該当するレコード1635より、対応するプログラムコード片格納場所1634「/logicparts/sv/java/l−1」を取得する。
コンポーネント実行アーキテクチャ決定部130は、以上の処理により特定された、実行時配置場所及び実行基盤からなる実行アーキテクチャ1525及びコード片格納場所1526を、構成コンポーネント設定情報1520に項目として追加する。実行アーキテクチャ1525ならびにコード片格納場所1526を補完したコンポーネント設定情報の例を図17に示す。
図20は、プログラムコード生成プログラム140PがCPU101で実行されたときに実現されるプログラムコード生成部140の機能構成図である。すなわち、プログラムコード生成部140は、コンポーネント実行コード生成部141、及びコンポーネント間インターフェースコード生成・変換部142を有する。
コンポーネント実行コード生成部141は、構成コンポーネント設定情報1520を参照し、コード片格納場所1526からプログラムコード片を取得し、各コンポーネントに対応する実行プログラムコードを生成する。例えば、コンポーネント実行コード生成部141は、構成コンポーネント設定情報1520のコード片格納場所1526に定める場所から各設定属性名1523のプログラムコード片を取得し、属性値1524の値をそのコード片に埋め込み、変換しながら当該コンポーネント用の実行プログラムコードを生成する。属性値1524には、デフォルト値1625も含まれている。つまり、コンポーネント実行コード生成部141は、デフォルト値1625をプログラムコード片に埋め込んで実行プログラムコードを生成する。
コンポーネント間インターフェースコード生成・変換部142は、構成コンポーネント設定情報1520及びインターフェース生成用コード片1640を参照して、コンポーネント間のインターフェースプログラムコード、及びインターフェース用設定ファイルを生成する。例えば、コンポーネント間インターフェースコード生成・変換部142は、実行アーキテクチャ1525を参照し、サーバの実行基盤及びクライアントの実行基盤の組み合わせを特定し、インターフェース生成用コード片1640でこれに対応するインターフェースコード片保存場所1643及び設定ファイルテンプレート保存場所1644を特定し、ここからインターフェースコード片及び設定ファイルテンプレートを取得する。コンポーネント間インターフェースコード生成・変換部142は、さらに、ここで取得したテンプレートファイルに、サーバの実行基盤で動作するコンポーネント及びクライアントの実行基盤で動作するコンポーネントにより定まる呼び出しメソッド名及びデータ型などを設定して、インターフェース用設定ファイルを生成する。また、コンポーネント間インターフェースコード生成・変換部142は、画面モックアッププログラム1720を読み込み、情報抽出のために定めた特別な記法となっている部分について、実行基盤でコンパイル可能とするためにテキスト変換を行う。
以上説明したような構成を有するモックアップ開発支援システム100が処理を行うときの処理手順について説明する。
まず、図21は、本システム100を用いたモックアップ開発全体の手順を示すフローチャートである。また、図22は、モックアップ実行アーキテクチャ用にプログラムコードを生成する場合の入出力ファイルの一例を示す。図23は、本番実行アーキテクチャ用にプログラムコードを生成する場合の出力ファイルの一例を示す。図21、図22及び図23を用いて、主に本システム100に対する入力と出力について説明する。
ステップ10では、プロトタイピングを目的として、開発者がモックアップ開発環境191によって画面モックアップの作成もしくは修正を行う。ここでは、図22に入力情報1701として示す、画面モックアッププログラム1720(「ShainSearch.mxml」及び「ShainList.mxml」)と、コンポーネント設定ファイル1730(「ShainSearchAction」及び「MoveSearchToList」)とを生成する。
なお、「ShainList.mxml」は、社員の一覧のイメージを示す画面モックアッププログラムであり、「MoveSearchToList」は、ShainSearch画面からShainList画面への画面遷移を実現するための、コンポーネント種別が「画面遷移」のコンポーネント設定ファイルである。
ステップ20では、上記の入力情報1701に基づいて、モックアップ実行アーキテクチャ向けのプログラムコードを生成する。ここで、本番実行アーキテクチャ向けではなく、モックアップ実行アーキテクチャ向けのプログラムコードが生成されるのは、入力情報1701に実行アーキテクチャ定義情報1760が含まれていないからである。ステップ20で生成されるプロトタイピング実行アーキテクチャ向けのプログラムコードが、図22において出力結果1801として示されている各プログラムファイル1811−1833である。ステップ20の詳細な処理については後述する。
なお、「ShainSearch.mxml」1811及び「ShainList.mxml」1812は、それぞれ画面モックアッププログラム1720の「ShainSearch.mxml」及び「ShainList.mxml」を変換した実行形式のプログラムである。「MoveSearchToList.as」1813は、コンポーネント設定ファイル1750の「MoveSearchToList.as」に基づいて生成された画面遷移プログラムファイルである。「MoveSearchToList.as」1821は、コンポーネント設定ファイル1730の「MoveSearchToList.as」に基づいて生成された検索プログラムファイルである。「ShainSearchTmp.as」1831、「ShainListTmp.as」1832及び「ShainData.as」1833は、画面モックアッププログラム1720に記述された動的データの情報から生成されたデータ構造体を保管するプログラムファイルである。
ステップ30では、ステップ20において生成されたプログラムを、開発者がモックアップ開発環境191にてビルドし、動作を確認する。
ステップ40では、ステップ30の動作確認結果に基づき、顧客レビューを実施するか否かを判断する。もし、開発者が顧客レビューを実施すると判断すればステップ50へ進み、レビューを実施しないと判断すれば、ステップ10へ戻る。
ステップ50では、モックアップレビュー環境192を用いて、ステップS20で生成されたプログラムを動作させて顧客レビューを実施する。このとき、顧客から得られたコメントを画面モックアッププログラムやコンポーネント設定ファイル、あるいは懸案管理表などに記録し、後で閲覧可能としてもよい。
ステップ60では、ステップ50の顧客レビュー結果に基づき、本番開発へ移行するか否かを判断する。もし本番開発へ移行すると判断すればステップ70へ進み、本番開発へ移行しないと判断すればステップ10へ戻る。
ステップ70では、開発者が本番開発用の本番実行アーキテクチャ定義情報1760(図5参照)を定義する。
ステップ80では、本番実行アーキテクチャ向けのプログラムコードを生成する。ステップ80の詳細な処理手順はステップ20と同じである。ここで生成される本番実行アーキテクチャ向けのプログラムコードが、図23において出力結果1802として示されているプログラムファイル1811−1833である。
なお、出力結果1802には、ステップ20で生成された各プログラム1812、1813、1831、1832に加えて、以下のプログラム等が含まれる。すなわち、出力結果1802には、画面レイアウト1710及びコンポーネント設定ファイル1730をそれぞれ変換した実行形式のプログラム「ShainSearch.mxml」1841及び「ShainSearchAction.java」1843と、画面モックアッププログラム1720から抽出されたデータ構造体定義をサーバに存在するデータベースに定義するためのプログラムファイル「ShainData.dml」1844と、異なるアーキテクチャ間でメソッドの呼び出しなどを実行するためのインターフェースファイル「ActionMapping.as」1842と、「RemotingConfig.xml」1845とが含まれる。
本システム100を用いることにより、モックアッププログラムから本番開発へ容易に移行することが可能となる。
次に、ステップ20の処理を、図24から図26のフローチャートに基づいて詳細に説明する。
図24は、プログラムコード生成処理の詳細な手順を示すフローチャートである。
まず、モックアップ設計情報解析部110が、開発者から入力された画面モックアッププログラム1720、コンポーネント設定ファイル1730及び実行アーキテクチャ定義情報画面1760を受理し、入力画面モックアップ記憶部170に格納する(ステップ200)。
モックアップ設計情報解析部110は、ステップ200で受理した情報から、モックアップを構成しているコンポーネントを設定するための入力モックアップ情報を抽出する(ステップ210)。ステップ210の詳細な処理(図25A及び図25Bに示す)は後述する。
次に、コンポーネント設定生成部120は、プロトタイピング向けや本番開発向けといった実行アーキテクチャに応じて、コンポーネントの設定を生成する(ステップ220)。ステップ220の詳細な処理(図26に示す)は後述する。
コンポーネント実行コード生成部141は、実行プログラムコードを生成する(ステップ230)。例えば、コンポーネント実行コード生成部141が、モックアップ構成コンポーネント情報記憶部152の構成コンポーネント設定情報1520を読み込む。そして、構成コンポーネント設定情報1520に記録されている、コード片格納場所1526から、生成用のプログラム実行アーキテクチャ毎コンポーネントコード片を取得する。さらに、属性値1524を取得したコード片に埋め込み、変換しながら、当該コンポーネント用の実行プログラムコードを生成する。
コンポーネント間インターフェースコード生成・変換部142は、コンポーネント間のインターフェース用コードを生成する(ステップ240)。例えば、コンポーネント間インターフェースコード生成・変換部142が、ステップ230で生成した各コンポーネントの実行プログラムコードについて、互いに連携可能なようにインターフェース生成用コード片1640を参照しながらインターフェース用コードを生成する。また、入力画面モックアップ記憶部170から画面モックアッププログラム1720を読み込み、情報抽出のために定めた特別な記法となっている部分について、実行基盤でコンパイル可能とするにテキスト変換を行う。
次に、図25A及び図25Bは、モックアップに含まれるコンポーネントの設定情報抽出処理の詳細な手順を示すフローチャートである。
モックアップ設計情報解析部110は、入力画面モックアップ記憶部170に実行アーキテクチャ定義情報1760が存在するか否かを判定する(ステップ2101)。実行アーキテクチャ定義情報1760が存在しないときは(ステップ2101:No)、ステップ2102及びステップ2103をスキップする。
実行アーキテクチャ定義情報1760が存在するときは(ステップ2101:Yes)、実行対象アーキテクチャ設定解析部117が実行アーキテクチャ定義情報1760を参照して、実行アーキテクチャ定義情報1760から実行アーキテクチャ設定情報1540(図18(a)参照)を抽出する(ステップ2102)。ここで抽出した実行アーキテクチャ設定情報1540は、アーキテクチャ情報記憶部154へ保存される。
実行対象アーキテクチャ設定解析部117は、インターフェース生成用コード片1640(図11参照)を参照し、実行アーキテクチャ定義情報1760が本システムで対応可能か否かを判定する(ステップ2103)。例えば、実行対象アーキテクチャ設定解析部117は、入力された実行アーキテクチャ定義のアーキテクチャ実行基盤設定1761やコンポーネント配置詳細設定1864で記述されたクライアントとサーバの定義の組みが、クライアント側インターフェース基盤1641とサーバ側インターフェース基盤1642に存在するか否かによって判定する。
ステップ2102の判定により、本システムで対応不能である場合は(ステップ2103:No)、本システム100は、所定のエラーメッセージ名などを出力して、処理を終了する(ステップ2111)。
本システムで対応可能である場合は(ステップ2103:Yes)、画面モックアップ解析部111が画面モックアッププログラム1720で使用されている言語を特定する(ステップ2104)。例えば、画面モックアップ解析部111は、画面モックアッププログラム1720のプログラムファイルの拡張子やファイルのヘッダなどの特徴情報から画面モックアップの開発言語を特定する。ここで特定された開発言語を示す情報が、画面モックアップ抽出情報記憶部151へ保存される。
画面モックアップ解析部111は、アーキテクチャ毎コンポーネントコード片群1630(図10参照)を参照して、ここで特定された開発言語が、本システムで対応している言語であるか否かを判定する(ステップ2105)。例えば、実行基盤1633に、ステップ2104で特定された画面モックアップの開発言語が存在するか否かにより、本システムで対応可能か否かを判定してもよい。ここで、画面モックアップの開発言語が本システムに対応していないときは(ステップ2105:No)、所定のエラーメッセージ名などを出力して、処理を終了する(ステップ2111)。
次に、入力画面モックアップ記憶部170に保存されているすべての画面モックアッププログラム1720に対して、以下に説明するステップ2107から2110を繰り返し実行する(ステップ2106)。
画面モックアップ解析部111は、入力画面モックアップ記憶部170から処理対象の画面モックアッププログラム1720を読み込む(ステップ2107)。
データ構造体抽出部112が、処理対象の画面モックアッププログラム1720からデータ構造体1510を抽出し、画面モックアップ抽出情報記憶部151へ保存する(ステップ2108)。
トリガーイベント抽出部113が、処理対象の画面レイアウト1710からトリガーイベント1517を抽出し、画面モックアップ抽出情報記憶部151へ保存する(ステップ2109)。
ユーザ追記情報抽出部116は、処理対象の画面レイアウト1710から開発者が独自に定義したプログラムコードを抽出し、ユーザ追記情報記憶部153へ格納する(ステップ2110)。
すべての画面モックアッププログラム1720に対して上記の処理が終了すると、コンポーネント設定生成部120が、入力画面モックアップ記憶部170内のすべてのコンポーネント設定ファイル1730に対して、以下に説明するステップ2113から2120を繰り返し実行する(ステップ2111)。これにより、コンポーネント設定ファイル1730から、画面モックアップを構成する構成コンポーネント設定情報1520を抽出する。
コンポーネント設定情報抽出部114は、入力画面モックアップ記憶部170より処理対象となるコンポーネント設定ファイル1730を読み込む(ステップ2112)。
そして、コンポーネント設定情報抽出部114は、処理対象のコンポーネント設定ファイル1730がコンポーネントの設定に必要な属性を満足しているか否かを判定する(ステップ2113)。
コンポーネントの設定に必要な属性が不足している場合(ステップ2113:No)、本システム100は、不足していた設定情報を知らせるための所定の情報を出力して、開発者に通知する(ステップ2114)。
コンポーネントの設定に必要な属性を満足している場合(ステップ2113:Yes)、コンポーネント設定情報抽出部114が、コンポーネント設定属性定義1620を参照して、処理対象のコンポーネント設定ファイル1730から構成コンポーネント設定情報1520(図15参照)を抽出する(ステップ2115)。
コンポーネント設定情報抽出部114は、ここで抽出された構成コンポーネント設定情報1520が、不整合がなく有効なものか否かを検証する(ステップ2116)。
コンポーネント設定情報抽出部114は、構成コンポーネント設定情報1520で不整合があれば(ステップ2117:No)、検出された不整合を知らせるための所定の情報を出力して、開発者に通知する(ステップ2118)。
コンポーネント設定情報抽出部114は、ステップ2115で抽出した構成コンポーネント設定情報1520をモックアップ構成コンポーネント情報記憶部152に保存する(ステップ2119)。なお、ステップ2116で不整合が検出されていれば、不整合情報も併せて書き込む。
ユーザ追記情報抽出部116がコンポーネント設定ファイルより顧客要求(ユーザ追加情報)1737を抽出し、ユーザ追記情報記憶部153へ書き込む(ステップ2120)。なお、処理対象のコンポーネント設定ファイル1730に記述されているコンポーネント種別1731がコンポーネント設定属性定義1620に設定されていない未定義のコンポーネントであるときは、処理対象のコンポーネント設定ファイル1730に記述されている情報はすべてユーザ追記情報記憶部153へ保存される。
これにより、開発者から入力された入力画面モックアップデータから、所望の情報が抽出された。
次に、図26は、実行アーキテクチャに応じたコンポーネントの設定を生成する処理手順を示すフローチャートである。
対象アーキテクチャ補完部121が、アーキテクチャ情報記憶部154を参照し、開発者が指定した実行アーキテクチャ定義情報1760に対応する実行アーキテクチャ設定情報1540が存在するか否かを判定する(ステップ2201)。
実行アーキテクチャ設定情報1540が存在しないときは(ステップ2201:No)、モックアップ実行アーキテクチャでプログラムを実行すると判断し、対象アーキテクチャ補完部121が全てのコンポーネントをクライアント上で実行するアーキテクチャに設定する(ステップ2202)。アーキテクチャの言語は、ステップ2104で抽出された画面モックアップの開発言語を画面モックアップ抽出情報記憶部151より読み出して用いる。
コンポーネント設定補完部123は、モックアップ構成コンポーネント情報記憶部152に記憶されている構成コンポーネント設定情報1520の各コンポーネントに対して、ステップ2204からステップ2210の処理を適用する(ステップ2203)。
コンポーネント設定補完部123は、モックアップ構成コンポーネント情報記憶部152から一つのコンポーネントに関する情報を読み出す(ステップ2204)。
コンポーネント設定補完部123は、ステップ2204で読み出された対象のコンポーネントのコンポーネント種別1522をキーにしてコンポーネント一覧1610を参照し、コンポーネント種別1613を取得する。ここで取得したコンポーネント種別1613が有効でないときは、ステップ2208へ進む(ステップ2205:No)。
有効なコンポーネント種別1613を取得できたときは(ステップ2205:Yes)、コンポーネント設定補完部123が、対象となっているコンポーネントについて、属性値1524がブランクである項目に所定のデフォルト値を補完する(ステップ2206)。これは、既に説明したように、対象アーキテクチャ補完部121がコンポーネント設定属性定義1620を参照し、対応する項目のデフォルト値1625を特定して、それを補完する。
コンポーネント設定補完部123は、さらに、対象となっているコンポーネントについて、コンポーネント設定属性定義1620で必須フラグ1626がセットされている必須項目にすべて値が設定されているか否かを判定する(ステップ2207)。
ステップ2205で有効なコンポーネント種別1613を取得できないとき、及びステップS2207で必須項目のいずれかが未設定であるときは、本システムでこのコンポーネントのプログラムコードを自動生成することができないので、コンポーネント種別1522を「その他」に設定する(ステップ2208)。
コンポーネント実行アーキテクチャ決定部130は、アーキテクチャ情報記憶部154及びアーキテクチャ毎コンポーネントコード片群1630を参照しながら、対象となっているコンポーネントのプログラムコードの自動生成に用いるプログラムコード片を選択する(ステップ2209)。プログラムコード片の選択は、例えば、実行時配置場所1632、実行基盤1633及びプログラムコード片格納場所1634を特定する。
コンポーネント実行アーキテクチャ決定部130は、ステップ2209で特定された実行時配置場所1632、実行基盤1633及びプログラムコード片格納場所1634を、実行アーキテクチャ1525及びコード片格納場所1525として構成コンポーネント設定情報1520に追加して、モックアップ構成コンポーネント情報記憶部152に書き戻す(ステップ2210)。
上述した本発明の実施形態は、本発明の説明のための例示であり、本発明の範囲をそれらの実施形態にのみ限定する趣旨ではない。当業者は、本発明の要旨を逸脱することなしに、他の様々な態様で本発明を実施することができる。