(57)【要約】【課題】ユーザが、明示的にルール変更を繰り返し設定することなく、自動的に柔軟にルール変更が可能となり、よりスムーズに効率よくプログラムを自動生成可能なプログラム自動生成装置の提供を目的としている。【解決手段】上記目的を達成するために、本発明では、プログラム自動生成装置に、ユーザのルール変更やルール追加を学習する学習手段を持たせ、学習結果によりルール変更を自動的に行うことにより、ユーザは、明示的にルール変更を設定することなくルール変更を可能とする。【選択図】図１
2010049585.tif 000002
【特許請求の範囲】
【請求項１】
モデル、またはソースコードを入力する入力手段と、
当該モデルからソースコードを生成するコード生成手段と、
当該コード生成手段が参照するルールが記憶されるルールデータベースと、
前記コード生成手段が適用するルールを前記ルールデータベースから選択する適用ルール選択手段と、
を有するプログラム自動生成装置において、
モデルの作成、変更から前記適用ルールの変更を検出、学習するルール学習手段を設け、
当該ルール学習手段が学習結果を前記適用ルール選択手段に設定する
ことを特徴とするプログラム自動生成装置。
【請求項２】
請求項１記載のプログラム自動生成装置において、
当該入力手段への入力によりモデルを作成、変更するモデル作成手段を設けた
ことを特徴とするプログラム生成装置。
【請求項３】
請求項１乃至2記載のプログラム自動生成装置において、
前記モデル作成手段で作成されたモデル、または、前記コード生成手段で生成されたソースコードを表示する出力手段を設けた
ことを特徴とするプログラム自動生成装置。
【請求項４】
請求項1乃至3記載のプログラム自動生成装置において、
前記ルール学習手段は、
学習した内容が記憶される学習用データベースと、
コードの修正を監視し、コードの修正から変更された適用ルールを検出するコード修正検出手段と、
前記適用ルールを学習する学習手段と
を有し、
前記コード修正検出手段は、前記コード生成手段によって生成されたコードの修正がコード生成手段による場合は、前記ルールデータベースから変更された適用ルールを検出し、
前記学習手段は当該検出された適用ルールからの学習結果を前記学習用データベースに記憶する
ことを特徴とするプログラム自動生成装置。
【請求項５】
請求項1乃至3記載のプログラム自動生成装置において、
前記ルール学習手段は、
学習した内容が記憶される学習用データベースと、
前記適用ルール選択手段によって設定された適用ルールを抽出するルール選択抽出手段と、
前記適用ルールを学習する学習手段と
を有し、
前記ルール選択抽出手段は、前記適用ルール選択手段に設定された適用ルールを監視し、設定された適用ルールを抽出し、
前記学習手段は当該抽出された適用ルールからの学習結果を前記学習用データベースに記憶する
ことを特徴とするプログラム自動生成装置。
【請求項６】
請求項１乃至5記載のプログラム自動生成装置において、
前記ルール学習手段は、
前記ルールデータベースのルール一覧の中から変更された適用ルールを学習し、選択する
ことを特徴とするプログラム自動生成装置。
【請求項７】
請求項１乃至5記載のプログラム自動生成装置において、
前記ルール学習手段は、
前記ルールデータベースのルール一覧の中から変更されたルールを検出し、変更された要因を学習する
ことを特徴とするプログラム自動生成装置。
【請求項８】
請求項１乃至5記載のプログラム自動生成装置において、
前記ルール学習手段は、
前記ルールデータベースのルール一覧の中にないルールをユーザが適用した場合には、適用ルールを前記ルールデータベースに追加し、
当該追加されたルールを学習する
ことを特徴とするプログラム自動生成装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ソフトウェアのモデル記述からのプログラム生成を支援するプログラム自動生成装置に関するものである。
【背景技術】
【０００２】
近年、大規模で複雑なソフトウェア開発において、製品が高機能化しているために、ソフトウェアが複雑化しており、開発工数の増加が問題となっている。
【０００３】
そこで、ソフトウェア設計をUML(Unified Modeling Language)などのモデルで設計することより、ソフトウェアの再利用性を高め、また、モデルからコーディングコードを自動生成することによりソフトウェアの開発効率の向上や品質の確保を行うプログラム自動生成装置がある。(例えば、特許文献１)
【特許文献１】特開2007-280138公報
【発明の開示】
【発明が解決しようとする課題】
【０００４】
ユーザが、モデルからプログラムコードに変換するには、どのようなモデルをどのようなコードに変換するかのルールを定める必要がある。
【０００５】
従来のプログラム自動生成装置では、モデルからプログラムコードに変換するためのルールは、プログラム自動生成装置に初期設定されているルールが使用される。初期設定と異なるルールを使用する場合には、ユーザが、プログラム自動生成装置に対して、どのようなルールを使うかをその都度、細かに設定する必要があった。また、プログラム自動生成装置で用意されていないルールを新規に設定したい場合にも、明示的にどのようなルールを新規に登録かをその都度行う必要があり、手間がかかっていた。
【０００６】
そこで、本発明は、従来技術の有する未解決の課題に注目してなされたものであって、ユーザがルール設定を意識することなく、ルール変更が自動的に行われ、ユーザのルール設定の手間が少なく、使い勝手の良いプログラム自動生成装置の提供を目的としている。
【課題を解決するための手段】
【０００７】
上記の目的を達成するために、本発明では、プログラム自動生成装置にて、ユーザのルール変更やルール追加を学習し、学習していくうちに、ユーザがルール変更を行わなくても、自動的に生成ルールを変更することを可能とする。
【０００８】
これにより、ユーザは、明示的にルール変更を設定することなく自動的にルール変更が可能となり、よりスムーズに効率よくプログラムを自動生成可能なプログラム自動生成装置の提供をする。
【発明の効果】
【０００９】
本発明によれば、ユーザは、明示的なルール変更やルール追加を毎回行う必要なく自動的にルール変更が可能となり、よりスムーズに効率よくプログラムを自動生成可能なプログラム自動生成装置の提供が可能となる。
【発明を実施するための最良の形態】
【００１０】
以下、図面を用いて、本発明の実施例を説明する。
【実施例１】
【００１１】
本発明の第１の実施例について説明する。
【００１２】
図１はプログラム自動生成装置100の構成要素を示したものである。
【００１３】
プログラム自動生成装置100は、ユーザがモデルやコードを入力するための入力手段101、ユーザからの入力によりモデルを生成するモデル作成手段102、生成されたモデルからコードを生成するコード生成手段103、生成されたモデルやコードをユーザに表示する出力手段107、コード生成に使用されるルールを記憶しているルールデータベース(図１では、ルールＤＢと記載)105、ルールデータベース105から適用するルールを選択する適用ルール選択手段104、ユーザ操作から適用ルールや追加ルールの傾向を解析し学習するルール学習手段106、モデルやコードを表示する出力手段107から構成されている。
【００１４】
次に、各機能のハードウェア構成を説明する。
【００１５】
入力手段101は、キーボードやボタンなどで構成され、ユーザによる操作の入力が可能である。その他に、マイクやカメラなどの外部装置からの入力を受け取っても良い。
【００１６】
モデル作成手段102やコード生成手段103、適用ルール選択手段104、ルール学習手段106、ルールデータベース15は、記録装置により記録される。例えば、ROM(Read Only Memory)やRAM(Random Access Memory)等で構成され、プログラム自動生成装置で扱うデータやソフトウェアなどは全て記憶する。通常、筐体内部に構成されるが、着脱可能なメモリカードや外部より接続された記憶装置等で実現してもよい。
【００１７】
また、モデル作成手段102やコード生成手段103、適用ルール選択手段104、ルール学習手段106などの各機能を実行する手段は、記憶装置に記憶されたプログラムを中央制御装置、CPUが読取り、参照して、動作、処理、実行される。
【００１８】
出力手段107は、例えば、LCD（Liquid Crystal Display）や有機EL等の表示装置で構成され、入力手段より入力された文字や操作、モデル作成手段により作成されたモデルや、コード生成手段により生成されたコードなどを表示する。
【００１９】
本実施例では、ソフトウェア開発支援装置はマウスやキーボードといった入力部をもつPC（Personal Computer）を想定して説明を行っているが、プログラムが入力可能で、表示可能であれば、携帯電話、 PHS（Personal Handy-phone System）、PDA（Personal Digital Assistant）等、いかなるものであってもかまわない。
【００２０】
動作を詳細に説明する。
【００２１】
図２は、本実施例におけるモデルからコードを自動生成する際の処理のフローチャートである。
【００２２】
処理が開始される(S201)と入力手段により、ユーザからの入力を受け付ける(S202)。入力手段からのユーザからの操作により、モデル作成手段ではモデルを作成する(S203)。作成したモデルや操作に対する結果などは、出力手段によりユーザに対して表示される(S204)。
【００２３】
モデル作成後、ユーザが、入力手段より、コード自動生成を指示した場合(S205)、適用ルール選択手段は、プログラム自動生成装置が使用可能なルールを蓄積しているルールデータベースの中のルール一覧からどのルールを実際に適用してコードを生成するかを、ルール学習手段から解析結果により選択し、コード生成手段へ送信する(S206)。コード生成手段は、適用ルール選択手段より取得した適用ルールを使用して、モデル作成手段で作成されたモデルをコードに変換し、コードを生成する(S207)。
【００２４】
生成されたコードは、出力手段により、ユーザに表示され(S208)、処理が終了される(S209)。
【００２５】
図3は、ルール学習手段における処理のフローチャートである。
【００２６】
処理が開始される(S301)と、ルール学習手段は、入力手段からのユーザによる適用ルールの変更を監視し、ユーザによる適用ルールの変更を検出する(S302)。ルール学習手段は内部に学習手段用のデータベースを持ち、検出された変更をデータベースに蓄積する(S303)。そして、学習手段用データベースに蓄積されたルール変更を学習し(S304)、ユーザの使用ルールの傾向を解析し、次にユーザがモデルからコードを生成する際に、どのルールを適用するかを決定し(S305)、処理を終了する(S306)。
【００２７】
図2のS206で記載の適用ルール選択手段がルールデータベースの中のルール一覧からどのルールを実際に適用してコードを生成するかを決定する際、ルール学習手段は、解析して決定した次に使用すべきルールを適用ルール選択手段へ指定する。これにより適用ルール選択手段は、ユーザからの明示的な設定なしに、次に使用すべき設定が選択することが可能となる。
【００２８】
図4は、ルール学習手段がルールを学習した例である。
【００２９】
int型の変数nameを持つクラスＡというモデルがモデル作成手段において作成された例401である。
【００３０】
ルール学習手段を持たない、あるいはルール学習前のプログラム自動生成装置では、初期状態では、ユーザがルール変更を明示的に設定しない場合、コード生成手段が自動生成するコードはクラスＡの定義と、変数nameの定義、変数nameを取得するためのgetName関数、変数nameを設定するためのsetName関数が生成されるルールを使用してコード402が自動生成されるとする。
【００３１】
ルール学習手段を持つプログラム自動生成装置では、それまでにユーザがname取得関数getNameを自動生成しないルールを選択する動作を頻繁に行っている場合には、ユーザが次にモデルからコードを生成する場合にはgetNameを自動生成しないルールを取るべきであることをルール学習手段が学習し、適用ルール選択手段によりgetNameを自動生成しないルールが選択され、コード生成手段に指定するため、ユーザが明示的にルール変更をお子なくてもgetName関数のコードを生成しないコード403が自動的に生成される。
【００３２】
ルール学習手段106は、図5に示すように、コード修正検出手段501と学習手段502とで構成される。コード修正検出手段501は、コード生成手段により生成されたコードに対するユーザのコード修正を監視し、コード修正があった場合には、修正箇所の修正前のコードと修正後のコードを抽出し、修正箇所がコード生成手段により自動生成した箇所であれば、ルールデータベースの中のどのルールがどのルールに変更されたかを検出し、学習用データベースに蓄積する。学習手段502は学習のためのデータとして学習用データベースを使用する。
【００３３】
図6は、ルール学習手段が本構成で、ルールを学習した例である。モデル作成手段により、クラスＡと、変数nameが定義されている例601である。
【００３４】
このとき、ルール学習手段を持たないプログラム自動生成装置や学習前のプログラム自動生成装置のコード生成手段が自動生成するコードはクラスＡの定義と、変数nameの定義、変数nameを取得するためのgetName関数、変数nameを設定するためのsetName関数が生成されるルールを適用ルール選択手段より取得してコード602が自動生成されるとする。
【００３５】
自動生成されたコードに対して、ユーザがgetName関数のコードを削除した場合、コード修正検出手段は修正が行われたことを検知し、コード修正前をコード修正後のコードの差分を抽出し、getName関数はコード自動生成した箇所であることを認識し、ルールデータベースの中のgetName関数を自動生成するルールが自動生成しないというルールに変更されたことを学習手段用データベースに蓄積し、学習する。
【００３６】
学習後であれば、ユーザが次にモデルからコードを生成する場合には、適用ルール選択手段によりgetNameを自動生成しないルールが選択され、コード生成手段に指定するため、getName関数のコードを自動生成しないコード603が生成される。
【００３７】
または、ルール学習手段106は、図7に示すように、ルール選択抽出手段701と学習手段702とで構成される。ルール選択抽出手段701は、モデルからコードを自動生成する際にユーザが明示的にプログラム自動生成装置の適用ルール選択手段に対して設定した適用ルールを監視し、適用されたルールを取得し、学習用データベースに蓄積する。学習手段702は学習のためのデータとして学習用データベースを使用する。
【００３８】
図8は、ルール学習手段が、本構成で、ルールを学習した例である。モデル作成手段により、クラスＡと、変数nameが定義されている例801である。
【００３９】
このとき、ルール学習手段を持たないプログラム自動生成装置や学習前のプログラム自動生成装置のコード生成手段が自動生成するコードはクラスＡの定義と、変数nameの定義、変数nameを取得するためのgetName関数、変数nameを設定するためのsetName関数が生成されるルールを適用ルール選択手段より取得してコード802が自動生成されるとする。
【００４０】
コード生成手段がコードを自動生成する前に、ユーザがプログラム自動生成装置の適用ルール選択手段に対して、getName関数を自動生成しないルールを明示的に選択した場合、コード生成手段は、適用ルール選択手段により、getName関数のコードを自動生成しない。
【００４１】
ルール学習手段が、ユーザが頻繁にgetName関数を自動生成しないルールを選択していることを学習すると、学習後は、ユーザが明示的にルール変更することなく、適用ルール選択手段によりgetNameを自動生成しないルールが選択され、コード生成手段に指定するため、getName関数のコードを生成しないコード803が自動生成される。
【００４２】
勿論、上記記載の構成や手法でなくとも、ユーザの適用ルールを学習可能であればどのようにデータを取得しても構わない。
【００４３】
本実施例では、ルール学習手段では、プログラム自動生成装置により用意されたルールデータベースのルール一覧の中から、次にとるルールを学習し、選択することとしたが、どのような理由でルールを選択しているかを学習し、その内容によって、ルールを選択してもかまわない（図9）。
【００４４】
処理が開始される(S901)と、ルール学習手段は、入力手段からのユーザによる適用ルールの変更を監視し、検出する(S902)。次に、検出された変更を学習用データベースに蓄積する(S903)。
【００４５】
そして、学習手段用データベースに蓄積されたルール変更を学習し、ユーザの変更ルールの傾向から変更要因を解析、学習する(S904)。次にユーザがモデルからコードを生成する際に、どのルールをどのような理由から適用するかを決定し(S905)、処理を終了する(S906)。
【００４６】
例えば、それまでにユーザがルール変更する際には、同一ファイル内のもの全てに対して、同じルール変更を行っている場合には、ユーザのルール変更はファイル内の全てのルールを変更したいのであることを学習し、適用範囲にルール変更を反映させたルールを選択するなどである。
【００４７】
また、ルール学習手段は、ユーザがプログラム自動生成装置のルールデータベースのルール一覧の中にないルールを追加した際に、ルールを自動追加し、学習対象に含め、新規追加ルールを適用ルールとして選択してもかまわない（図10）。
【００４８】
処理が開始される(S1001)と、ルール学習手段は、入力手段からのユーザによる適用ルールの変更を監視し、ユーザによる適用ルールの追加を検出する(S1002)。ルール学習手段は内部に学習手段用のデータベースを持ち、検出された新規ルールをデータベースに蓄積する(S1003)。
【００４９】
また、検出された新規ルールをルールデータベースへも登録する(S1004)。そして、学習手段用データベースに蓄積されたルール変更を学習し(S1005)、ユーザの使用ルールの傾向を解析し、次にユーザがモデルからコードを生成する際に、どのルールを適用するかを選択し(S1006)、処理を終了する(S1007)。
【００５０】
図11は、ルールを学習した例である。
【００５１】
クラスＡがクラスBのオブジェクトを3つ持つと言うモデルがモデル作成手段において作成された例1101である。
【００５２】
ルール学習手段を持たない、或いはルールを学習前のプログラム自動生成装置では、初期状態では、ユーザがルール変更を明示的に設定しない場合、コード生成手段が自動生成するコードはクラスＡの定義と、クラスAの中で、クラスBの実体を生成するコード1行ずつ3行生成されるとする1102。
【００５３】
ルール学習手段を持つプログラム自動生成装置では、それまでにユーザが1つのクラスで同じクラスを複数生成する場合には、1行ずつクラス生成のコードを書かずに、for文によるクラス生成を行うというルールデータベースにはないルールを適用してコードを頻繁に修正していることを学習した場合は、ユーザが次にモデルからコードを生成する場合にfor文を使用してコードが生成される1103。
【００５４】
また、本実施例では、プログラム自動生成装置100は、入力手段101、モデル作成手段102、コード生成手段103、出力手段107、ルールデータベース105、適用ルール選択手段104、ルール学習手段106、出力手段107から構成されるものとしたが、ルールデータベース105のルールから、ルール学習手段106が学習し、適用ルール選択手段104がルールを選択する構成であれば、入力手段101、モデル作成手段102、コード生成手段103、出力手段107と同等の手段はいかなる構成であっても構わない。
【００５５】
また、モデル作成手段を持たず、入力手段により外部から入力されたモデルを使用しても構わない。
【００５６】
従来のプログラム自動生成装置では、モデルからプログラムコードに変換するためのルールは、プログラム自動生成装置に初期設定されているルールが使用される。初期設定と異なるルールを使用する場合には、ユーザが、プログラム自動生成装置に対して、どのようなルールを使うかをその都度、細かな設定が必要であった。
【００５７】
しかし、上述の本発明の実施例により、ユーザは、明示的にルール変更を繰り返し設定することなく、自動的に柔軟にルール変更が可能となり、よりスムーズに効率よくプログラムを自動生成可能なプログラム自動生成装置の提供が可能となる。
【図面の簡単な説明】
【００５８】
【図１】本発明の第1の実施例におけるプログラム自動生成装置の一構成図である
【図２】本発明の第1の実施例におけるプログラム自動生成装置のモデルからコードへの変換の際の処理のフローチャートを示した図である
【図３】本発明の第1の実施例におけるプログラム自動生成装置のルール学習手段の処理のフローチャートを示した図である
【図４】本発明の第1の実施例におけるプログラム自動生成装置のルール学習手段の学習例を示した図である
【図５】本発明の第1の実施例におけるプログラム自動生成装置のルール学習手段の一構成図を示した図である
【図６】本発明の第1の実施例におけるプログラム自動生成装置のルール学習手段の学習例を示した図である
【図７】本発明の第1の実施例におけるプログラム自動生成装置のルール学習手段の一構成図を示した図である
【図８】本発明の第1の実施例におけるプログラム自動生成装置のルール学習手段の学習例を示した図である
【図９】本発明の第1の実施例におけるプログラム自動生成装置のルール学習手段の処理のフローチャートを示した図である
【図１０】本発明の第1の実施例におけるプログラム自動生成装置のルール学習手段の処理のフローチャートを示した図である
【図１１】本発明の第1の実施例におけるプログラム自動生成装置のルール学習手段の学習例を示した図である
【符号の説明】
【００５９】
１００：プログラム自動生成装置
１０１：入力手段
１０２：モデル作成手段
１０３：コード生成手段
１０４：適用ルール選択手段
１０５：ルールデータベース
１０６：ルール学習手段
１０７：出力手段
４０１：モデル例
４０２：生成コード
４０３：学習後の生成コード
５０１：コード修正検出手段
５０２：学習手段
６０１：モデル例
６０２：生成コード
６０３：学習後の生成コード
７０１：ルール選択抽出手段
７０２：学習手段
８０１：モデル例
８０２：生成コード
８０３：学習後の生成コード
１００１：モデル例
１００２：生成コード
１００３：学習後の生成コード
【図１】
2010049585.tif 000003
【図２】
2010049585.tif 000004
【図３】
2010049585.tif 000005
【図４】
2010049585.tif 000006
【図５】
2010049585.tif 000007
【図６】
2010049585.tif 000008
【図７】
2010049585.tif 000009
【図８】
2010049585.tif 000010
【図９】
2010049585.tif 000011
【図１０】
2010049585.tif 000012
【図１１】
2010049585.tif 000013