(57)【要約】      （修正有）【課題】プログラム処理の高速化を図るとともに、メモリの使用効率を向上させることができるようにする。【解決手段】プラットフォームに非依存で実行可能であり、かつ、オブジェクト指向である設計図面ファイル２０１を解析して、設計図面情報２０６を抽出する設計図面情報入力部２０３と、オブジェクトをメモリに配置するルールを示すオブジェクト配置ルール情報２０８を含むプラットフォーム依存情報２０７を入力するプラットフォーム依存情報入力部２０４と、プラットフォーム依存情報２０７からオブジェクト配置ルール情報２０８を抽出するオブジェクト配置ルール抽出部２０５と、抽出された設計図面情報２０６とオブジェクト配置ルール情報２０８とに基づいて、オブジェクトを静的あるいは動的に生成するように決められたプログラムコード２１０を生成するプログラム生成部２０９とを具備する。【選択図】図２
2007148577.tif 000002
【特許請求の範囲】
【請求項１】
プラットフォームに非依存で実行可能であり、かつ、オブジェクト指向である設計図面ファイルを解析して、設計図面情報を抽出する設計図面解析手段と、
オブジェクトをメモリに配置するルールを示すオブジェクト配置ルール情報を少なくとも含むプラットフォーム依存情報を入力するプラットフォーム依存情報入力手段と、
前記プラットフォーム依存情報から、前記オブジェクト配置ルール情報を抽出するオブジェクト配置ルール抽出手段と、
前記設計図面解析手段で抽出した前記設計図面情報と前記オブジェクト配置ルール抽出手段で抽出した前記オブジェクト配置ルール情報とに基づいて、前記オブジェクトを静的あるいは動的に生成するように決められたプログラムコードを生成するプログラムコード生成手段と
を有することを特徴とするプログラムコード生成装置。
【請求項２】
前記プログラムコード生成手段は、前記オブジェクトの生成時には、当該オブジェクトのクラス名及び生成時刻を含むオブジェクト生成情報を記録し、前記オブジェクトの削除時には、当該オブジェクトのクラス名及び削除時刻を含むオブジェクト削除情報を記録すする前記プログラムコードを生成することを特徴とする請求項１に記載のプログラムコード生成装置。
【請求項３】
前記オブジェクト生成情報及び前記オブジェクト削除情報に基づいて、前記オブジェクトの瞬間最大数をクラス毎に計算するオブジェクト瞬間最大数計算手段を更に有することを特徴とする請求項２に記載のプログラムコード生成装置。
【請求項４】
前記オブジェクト瞬間最大数計算手段が算出した情報を、前記プラットフォーム依存情報に反映させて更新を行うプラットフォーム依存情報更新手段を更に有することを特徴とする請求項３に記載のプログラムコード生成装置。
【請求項５】
前記プログラムコード生成手段は、前記オブジェクト生成情報及び前記オブジェクト削除情報に基づいて、前記オブジェクトの瞬間最大数を算出する前記プログラムコードを生成することを特徴とする請求項２に記載のプログラムコード生成装置。
【請求項６】
前記プログラムコード生成手段は、前記プラットフォーム依存情報に含まれる前記オブジェクト配置ルール情報を更新する前記プログラムコードを生成することを特徴とする請求項１に記載のプログラムコード生成装置。
【請求項７】
プラットフォームに非依存で実行可能であり、かつ、オブジェクト指向である設計図面ファイルを解析して、設計図面情報を抽出する設計図面解析ステップと、
オブジェクトをメモリに配置するルールを示すオブジェクト配置ルール情報を少なくとも含むプラットフォーム依存情報を入力するプラットフォーム依存情報入力ステップと、
前記プラットフォーム依存情報から、前記オブジェクト配置ルール情報を抽出するオブジェクト配置ルール抽出ステップと、
前記設計図面解析ステップで抽出した前記設計図面情報と前記オブジェクト配置ルール抽出ステップで抽出した前記オブジェクト配置ルール情報とに基づいて、前記オブジェクトを静的あるいは動的に生成するように決められたプログラムコードを生成するプログラムコード生成ステップと
を有することを特徴とするプログラムコード生成方法。
【請求項８】
請求項７に記載のプログラムコード生成方法をコンピュータに実行させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ソフトウェアの設計図面情報からプログラムコードを自動生成するプログラムコード生成装置、プログラムコード生成方法及び当該プログラムコード生成方法をコンピュータに実行させるためのプログラムに関するものである。
【背景技術】
【０００２】
近年のソフトウェア設計技術として、モデル駆動型アーキテクチャー（Model Driven Architecture技術（以降、この技術を「ＭＤＡ技術」と称す））が広まり、採用されるようになってきている。
【０００３】
一般的にＭＤＡ技術とは、オペレータが入力したソフトウェアの設計図面情報から各種プラットフォームのプログラムコードを自動的に生成し、且つ、入力したソフトウェアの設計図面情報をＭＤＡ専用ツール上で動作及び検証することが可能な技術である。これらのソフトウェアの設計図面情報における代表的な例としては、オブジェクト指向技術のモデル表記言語であるＵＭＬ（Unified Modeling Language）やＳＤＬ（Specification & Description Language）などが挙げられる。
【０００４】
既存のプログラム生成装置で生成するプログラムのオブジェクトは、動的に生成されることが多い。メモリを動的に生成するとは、Ｃ言語ではmallocやfree、Ｃ＋＋言語ではnewやdelete等を使って、メモリ領域の確保と解放を行うことが一般的である。これらのメモリの確保は、その管理が煩わしくなり一般的に実行速度が遅く時間が掛かる。また、メモリ領域の確保及び解放を繰り返すことによりフラグメンテーションが発生し、システムの安定動作を保証できなくなる可能性が高い。
【０００５】
他方、オブジェクトを割り当てるためのメモリ領域を配列として用意する静的なメモリ生成方法がある。この方法は、メモリへのアクセス時間やオブジェクト生成に掛かる時間が動的なものに比べて早いが、オブジェクトが割り当てられていなくても決まった領域を常時占有しているため、メモリ効率が悪いといえる。
【０００６】
プログラム処理の特徴を掴み、オブジェクトを静的あるいは動的に配置することを決めることがプログラムのパフォーマンスを左右する。
【０００７】
ＭＤＡの最適化を行う技術については、下記の特許文献１に掲載の「オブジェクト指向最適化コード生成装置及び方法」、下記の特許文献２に掲載の「最適化ソフトウエア生成方法」において、オブジェクト指向機能排除手段を用いて仮想関数の機能を排除することにより、メモリ使用量を削減したコードを生成するものがある。しかしながら、これらの特許文献は、オブジェクトのメモリを静的・動的に確保するよう決められたコードを生成するものではなかった。
【０００８】
下記の特許文献３に記載の「プログラム生成方法」は、設計ドキュメントより生成したプログラムを動作させ、プログラム動作に誤りがあると設計ドキュメントを自動で書き換えるプログラム生成方法を開示する。しかしながら、この特許文献では、メモリの使用量や実行速度の効率化に関するプログラム生成方法については、考慮するものではなかった。
【０００９】
【特許文献１】特開平１１−２３７９８０号公報
【特許文献２】特開２００４−１１８８６５号公報
【特許文献３】特開平０２−２５３４４３号公報
【発明の開示】
【発明が解決しようとする課題】
【００１０】
本発明は前述の問題点に鑑みてなされたものであり、プログラム処理の高速化を図るとともに、メモリの使用効率を向上させることを実現するプログラムコード生成装置、プログラムコード生成方法及びプラグラムを提供することを目的とする。
【課題を解決するための手段】
【００１１】
本発明のプログラムコード生成装置は、プラットフォームに非依存で実行可能であり、かつ、オブジェクト指向である設計図面ファイルを解析して、設計図面情報を抽出する設計図面解析手段と、オブジェクトをメモリに配置するルールを示すオブジェクト配置ルール情報を少なくとも含むプラットフォーム依存情報を入力するプラットフォーム依存情報入力手段と、前記プラットフォーム依存情報から、前記オブジェクト配置ルール情報を抽出するオブジェクト配置ルール抽出手段と、前記設計図面解析手段で抽出した前記設計図面情報と前記オブジェクト配置ルール抽出手段で抽出した前記オブジェクト配置ルール情報とに基づいて、前記オブジェクトを静的あるいは動的に生成するように決められたプログラムコードを生成するプログラムコード生成手段とを有する。
【００１２】
本発明のプログラムコード生成方法は、プラットフォームに非依存で実行可能であり、かつ、オブジェクト指向である設計図面ファイルを解析して、設計図面情報を抽出する設計図面解析ステップと、オブジェクトをメモリに配置するルールを示すオブジェクト配置ルール情報を少なくとも含むプラットフォーム依存情報を入力するプラットフォーム依存情報入力ステップと、前記プラットフォーム依存情報から、前記オブジェクト配置ルール情報を抽出するオブジェクト配置ルール抽出ステップと、前記設計図面解析ステップで抽出した前記設計図面情報と前記オブジェクト配置ルール抽出ステップで抽出した前記オブジェクト配置ルール情報とに基づいて、前記オブジェクトを静的あるいは動的に生成するように決められたプログラムコードを生成するプログラムコード生成ステップとを有する。
【００１３】
本発明のプログラムは、前記プログラムコード生成方法をコンピュータに実行させるためのものである。
【発明の効果】
【００１４】
本発明によれば、プログラム処理の高速化を図るとともに、メモリの使用効率を向上させることができる。
【発明を実施するための最良の形態】
【００１５】
以下、添付の図面に沿って、本発明の実施形態について説明する。
図１は、本発明の実施形態に係るプログラムコード生成装置のシステム構成を示すブロック図である。
【００１６】
図１において１は、当該プログラムコード生成装置を統括的に制御するＣＰＵであり、以下に示す３〜１０の各構成部をバス２を介してアクセスして制御を行う。図１において３は、バス２を介してＣＰＵ１からアクセス可能な読み出し専用メモリ、すなわちＲＯＭである。本実施形態のＲＯＭ３には、ＣＰＵ１の動作を既定する処理プログラム３ａと、処理プログラム３ａにより使用されるパラメータ３ｂとが格納されている。
【００１７】
図１において４は、読み書き可能なメモリ、すなわちＲＡＭである。本実施形態のＲＡＭ４には、処理プログラム３ａにより作成／変更がなされる、設計図面情報、プラットフォーム依存情報、プログラムコード、オブジェクト配置ルール情報、ライブラリ、プログラム実行形式、プログラム実行ログ及び瞬間最大オブジェクト数情報をそれぞれ格納するための格納領域（順に４ａ、４ｂ、４ｃ、４ｄ、４ｅ、４ｆ、４ｇ及び４ｈ）が確保されている。
【００１８】
図１において５は、入力インターフェイスであり、キーボード、マウス、タブレット等の入力装置６を介してなされる入力を受け取る。図１において７は、出力インターフェイスであり、ＣＲＴ、ＬＣＤ等の表示装置８ａ、あるいはプリンタ、プロッタ等の印刷装置８ｂなどの出力装置８に対して、データの出力を行う。
【００１９】
図１において９は、外部記憶装置インターフェイスであり、ＨＤ、ＦＤ、ＣＤ−ＲＯＭ、ＭＤなどの外部記憶装置１０に対するデータの入出力を行うものである。
【００２０】
本実施形態では、ＣＰＵ１の動作を既定する処理プログラム３ａやパラメータ３ｂがＲＯＭ３にあるものとして、また、処理対象となる各データの格納領域（４ａ〜４ｈ）がＲＡＭ４にあるものとして説明を行うが、これらをすべて、外部記憶装置１０上に配置することも可能であり、更に、必要に応じて、外部記憶装置１０からＲＡＭ４上にロードし、使用することもできる。また、ＣＰＵ１のキャッシュメモリ上に配置することも同様に可能である。また、バス２をネットワークで構成することも同様に可能である。
【００２１】
図２は、本発明の実施形態に係るプログラムコード生成装置の機能構成を示すブロック図である。具体的に図２は、図１においてＣＰＵ１が処理プログラム３ａを動作することで構成される各構成部と、ＲＡＭ４内の各格納領域４ａ〜４ｈに格納される情報（データ）や外部記憶装置１０に格納されている各ファイル等との関係を示すものである。
【００２２】
図２において２００は、入力インターフェイス５を介して入力される入力データを扱うＧＵＩ入力処理部であり、ユーザはこのＧＵＩ入力処理部２００により、データの入力や編集、各処理部への指示を行う。本実施形態に係るプログラムコード生成装置においては、主に、自動生成装置起動部２００として利用する。
【００２３】
図２において２０１は、外部記憶装置１０にある設計図面ファイルであり、プラットフォームに非依存で実行可能であり、かつ、オブジェクト指向である。
【００２４】
図２において２０２は、外部記憶装置１０にあるプラットフォーム依存情報ファイルである。従来のＭＤＡにおけるプラットフォーム依存情報は、実行ファイルの動作するＯＳや、ＣＰＵ、メモリ量、プログラミング言語、利用フレームワークといった情報で構成されているが、本実施形態のプラットフォーム依存情報２０２は、前記情報に加え、オブジェクトを静的あるいは動的に生成又は削除するよう決めるオブジェクト配置ルールに関する情報を保持する場合もある。
【００２５】
図２において２０３は、設計図面情報入力部であり、設計図面ファイル２０１を読み込み、図１のＲＡＭ４（設計図面情報格納領域４ａ）上に設計図面情報２０６を生成する。
【００２６】
図２において２０４は、プラットフォーム依存情報入力部であり、プラットフォーム依存情報ファイル２０２を読み込み、図１のＲＡＭ４（プラットフォーム依存情報格納領域４ｂ）上にプラットフォーム依存情報２０７を生成する。
【００２７】
図２において２０５は、オブジェクト配置ルール抽出部であり、プラットフォーム依存情報ファイル２０２を読み込み、図１のＲＡＭ４（オブジェクト配置ルール情報格納領域４ｄ）上にオブジェクト配置ルール情報２０８を生成する。
【００２８】
図２において２０９は、設計図面情報２０６とプラットフォーム依存情報２０７とオブジェクト配置ルール情報２０８とに基づいて、図１のＲＡＭ４（プログラムコード格納領域４ｃ）上にプログラムコード２１０を生成するプログラム生成部である。このプログラム生成部２０９は、自動生成装置起動部２００及びプラットフォーム依存情報ファイル２０２を通じて、オペレータからの指示がある場合のみ、オブジェクト配置ルール情報２０８を用いて、オブジェクトを静的あるいは動的に生成及び削除するよう決めたオブジェクト配置用コードを付加したプログラムコードを生成する。
【００２９】
図２において２１１は、プログラムコード２１０から参照されるライブラリである。このライブラリ２１１は、図１のＲＡＭ４（ライブラリ格納領域４ｅ）に格納されている。図２において２１２は、プログラムコード２１０とライブラリ２１１とをコンパイル・リンクするコードコンパイラ・リンカである。
【００３０】
図２において２１３は、コードコンパイラ・リンカ２１２により図１のＲＡＭ４（プログラム実行形式格納領域４ｆ）上に生成されたプログラム実行形式である。図２において２１４は、プログラム実行形式２１３を実行するプログラム実行部である。
【００３１】
図２において２１５は、プログラム実行部２１４によりプログラム実行時に、図１のＲＡＭ４（プログラム実行ログ格納領域４ｇ）上に生成されたプログラム実行ログであり、いつ、どのクラスのオブジェクトが生成あるいは削除されたかを示すものである。なお、プログラムコード２１０に、プログラム実行ログ２１５を出力するプログラムコードを付加するか否かは、自動生成装置起動部２００及びプラットフォーム依存情報ファイル２０２を通じてオペレータが指示するものとする。
【００３２】
図２において２１６は、実行ログ解析部であり、プログラム実行ログ２１５に基づいてオブジェクト瞬間最大数を算出し、図１のＲＡＭ４（瞬間最大オブジェクト数情報格納領域４ｈ）上に瞬間最大オブジェクト数情報２１７を生成する。
【００３３】
図２において２１８は、プラットフォーム依存情報更新部であり、瞬間最大オブジェクト数情報ファイル２１７にある更新用オブジェクト配置ルール情報をプラットフォーム依存情報ファイル２０２に書き込む。
【００３４】
本実施形態に係るプログラムコード生成装置においては、自動生成装置起動部２００及びプラットフォーム依存情報ファイル２０２を通じて、オペレータからプログラム生成部２０９への指示を受け付ける。プログラム生成部２０９では、オペレータからの指示に応じて、生成するプログラムコード２１０に対し、オブジェクト配置ルール情報２０８に従ったオブジェクトの生成及び削除を行うコードを付加したり、いつ、どのオブジェクトを生成、あるいは削除したかを記録したプログラム実行ログ２１５を生成するプログラムコードを付加する。
【００３５】
これ以降の説明におけるフローチャートによる処理手順は、本実施形態に限定されることはなく、本発明の結果を満たす限りいかなる手順の組み合わせも、複数処理をまとめることも、処理を細分化することも可能である。また、各処理を個々に切り出してひとつの機能要素として単体で機能し、示している処理以外の処理と組み合わせて使用することも可能である。
【００３６】
以下、本発明の実施形態に係るプログラムコード生成装置における処理手順を詳細に説明する。
【００３７】
図３は、本発明の実施形態に係るプログラムコード生成装置における処理手順を示したフローチャートである。本処理手順の起動は、自動生成装置起動部２００からオペレータが指示を行うことでなされる。
【００３８】
まず、ステップＳ３０１において、設計図面情報入力部２０３は、設計図面ファイル２０１を読み込み、プログラム生成部２０９が処理できるデータ形式に変換した設計図面情報２０６を生成する。
【００３９】
続いて、ステップＳ３０２において、プラットフォーム依存情報入力部２０４は、プラットフォーム依存情報ファイル２０２を読み込み、プログラム生成部２０９が処理できるデータ形式に変換したプラットフォーム依存情報２０７を生成する。
【００４０】
続いて、ステップＳ３０３において、プログラム生成部２０９は、設計図面情報２０６とプラットフォーム依存情報２０７を用いてプログラムコード２１０を生成する。ここで、オペレータからの指示がある場合のみ、オブジェクト配置ルール情報２０８を用いてオブジェクトを静的あるいは動的に生成及び削除するように決めたオブジェクト配置用コードを付加したプログラムコード２１０を生成する。更に、オペレータからの指示があれば、生成するプログラムコード２１０に対して、いつ、どのオブジェクトを生成及び削除したかを記録したプログラム実行ログ２１５を生成するプログラムコードを付加する。
【００４１】
続いて、ステップＳ３０４において、コンパイラ・リンカ２１２は、プログラムコード２１０とライブラリ２１１とをコンパイル・リンクし、プログラム実行形式２１３を生成する。
【００４２】
続いて、ステップＳ３０５において、プログラム実行部２１４は、プログラム実行形式２１３を実行する。ここで、プログラム実行形式２１４が、ログ出力機能を付加したプログラムコード２１０の実行形式であった場合には、当該ステップＳ３０５の処理時にプログラム実行ログ２１５が出力される。
【００４３】
続いて、ステップＳ３０６において、実行ログ解析部２１６は、プログラム実行ログ２１５を生成するプログラムコードが付加されていて、かつ、プログラム実行ログ２１５があるかどうかを判断する。この判断の結果、プログラム実行ログ２１５を生成するプログラムコードが付加されていなかった、あるいはプログラム実行ログ２１５がなかった場合には、当該フローチャートにおける処理を終了する。一方、ステップＳ３０６での判断の結果、プログラム実行ログ２１５を生成するプログラムコードが付加されていて、かつ、プログラム実行ログ２１５があった場合には、ステップＳ３０７に進む。
【００４４】
続いて、ステップＳ３０７において、実行ログ解析部２１６は、プログラム実行ログ２１５を解析し、クラス毎のオブジェクトの生成及び削除の情報から、オブジェクトの瞬間最大数を算出し、瞬間最大オブジェクト数情報ファイル２１７を生成する。
【００４５】
続いて、ステップＳ３０８において、プラットフォーム依存情報更新部２１８は、プラットフォーム依存情報を更新するかどうがを判断する。このプラットフォーム依存情報を更新するかどうかは、システム起動時にオペレータによる指定や、プラットフォーム依存情報に記載されたプラットフォーム依存情報更新のフラグ等に基づいて行われる。この判断の結果、プラットフォーム依存情報を更新しない場合には、当該フローチャートにおける処理を終了する。一方、ステップＳ３０８での判断の結果、プラットフォーム依存情報を更新する場合には、ステップＳ３０９に進む。
【００４６】
続いて、ステップＳ３０９において、プラットフォーム依存情報更新部２１８は、瞬間最大オブジェクト数情報２１７を用いて、プラットフォーム依存情報ファイル２０２の中にあるオブジェクト配置ルールを更新する。ここで、プラットフォーム依存情報ファイル２０２の中にオブジェクト配置ルールがなかった場合には、新規で追加する。
【００４７】
本実施形態においては、オペレータによる操作に基づいて、自動生成装置起動部２００から、プログラム生成部２０９、コンパイラ・リンカ２１２、プログラム実行部２１４、実行ログ解析部２１６及びプラットフォーム依存情報更新部２１８を起動するようにしているが、これらを他の方法により駆動するようにしてもよい。
【００４８】
図４は、図３のステップＳ３０３におけるプログラム自動生成処理の詳細を示すフローチャートである。
まず、ステップＳ４０１において、オブジェクト配置ルールを抽出するか、そのオブジェクト配置ルールが抽出できるかを判断する。このオブジェクト配置ルールを抽出するかどうかの判断は、システム起動時にオペレータからその旨の指定がなされたか、あるいはプラットフォーム依存情報にオブジェクト配置ルールの抽出のフラグが記載されているか等により行われる。また、オブジェクト配置ルールが抽出可能かどうかの判断は、ステップＳ３０２で読み込んだプラットフォーム依存情報の中に、オブジェクト配置ルールが記載されているかどうかにより行われる。
【００４９】
以上から、ステップＳ４０１では、オペレータからのオブジェクト配置ルールを抽出する指示があり、かつプラットフォーム依存情報にオブジェクト配置ルールが記載されている場合にはステップＳ４０２に進み、それ以外の場合にはステップＳ４０３に進む。
【００５０】
ステップＳ４０３では、生成プログラムにログ出力機能を付加するかどうかを判断する。この生成プログラムにログ出力機能を付加するかどうかの判断は、システム起動時にオペレータからその旨の指定がなされたか、あるいはプラットフォーム依存情報にログ出力機能を付加するフラグが記載されているか等により行われる。この判断の結果、ログ出力機能を付加する場合には、ステップＳ４０６に進み、それ以外の場合には、ステップＳ４０５に進む。
【００５１】
ステップＳ４０５に進んだ場合には、プログラム生成部２０９は、設計図面情報２０６とプラットフォーム依存情報２０７とを用いて、オブジェクト配置用コードを付加せず、ログ出力機能を付加していないプログラムコード２１０を生成する。また、ステップＳ４０６に進んだ場合には、プログラム生成部２０９は、設計図面情報２０６とプラットフォーム依存情報２０７とを用いて、オブジェクト配置用コードを付加せず、ログ出力機能を付加したプログラムコード２１０を生成する。
【００５２】
また、ステップＳ４０１での判断の結果、ステップＳ４０２に進んだ場合には、オブジェクト配置ルール抽出部２０５は、プラットフォーム依存情報ファイル２０２を読み込み、プログラム生成部２０９が処理できるデータ形式に変換したオブジェクト配置ルール情報２０８を生成する。
【００５３】
続いて、ステップＳ４０４において、生成プログラムにログ出力機能を付加するどうか、ステップＳ４０３と同様の方法で判断する。この判断の結果、ログ出力機能を付加する場合には、ステップＳ４０８に進み、それ以外の場合には、ステップＳ４０７に進む。
【００５４】
ステップＳ４０７に進んだ場合には、プログラム生成部２０９は、設計図面情報２０６とプラットフォーム依存情報２０７とオブジェクト配置ルール情報２０８とを用いて、オブジェクト配置用コードを付加し、ログ出力機能を付加していないプログラムコード２１０を生成する。また、ステップＳ４０８に進んだ場合には、プログラム生成部２０９は、設計図面情報２０６とプラットフォーム依存情報２０７とオブジェクト配置ルール情報２０８とを用いて、オブジェクト配置用コードを付加し、ログ出力機能を付加したプログラムコード２１０を生成する。
【００５５】
以上のように、本実施形態に係るプログラムコード生成装置では、ステップＳ４０１、ステップＳ４０３、ステップＳ４０４の分岐により、ログ出力機能及びオブジェクト配置用コードを付加するかどうかにより、ステップＳ４０５〜ステップＳ４０８における処理により４種類のプログラムコードが生成される。
【００５６】
図５は、プラットフォーム依存情報ファイル２０２の一部であり、オブジェクト配置ルール情報２０８を抽出する上で必要な情報の一例を示した図である。
図５において、ClassNameはクラスの名前、StaticVariableはプログラムを静的に生成するオブジェクトの最大個数、DynamicVariableはプログラムを動的に生成するオブジェクトの最大個数を示している。
【００５７】
例えば、図５は、クラスＡＡＡにおいて、オブジェクトは静的に２つ、動的に３つ生成されることを示している。また、図５において、クラスＣＣＣのDynamicVariableの欄に記載された “＊”は、数値を特定しないという意味であり、プログラム内で要求される最大数分をメモリ資源が可能な限り動的に生成するコードを付加することになる。
【００５８】
図６は、オブジェクト配置用コードとログ出力機能を付加したプログラムコード２１０の一部の例を示した図である。この図６に示すプログラムコードは、ステップＳ４０８においてプログラム生成部２０９により生成され、また、クラスＡＡＡのデータ属性定義と属性値の初期化部を示している。なお、この図６に示すプログラムコードのプログラム言語は、Ｃ＋＋を例にしたものを示したがこれに限られない。
【００５９】
図６に示す６０１は、オブジェクト配置ルール情報２０８の情報を基にクラスＡＡＡにおけるStaticVariableとDynamicVariableの値を定義をしている。図６に示す６０２は、クラスＡＡＡのオブジェクトを配置するために静的に確保した配列とそのメモリ領域上の位置であるインデックスに関する宣言部である。図６に示す６０３は、６０２において宣言した配列やインデックス用の変数の初期値である。
【００６０】
図７は、オブジェクト配置用コードとログ出力機能を付加したプログラムコード２１０の一部の例を示した図である。この図７に示すプログラムコードは、ステップＳ４０８においてプログラム生成部２０９により生成され、また、クラスＡＡＡ専用のオブジェクトの生成及び削除するメソッドを定義した例であり、このクラスのオブジェクトを生成及び削除するときにだけに使用されるメソッドである。なお、図７において、各処理内部に書かれた、log.outputLog（  ）というメソッドは、オブジェクトの生成及び削除するときのログ出力を行うメソッドの例である。
【００６１】
図７に示す７０１は、クラスＡＡＡのオブジェクトが生成される際に呼ばれるnewメソッドである。生成されるオブジェクトが静的な生成の場合は図７に示す７０２が処理され、動的な生成の場合は図７に示す７０３が処理される。図７に示す７０４は、図５に示したプラットフォーム依存情報ファイルの例で示したとおり、動的に生成されるオブジェクトの上限値が数値である場合、その上限値以上のオブジェクト生成が要求されたときのエラー処理の例である。
【００６２】
図７に示す７０２は、クラスＡＡＡが獲得している静的配列に空きがある場合、新しく作るオブジェクトを配列上に配置する処理を示したコードである。図７に示す７０３は、クラスＡＡＡが獲得している静的配列上に空きがなく、動的に生成されているオブジェクトの数がAAA_Dynamic_Variableよりも小さい時、新しく作るオブジェクトを動的に生成するための処理であり、図５に示した例では、オブジェクトの動的生成に、malloc（  ）を利用する。図７に示す７０４は、オペレータが指定したオブジェクトの静的及び動的な生成数の最大値を超えたときの処理が書かれたコードである。図５に示した例では、エラーメッセージを表示するとともに、オブジェクト生成メソッドの返値にNULLを返す。
【００６３】
本実施形態に係るプログラムコード生成装置では、図７に示す７０４のエラー処理を実行する場合と、生成されるオブジェクト数の最大個数を調べるため、動的なオブジェクト生成を行う処理を実行する場合が考えられる。
【００６４】
図７に示す７０５は、クラスＡＡＡのオブジェクトが削除される際に呼ばれるdeleteメソッドである。削除されるオブジェクトが静的に生成されていた場合は図７に示す７０６が処理され、動的に生成されていた場合は図７に示す７０７が処理される。図７に示す７０８は、エラー処理であり、図７に示す７０１の生成ルーチンでオブジェクトを生成していない場合に処理される。図７に示す７０６は、静的に確保した配列上にあるオブジェクトを削除する時、その領域を示すフラグであるalloc_map[block]をfalseにし、未使用状態に戻す。この状態で次のオブジェクトを生成する時にこの領域を再利用する。図７に示す７０７は、動的に確保したメモリ領域にあったオブジェクトが削除される時の処理であり、そのオブジェクトのメモリを解放する。図７に示す７０３で示した例では、オブジェクトをmalloc（  ）で生成しているので、図７に示す７０７ではfree（  ）を用いて削除している。図７に示す７０８は、生成されていないオブジェクトに対しdeleteが呼ばれた時のエラー処理のコードである。
【００６５】
図７に示したプログラムコードの例は、オブジェクトの静的あるいは動的な生成及び削除の処理の例であり、プログラム言語としてＣ＋＋を前提に記載しているが、本実施形態に係るプログラムコード生成装置では、生成可能なプログラム言語に合わせて自動生成する。また、オブジェクトの静的な生成は配列を用いたが、コンパイルやリンク時点で静的に確保されるメモリ領域上に配置可能であれば、この方法に寄らない。加えて、オブジェクトの動的な生成には、malloc（  ）及びfree（  ）を用いた例を示したが、プログラム実行時に割り当てられるシステム上のメモリ管理システムが提供するメモリの確保及び解放のルーチンであれば、この方法に寄らない。
【００６６】
図８は、プログラム実行ログ２１５の一例を示した図である。このプログラム実行ログは、ステップＳ４０６やステップＳ４０８で生成されたログ出力機能を付加したプログラムコードが、ステップＳ３０４でコンパイル・リンクされ、ステップＳ３０５でプログラム実行した時に出力したプログラム実行ログ２１５の例である。
【００６７】
図８に示すTimeは処理を行った時刻、ClassNameは生成又は削除されたオブジェクトのクラス名を示す。また、図８に示すActionは、オブジェクトの生成処理か削除処理かを示すキーワードを配置する。オブジェクトが生成されたことを示すキーワードとしてCreate、オブジェクトが削除されたことを示すキーワードとしてDeleteを設定する。
【００６８】
図９は、図３のステップＳ３０７における実行ログ解析処理の詳細を示すフローチャートである。
まず、ステップＳ９０１において、実行ログ解析部２１６は、プログラム実行ログ２１５の情報に基づいて、瞬間最大オブジェクト数を算出する。
【００６９】
続いて、ステップＳ９０２において、実行ログ解析部２１６は、ステップＳ９０１で算出した瞬間最大オブジェクト数と、このプログラムを生成する上で用いたオブジェクト配置ルール情報２０８とに基づき更新用オブジェクト配置ルール情報の作成を行う。
【００７０】
続いて、ステップＳ９０３において、実行ログ解析部２１６は、ステップＳ９０１で算出した瞬間最大オブジェクト数とステップＳ９０２で作成した更新用オブジェクト配置ルール情報とを瞬間最大オブジェクト数情報格納領域４ｈへ出力する。
【００７１】
図１１は、図９のステップＳ９０１における瞬間最大オブジェクト数の算出処理の詳細を示すフローチャートである。
まず、実行ログ解析部２１６は、プログラム実行ログ２１５から瞬間最大オブジェクト数情報２１７を作成する。そして、ステップＳ１１０１において、プログラム実行ログ２１５の内容をクラス別に分類し、さらに各クラス内は時間順にソートする。
【００７２】
続いて、ステップＳ１１０２において、実行ログ解析部２１６は、全てのクラスに対してステップＳ１１１２までの処理を繰り返す。ステップＳ１１０２からステップＳ１１１２までの処理は、プログラム実行ログ２１５からすべてのクラスに関するオブジェクトの瞬間最大数を算出し、瞬間最大オブジェクト数情報ファイルに書き込むための処理部分である。
【００７３】
ステップＳ１１０３において、実行ログ解析部２１６は、特定のクラスの全ログ出力単位に対してステップＳ１１１０までの処理を繰り返す。ステップＳ１１０３からステップＳ１１１０までの処理は、プログラム実行ログ２１５から特定のクラスに関するオブジェクトの瞬間最大数を算出するための処理部分である。瞬間最大数の算出には、生成されたオブジェクト数をカウントするカレントオブジェクト変数と瞬間最大オブジェクト変数の２つの変数を使用する。
【００７４】
ステップＳ１１０４において、特定クラスのログにおいて、actionがCreateだった場合には、ステップＳ１１０５に進み、そうではない場合にはステップＳ１１０８に進む。
【００７５】
ステップＳ１１０５に進んだ場合には、実行ログ解析部２１６は、生成されているオブジェクト数を示すカレントオブジェクト変数の値を１インクリメントする。続いて、ステップＳ１１０６において、実行ログ解析部２１６は、ここまでの処理で、最大値を保持する瞬間最大オブジェクト変数よりカレントオブジェクト変数の値が大きかった場合には、ステップＳ１１０７に進み、それ以外の場合には、ステップＳ１１１０に進む。
【００７６】
ステップＳ１１０７に進んだ場合には、実行ログ解析部２１６は、瞬間最大オブジェクト変数の値を１インクリメントする。
【００７７】
また、ステップＳ１１０４での判断の結果、ステップＳ１１０８に進んだ場合、actionがCreate ではなくDeleteだった場合には、ステップＳ１１０９に進み、そうではない場合には、ステップＳ１１１０に進む。
【００７８】
ステップＳ１１０９に進んだ場合には、実行ログ解析部２１６は、カレントオブジェクト変数の値を１デクリメントし、ステップＳ１１１０に進む。
【００７９】
ステップＳ１１１０において、実行ログ解析部２１６は、特定のクラスの全ログ出力単位に対してステップＳ１１０３からの処理を繰り返す。
【００８０】
続いて、ステップＳ１１１１において、実行ログ解析部２１６は、瞬間最大オブジェクト変数の値を瞬間最大オブジェクト数情報ファイル２０２へ出力する。
【００８１】
続いて、ステップＳ１１１２において、実行ログ解析部２１６は、全てのクラスに対してステップＳ１１０２からの処理を繰り返す。そして、図９に示した処理のフローチャートから、すべてのクラスについて、オブジェクトを生成した瞬間最大数を算出する。
【００８２】
図１２は、図９のステップＳ９０２における更新用オブジェクトルール情報作成処理の詳細を示すフローチャートである。ここでは、ステップＳ９０１で算出した瞬間最大オブジェクト数から、次回のプログラムコード生成の際に利用するオブジェクト配置ルール情報２０８の元の情報を作成する。また、図１２で示したフローチャートでは、生成したオブジェクトの瞬間最大値を、静的に生成するオブジェクト数に反映するアルゴリズムを用いるようにしているが、本実施形態に係るプログラムコード生成装置では、この方法に限られない。
【００８３】
まず、ステップＳ１２０１において、実行ログ解析部２１６は、各クラスに対してステップＳ１２０５までの処理を繰り返す。
【００８４】
このフローチャートでは、次回のプログラムコード生成時に指定する生成オブジェクト数の最大値を、静的生成及び動的生成のそれぞれについて算出する。また、この２つの最大値の計算には、以下に示す５つの変数を用いる。
変数Max number of Objectsは、生成されたオブジェクトの瞬間最大数を表す。
変数previousStaticVariableは、プログラムコード生成時に指定された静的に生成するオブジェクトの最大数を表す。
変数previousDynamicVariableは、コード生成時に指定された動的に生成するオブジェクトの最大数を表す。
変数nextStaticVariableと変数nextDynamicVariableは、次回のプログラムコード生成時に用いる、静的及び動的に生成するオブジェクトの最大数を表す。
【００８５】
続いて、ステップＳ１２０２において、実行ログ解析部２１６は、プログラムコード生成時に指定されたオブジェクト生成数と、実行ログから算出した生成されたオブジェクトの瞬間最大数を比較する。この際、実際には、変数previousStaticVariable と変数previousDynamicVariableの和と、変数Max number of Objectsの値を比較し、瞬間最大数が大きい場合には、ステップＳ１２０３に進み、それ以外の場合には、ステップＳ１２０５に進む。
【００８６】
ステップＳ１２０３に進んだ場合、実行ログ解析部２１６は、次回プログラム生成時、静的に生成するオブジェクトの最大数である変数nextStaticVariable に値をセットする。具体的には、Max number of ObjectsとpreviousDynamicVariableの差をセットする。
【００８７】
続いて、ステップＳ１２０４において、実行ログ解析部２１６は、次回プログラム生成時、動的に生成するオブジェクトの最大数である変数nextDynamicVariable に値をセットする。この図１２に示すフローチャートの例では、変数previousDynamicVariableの値を変数nextDynamicVariable にそのままセットする。
【００８８】
続いて、ステップＳ１２０５において、実行ログ解析部２１６は、各クラスに対してステップＳ１２０１からの処理を繰り返す。
【００８９】
図１０は、瞬間最大オブジェクト数情報２１７の一例を示す図である。この瞬間最大オブジェクト数情報２１７は、図９、図１１及び図１２に示したフローチャートの処理に従って実行ログ解析部２１６で生成される。
【００９０】
図１０においてClassNameは、クラスの名前である。図１０においてMax number of Objectsは、ステップＳ９０１で実行ログ解析部２１６により算出されたオブジェクト瞬間最大数の値である。
【００９１】
図１０においてpreviousStaticVariable とpreviousDynamicVariableは、プログラムコード２１０を生成する際に用いるオブジェクト配置ルール情報２０８として指定する値である。図１０においてpreviousStaticVariableは、プログラムが静的に生成するオブジェクトの最大個数である。図１０においてpreviousDynamicVariableは、プログラムが動的に生成するオブジェクトの最大個数を指定する。
【００９２】
図１０においてnextStaticVariable とnextDynamicVariableは、ステップＳ９０２で作成した更新用のオブジェクト配置ルール情報であり、実行ログ解析部２１６が瞬間最大オブジェクト数であるMax number of Objectsの値から決定した次回のプログラムコード２１０を生成する際に用いる静的及び動的に生成するオブジェクトの最大個数を表している。図１０においてnextStaticVariable とnextDynamicVariableは、次回のプログラムコード２１０を生成する際、オブジェクト配置ルール情報２０８で指定する。
【００９３】
続いて、図１０について、クラスＡＡＡの場合を例に説明する。
クラスＡＡＡは、Max number of objectsが７であり、システムを実行したときのログから瞬間最大で７つのオブジェクトが生成されたことを表す。このとき、オペレータがシステム実行前に指定した静的生成オブジェクト数は２、動的生成オブジェクト数は３であり、最大個数５となっていた。実行ログ解析部２１６は、最大個数の情報から静的生成オブジェクト数だけを変更することとし、最大個数７に対応するため、静的生成するオブジェクト数を２から４に変更し、動的オブジェクト数は３のままとする。
【００９４】
図１０に示した瞬間最大オブジェクト数情報２１７の例は、図１２のフローチャートの例で示したように、生成したオブジェクトの瞬間最大値を、静的に生成するオブジェクト数に反映するアルゴリズムを用いて作成するようにしている。しかしながら、本実施形態に係るプログラムコード生成装置では、この方法に限定されるものではない。
【００９５】
例えば、静的に生成するオブジェクト数に反映するアルゴリズムとしては、図１２で示したフローチャートの例のように、静的及び動的に生成するオブジェクトの総数が、瞬間最大値よりも少ない場合、静的に生成するオブジェクト数を加算するアルゴリズムの他に、生成したオブジェクトの瞬間最大値をそのまま静的に生成するオブジェクト数とし、動的に生成するオブジェクト数を変更しない、などのアルゴリズムも考えられる。これらの静的なオブジェクト数を増やすアルゴリズムは、ＲＡＭサイズに余裕があり、プログラムの実行速度を速めたいときに効果を発揮する。一方、ＲＡＭサイズに余裕のない環境では、生成したオブジェクトの瞬間最大値を動的に生成するオブジェクト数に反映するアルゴリズムなども考えられる。さらに、これらの様々なアルゴリズムをオペレータがクラス単位で指定できるようにすることにより、より詳細なオブジェクト配置ルールの設定が実現できる。
【００９６】
本実施形態に係るプログラムコード生成装置によれば、ソフトウェアの実行可能な設計図面情報２０６からプログラムコード２１０を自動で生成する際、クラス毎のオブジェクト瞬間最大数の情報（瞬間最大オブジェクト数情報２１７）に基づいて設定したオブジェクト配置ルール情報から、オブジェクトを静的あるいは動的に生成及び削除するよう決めたプログラムコードを生成するようにしたので、プログラム処理の高速化を図るとともに、メモリの使用効率を向上させることができる。
【００９７】
また、クラス毎のオブジェクト瞬間最大数は動作環境に依存する場合も多く、プログラムを実際に動作させなければわからないことが多い。そのため、本実施形態に係るプログラムコード生成装置では、オブジェクトを静的あるいは動的に生成及び削除するプログラムコードを生成するだけでなく、実際に実行した結果から、オブジェクトの瞬間最大数を算出し、再度プログラムコードを生成する場合の入力となるオブジェクト配置情報を更新するようにしている。これにより、オブジェクト配置ルールを最適化することができ、加えて、実際の結果を使ったプログラムコードの生成作業を効率化することができる。
【００９８】
本実施形態に係るプログラムコード生成装置においては、実際に実行した結果からオブジェクト生成数の最大値を求め、静的なオブジェクト生成数を最大にする変更を行い、実行速度の高速化を実現するようにしている。しかし、実際の組込システムでは、オブジェクトを動的に生成する場合においても、使用できるメモリ量は有限値である。組込システムに特有のメモリ管理システムを利用することにより、動的なオブジェクト生成も高速処理することが可能になるため、組込システムに合わせたさらなる改善が期待できる。
【００９９】
前述した本実施形態に係るプログラムコード生成装置を構成する図１及び図２の各手段、並びにプログラムコード生成装置における処理手順であるプログラムコード生成方法を示した図３、図４、図９、図１１及び図１２の各ステップは、コンピュータのＲＡＭやＲＯＭなどに記憶されたプログラムが動作することによって実現できる。このプログラム及び当該プログラムを記録したコンピュータ読み取り可能な記憶媒体は本発明に含まれる。
【０１００】
具体的に、前記プログラムは、例えばＣＤ−ＲＯＭのような記憶媒体に記録し、或いは各種伝送媒体を介し、コンピュータに提供される。前記プログラムを記録する記憶媒体としては、ＣＤ−ＲＯＭ以外に、フレキシブルディスク、ハードディスク、磁気テープ、光磁気ディスク、不揮発性メモリカード等を用いることができる。他方、前記プログラムの伝送媒体としては、プログラム情報を搬送波として伝搬させて供給するためのコンピュータネットワーク（ＬＡＮ、インターネットの等のＷＡＮ、無線通信ネットワーク等）システムにおける通信媒体（光ファイバ等の有線回線や無線回線等）を用いることができる。
【０１０１】
また、コンピュータが供給されたプログラムを実行することにより本実施形態に係るプログラムコード生成装置の機能が実現されるだけでなく、そのプログラムがコンピュータにおいて稼働しているＯＳ（オペレーティングシステム）或いは他のアプリケーションソフト等と共同して本実施形態に係るプログラムコード生成装置の機能が実現される場合や、供給されたプログラムの処理の全て、或いは一部がコンピュータの機能拡張ボードや機能拡張ユニットにより行われて本実施形態に係るプログラムコード生成装置の機能が実現される場合も、かかるプログラムは本発明に含まれる。
【図面の簡単な説明】
【０１０２】
【図１】本発明の実施形態に係るプログラムコード生成装置のシステム構成を示すブロック図である。
【図２】本発明の実施形態に係るプログラムコード生成装置の機能構成を示すブロック図である。
【図３】本発明の実施形態に係るプログラムコード生成装置における処理手順を示したフローチャートである。
【図４】図３のステップＳ３０３におけるプログラム自動生成処理の詳細を示すフローチャートである。
【図５】プラットフォーム依存情報ファイルの一部であり、オブジェクト配置ルール情報を抽出する上で必要な情報の一例を示した図である。
【図６】オブジェクト配置用コードとログ出力機能を付加したプログラムコードの一部の例を示した図である。
【図７】オブジェクト配置用コードとログ出力機能を付加したプログラムコードの一部の例を示した図である。
【図８】プログラム実行ログの一例を示した図である。
【図９】図３のステップＳ３０７における実行ログ解析処理の詳細を示すフローチャートである。
【図１０】瞬間最大オブジェクト数情報の一例を示す図である。
【図１１】図９のステップＳ９０１における瞬間最大オブジェクト数の算出処理の詳細を示すフローチャートである。
【図１２】図９のステップＳ９０２における更新用オブジェクトルール情報作成処理の詳細を示すフローチャートである。
【符号の説明】
【０１０３】
１：ＣＰＵ
３：ＲＯＭ
３ａ：処理プログラム
３ｂ：パラメータ
４：ＲＡＭ
４ａ：設計図面情報格納領域
４ｂ：プラットフォーム依存情報格納領域
４ｃ：プログラムコード格納領域
４ｄ：オブジェクト配置ルール情報格納領域
４ｅ：ライブラリ格納領域
４ｆ：プログラム実行形式格納領域
４ｇ：プログラム実行ログ格納領域
４ｆ：瞬間最大オブジェクト数情報格納領域
５：入力インターフェース
６：入力装置
７：出力インターフェース
８：出力装置
８ａ：ＣＲＴ、ＬＣＤ
８ｂ：プリンタ、プロッタ
９：外部記憶装置インターフェース
１０：外部記憶装置
２００：自動生成装置起動部
２０１：設計図面ファイル
２０２：プラットフォーム依存情報ファイル
２０３：設計図面情報入力部
２０４：プラットフォーム依存情報入力部
２０５：オブジェクト配置ルール抽出部
２０６：設計図面情報
２０７：プラットフォーム依存情報
２０８：オブジェクト配置ルール情報
２０９：プログラム生成部
２１０：プログラムコード
２１１：ライブラリ
２１２：コンパイラ・リンカ
２１３：プログラム実行形式
２１４：プログラム実行部
２１５：プログラム実行ログ
２１６：実行ログ解析部
２１７：瞬間最大オブジェクト数情報
２１８：プラットフォーム依存情報更新部
【図１】
2007148577.tif 000003
【図２】
2007148577.tif 000004
【図３】
2007148577.tif 000005
【図４】
2007148577.tif 000006
【図５】
2007148577.tif 000007
【図６】
2007148577.tif 000008
【図７】
2007148577.tif 000009
【図８】
2007148577.tif 000010
【図９】
2007148577.tif 000011
【図１０】
2007148577.tif 000012
【図１１】
2007148577.tif 000013
【図１２】
2007148577.tif 000014