JP6301783B2 - ソースコード自動生成装置、及びプログラム - Google Patents

ソースコード自動生成装置、及びプログラム Download PDF

Info

Publication number
JP6301783B2
JP6301783B2 JP2014173305A JP2014173305A JP6301783B2 JP 6301783 B2 JP6301783 B2 JP 6301783B2 JP 2014173305 A JP2014173305 A JP 2014173305A JP 2014173305 A JP2014173305 A JP 2014173305A JP 6301783 B2 JP6301783 B2 JP 6301783B2
Authority
JP
Japan
Prior art keywords
source code
design information
logic
generated
unit
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.)
Active
Application number
JP2014173305A
Other languages
English (en)
Other versions
JP2016048477A (ja
Inventor
裕一郎 江崎
裕一郎 江崎
陸 振宏
振宏 陸
誠一郎 田中
誠一郎 田中
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 Digital 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 Digital Solutions Corp filed Critical Toshiba Corp
Priority to JP2014173305A priority Critical patent/JP6301783B2/ja
Publication of JP2016048477A publication Critical patent/JP2016048477A/ja
Application granted granted Critical
Publication of JP6301783B2 publication Critical patent/JP6301783B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Description

本発明の実施形態は、ソースコード自動生成装置、及びプログラムに関する。
ユーザがGUI(グラフィック・ユーザ・インタフェース)等を用いて定義したアプリケーションの設計情報からソースコードを自動生成する技術がある。この技術によりプログラムの開発を効率的に行うことができるものの、全てのソースコードを生成できない場合がある。例えば、詳細なビジネスロジックの処理を設計情報に表現することは難しい。そこで、ユーザが、設計情報から自動生成されたソースコードに対して、詳細なビジネスロジック等の処理の追加や変更などの編集を行う。
ソースコードの編集後、設計情報の間違いが判明したときや仕様変更が行われたときには設計情報が見直され、見直された設計情報から再びソースコードが自動生成される。この新たに自動生成されたソースコードに、前回自動生成されたソースコードに対して行った編集内容を反映したい場合があった。
特開2003−271382号公報 特開平10−21066号公報
本発明が解決しようとする課題は、設計情報から生成されたソースコードに対する編集の内容を、編集後の設計情報から生成されたソースコードに引き継いで利用することができるソースコード自動生成装置、及びプログラムを提供することである。
実施形態のソースコード自動生成装置は、設計情報取得部と、ロジックソースコード確認部と、ロジックソースコード生成部と、参照ソースコード生成部とを持つ。設計情報取得部は、ジョブを構成する演算処理が記述された設計情報を取得する。ロジックソースコード確認部は、設計情報に記述された演算処理の実装部分の記述箇所を含むソースコードであるロジックソースコードが、設計情報取得部が取得した設計情報を修正する前の設計情報から生成されているか否かを判断する。ロジックソースコード生成部は、ロジックソースコード確認部においてロジックソースコードが生成されていないと判断された場合に、設計情報取得部が取得した設計情報に基づいてロジックソースコードを生成する。参照ソースコード生成部は、ロジックソースコードに記述される演算処理の実装部分を利用して演算処理を実行するためのソースコードである参照ソースコードを、設計情報取得部が取得した設計情報に基づいて生成する。
実施形態のソースコード自動生成装置の構成を示す機能ブロック図。 実施形態のソースコード自動生成装置の動作を示すフロー図。 実施形態の設計情報の取得処理におけるシーケンス図。 実施形態の設計情報を示す図。 実施形態の変換処理のソースコードの例を示す図。 実施形態の設計情報を便宜的に表現した図。 実施形態の設計情報の振分処理におけるシーケンス図。 実施形態の分離対象設計情報を示す図。 実施形態の分離対象外設計情報を示す図。 実施形態のロジックソースコードの存在確認処理におけるシーケンス図。 実施形態のロジックソースコードの生成処理におけるシーケンス図。 実施形態のロジックソースコード生成用のテンプレートを示す図。 実施形態のロジックソースコードを示す図。 実施形態の参照ソースコードの生成処理におけるシーケンス図。 実施形態の参照ソースコード生成用のテンプレートを示す図。 実施形態の参照ソースコードを示す図。 実施形態の分離対象外ソースコードの生成処理におけるシーケンス図。 実施形態の分離対象外ソースコード生成用のテンプレートを示す図。 実施形態の生成された分離対象外ソースコードを示す図。
以下、実施形態のソースコード自動生成装置、及びプログラムを、図面を参照して説明する。
実施形態のソースコード自動生成装置は、ユーザが定義したアプリケーションの設計情報からロジックソースコード、参照ソースコード、及び分離対象外ソースコードの3種類のソースコードを生成する。以下では、オブジェクト指向プログラミング言語によりソースコードが記述される場合を例に説明する。
設計情報は、ジョブを構成する演算処理と、ジョブにおける演算処理の流れを定義したジョブフローとを定義した情報である。ジョブフローは、演算処理間の入力パラメータと出力パラメータの関係により流れが定義される。例えば、演算処理Aの出力パラメータを演算処理Bの入力パラメータに用いる場合、演算処理A→演算処理Bという流れになる。
ロジックソースコードは、ジョブを構成する各演算処理のクラスを記述したソースコードである。実施形態のソースコード自動生成装置が生成したロジックソースコードの各演算処理のクラスは、演算処理の実装部分の記述箇所を含むが、具体的な実装部分のソースコードは記述されない。演算処理の実装部分とは、その演算処理が実行する具体的なデータ処理やそれらデータ処理の流れなどのロジックの記述である。各演算処理のロジックは、ユーザが生成されたロジックソースコードに記述する。つまり、実施形態のソースコード自動生成装置が生成するロジックソースコードは、各演算処理を記述するための雛形となる。
参照ソースコードは、ロジックソースコードの子クラス(「サブクラス」ともいう。)である。参照ソースコードは、分離対象外ソースコードに記述される各演算処理のメソッドを記述したソースコードである。各メソッドは、親クラス(「スーパークラス」ともいう。)であるロジックソースコードのクラスを継承する。つまり、参照ソースコードは、ロジックソースコードに記述された演算処理の実装部分であるロジックを利用して、演算処理を実行する。
分離対象外ソースコードは、ジョブフローにより定義された流れに従って演算処理を実行するためのソースコードである。
ユーザは、ソースコード自動生成装置が設計情報から生成したソースコードのうち、ビジネスロジックの追加や修正などのため、ロジックソースコードに対してのみ編集を行う。ロジックソースコードの編集後、ユーザは、設計情報を修正する場合がある。ソースコード自動生成装置は、修正された設計情報から再度ソースコード生成する。このソースコードの再生成の際、ソースコード自動生成装置は、参照ソースコード及び分離対象外ソースコードを生成するが、ロジックソースコードは生成しない。このように、ソースコード自動生成装置は、ロジックソースコードを初回のソースコード生成時にのみ生成し、次回以降にソースコードを生成するときには生成しないため、ユーザにより編集されたロジックソースコードが上書きされることがない。これにより、ユーザが設計情報の修正前にソースコードに編集した内容をそのまま利用可能とし、開発コストを抑える。
ロジックソースコード、参照ソースコード、及び分離対象外ソースコードは、既存のコード生成装置によって、コンピュータ装置が実行可能な処理実行コードに変換される。
従来のように設計情報からソースコードを分離せずに生成した場合、ソースコードから利用者が編集した部分を抽出し、変更後の設計情報から再生成されたソースコードに挿入する方法が考えられる。しかし、この方法では、変更前の設計情報に基づいて生成したソースコードから、ユーザが行った編集内容を抽出するために、以下の2つの機能が必要となる。
1つは、ソースコード全体を検索して、編集前のソースコードと編集後のソースコードの差分を抽出する機能である。もう1つは、変更後の設計情報から再生成されたソースコードに、抽出した差分を挿入する機能である。これらの機能の開発には、開発者の負荷を要する。
また、編集内容抽出のために、変更前の設計情報から生成したソースコードに対して、ユーザが編集箇所を特定する制御コードを付加することも考えられる。しかし、ユーザが意図せずに不要な識別コードを記述してしまう可能性や、必要な識別コードを付加し忘れる可能性がある。識別コードを自動的に付加する機能と、不要な識別コードを記述させない機能とを実現することも考えられるが、やはり開発者の負荷を要する。
本実施形態では、最初の設計情報からソースコードを生成する際に、各演算処理のロジックの記述箇所を含んだロジックソースコードを分離して生成する。各演算処理のロジックは、通常、設計情報に詳細が定義されないために、ユーザが編集を行う対象である。そして、変更後の設計情報からはロジックソースコードを生成しない。これにより、生成済みのソースコードに対してユーザが編集を行った箇所を抽出する必要なく、編集内容をそのまま新しいバージョンのソースコードに利用可能とする。
図1は、実施形態のソースコード自動生成装置100の構成を示す機能ブロック図であり、本実施形態と関係する機能ブロックのみを抽出して示してある。ソースコード自動生成装置100は、コンピュータ装置により実現することができる。ソースコード自動生成装置100は、設計情報取得部101と、設計情報振分部102と、ソースコードテンプレート記憶部103と、ロジックソースコード確認部104と、ロジックソースコード生成部105と、参照ソースコード生成部106と、分離対象外ソースコード生成部107とを備えて構成される。
設計情報取得部101は、設計情報を取得する。本実施形態では、設計情報取得部101は、設計情報記憶部200に格納されている設計情報を読み取る。設計情報記憶部200は、例えば、データベース装置であるが、ソースコード自動生成装置100が備えるハードディスク装置や半導体メモリでもよい。設計情報取得部101は、ネットワークを介して接続されるコンピュータ端末から設計情報を受信してもよい。設計情報振分部102は、設計情報取得部101が読み取った設計情報を振り分け、ロジックソースコード生成部105、参照ソースコード生成部106、及び、分離対象外ソースコード生成部107に出力する。
ソースコードテンプレート記憶部103は、ロジックソースコード生成用のテンプレート、参照ソースコード生成用のテンプレート、及び分離対象外ソースコード生成用のテンプレートを格納する。テンプレートには、設計情報からソースコードを生成する際の変換ルールが記述される。
ロジックソースコード確認部104は、設計情報取得部101が取得した設計情報の修正前の設計情報から生成されたロジックソースコードの存在を確認する。
ロジックソースコード生成部105は、ロジックソースコード確認部104においてロジックソースコードが存在しないことが確認された場合に、設計情報振分部102により振り分けられた設計情報からロジックソースコードを生成する。ロジックソースコード生成部105は、ロジックソースコード生成の際、ソースコードテンプレート記憶部103に記憶されているテンプレートを用いる。ロジックソースコード生成部105は、生成したロジックソースコードをソースコード記憶部300に格納する。
参照ソースコード生成部106は、設計情報振分部102により振り分けられた設計情報から参照ソースコードを生成する。参照ソースコード生成部106は、参照ソースコード生成の際、ソースコードテンプレート記憶部103に記憶されているテンプレートを用いる。参照ソースコード生成部106は、生成したロジックソースコードをソースコード記憶部300に格納する。
分離対象外ソースコード生成部107は、設計情報振分部102により振り分けられた設計情報から分離対象外ソースコードを生成する。分離対象外ソースコード生成部107は、分離対象外ソースコード生成の際、ソースコードテンプレート記憶部103に記憶されているテンプレートを用いる。分離対象外ソースコード生成部107は、生成した分離対象外ソースコードをソースコード記憶部300に格納する。
ソースコード記憶部300は、例えば、データベース装置であるが、ソースコード自動生成装置100が備えるハードディスク装置や半導体メモリでもよい。ソースコード記憶部300に記憶されているロジックソースコード301、302は、設計情報から生成されたパッケージ毎のソースコードである。ロジックソースコード301、302は、ユーザ400による編集が許可される。ユーザ400による編集が許可される箇所は、ジョブを構成する各演算処理のロジック(具体的なビジネスロジックの処理)を記述する箇所である。参照ソースコード303は、ロジックソースコード301を参照し、参照ソースコード304は、ロジックソースコード302を参照する。参照ソースコード303、304にはロジックが記述されず、参照先のロジックソースコードに記述されているロジックを利用して演算処理を実行する。参照ソースコード303、304は、ユーザによる編集が想定されないソースコードである。分離対象外ソースコード305には、設計情報を元にジョブフローが具体的に記述される。分離対象外ソースコード305は、ユーザによる編集が想定されないソースコードである。
図2は、ソースコード自動生成装置100の動作を示すフロー図である。設計情報記憶部200は、事前に作成された設計情報を格納している。
まず、設計情報取得部101は、ユーザ400の要求を受けて、設計情報記憶部200から設計情報を読み取る(ステップS1)。設計情報は、表計算ソフトで作成した設計情報のデータや、GUI(グラフィック・ユーザ・インタフェース)ツールで描画した処理フロー図から作成したデータ等が考えられるが、特にその形態は制限しない。
設計情報振分部102は、設計情報取得部101から設計情報を受信する。設計情報振分部102は、設計情報を解析し、設計情報をその後の処理で利用できる形式に変換する。例えば、ソースコード自動生成装置100をJava(登録商標)により実装する場合、表計算ソフト等で作成した設計情報のデータを、Java(登録商標)のデータモデルの形式に変換し、PC(パーソナルコンピュータ)のメモリ上で保持する方法が一般的である。
設計情報振分部102は、形式変換した設計情報から分離対象設計情報と分離対象外設計情報を生成する(ステップS2)。分離対象設計情報は、ロジックソースコードと参照ソースコードに分離して演算処理のソースコードを生成するために用いる設計情報である。分離対象設計情報は、ジョブを構成する各演算処理に関する記述を設計情報から抽出して生成される。分離対象外設計情報は、ジョブフローのソースコードを分離せずに生成するために用いる設計情報である。分離対象外設計情報は、ジョブフローの部分の記述を設計情報から抽出して生成される。ユーザの理解等のため、分離対象設計情報がロジックソースコードや参照ソースコードの生成に使用されない情報を含むようにしてもよく、分離対象設計情報が分離対象外ソースコードの生成に使用されない情報を含むようにしてもよい。設計情報振分部102は、分離対象設計情報をロジックソースコード生成部105及び参照ソースコード生成部106に出力し、分離対象外設計情報を分離対象外ソースコード生成部107に出力する。
ロジックソースコード生成部105は、設計情報振分部102から分離対象設計情報を受信すると、受信した分離対象設計情報により生成が指示されているロジックソースコードの存在確認をロジックソースコード確認部104に要求する。要求を受けたロジックソースコード確認部104は、ソースコード記憶部300を参照し、生成が指示されているロジックソースコードが既に生成されているか否かを確認する。ロジックソースコード確認部104は、確認結果をロジックソースコード生成部105に通知する(ステップS3)。
ロジックソースコード生成部105は、ロジックソースコード確認部104によりロジックソースコードが生成されていないことが確認された場合に限り、設計情報で生成が指示されているロジックソースコードを生成する(ステップS4)。ロジックソースコード生成部105は、ソースコードテンプレート記憶部103からロジックソースコード生成用のテンプレートを読み出す。ロジックソースコード生成部105は、読み出したテンプレートの特定箇所を、そのテンプレートで指定された分離対象設計情報内の記述に置き換えてロジックソースコードを生成する。
参照ソースコード生成部106は、ロジックソースコード確認部104による確認結果に依らず、参照ソースコードを生成する(ステップS5)。参照ソースコード生成部106は、ソースコードテンプレート記憶部103から参照ソースコード生成用のテンプレートを読み出す。参照ソースコード生成部106は、読み出したテンプレートの特定箇所を、そのテンプレートで指定された分離対象設計情報内の記述に置き換えて参照ソースコードを生成する。
分離対象外ソースコード生成部107は、設計情報振分部102から受信した分離対象外設計情報を用いて、分離対象外ソースコードを生成する(ステップS6)。分離対象外ソースコード生成部107は、ソースコードテンプレート記憶部103から分離対象外ソースコード生成用のテンプレートを読み出す。分離対象外ソースコード生成部107は、読み出したテンプレートの特定箇所を、そのテンプレートで指定された分離対象外設計情報内の記述に置き換えて分離対象外ソースコードを生成する。
上記のように、ソースコード自動生成装置100は、設計情報からロジックソースコード、参照ソースコード、及び、分離対象外ソースコードに分離してソースコードを生成する。ソースコード自動生成装置100は、修正された設計情報からソースコードを生成する時には、ロジックソースコードを生成せず、上書きを禁止する。
例えば、ソースコード自動生成装置100が最初の設計情報からソースコードを生成する。ユーザ400は、生成されたソースコードのうちロジックソースコードに、Eclipse(オープンソースソフトウェアの一種)等のソースコードの編集用の既存のエディタを用いて、演算処理のロジックを記述する。その後、ジョブフローに新たな演算処理Xが追加されたとする。ソースコード自動生成装置100は、演算処理Xが追加された設計情報から、参照ソースコード、及び、分離対象外ソースコードを生成し、ロジックソースコードは生成しない。エディタは、参照ソースコードが参照している演算処理Xのメソッドがロジックソースコードに定義されていない旨のエラーを出力する。ユーザ400は、最初の設計情報から生成された後に、演算処理のロジックを記述したロジックソースコードに対して、エディタのコード補完機能等を用いて、演算処理Xのメソッド及びロジックを追加し、必要に応じて他の演算処理のロジックを修正するなどの編集を行う。そしてさらに、ジョブフローに他の新たな演算処理Yが追加されたとする。ソースコード自動生成装置100は、演算処理Yが追加された設計情報から、参照ソースコード、及び、分離対象外ソースコードを生成し、ロジックソースコードは生成しない。エディタは、参照ソースコードが参照している演算処理Yのメソッドがロジックソースコードに定義されていない旨のエラーを出力する。ユーザ400は、演算処理Xのメソッド及びロジックの追加等の編集が行われた現在のロジックソースコードに対して、エディタのコード補完機能等を用いて、演算処理Yのメソッド及びロジックを追加し、必要に応じて他の演算処理のロジックを修正する。
上記のように、ソースコード自動生成装置100は、ユーザが旧バージョンのソースコードに対して行った編集内容を、新バージョンのソースコード生成時に上書きして消してしまうことなく、そのままソースコードに利用可能とする。
続いて、ソースコード自動生成装置100がJava(登録商標)のソースコードを生成し、ソースコード記憶部300に保存する場合を例にして、図2に示す各ステップの詳細な処理を説明する。生成される各ソースコード(ファイル)は、Java(登録商標)のクラスまたはインタフェースを定義する。また、ロジックソースコードと参照ソースコードはペアであり、ロジックソースコードが親クラス、参照ソースコードが子クラスであるというように、オブジェクト指向の継承関係を有している。
図3は、図2のステップS1の設計情報の取得処理におけるシーケンス図である。
ユーザ400は、ソースコード自動生成装置100にソースコード生成の要求を入力する(ステップS1−1)。例えば、ユーザ400は、ソースコード自動生成装置100が備える図示しない入力装置により要求を入力してもよく、ユーザ400の保有するコンピュータ装置からソースコード自動生成装置100にソースコード生成の要求を送信してもよい。ソースコード自動生成装置100は、ユーザ400が入力した要求をトリガとして、以降の処理を実行する。なお、ソースコード自動生成装置100が、ソースコード生成の全体をハンドリングする機能部を有し、この機能部の制御によって以降の処理を行ってもよい。
設計情報取得部101は、ユーザからの要求を受けて、設計情報記憶部200に設計情報を要求する。設計情報記憶部200は、要求された設計情報をソースコード自動生成装置100に返送する(ステップS1−2)。
図4は、設計情報記憶部200から読み出された設計情報の例を示す図である。同図に示す設計情報は、XML(extensible markup language)により記述した例を示している。同図に示す設計情報には、ジョブフロー(jobflow)の完全クラス名(jobflowCompleteClass)と、ジョブフロー名(name)と、入力パラメータ(input)のリストと、出力パラメータ(output)のリストと、演算処理(operation)のリストとが記述される。各入力パラメータ(input)には、入力パラメータの型名(modelName)が記述される。各出力パラメータ(output)には、出力パラメータの型名(modelName)及び出力変数名(opeOutput)が記述される。各演算処理(operation)には、演算処理のメソッド名(methodName)、変数名(opeVariableName)、アノテーション名(annotationName)、入力パラメータの定義(inputDefine)のリスト、出力パラメータの定義(outputDefine)のリストが含まれる。演算処理の各入力パラメータの定義(inputDefine)には、入力パラメータの変数名(opeInput)、型名(modelName)、及び演算変数名(variableName)が含まれる。演算処理の各出力パラメータの定義(outputDefine)には、出力パラメータの型名(modelName)、及び演算変数名(variableName)が含まれる。アノテーション名は、コード生成装置により予め決められた演算名であり、ソースコードから処理実行コードへの変換時に用いられる。
図3において、設計情報取得部101は、設計情報記憶部200から読み出した設計情報を、Java(登録商標)のデータモデルの形式に変換する(ステップS1−3)。例えば、JAXB(Java(登録商標) Architecture for XML Binding)の機能を用いて、XMLからJava(登録商標)のデータモデルへ変換する。設計情報取得部101は、変換処理後の設計情報を、設計情報振分部102に出力する(ステップS1−4)。
図5は、JAXBを用いた変換処理のソースコードの例を示す図である。同図に示す変換処理のソースコードは、ステップS1−3における変換処理に用いられる。ステップS1−3における設計情報の変換処理は、その後の処理で設計情報を扱いやすくするための一般的な処理である。しかし、設計情報の変換処理は必須の処理ではなく、設計情報の変換が不要な場合は、ステップS1−3の処理は行わない。変換処理により記述形式が変更された場合も、変換前後で設計情報が表す内容に変化はない。
図6は、図4に示す設計情報を便宜的に表現した図である。以下では、同図に示す記述形式で設計情報を表現する。
図7は、図2のステップS2の設計情報の振分処理におけるシーケンス図である。
ステップS2において、設計情報振分部102は、設計情報取得部101が取得した設計情報を受信し、ロジックソースコード生成部105、参照ソースコード生成部106、及び分離対象外ソースコード生成部107に出力する。
設計情報振分部102は、設計情報取得部101が取得した設計情報から、分離対象設計情報を生成する(ステップS2−1)。後のステップで、この分離対象設計情報を元に、ロジックソースコードと参照ソースコードが作成される。設計情報振分部102は、生成した分離対象設計情報を、ロジックソースコード生成部105と参照ソースコード生成部106のそれぞれに出力する(ステップS2−2)。
図8は、図6に示す設計情報から生成された分離対象設計情報を示す図である。
分離対象設計情報の「演算クラス名」は、設計情報の「ジョブクラス名」の最後の「.」より後方部分に“Operator”を付加して生成される。分離対象設計情報の「演算子パッケージ名」は、設計情報の「ジョブクラス名」の最後の「.」より前方部分に「.operator」を付加して生成される。
分離対象設計情報「演算処理のリスト」には、設計情報の「演算処理のリスト」に含まれる各演算処理が設定される。リストの各要素である演算処理には以下の(1)または(2)の変換がなされる。
(1)設計情報の「演算名」が”Stop”の演算処理については、分離対象設計情報の「演算処理のリスト」に設定されない。
(2)設計情報の「演算名」が”Stop”以外の演算処理については、以下に示す(a)〜(d)の変換がなされて、分離対象設計情報の「演算処理のリスト」の演算処理として設定される。
(a)分離対象設計情報の演算処理の「メソッド名」、「演算名」には、設計情報の対応する演算処理の「メソッド名」、「演算名」が設定される。
(b)分離対象設計情報の演算処理の「入力のリスト」には、設計情報の対応する演算処理の全ての「入力」をリスト形式で記述する。例えば、設計情報の演算処理の「入力:{p1}」,「入力:{p2}」,「入力:{p3}」は、分離対象設計情報の演算処理では、「入力リスト:{{p1},{p2},{p3}}」の形式となる。さらに、設計情報の演算処理の「入力」にはそれぞれ、以下に示す変換がなされて分離対象設計情報の演算処理の「入力のリスト」の要素となる。すなわち、分離対象設計情報の「モデル名」には、設計情報の「入力」の「型名」の頭文字を大文字にし、さらに、「_」の次の文字を大文字にして「_」を削除した名前が設定される。また、分離対象設計情報の入力の「演算変数名」には、設計情報の「入力」の「演算変数名」が設定される。
(c)分離対象設計情報の演算処理の「出力のリスト」には、設計情報の対応する演算処理の全ての「出力」を、(b)と同様にリスト形式で記述する。さらに、設計情報の演算処理の「出力」にはそれぞれ、以下に示す変換がなされて分離対象設計情報の「出力のリスト」の要素となる。すなわち、分離対象設計情報の「モデル名」には、設計情報の「出力」の「型名」の頭文字を大文字にし、さらに、「_」の次の文字を大文字にして「_」を削除した名前が設定される。また、分離対象設計情報の出力の「演算変数名」には、設計情報の「出力」の「演算変数名」が設定される。
(d)設計情報の「演算名」が”Update”の場合、分離対象設計情報の「戻り値の型」は、設定されない。設計情報の「演算名」が”Convert”の場合、演算処理の最初の「出力」の「型名」の頭文字を大文字にし、さらに、「_」の次の文字を大文字にして「_」を削除した名前とする。
なお、設計情報の演算処理の「変数名」は、分離対象設計情報には設定されない。
図7において、設計情報振分部102は、設計情報取得部101から受信した設計情報から、分離対象外設計情報を作成する(ステップS2−3)。後のステップで、この分離対象外設計情報を元に、分離対象外ソースコードが作成される。設計情報振分部102は、作成した分離対象外設計情報を、分離対象外ソースコード生成部107に出力する(ステップS2−4)。
図9は、図6に示す設計情報から生成された分離対象外設計情報を示す図である。
分離対象外設計情報の「ジョブクラス名」には、設計情報の「ジョブクラス名」の最後の「.」よりの後方部分が設定され、分離対象外設計情報の「ジョブパッケージ名」には、設計情報の「ジョブクラス名」の最後の「.」より前方部分が設定される。分離対象外設計情報の「ジョブフロー名」には、設計情報の「ジョブフロー名」が設定される。
分離対象外設計情報の「入力のリスト」には、設計情報のジョブフローの全「入力」をリスト形式で記述する。例えば、設計情報のジョブフローの「入力:{p1}」,「入力:{p2}」,「入力:{p3}」は、分離対象設計情報では、「入力リスト{{p1},{p2},{p3}}」の形式となる。さらに、設計情報のジョブフローの「入力」にはそれぞれ、以下に示す変換がなされて分離対象外設計情報の「入力のリスト」の要素となる。すなわち、分離対象外設計情報の「モデル名」には、設計情報のジョブフローの「入力」の「型名」の頭文字を大文字にし、さらに、「_」の次の文字を大文字にして「_」を削除した名前が設定される。
また、分離対象外設計情報の「出力のリスト」には、設計情報のジョブフローの全「出力」を、入力のリストと同様にリスト形式で記述する。さらに、設計情報のジョブフローの「出力」には、それぞれ、以下に示す変換がなされて分離対象外設計情報の「出力のリスト」の要素となる。すなわち、分離対象外設計情報の「出力のリスト」の要素である出力の「モデル名」には、設計情報のジョブフローの「出力」の「型名」の頭文字を大文字にし、さらに、「_」の次の文字を大文字にして「_」を削除した名前が設定される。また、分離対象外設計情報の「出力のリスト」の各要素である出力の「出力変数名」には、設計情報ジョブフローの「出力」の「出力変数名」が設定される。
分離対象外設計情報の「演算処理のリスト」には、設計情報の「演算処理のリスト」に含まれる各演算処理が設定される。リストの各要素である「演算処理」は以下に示す変換がなされる。
(a)分離対象外設計情報の「メソッド名」には、設計情報の「メソッド名」が設定される。
(b)分離対象外設計情報の「メソッドクラス名」には、設計情報の「メソッド名」の頭文字が大文字に変換されて設定される。
(c)分離対象外設計情報の「変数名」には、設計情報の「変数名」が設定される。
(d)分離対象外設計情報の演算処理の「入力のリスト」には、設計情報の対応する演算処理の全ての「入力」をリスト形式で記述する。さらに、設計情報の演算処理の「入力」にはそれぞれ、以下に示す変換がなされて分離対象設計情報の対応する演算処理の「入力のリスト」の要素となる。すなわち、分離対象外設計情報の入力の「変数名」には、設計情報の「入力」の「変数名」が設定される。また、分離対象外設計情報の入力の「モデル名」には、設計情報の「入力」の「型名」の頭文字を大文字にし、さらに、「_」の次の文字を大文字にして「_」を削除した名前が設定される。分離対象外設計情報の入力の「演算変数名」には、設計情報の「入力」の「演算変数名」が設定される。設計情報の「入力」に「演算変数名」の設定がない場合、分離対象外設計情報の入力の「演算変数名」も設定されない。
設計情報の演算処理の「演算名」と「出力」は、分離対象外設計情報への変換では利用しない。
図10は、図2のステップS3のロジックソースコードの存在確認処理におけるシーケンス図である。ステップS3において、ロジックソースコード生成部105が設計情報振分部102から設計情報を受信した後に、ロジックソースコード確認部104がロジックソースコードの有無を確認する。
ロジックソースコード生成部105は、設計情報振分部102から受信した分離対象設計情報を元にして、生成対象のロジックソースコードを特定し、生成対象のロジックソースコードの一覧をロジックソースコード確認部104に出力する(ステップS3−1)。ロジックソースコード確認部104は、ソースコード記憶部300を検索し、生成対象のロジックソースコードが存在するか否かを判断する(ステップS3−2)。例えば、図8に示す分離対象設計情報を受信した場合、生成対象のロジックソースコードのファイル名を、分離対象設計情報の「演算クラス名」の末尾に所定の拡張子を含む決められた名前「Logic.java」を付加した「CategorySummaryJobOperatorLogic.java」とする。ロジックソースコード確認部104は、このファイル名のロジックソースコードがすでにソースコード記憶部300に記憶されているかを問い合わせる。そこで、ロジックソースコード確認部104は、生成対象のロジックソースコードの検索要求をソースコード記憶部300に送信し、ソースコード記憶部300は、検索結果を返送する。ロジックソースコード確認部104は、生成対象のロジックソースコードの存在確認の結果を受信すると、ロジックソースコード生成部105に出力する(ステップS3−3)。
図11は、図2のステップS4のロジックソースコードの生成処理におけるシーケンス図である。ステップS3において、ロジックソースコード生成部105は、ロジックソースコード確認部104からロジックソースコードの存在確認の確認結果を受信する。ステップS4において、ロジックソースコード生成部105は、ロジックソースコード確認部104から受信した確認結果が、生成対象のロジックソースコードが存在しないことを示している場合に、以下のステップS4−1からステップS4−3の処理を実行する。ロジックソースコード確認部104から受信した確認結果が、生成対象のロジックソースコードがすでに存在することを示している場合は、ステップS4−1からステップS4−3の処理を実行せず、図2に示すステップS5の参照ソースコードの生成処理を行う。
ロジックソースコード確認部104が、生成対象のロジックソースコードがソースコード記憶部300に存在しないことを確認した場合、ソースコードテンプレート記憶部103からロジックソースコード生成用のテンプレートを取得する(ステップS4−1)。ロジックソースコード生成部105は、分離対象設計情報とロジックソースコード生成用のテンプレートをマージし、ロジックソースコードを生成する(ステップS4−2)。ロジックソースコード生成部105は、生成したロジックソースコードをソースコード記憶部300に保存する(ステップS4−3)。
図12は、ロジックソースコード生成用のテンプレートを示す図であり、図13は、ロジックソースコードの例を示す図である。図13に示すロジックソースコードは、図12に示すロジックソースコード生成用のテンプレートの対応する箇所を、図8に示す分離対象設計情報で置き換えて生成される。
図12に示すテンプレートには、分離対象設計情報の「演算子パッケージ名」からパッケージ名を生成すること、分離対象設計情報の「演算クラス名」からパブリック抽象クラスのクラス名を生成することが記述されている。
また、図12に示すテンプレートには、分離対象設計情報の「演算処理のリスト」内の各演算処理について、ロジックソースコードのロジックの実装箇所を生成することが記述されている。「演算名」が"Update"であれば、「メソッド名」と「入力のリスト」内の各入力パラメータとを用いて、「演算名」が"Convert"であれば、「メソッド名」と「出力のリスト」内の各出力パラメータとを用いて、各演算処理のロジックの実装箇所が生成される。
図14は、図2のステップS5の参照ソースコードの生成処理におけるシーケンス図である。
参照ソースコード生成部106は、ソースコードテンプレート記憶部103から参照ソースコード生成用のテンプレートを取得する(ステップS5−1)。参照ソースコード生成部106は、分離対象設計情報と参照ソースコード生成用のテンプレートをマージし、参照ソースコードを生成する(ステップS5−2)。参照ソースコード生成部106は、生成した参照ソースコードをソースコード記憶部300に保存する(ステップS5−3)。
図15は、参照ソースコード生成用のテンプレートを示す図であり、図16は、参照ソースコードの例を示す図である。図16に示す参照ソースコードは、図15に示す参照ソースコード生成用のテンプレートの対応する箇所を、図8に示す分離対象設計情報で置き換えて生成される。
図15に示すテンプレートには、分離対象設計情報の「演算子パッケージ名」からパッケージ名を生成すること、分離対象設計情報の「演算クラス名」からロジックソースコードの子クラスであることの定義を生成することが記述されている。
また、図15に示すテンプレートには、分離対象設計情報の「演算処理のリスト」に含まれる各演算処理のアノテーションとメソッドを生成することが記述されている。アノテーション名は、分離対象設計情報の演算処理の「演算名」であり、コード生成装置がソースコードから処理実行コードを生成する際に使用される。また、図15に示すテンプレートには、分離対象設計情報の各演算処理の「メソッド名」と「入力のリスト」内の各入力パラメータから、ロジックソースコード内の演算処理を継承したメソッドを生成することが記述されている。
図17は、図2のステップS6の分離対象外ソースコードの生成処理におけるシーケンス図である。
分離対象外ソースコード生成部107は、ソースコードテンプレート記憶部103から分離対象外ソースコード生成用のテンプレートを取得する(ステップS6−1)。分離対象外ソースコード生成部107は、分離対象外設計情報と分離対象外ソースコード生成用のテンプレートをマージし、分離対象外ソースコードを生成する(ステップS6−2)。分離対象外ソースコード生成部107は、生成した分離対象外ソースコードをソースコード記憶部300に保存する(ステップS6−3)。
図18は、分離対象外ソースコード生成用のテンプレートを示す図であり、図19は、分離対象外ソースコードの例を示す図である。図19に分離対象外ソースコードは、図18に示す分離対象外ソースコード生成用のテンプレートの対応する箇所を、図9に示す分離対象外設計情報で置き換えて生成したソースコードを示している。
図18に示すテンプレートには、分離対象外設計情報のジョブパッケージ名に基づいて分離対象外ソースコードのパッケージ名を生成することが記述されている。また、図18に示すテンプレートには、分離対象外設計情報のジョブフロー名、及びジョブクラス名に基づいて、分離対象外ソースコードがジョブフローを継承するサブクラスであることの定義を生成することが記述されている。
また、図18に示すテンプレートには、分離対象外設計情報のジョブフローの「入力のリスト」に含まれる各入力パラメータから分離対象外ソースコードの入力パラメータのデータ型と変数名を生成することが記述されている。また、図18に示すテンプレートには、分離対象外設計情報のジョブフローの「出力のリスト」に含まれる各出力パラメータから、分離対象外ソースコードの出力パラメータのデータ型と変数名を生成することが記述されている。
さらに、図18に示すテンプレートには、分離対象外設計情報の「演算処理のリスト」に含まれる各演算処理の変数名と入力のリストに基づいて、各演算処理間の入力パラメータと出力パラメータとの関係を記述したソースコードを生成することが記述されている。
上述した実施形態によれば、ソースコード自動生成装置は、設計情報に基づいて、ロジックソースコード、参照ソースコード、及び分離対象外ソースコードを生成し、設計情報の変更後は、参照ソースコードと分離対象外ソースコードのみを生成する。よって、ユーザがロジックソースコードを編集した後に設計情報が変更された場合も、ユーザにより編集内容をそのまま利用可能したソースコードを生成することができる。
なお、上記実施形態では、設計情報を分離対象設計情報と分離対象外設計情報とに分離しているが、設計情報を分離せずにロジックソースコード、参照ソースコード、及び分離対象外ソースコードを生成してもよい。
以上説明した少なくともひとつの実施形態によれば、ロジックソースコード確認部と、ロジックソースコード生成部と、参照ソースコード生成部を持つことにより、修正前の設計情報から生成したソースコードに対してユーザが行った追加や変更などの編集の内容を、設計情報変更後のソースコードに引き継いで利用することができる。
上述した実施形態におけるソースコード自動生成装置100の機能をコンピュータで実現するようにしてもよい。その場合、この機能を実現するためのプログラムをコンピュータ読み取り可能な記録媒体に記録して、この記録媒体に記録されたプログラムをコンピュータシステムに読み込ませ、実行することによって実現してもよい。なお、ここでいう「コンピュータシステム」とは、OSや周辺機器等のハードウェアを含むものとする。また、「コンピュータ読み取り可能な記録媒体」とは、フレキシブルディスク、光磁気ディスク、ROM、CD−ROM等の可搬媒体、コンピュータシステムに内蔵されるハードディスク等の記憶装置のことをいう。さらに「コンピュータ読み取り可能な記録媒体」とは、インターネット等のネットワークや電話回線等の通信回線を介してプログラムを送信する場合の通信線のように、短時間の間、動的にプログラムを保持するもの、その場合のサーバやクライアントとなるコンピュータシステム内部の揮発性メモリのように、一定時間プログラムを保持しているものも含んでもよい。また上記プログラムは、前述した機能の一部を実現するためのものであってもよく、さらに前述した機能をコンピュータシステムにすでに記録されているプログラムとの組み合わせで実現できるものであってもよい。
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれると同様に、特許請求の範囲に記載された発明とその均等の範囲に含まれるものである。
100…ソースコード自動生成装置、101…設計情報取得部、102…設計情報振分部、103…ソースコードテンプレート記憶部、104…ロジックソースコード確認部、105…ロジックソースコード生成部、106…参照ソースコード生成部、107…分離対象外ソースコード生成部、200…設計情報記憶部、300…ソースコード記憶部、400…ユーザ

Claims (5)

  1. ジョブを構成する演算処理が記述された設計情報を取得する設計情報取得部と、
    設計情報に記述された演算処理の実装部分の記述箇所を含むソースコードであるロジックソースコードが、前記設計情報取得部が取得した前記設計情報を修正する前の設計情報から生成されているか否かを判断するロジックソースコード確認部と、
    前記ロジックソースコード確認部においてロジックソースコードが生成されていないと判断された場合に、前記設計情報取得部が取得した前記設計情報に基づいてロジックソースコードを生成するロジックソースコード生成部と、
    前記ロジックソースコードに記述される演算処理の実装部分を利用して前記演算処理を実行するためのソースコードである参照ソースコードを、前記設計情報取得部が取得した前記設計情報に基づいて生成する参照ソースコード生成部と、
    を備えるソースコード自動生成装置。
  2. 前記設計情報は、前記ジョブにおける前記演算処理の流れの記述をさらに含み、
    前記設計情報に記述された前記演算処理の流れに従って前記ジョブを実行するためのソースコードである分離対象外ソースコードを、前記設計情報取得部が取得した前記設計情報に基づいて生成する分離対象外ソースコード生成部をさらに備える、
    請求項1に記載のソースコード自動生成装置。
  3. 前記設計情報取得部が取得した前記設計情報から前記演算処理に関する記述を抽出した分離対象設計情報を生成する処理と、前記設計情報から前記ジョブにおける前記演算処理の流れに関する記述を抽出した分離対象外設計情報を生成する処理とを実行する設計情報振分部をさらに備え、
    前記ロジックソースコード生成部は、前記ロジックソースコード確認部においてロジックソースコードが生成済みではないと判断された場合に、前記設計情報振分部が生成した前記分離対象設計情報に基づいて前記ロジックソースコードを生成し、
    前記参照ソースコード生成部は、前記設計情報振分部が生成した前記分離対象設計情報に基づいて前記参照ソースコードを生成し、
    前記分離対象外ソースコード生成部は、前記設計情報振分部が生成した前記分離対象外設計情報から前記分離対象外ソースコードを生成する、
    請求項2に記載のソースコード自動生成装置。
  4. 前記ロジックソースコードと前記参照ソースコードとは、オブジェクト指向における継承関係を有し、
    前記参照ソースコードは、前記ロジックソースコードを継承する請求項1から請求項3のいずれか1項に記載のソースコード自動生成装置。
  5. コンピュータに、
    ジョブを構成する演算処理が記述された設計情報を取得する設計情報取得ステップと、
    設計情報に記述された演算処理の実装部分の記述箇所を含むソースコードであるロジックソースコードが、前記設計情報取得ステップにおいて取得した前記設計情報を修正する前の設計情報から生成されているか否かを判断する確認ステップと、
    前記確認ステップにおいてロジックソースコードが生成されていないと判断された場合に、前記設計情報取得ステップにおいて取得した前記設計情報に基づいてロジックソースコードを生成するロジックソースコード生成ステップと、
    前記ロジックソースコードに記述される演算処理の実装部分を利用して前記演算処理を実行するためのソースコードである参照ソースコードを、前記設計情報取得ステップにおいて取得した前記設計情報に基づいて生成する参照ソースコード生成ステップと、
    を実行させるプログラム。
JP2014173305A 2014-08-27 2014-08-27 ソースコード自動生成装置、及びプログラム Active JP6301783B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2014173305A JP6301783B2 (ja) 2014-08-27 2014-08-27 ソースコード自動生成装置、及びプログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2014173305A JP6301783B2 (ja) 2014-08-27 2014-08-27 ソースコード自動生成装置、及びプログラム

Publications (2)

Publication Number Publication Date
JP2016048477A JP2016048477A (ja) 2016-04-07
JP6301783B2 true JP6301783B2 (ja) 2018-03-28

Family

ID=55649343

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2014173305A Active JP6301783B2 (ja) 2014-08-27 2014-08-27 ソースコード自動生成装置、及びプログラム

Country Status (1)

Country Link
JP (1) JP6301783B2 (ja)

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2001344105A (ja) * 2000-03-31 2001-12-14 Hitachi Software Eng Co Ltd Webアプリケーション開発方法、開発支援システム、および該方法に係るプログラムを記憶した記憶媒体
JP2003216428A (ja) * 2002-01-28 2003-07-31 Mitsubishi Electric Corp オブジェクト指向プログラミング支援装置
JP2003271382A (ja) * 2002-03-15 2003-09-26 Mitsubishi Denki Information Technology Corp ソフトウエア開発ツールを用いたアプリケーション開発システム
JP2010152667A (ja) * 2008-12-25 2010-07-08 Exa Corp ソースコード自動生成プログラム

Also Published As

Publication number Publication date
JP2016048477A (ja) 2016-04-07

Similar Documents

Publication Publication Date Title
AU2010212391B2 (en) Integration environment generator
Rodriguez-Echeverria et al. Towards a language server protocol infrastructure for graphical modeling
WO2018036342A1 (zh) 基于csar的模型文件的可视化设计方法及装置
JP2015215887A (ja) 変更管理システム、変更管理方法および変更管理プログラム
CN111610978A (zh) 一种小程序转换方法、装置、设备及存储介质
CN108762743A (zh) 一种数据表操作代码生成方法及装置
JP6479184B2 (ja) コンピュータ実行可能なモデルリバースエンジニアリング方法及び装置
CN111581920A (zh) 文档转换方法、装置、设备及计算机存储介质
Grønmo et al. Comparison of three model transformation languages
CN104750472A (zh) 一种终端应用的资源包管理方法和装置
Gulwani et al. StriSynth: synthesis for live programming
Gómez et al. An approach to the co-creation of models and metamodels in Enterprise Architecture Projects.
WO2020075532A1 (ja) システム移行支援装置、システム移行支援方法及びプログラム
JP2014006877A (ja) 入力文字列の集合から当該入力文字列の集合を文字列で表現する少なくとも1つのパターン表現に変換する方法、並びに、当該変換パターンを近似パターン表現式として取り出す方法、並びにそのコンピュータ及びコンピュータ・プログラム
KR102300005B1 (ko) 소프트웨어 컴포넌트를 표현하는 각각의 그래픽 객체 간의 연결 조작을 이용한 소프트웨어 개발 어시스트 방법 및 그 시스템
JP5041990B2 (ja) ソフトウェア部品抽出支援装置
US20100275183A1 (en) Source code auditor with a customized rules builder
JP6301783B2 (ja) ソースコード自動生成装置、及びプログラム
Sawprakhon et al. Sequence diagram generation with model transformation technology
US10127034B1 (en) System, method, and computer program for delayed evaluation of condition based trees
CN104484156A (zh) 多语言公式的编辑方法、编辑系统和多语言公式编辑器
JPWO2018174000A1 (ja) 構成管理装置、構成管理方法および構成管理プログラム
Feldmann et al. Improving task-driven software development approaches for creating service-based interactive applications by using annotated web services
JP2016051367A (ja) データ解析装置、データ解析方法、および、プログラム。
JP2012150740A (ja) プログラム生成装置及び方法

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20170328

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20180117

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20180301

R150 Certificate of patent or registration of utility model

Ref document number: 6301783

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150