(57)【要約】      （修正有）【課題】設計書とソースコードの乖離を防ぐとともに、ソースコードを変更すると同時にソースコード生成により上書きされないかチェックすることにより、ソースコード生成による後戻りを防ぐシステムを提供する。【解決手段】設計書１２１に変更があった場合、変更検知部１０１により検知され、設計書解析処理部１０２が設計情報抽出定義に基づき設計書１２１から設計情報を生成し、ソースコード生成部１０３により生成された設計情報とソースコードテンプレート１１３からソースコードを自動生成する。また、自動生成警告表示部１０４は、変更検知部１０１で検知されたソースコードにソースコード生成処理によって上書きされた部分がないかチェックし、上書きされる部分がある場合は警告情報を表示する。【選択図】図１
2011192143.tif 000002
【特許請求の範囲】
【請求項１】
設計書から設計情報を生成し、生成した設計情報とソースコードテンプレートからソースコードを生成するシステムであって、
前記設計書と前記ソースコードの変更検知手段と、
前記変更検知手段で検知された設計書から設計情報を生成する設計書解析処理手段と、
前記設計書解析処理手段で生成された設計情報と前記ソースコードテンプレートからソースコードを生成するソースコード生成手段と、
前記変更検知手段で検知されたソースコードがソースコード生成処理によって上書きされる部分がないかチェックし、上書きされる部分がある場合は警告情報を表示する手段とを備えることを特徴とする自動ソースコード生成システム。
【請求項２】
前記ソースコード生成手段は、生成するソースコードが存在しない場合はすべてソースコードを生成し、生成するソースコードが存在する場合はソースコードを解析し、自動生成部分のみソースコードを生成する手段をさらに備えることを特徴とする請求項１に記載する自動ソースコード生成システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、設計書から設計情報を生成し、生成した設計情報とソースコードテンプレートからソースコードを生成するシステムに関するものである。
【背景技術】
【０００２】
ソフトウェア開発では、低コスト化・短納期化・高品質化の要求により、生産性向上を強く求められており、生産性を向上させる技術の1つとしてソースコードの自動生成技術が注目されている。
従来からソースコードを自動生成する技術としては、種々の技術が提案されている。
例えば、テンプレートエンジンを使用し、ソースコードテンプレートと設計情報からソースコードを自動生成する技術（例えば、特許文献１、特許文献２参照）等が知られている。
【０００３】
ソースコードの雛形であるソースコードテンプレートを作成し、作成したソースコードテンプレートに定義したパラメータをＥｘｃｅｌ（商標）などの表計算ソフトを使用して作成した設計書から抽出した設計情報に変換することでソースコードを自動生成する。
テンプレートエンジンは、Apache Jakartaプロジェクトで開発されているVelocityやEclipseプロジェクトで開発されているJETなどが知られている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００６−１０７０２５号公報
【特許文献２】特開２００８−０５２３５６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、上記の従来技術には次のような問題点がある。
ソースコードの生成後、仕様変更が発生した場合、設計書を編集した後にソースコードの生成を行う必要があるが、開発者がソースコードの生成を忘れる場合や、設計書を編集せずにソースコードを編集する場合もあり、設計書とソースコードの乖離が発生しやすい。設計書とソースコードを２重管理する必要があるため、設計書とソースコードの整合性を保つための作業工数がかかっていた。
また、生成したソースコードを開発者が直接編集することになるが、自動生成部分を編集した後にソースコードを生成することで編集したソースコードが上書きされてしまい、後戻りが発生することがある。後戻りが発生することで、編集したソースコードを再度実装する必要があるため余計な作業工数が発生する。
【０００６】
本発明は前記課題を解決するためのものであり、設計書を変更すると同時にソースコードを生成することにより、設計書とソースコードの乖離を防ぐとともに、設計書とソースコードの整合性を取るための作業工数とソースコード生成の作業工数を削減することが可能となり、さらに、ソースコードを変更すると同時にソースコード生成により上書きされないかチェックすることにより、ソースコード生成による後戻りを防ぐことを可能とする自動ソースコード生成システムを提供することを目的とする。
【課題を解決するための手段】
【０００７】
上記課題を解決するため、本発明は、設計書から設計情報を生成し、生成した設計情報とソースコードテンプレートからソースコードを生成するシステムであって、前記設計書と前記ソースコードの変更検知手段と、前記変更検知手段で検知された設計書から設計情報を生成する設計書解析処理手段と、前記設計書解析処理手段で生成された設計情報と前記ソースコードテンプレートからソースコードを生成するソースコード生成手段と、前記変更検知手段で検知されたソースコードがソースコード生成処理によって上書きされる部分がないかチェックし、上書きされる部分がある場合は警告情報を表示する手段とを備えることを特徴とする。
また、前記ソースコード生成手段は、生成するソースコードが存在しない場合はすべてソースコードを生成し、生成するソースコードが存在する場合はソースコードを解析し、自動生成部分のみソースコードを生成する手段をさらに備えることを特徴とする。
【発明の効果】
【０００８】
本発明によれば、設計書を変更すると同時にソースコードを生成することにより、設計書とソースコードの乖離を防ぐことともに、設計書とソースコードの整合性を取るための作業工数とソースコード生成の作業工数を削減することが可能となる。
また、ソースコードを変更すると同時にソースコード生成により上書きされないかチェックすることにより、ソースコード生成による後戻りを防ぐことを可能となる。
【図面の簡単な説明】
【０００９】
【図１】本発明の一実施の形態に係る自動ソースコード生成システムの概略構成を示すブロック図である。
【図２】本発明の一実施の形態に係る自動ソースコード生成システムの行う処理の概要を示すフローチャートである。
【図３】設計書解析処理の入力となる設計書の一例を示す図である。
【図４】設計書解析処理に用いられる設計情報抽出定義のデータ構造の一例を示す図である。
【図５】設計書解析部の行う設計書解析処理手順を示すフローチャートである。
【図６】設計書解析処理の生成する設計情報の一例を示す図である。
【図７】ソースコード生成部に用いられる自動生成定義のデータ構造の一例を示す図である。
【図８】ソースコード生成部に用いられるソースコードテンプレートの一例を示す図である。
【図９】ソースコード生成部の行うソースコード生成処理手順を示すフローチャートである。
【図１０】ソースコード生成部の生成するソースコードの一例を示す図である。
【図１１】自動生成警告表示処理の入力となるソースコードの一例を示す図である。
【図１２】自動生成警告表示部の行う自動生成警告表示処理手順を示すフローチャートである。
【図１３】自動生成警告表示処理の表示する自動生成警告情報の一例を示す図である。
【発明を実施するための形態】
【００１０】
以下、本発明の一実施の形態に係る自動ソースコード生成システムについて、図面に基づき説明する。
図１は、本実施の形態に係る自動ソースコード生成システムの概略構成を示すブロック図である。
自動ソースコード生成システム１００は、変更検知部１０１と、設計書解析部１０２と、ソースコード生成部１０３と、自動生成警告表示部１０４の各処理部から構成されている。
また、自動ソースコード生成処理に必要な情報として、設計情報抽出定義１１１と自動生成定義１１２とソースコードテンプレート１１３が予め定義されており、また、自動ソースコード生成処理に必要な情報を格納する設計情報格納部１１４とを備える。
【００１１】
変更検知部１０１は、設計書１２１を読み込み、設計書１２１の変更を検出する。設計書１２１に変更が検出された場合は設計書解析部１０２を起動する。また、ソースコード１２２を読み込み、ソースコード１２２の変更を検出する。ソースコード１２２に変更が検出された場合は自動生成警告表示部１０４を起動する。設計書１２１とソースコード１２２に変更が検出されない場合、処理は行われない。
【００１２】
設計書解析部１０２は、変更検知部１０１から起動され、変更が検出された設計書１２１を読み込み、設計情報抽出定義１１１に定義されている設計情報を抽出するための定義に基づき、設計書解析処理を実行し設計情報を生成する。
生成された設計情報は設計情報格納部１１４に格納し、ソースコード生成部１０３を起動する。設計情報抽出定義１１１は事前に定義する。
【００１３】
ソースコード生成部１０３は、自動生成定義１１２に定義されている自動生成を行うための定義に基づき、ソースコード生成処理を実行し設計情報格納部１１４に格納された設計情報とソースコードテンプレート１１３からソースコードを生成する。
生成するソースコードが存在しない場合はすべてソースコードを生成し、生成するソースコードが存在する場合はソースコードを解析し、自動生成部分のみソースコードを生成し、手動実装部分は生成しない。自動生成定義１１２とソースコードテンプレート１１３は事前に定義する。
【００１４】
自動生成警告表示部１０４は、変更検知部１０１から起動され、変更が検出されたソースコード１２２を読み込み、ソースコードの変更部分がソースコード生成処理によって上書きされる部分がないかチェックし、上書きされる部分がある場合は、自動生成警告情報１２３を表示する。
以上の構成により、本実施の形態に係る自動ソースコード生成システム１００では、設計書１２１に変更があった場合、設計情報抽出定義１１１に基づき設計書１２１から設計情報を生成し、自動生成定義１１２に基づき設計情報とソースコードテンプレート１２３からソースコード１２２を生成する。
また、ソースコード１２２に変更があり、その変更部分が自動生成部分の場合、警告情報を表示する。
【００１５】
以上のように構成された自動ソースコード生成システム１００の行う自動ソースコード生成処理の概要について説明する。
図２は、自動ソースコード生成処理の概要を示すフローチャートである。
まず、変更検知部１０１は、設計書１２１を読み込み、設計書の変更を検出する（ステップ２０１）。
設計書１２１に変更が検出された場合（ステップ２０２）、設計書解析部１０２は設計情報抽出定義１１１に基づき、設計書解析処理を実行し設計情報を生成し、設計情報格納部１１４に設計情報を格納する（ステップ２０３）。
ソースコード生成部１０３は自動生成定義１１２に基づき、ソースコード生成処理を実行し、設計情報とソースコードテンプレート１１３からソースコードを生成する（ステップ２０４）。
【００１６】
変更検知部１０１は、ソースコード１２２を読み込み、ソースコード１２２の変更を検出する（ステップ２０５）。
ソースコード１２２に変更が検出された場合（ステップ２０６）、自動生成警告表示部１０４はソースコードの変更部分が自動生成によって上書きされる部分がないかチェックし、上書きされる部分がある場合は、自動生成警告情報１２３を作成し表示する（ステップ２０７）。
【００１７】
以下、本実施の形態に係る自動ソースコード生成システム１００の詳細について説明する。
設計書解析部１０２が行う設計書解析処理の詳細について説明する。
図３は、設計書解析処理の入力となる設計書１２１の一例を示す図である。
この例では、Excelなどの表計算ソフトを使用して設計書１２１を作成した場合を表している。
図３は、業務処理を実行する業務クラスの設計書を表している。業務クラス設計書は、業務クラスのパッケージ名３０１と、クラス名３０２と、業務処理メソッド３０３の定義を有する。業務処理メソッド３０３の定義には、業務処理メソッドの名前３０３と、引数３０４と、戻り値３０５と、説明３０６が含まれている。
業務処理メソッドの定義は複数可能で、図３では２つの業務処理メソッドを定義している。
【００１８】
図４は、設計書解析処理に用いられる設計情報抽出定義１１１のデータ構造の一例を示す図である。
図４は、図３の業務クラス設計書から設計情報を抽出するための定義を表している。この例では、設計情報抽出定義１１１は、XML（Extensible Markup Language）形式で定義している。設計情報抽出定義１１１は、設計情報を抽出する設計書のシートのインデックスを定義する＜sheet＞タグ４０１と、設計情報を抽出するルールタグ４０２〜４０４を有する。
【００１９】
設計情報を抽出するルールには、ラベル情報を抽出する＜label＞タグ４０２〜４０３と、表情報を抽出する＜vlist＞タグ４０４がある。＜vlist＞タグ４０４は、表の列を表す＜property＞タグ４０５〜４０９を有する。
＜label＞タグ４０２〜４０３、＜vlist＞タグ４０４、＜property＞タグ４０５〜４０９は、設計情報を抽出するための検索文字列であるmatch属性を有する。
図５は、設計書解析部１０２が行う設計書解析処理手順を示すフローチャートである。
設計書解析部１０２は、事前に定義した設計情報抽出定義１１１を読み込み（ステップ５０１）、設計書１２１を読み込む（ステップ５０２）。
設計情報抽出定義の＜sheet＞タグのindex属性の値に対応するシートを読み込む（ステップ５０３）。
設計情報抽出定義のルールタグについて以下の処理を繰り返す（ステップ５０４）。ルールタグの種類によて処理を分岐する（ステップ５０５）。
【００２０】
ルールタグが＜label＞タグの場合、＜label＞タグのmatch属性の文字列でセルを検索する（ステップ５０６）。セルが見つかった場合（ステップ５０７）、見つかったセルの右隣のセルの値を設計情報として抽出する（ステップ５０８）。
ルールタグが＜vlist＞タグの場合、＜vlist＞タグのmatch属性の文字列でセルを検索する（ステップ５０９）。
【００２１】
セルが見つかった場合（ステップ５１０）、＜vlist＞タグの＜property＞タグについて次の処理を繰り返す（ステップ５１１）。
＜property＞タグのmatch属性の文字列でセルを検索し、見つかったセルの下側のセルの値を設計情報として抽出する（ステップ５１２）。
ステップ５０５〜５１２の処理をルールタグについて繰返し実行することにより設計書から設計情報を抽出し、抽出した設計情報を生成する（ステップ５１３）。
【００２２】
図６は、設計書解析処理の生成する設計情報の一例を示す図である。
図６は、図３の業務クラス設計書を入力として、図４の設計情報抽出定義１１１に基づいて、設計書解析処理を行って生成された設計情報を表している。
設計情報はXML（Extensible Markup Language）形式で生成している。
設計情報は、業務クラス設計書のパッケージ名６０１、クラス名６０２、業務処理メソッド６０３を有する。生成された設計情報設計情報格納部１１４に格納される。
ソースコード生成部１０３が実行するソースコード生成処理の詳細について説明する。
【００２３】
図７は、ソースコード生成部に用いられる自動生成定義１１２のデータ構造の一例を示す図である。ここでは、Ｅｃｌｉｐｓｅプロジェクトで開発されているテンプレートエンジンであるJETを使用して自動生成定義１１２を作成した場合を表している。
自動生成定義１１２は、設計情報を読み込むための定義７０１と、読み込んだ設計情報とソースコードテンプレート１１３からソースコードを生成するための定義７０２〜７０３を有する。
設計情報を読み込むための定義７０１は、＜c:load＞タグで行う。＜c:load＞タグはurl属性で読み込む設計情報を指定し、var属性に読み込んだ設計情報を格納する変数を指定する。
読み込んだ設計情報とソースコードテンプレート１１３からソースコードを生成するための定義７０２〜７０３は、＜c:iterate＞タグと＜ws:file＞タグで行う。
【００２４】
＜c:iterate＞タグはselect属性で設計情報を指定し、指定された設計情報について＜c:iterate＞タグで囲まれた処理を繰り返し行い、var属性に指定され変数に設計情報を格納する。この例では＜c:iterate＞タグに囲まれた＜ws:file＞タグの処理を指定された設計情報について繰り返し行う。＜ws:file＞はtemplate属性にソースコードテンプレート１１３を指定し、path属性にソースコードを生成するパスを指定することでソースコードを生成する。
【００２５】
図８は、ソースコード生成部１０３に用いられるソースコードテンプレート１１３の一例を示す図である。ここでは、Ｅｃｌｉｐｓｅプロジェクトで開発されているテンプレートエンジンであるJETを使用してソースコードテンプレート１１３を作成した場合を表している。
ソースコードテンプレート１１３は、設計情報を埋め込むための＜c:get＞タグと＜c:iterate＞タグ８０１〜８０８を有する。＜c:get＞タグは、select属性で指定した設計情報をソースコードテンプレート１１３に埋め込む（８０１、８０２、８０４、８０５、８０６、８０７）。lowercaseFirstは指定した設計情報の先頭１文字目を小文字にする関数である。＜c:iterate＞タグはselect属性で設計情報を指定し、指定された設計情報タグについて＜c:iterate＞タグで囲まれた処理を繰り返し行い、var属性に指定され変数に設計情報を格納する（８０３）。
【００２６】
図９は、ソースコード生成部１０４の行うソースコード生成処理手順を示すフローチャートである。
以下、図７の自動生成定義１１２に基づいて、図８のソースコードテンプレートと図６の設計情報からソースコード生成処理を行う場合について説明する。
【００２７】
ソースコード生成部１０４は、事前に定義した自動生成定義１１２を読み込む（ステップ９０１）。自動生成定義１１２の設計情報を読み込むための定義に基づいて設計情報を読み込む（ステップ９０２）。
図７の自動生成定義１１２は、logic.xmlという設計情報を読み込み、読み込んだ設計情報をlogicDocという変数に格納する。logic.xmlは図６の設計情報を指している。
読み込んだ設計情報とソースコードテンプレートからソースコードを生成するための定義に基づいてソースコードを生成する（ステップ９０３）。
図６の設計情報の＜業務処理クラス設計書＞タグで囲まれた情報をlogicという変数に格納し、logic.jetというソースコードテンプレート１１３の＜c:get＞タグ
をlogic変数に格納された設計情報に変換することでソースコードを生成する。
【００２８】
logic.jetは図８のソースコードテンプレート１１３を指している。例えば、図８の＜c:get select=”$logic/クラス名”/＞８０２は、図６の＜クラス名＞タグの「CustomerLogic」６０２という情報に変換する。図６では＜業務処理クラス設計書＞タグは１つしかないが、複数定義されている場合は上記の処理を繰り返す。
生成するソースコードが存在しない場合は全てのソースコードを生成し（ステップ９０４）、生成するソースコードが存在する場合はソースコードを解析し、自動生成部分のみソースコードを生成し手動実装部分は生成しない（ステップ９０５）。
「// START UOC」という行から「// END UOC」という行までが手動実装部分を表している。
【００２９】
図１０は、ソースコード生成部１０３の生成するソースコードの一例を示す図である。
図１０は、図７の自動生成定義１１２に基づいて、図８のソースコードテンプレートと図６の設計情報からソースコード生成処理を行って生成されたソースコードを表している。
自動生成警告表示部１０４が実行する自動生成警告表示処理の詳細について説明する。
【００３０】
図１１は、自動生成警告表示処理の入力となるソースコードの一例を示す図である。
図１１は、図１０のソースコードを一部編集したソースコードである。
２７行目の「// START UOC」という行から２９行目の「// END UOC」という行までが手動実装部分を表している。手動実装部分である１６行目に「CustomerDao dao = new CustomerDao()」という行を追加し、自動生成部分である１８行目に「arrayList = dao.select();」という行を追加している。
行を追加しソースコードを変更し、変更検知部１０１がソースコードの変更を検知すると自動生成警告表示部１０４を起動する。
【００３１】
図１２は、自動生成警告表示部１０４の行う自動生成警告表示処理手順を示すフローチャートである。
自動生成警告表示部１０４は、変更されたソースコードを読み込み（ステップ１２０１）、変更された行についてステップ１２０３〜１２０５のステップを繰り返す（ステップ１２０２）。変更された行がソースコード生成によって、上書きされないかチェックする（ステップ１２０３）。ソースコード生成によって上書きされる場合は（ステップ１２０４）、変更された行を自動生成警告行に設定する（ステップ１２０５）。
設定された自動生警告行に自動生成警告情報１２３を表示する（ステップ１２０６）。
【００３２】
図１３は、自動生成警告表示処理の表示する自動生成警告情報の一例を示す図である。
図１３は、自動生成部分である１８行目に「arrayList = dao.select();」という行を追加しているため、１８行目に警告のアイコンを表示し、「ソースコード生成によって上書きされます」という自動生成警告情報１２３を表示している。
以上の構成により、本実施の形態に係る自動ソースコード生成システム１００では、設計書１２１に変更があった場合、設計情報抽出定義１１１に基づき設計書１２１から設計情報を生成し、自動生成定義１１２に基づき設計情報とソースコードテンプレート１２３からソースコード１２２を生成する。また、ソースコード１２２に変更があり、その変更部分が自動生成部分の場合、警告情報を表示する。
【００３３】
従って、設計書を変更すると同時にソースコードを生成することにより、設計書とソースコードの乖離を防ぐことともに、設計書とソースコードの整合性を取るための作業工数とソースコード生成の作業工数を削減することが可能となる。
また、ソースコードを変更すると同時にソースコード生成により上書きされないかチェックすることにより、ソースコード生成による後戻りを防ぐことが可能となる。
【符号の説明】
【００３４】
１００    自動ソースコード生成システム
１０１    変更検知部
１０２    設計書解析部
１０３    ソースコード生成部
１０４    自動生成警告表示部
１１１    設計情報抽出定義
１１２    自動生成定義
１１３    ソースコードテンプレート
１１４    設計情報格納部
１２１    設計書
１２２    ソースコード
１２３    自動生成警告情報
【図１】
2011192143.tif 000003
【図２】
2011192143.tif 000004
【図３】
2011192143.tif 000005
【図４】
2011192143.tif 000006
【図５】
2011192143.tif 000007
【図６】
2011192143.tif 000008
【図７】
2011192143.tif 000009
【図８】
2011192143.tif 000010
【図９】
2011192143.tif 000011
【図１０】
2011192143.tif 000012
【図１１】
2011192143.tif 000013
【図１２】
2011192143.tif 000014
【図１３】
2011192143.tif 000015