(57)【要約】【課題】  プログラム処理の高速化とメモリ使用効率の向上を図ることが可能なプログラムコード生成装置を提供することを目的とする。【解決手段】  インスタンス配置情報を入力するために、あるインスタンスが保持しているインスタンスのアクセス状況をログ出力可能なプログラムコードをプログラム生成部２０９において生成することができ、そのログからコンテナの実装方法を決めるためのインスタンスアクセス情報２１７を抽出することが可能である。これによって、設計者はインスタンスを保持するコンテナについて最適なプログラムコードをインスタンス配置情報として入力することができる。【選択図】  図２
2007219725.tif 000002
【特許請求の範囲】
【請求項１】
プラットフォーム非依存であり、実行可能であり、かつオブジェクト指向であることを特徴とする設計図面を解析する設計図面解析手段と、
前記設計図面を前記設計図面解析手段によって解析して得られる設計図面情報と、プログラムコードを実行する実行環境に関するプラットフォーム依存情報と、前記設計図面情報はオブジェクト指向におけるクラス間の関係を記述した関連を含み、前記設計図面情報に基づいて１対多の関連に対してプログラムコード生成規則を定めたインスタンス配置情報とに基づいてプログラムコードを生成するプログラムコード生成手段とを備えることを特徴とするプログラムコード生成装置。
【請求項２】
前記インスタンス配置情報は、前記クラス間の関連と特定する関連特定部分と、前記クラス間の関連を実装するプログラムコードを特定する実装コード特定部分から構成されることを特徴とする請求項１に記載のプログラムコード生成装置。
【請求項３】
前記プログラムコード生成手段は、１対多及び多対多の関連にあるクラス間でのデータアクセスが何回発生したかを示すデータアクセスログを出力するプログラムコードを付加することを特徴とする請求項１又は２に記載のプログラムコード生成装置。
【請求項４】
前記データアクセスログを解析する解析手段を有することを特徴とする請求項３に記載のプログラムコード生成装置。
【請求項５】
前記プログラムコード生成手段は、１対多及び多対多の関連のインスタンス全てに対して連続してアクセスする連続アクセスと、１対多及び多対多の関連のインスタンスの中で特定のインスタンスのみへのアクセスである単一アクセスとを区別して前記データアクセスログを出力するプログラムコードを生成することを特徴とする請求項３又は４に記載のプログラムコード生成装置。
【請求項６】
前記解析手段は前記データアクセスログからデータアクセスが何回発生したかを示すインスタンスアクセス情報を生成することを特徴とする請求項４又は５に記載のプログラムコード生成装置。
【請求項７】
プラットフォーム非依存であり、実行可能であり、かつオブジェクト指向であることを特徴とする設計図面を解析する設計図面解析工程と、
前記設計図面情報に基づいて１対多の関連に対してプログラムコード生成規則を定めたインスタンス配置情報に基づいてプログラムコードを生成するプログラムコード生成工程とを有することを特徴とするプログラムコード生成方法。
【請求項８】
請求項７に記載の方法の各工程をコンピュータにて実行させることを特徴とするコンピュータプログラム。
【請求項９】
プラットフォーム非依存であり、実行可能であり、かつオブジェクト指向であることを特徴とする設計図面を解析する設計図面解析手段と、
前記設計図面情報に基づいて１対多の関連に対してプログラムコード生成規則を定めたインスタンス配置情報に基づいてプログラムコードを生成するプログラムコード生成手段とを備えることを特徴とするプログラムコード生成装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ソフトウェアの設計図面からプログラムコードを自動生成することを特徴とするプログラムコード生成装置に関し、ソフトウェアの設計図面におけるクラスの1対多及び多対多の関連を、実際にプログラム実行し、クラスの実体であるインスタンスについて、あるインスタンスが保持している別のインスタンスへのアクセス状況を収集し、インスタンスアクセス情報を生成し、そのインスタンスアクセス情報をもとにクラス同士の関連とプログラムコードを対応付けたインスタンス配置情報を設定し、インスタンス配置情報に基づいたプログラムコードを生成するプログラムコード生成装置に関する。
【背景技術】
【０００２】
近年のソフトウェア設計技術として、モデル駆動型アーキテクチャー(Ｍｏｄｅｌ  Ｄｒｉｖｅｎ  Ａｒｃｈｉｔｅｃｔｕｒｅ技術(以降、ＭＤＡ技術と称す))が広まり、採用されるようになってきている。一般的にＭＤＡ技術とは、オペレータが入力したソフトウェアの設計図面情報から各種プラットフォームのプログラムコードを自動的に生成し、且つ、入力したソフトウェアの設計図面情報をＭＤＡ専用ツール上で動作および検証することが可能な技術である。これらソフトウェアの設計図面情報の代表的な例としては、オブジェクト指向技術のモデル表記言語であるＵＭＬ(Ｕｎｉｆｉｅｄ  Ｍｏｄｅｌｉｎｇ  Ｌａｎｇｕａｇｅ)やＳＤＬ(Ｓｐｅｃｉｆｉｃａｔｉｏｎ＆Ｄｅｓｃｒｉｐｔｉｏｎ  Ｌａｎｇｕａｇｅ)などが挙げられる。
【０００３】
しかしながら、既存のプログラム生成装置から生成されるプログラムコードは、設計図面からプログラムコードに変換するルールによっては、生成されるコードのサイズが大きく、実行のために多くのＲＡＭを必要とするという問題がある。このため、組み込みシステムなどのメモリ容量の制限が厳しい領域では、ＭＤＡ技術の導入に躊躇するケースが少なくない。
【０００４】
設計図面の段階での最適化を行う技術については、特許文献１掲載の「オブジェクト指向最適化コード生成装置および方法」、特許文献２掲載の「最適化ソフトウェア生成方法」で、オブジェクト指向機能排除手段を用いて仮想関数の機能を排除、もしくはインスタンスの動的生成の機能を排除することで必要なメモリ容量を増加させることなく組み込み制御システムに適用可能なコードの最適化を行うことを可能にしている。
【０００５】
さらに、組み込みシステムのソフトウェア開発におけるＲＡＭ容量を削減する技術については、特許文献３掲載の「プログラム変換装置」や特許文献４掲載の「メモリ配置方法、及びオブジェクトクラス設計方法」で、プログラムコード中のｃｏｎｓｔ指定されたインスタンス変数やオブジェクトをＲＯＭ上に配置することにより、ＲＡＭ容量の削減を図っている。
【０００６】
また、特許文献５掲載の「プログラム生成装置」は、ＲＯＭのデータへのアドレスをＲＡＭへ再配置する際のアドレス変換に関するもので、設計図面のデータを解析するが、ＲＡＭ上のどこに配置するかについては触れられていない。これらの提案で述べられている最適化は、プログラムコードの生成時に限定された工夫であり、ＭＤＡ技術の実行可能モデルを考慮したものではない。
【０００７】
オブジェクト指向型プログラムでは、クラスの実体であるインスタンス同士が互いに協調動作することによって1つの機能を実現している。あるインスタンスが生成されるとそのインスタンスに働きかける別のインスタンスは、関連を保持するための領域についてメモリ領域を確保し、インスタンス同士で協調動作を実現する。インスタンス同士の関連が1対1の関連であれば、インスタンス自体を参照する領域が１つ存在すれば十分である。しかしながら、インスタンス同士の関連が1対多の場合や多対多の場合では、複数のインスタンスを保持するためのコンテナをメモリ領域に確保することが必要となる。複数のインスタンスを保持するコンテナは、配列型やリスト構造やツリー構造などで実現される。
【０００８】
1対多の関連の場合は、インスタンス同士の関連が動的に変化するために、コンテナ領域を動的に確保する必要がある。コンテナ領域は、インスタンスと関連がある別のインスタンスへの参照と次のコンテナへの参照を連続で持つことによって複数インスタンスとの関連を保持することができる。
【０００９】
例えば、クラスＸとクラスＹの間に1対多の関連が存在し、クラスＸのインスタンス（ｘ１）がクラスＹのインスタンス（ｙ１、ｙ２、ｙ３）をリスト型のコンテナで保持する場合には、インスタンスｘ１は、ｙ１を保持しｙ２を保持しているコンテナを参照し、ｙ２を保持しｙ３を保持しているコンテナを参照し、ｙ３を保持し次のコンテナを参照しないといったリストを辿ることが可能なコンテナを保持することになる。
【００１０】
そして、クラスＸとクラスＹにおいてデータのやり取りが発生する場合は、インスタンスｘ１が持つリスト構造のコンテナからクラスＹのインスタンスを検索することで、関連付けられている複数のインスタンスから特定のインスタンスと協調動作することも可能となっている。
【００１１】
コンテナの実装方法にはメモリ使用量や検索にかかるコストなどから様々な方法が存在する。一般に検索にかかるコストを抑えた実装方法を選択すると、メモリ使用量が大となる。つまり、コンテナの実装方法の検索にかかるコストとメモリの消費量はトレードオフの関係となっている。そのため、メモリ消費量や検索コストの面から最適な実装方法でプログラムコードを生成する必要がある。しかしながら、ＭＤＡ技術を利用した場合は、プログラムの特性に応じてコンテナの実装方法を変更しておらず、メモリ消費量やインスタンスの検索にかかるコストについて何ら考慮がなされていない状況となっている。
【００１２】
【特許文献１】特開平１１−２３７９８０号公報
【特許文献２】特開２００４−１１８８６５号公報
【特許文献３】特開２０００−４０００５号公報
【特許文献４】特開２００１−１８４２１４号公報
【特許文献５】特開２００２−９１７６２号公報
【発明の開示】
【発明が解決しようとする課題】
【００１３】
本発明は、ソフトウェアの設計図面からプログラムコードを自動生成する際、ソフトウェアの設計図面における関連とプログラムコードを対応付けたインスタンス配置情報よりプログラムコードを生成することで、プログラム処理の高速化とメモリ使用効率の向上を図ることが可能なプログラムコード生成方法等を提供することを目的とする。
【００１４】
また、クラスの関連の最適な実装方法を求めるためにインスタンスへのアクセス状況を出力し、コンテナへのアクセスパターンを抽出することができるプログラムコード生成装置を提供することを目的とする。これにより、設計者はソフトウェアの設計図面における関連について最適な実装方法を選択することが可能となる。
【課題を解決するための手段】
【００１５】
本発明によるプログラムコード生成装置は、プラットフォーム非依存であり、実行可能であり、かつオブジェクト指向であることを特徴とする設計図面を解析する設計図面解析手段と、前記設計図面を前記設計図面解析手段によって解析して得られる設計図面情報と、プログラムコードを実行する実行環境に関するプラットフォーム依存情報と、前記設計図面情報はオブジェクト指向におけるクラス間の関係を記述した関連を含み、前記設計図面情報に基づいて１対多の関連に対してプログラムコード生成規則を定めたインスタンス配置情報とに基づいてプログラムコードを生成するプログラムコード生成手段とを備えることを特徴とする。
また、本発明によるプログラムコード生成方法は、プラットフォーム非依存であり、実行可能であり、かつオブジェクト指向であることを特徴とする設計図面を解析する設計図面解析工程と、前記設計図面情報に基づいて１対多の関連に対してプログラムコード生成規則を定めたインスタンス配置情報に基づいてプログラムコードを生成するプログラムコード生成工程とを有することを特徴とする。
また、本発明によるコンピュータプログラムは、前記プログラムコード生成方法の各工程をコンピュータにて実行させることを特徴とする。
また、本発明によるプログラムコード生成装置は、プラットフォーム非依存であり、実行可能であり、かつオブジェクト指向であることを特徴とする設計図面を解析する設計図面解析手段と、前記設計図面情報に基づいて１対多の関連に対してプログラムコード生成規則を定めたインスタンス配置情報に基づいてプログラムコードを生成するプログラムコード生成手段とを備えることを特徴とする。
【発明の効果】
【００１６】
本発明は、ソフトウェアの設計図面からプログラムコードを自動生成する際、１対多及び多対多の関連のクラスについてはインスタンス配置情報に従ったプログラムコードを生成するプログラムコード生成装置を提供することができる。
【００１７】
また、本発明のプログラムコード生成装置は、インスタンス配置情報を入力するために、あるインスタンスが保持しているインスタンスのアクセス状況をログ出力可能なプログラムコードを生成することができ、そのログからコンテナの実装方法を決めるためのインスタンスアクセス情報を抽出することが可能である。これによって、設計者はインスタンスを保持するコンテナについて最適なプログラムコードをインスタンス配置情報として入力することができる。本発明のプログラムコード生成装置は、コンテナ実装について、インスタンス配置情報に入力することで、検索コストを考慮しメモリ消費量を抑えたプログラムコードを生成できる。
【発明を実施するための最良の形態】
【００１８】
以下、添付の図面に沿って本発明の実施の形態を説明する。図１は、本発明の実施の形態に係るプログラムコード生成装置の全体構成を示すブロック図である。
【００１９】
１はＣＰＵであり、以下に説明する３〜１０の装置を２で示すバス２を介してアクセスし制御を行う。３はバス２を介してＣＰＵ１からアクセス可能な読み出し専用メモリ（ＲＯＭ）であり、本実施の形態ではその動作を詳細に説明する処理プログラム３ａ及び処理プログラムにより使用されるパラメータ３ｂが格納されている。
【００２０】
４は読み書き可能なメモリ（ＲＡＭ）であり、ＲＡＭ４上には、上記処理プログラム３ａにより作成／変更がなされる、設計図面情報、プラットフォーム依存情報、プログラムコード、インスタンス配置情報、ライブラリ、実行形式をそれぞれ格納するための領域（順に４ａ、４ｂ、４ｃ、４ｄ、４ｅ、４ｆ）が確保されている。
【００２１】
５は入力インターフェイスであり、６で示したキーボード、マウス、ボタン、ダイアル等の入力装置を介してなされる入力を受け取る。７は出力インターフェイスであり、８で示したＣＲＴ・ＬＣＤ８ａ等の表示媒体、更にはプリンタ・プロッタ８ｂ等の出力装置に対し、データの表示／出力を行う。また、９は外部記憶装置インターフェイスであり、１０で示したＨＤ、ＦＤ、ＣＤ−ＲＯＭ、ＭＤ、ＣＦ等の外部記憶装置に対するデータの入出力を行うものである。
【００２２】
本実施の形態では、処理プログラム３ａやパラメータ３ｂがＲＯＭ３上にあるものとして、また、処理対象となる各データの格納領域（４ａ〜４ｆ）がＲＡＭ上にあるものとして説明を行うが、これらはすべて、外部記憶装置上に配置することも可能であり、必要に応じて外部記憶装置からＲＡＭ上にロードして使用することもできる。また、ＣＰＵのキャッシュメモリ上に配置することも同様に可能である。
【００２３】
図２は、図１において３ａで示した処理プログラムの構成要件とそれら構成要件が図１の４ａ〜４ｆで示した格納領域に格納されるデータとどのような関係にあるかを示すデータフローを示す図である。
【００２４】
２０１は、図１における入力インターフェイス５を介して入力されるデータを扱うＧＵＩ入力処理部であり、ユーザはこのＧＵＩ入力処理部２０１によりデータの入力や編集と、各処理部へ指示できるようになっている。本発明の実施の形態に係るプログラムコード生成装置においては、自動生成装置起動部２０２として利用する。
【００２５】
２０３は、外部記憶装置１０に格納されている、プラットフォーム非依存であり、実行可能であり、かつオブジェクト指向であることを特徴とする設計図面を読み込み、設計図面情報２０６を生成する設計図面情報入力部である。
【００２６】
２０４は、外部記憶装置１０に格納されている、実行ファイルの動作するＯＳやＣＰＵやメモリ量やプログラミング言語や利用フレームワークといった情報で構成されている情報を読み込み、プラットフォーム依存情報２０７を生成するプラットフォーム依存情報入力部である。
【００２７】
２０５は、インスタンスの実装コードにおけるコレクションの型を決定するためのインスタンス配置情報２０８を生成するインスタンス配置情報入力部である。
【００２８】
２０９は、設計図面情報２０６やプラットフォーム依存情報２０７やインスタンス配置情報２０８からプログラムコード２１０を生成するプログラム生成部である。このプログラム生成部２０９はインスタンス配置情報入力部２０５によって選択されたインスタンス配置情報２０８を使って、インスタンスのコレクションの実装型を決定したプログラムコードや、インスタンスへのアクセスログを出力することが可能なコードを付加したプログラムコードを生成できる。
【００２９】
２１１は、プログラムコード２１０から参照されるライブラリである。２１２は、プログラムコード２１０とライブラリ２１１をコンパイル・リンクするコードコンパイラ・リンカである。
【００３０】
２１３は、コードコンパイラ・リンカ２１２が生成したプログラム実行形式である。２１４は、プログラム実行形式２１３を実行するプログラム実行部である。プログラム実行形式２１３がインスタンスへのアクセスログを出力することが可能なコードを付加したプログラム実行形式２１３であった場合、ここでのプログラム動作時にプログラム実行ログ２１５を出力する。
【００３１】
２１５は、プログラム実行部２１４でプログラム実行時に出力されたプログラム実行ログであり、いつ、どのクラスのインスタンスへのアクセスがあったかどうかをログ出力する。
【００３２】
２１６は、プログラム実行ログ２１５を使って、インスタンスへのアクセスログを解析する実行ログ解析部である。２１７は、実行ログ解析部２１６より算出されたインスタンスアクセス情報である。
【００３３】
これ以降の説明におけるフローチャートによる処理手順は、例に限定されることはなく、本発明の結果を満たす限りいかなる手順の組合せも、複数処理をまとめることも、処理を細分化することも可能であり、また、各処理を個々に切り出してひとつの機能要素として単体として機能し、示している処理以外の処理と組み合わせて使用することも可能である。
【００３４】
以下、本発明の実施の形態に係るプログラムコード生成装置の動作例を図面およびフローチャートを参照して説明する。図３は、本実施の形態のシステム全体の処理手順を示したフローチャートである。本システムの起動は、ＧＵＩ入力処理部２０１などの入力部からオペレータが指示する。
【００３５】
ステップＳ１０２で、設計図面情報入力部２０３が設計図面を読み込み、プログラム生成部２０９が処理できるデータ形式に変換した設計図面情報２０６を生成する。
【００３６】
ステップＳ１０３で、プラットフォーム依存情報入力部２０４が、プログラム生成部２０９が処理できるデータ形式に変換したプラットフォーム依存情報２０７を生成する。
【００３７】
ステップＳ１０４で、プログラム生成部２０９は、設計図面情報２０６とプラットフォーム依存情報２０７を用いてプログラムコード２１０を生成する。ここで、オペレータからの指示がある場合だけ、インスタンス配置情報２０８を使って、インスタンスの保持方法を特定したプログラムコードを生成する。さらに、オペレータからの指示があれば、生成するプログラムコード２１０に対し、いつ、どのインスタンスにアクセスしたかを出力するプログラム実行ログ２１５を生成するプログラムコードを付加する。プログラムコード生成ルーチンに関しては、次に詳しく説明する。
【００３８】
ステップＳ１０５で、コンパイラ・リンカ２１２はプログラムコード２１０とライブラリ２１１をコンパイル・リンクし、プログラム実行形式２１３を生成する。
【００３９】
ステップＳ１０６で、プログラム実行部２１４はプログラム実行形式２１３を実行する。ここでプログラム実行形式２１４が、ログ出力機能を付加したプログラムコード２１０の実行形式だった場合、このステップ時にプログラム実行ログ２１５が出力される。
【００４０】
ステップＳ１０７で、実行ログ解析部２１６は、プログラム実行ログを生成するプログラムコードが付加されていて、かつプログラム実行ログ２１５があるかどうかを判断する。プログラム実行ログがあった場合、ステップＳ１０８へ進む。ステップＳ１０７で、プログラム実行ログがなかった場合は、ステップＳ１０９へ進み、本シーケンスを終了する。
【００４１】
ステップＳ１０８で、実行ログ解析部２１６はプログラム実行ログ２１５を解析する処理を行う。ログ解析ルーチンに関しては、次に詳しく説明する。ステップＳ１０８が終了すると、ステップＳ１０９へ進み本シーケンスを終了する。
【００４２】
本実施の形態においては、ＧＵＩ入力処理部２０１から、オペレータによって、プログラム生成部２０９とコンパイラ・リンカ２１２、プログラム実行部２１４、実行ログ解析部２１６を起動しているが、この方法によらない。
【００４３】
図４は、１対１及び１対多の関連を持つソフトウェア設計者によって記述される設計図面の一例を示している。図４（ａ）、（ｂ）、（ｃ）のような設計図面は、設計図面情報入力部２０３によってプログラム生成部２０９が解釈可能な設計図面情報２０６となる。
【００４４】
３０１は、名前がＡＡＡである設計図面におけるクラスを示しており、クラスをメモリ上に確保した実体がインスタンスとなる。３０２は、名前がＢＢＢである設計図面におけるクラスを示しており、クラスをメモリ上に確保した実体がインスタンスとなる。
【００４５】
３０３は、クラスＡＡＡとクラスＢＢＢが１対１の関連にあることを示している。３０４は、クラスＡＡＡとクラスＢＢＢの1対多の関連にあることを示している。３０５は、クラスＡＡＡとクラスＢＢＢがＡ１という名前で１対多の関連にあることを示している。
【００４６】
３０６は、クラスＡＡＡからクラスＢＢＢへ働きかけるアクション言語の一例であり、Ａ１という関連に結び付けられている複数のクラスＢＢＢのインスタンスの中から、ｎａｍｅが“ｂｂｂ”であるインスタンスを検索するという意味を示している。
【００４７】
図５は、設計図面情報２０６やプラットフォーム依存情報２０７からプログラムコード２１０を生成するフローチャートである。
【００４８】
ステップＳ２０２で、自動生成するプログラムコードにインスタンスへのアクセス状況であるログを出力するプログラムコードを付加するかどうかを判断する処理を行う。ログを出力する場合は、ステップＳ２０３へ進む。ログを出力しない場合は、ステップＳ２１３へ進む。
【００４９】
ステップＳ２０３で、設計図面情報２０６に存在する全てのクラスについてプログラムコードが生成されたかどうかを判断し、全クラスのプログラムコード生成が完了するまでステップＳ２０４からステップＳ２１１までを繰り返す処理を行う。
【００５０】
ステップＳ２０４で、プログラムコードを生成する対象クラスについて、設計図面情報２０６の中で特にクラス間の関連を示す情報について、全ての関連についてプログラムコードが生成されたかどうかを判断し、全関連のプログラムコード生成が完了するまでステップＳ２０５からステップＳ２１０を繰り返す処理を行う。
【００５１】
ステップＳ２０５で、設計図面情報２０６の中で関連が１対多の関連か１対１の関連かを判断する処理を行う。図４（ａ）のような１対１の関連の場合は、ステップＳ２１１へ進む。図４（ｂ）のような1対多の関連の場合は、ステップＳ２０６へ進む。
【００５２】
ステップＳ２０６で、1対多の関連の場合は、リスト構造でインスタンスの関連を実現するプログラムコードを生成する処理を行う。
【００５３】
ステップＳ２０７で、リスト構造を辿ってインスタンス自体にアクセスが発生するコードとともにそのアクセスが発生したことを示すログを出力できるプログラムコードを生成する処理を行う。
【００５４】
ステップＳ２０８で、関連によって保持されるインスタンス数（コレクションの数）を出力するログを出力できるプログラムコードを生成する処理を行う。
【００５５】
ステップＳ２０９で、関連によって保持されるインスタンスの中から特定のインスタンスを検索し、その結果得られるインスタンスに対してのみデータアクセスを行うプログラムコードであるかどうかを判断する処理を行う。図４の（ｃ）において、ｎａｍｅが“ｂｂｂ”である場合、特定の処理が行われるといった処理であるかどうかを判断することになる。特定のインスタンスを検索する処理の場合は、ステップＳ２１０へ進む。特定インスタンスへの検索ではなく関連のあるインスタンス全てに対して行う処理であった場合は、ステップＳ２１１へ進む。
【００５６】
ステップＳ２１０で、特定インスタンスを検索し、その特定インスタンスへのアクセスが発生する場合にログが出力されるようなプログラムコードを生成する処理を行う。ステップＳ２１０が終了するとステップＳ２１１へ進み、ステップＳ２０３の条件が完了するまでステップＳ２０４からステップＳ２１０が繰り返される。同様にステップＳ２１２へ進むと、ステップＳ２０２の条件が完了するまでステップＳ２０３からすステップＳ２１１が繰り返される。ステップＳ２０２の条件が完了するとステップＳ２１６へ進み、本シーケンスは終了する。
【００５７】
ステップＳ２１３で、インスタンス配置情報が存在し、そのインスタンス配置情報に基づいてプログラムコードを生成するかどうかを判断する処理を行う。インスタンス配置情報に基づいてプログラムコードを生成する場合は、ステップＳ２１４へ進む。インスタンス配置情報に基づいてプログラムコードを生成しない場合は、ステップＳ２１５へ進む。
【００５８】
ステップＳ２１４で、インスタンス配置情報に基づいてプログラムコード生成する処理を行う。ステップＳ２１４でプログラムコードの生成が完了するとステップＳ２１６へ進み、本シーケンスは終了する。
【００５９】
ステップＳ２１５で、通常のプログラムコードを生成する処理を行う。ステップＳ２１５でプログラムコードの生成が完了するとステップＳ２１６へ進み、本シーケンスは終了する。
【００６０】
図６は、設計図面情報２０６から図５で示したフローチャートを実行した結果得られるログ出力が追加された場合のプログラムコードの断片を示す図（イメージ図）である。
【００６１】
４０１は、図５のステップＳ２０８で付加されるコレクション数に関するログ出力を行うプログラムコードを示している。４０２は、図５のステップＳ２１０で付加される特定インスタンスを検索するためのキーのログ出力を行うプログラムコードである。４０３は、図５のステップＳ２０７で付加されるインスタンスへのアクセスがあったことを示すログ出力を行うプログラムコードである。４０４は、ステップＳ２１０で付加される特定インスタンスへのアクセスがあったことを示すログ出力を行うプログラムコードである。図中の４０１から４０４のようなログ出力のプログラムコードが実行されることによって、インスタンスへのアクセス状況が収集できるようになる。
【００６２】
図７は、図５のフローチャートによってプログラムコードが生成され、そのプログラムコードをコンパイル・リンクし、その結果生成されるプログラム実行形式を実際に実行した結果得られるログを示す図である。
【００６３】
５０１は、クラスＡＡＡの関連Ａ１において、関連Ａ１が保持するインスタンスに対するアクセスが発生した時のログを示している。５０２から５０４は、特定のインスタンスを取得するためのログを示している。５０２は、関連Ａ１に対して、キー“ｎａｍｅ”で検索されたことを示しており、関連によって保持されているインスタンスを４回にわたってチェックした結果、対象インスタンスを取得することが出来たことを示している。５０３及び５０４においても同様である。５０５は、関連によって保持されている全インスタンスに対して処理が発生したことを示すログとなっている。
【００６４】
図８は、図７のログを解析してインスタンスアクセス情報２１７を生成するフローチャートである。
【００６５】
ステップＳ３０２で、ログに存在する全てのクラスについて、ログの分析が完了するまでステップＳ３０３からステップＳ３０９を繰り返す処理を行う。全てのクラスについてログの分析が完了していなかったら、ステップＳ３０３へ進む。
【００６６】
ステップＳ３０３で、クラスに存在する全ての関連についてのログについて、ログの分析が完了するまでステップＳ３０４からステップＳ３０８を繰り返す処理を行う。全ての関連についてログの分析が完了していなかったら、ステップＳ３０４へ進む。
【００６７】
ステップＳ３０４で、特定インスタンスを取得するためのアクセスが発生したことを示すログであるかどうかを判断する処理を行う。ステップＳ３０４で、特定インスタンスを取得するためのアクセスが発生していない場合は、ステップＳ３０７へ進む。ステップＳ３０４で、特定インスタンスを取得するためのアクセスが発生した場合は、ステップＳ３０５へ進む。
【００６８】
ステップＳ３０５で、関連として保持されている全インスタンス数と特定インスタンスを取得するために使用したキーをログから取得する処理を行う。例えば、図７の５０２ではインスタンス数は４、キーは“ｎａｍｅ”となる。
【００６９】
ステップＳ３０６で、特定インスタンスを取得するためにかかったインスタンスへのアクセス数をログから取得する処理を行う。例えば、図７の５０２では、４回のアクセスが発生している。
【００７０】
ステップＳ３０７で、関連として保持されている全インスタンスに対して連続アクセスをするログであるかどうかを判断する処理を行う。全インスタンスに対する連続アクセスを行うログの場合は、ステップＳ３０８へ進む。全インスタンスへのアクセスをしないログの場合は、ステップＳ３０９へ進む。
【００７１】
ステップＳ３０８で、全インスタンスへのアクセス数をログから取得する処理を行う。ステップＳ３０８が終了すると、ステップＳ３０９へ進む。
【００７２】
ステップＳ３０９で、全ての関連についてのアクセスログの分析が完了すると、ステップＳ３１０へ進む。
【００７３】
ステップＳ３１０で、全てのクラスについてログ分析が完了すると、ステップＳ３１１へ進み本シーケンスを終了する。
【００７４】
本シーケンスを実行することによって、複数のインスタンスを保持している場合に、そのインスタンスに対してどのようなアクセスがなされたかを集計し、その集計結果であるインスタンスアクセス情報２１７を生成することが出来る。
【００７５】
図９は、図８のフローチャートを実行した結果得られるインスタンスアクセス情報２１７を示した図である。
【００７６】
６０１は、クラスＡＡＡにおいて関連Ａ１が存在し、その関連Ａ１に対してキーが“ｎａｍｅ”であるインスタンスが存在するかどうかを検索する処理が発生し、対象インスタンスを取得するのに４回のアクセスが関連Ａ１に対して生じたことを示している。
【００７７】
６０２は、関連が保持する全インスタンス４つに対して連続アクセスが発生したことを示している。また、特定インスタンスに対するアクセスが３回、全インスタンスに対する連続アクセスが1回それぞれ発生したことを示している。
【００７８】
開発者は、図８のフローチャートを実行した結果、得られる図９のインスタンスアクセス情報２１７から、クラス間の関連について、実装するプログラムコードを選択することになる。例えば、図９のように４回のアクセスの中で３回が特定インスタンスに対する処理が発生したことを示した場合は、メモリ使用量よりも特定のインスタンスを検索するのにかかるコストを抑える必要があると開発者によって判断可能になる。
【００７９】
インスタンス配置情報入力部２０５において、関連を実装方法の１つである“ＭＡＰ”で実装するように指定され、インスタンス配置情報２０６が生成されると、プログラム生成部２０９において、設計図面情報２０６、プラットフォーム依存情報２０７、及びインスタンス配置情報２０８からプログラムコード２１０を生成する。
【００８０】
図１０は、“ＭＡＰ”を用いて生成されたプログラムコードの一例である。７０１は、クラスのコンストラクタであり、例えばコンストラクタの中でクラス間の関連（ＭＡＰ）を生成するプログラムコードが生成される。
【００８１】
７０２は、クラス間の関連において保持されているインスタンスについて、特定のインスタンスを取得するプログラムコードであり、例えばＭＡＰを使用している場合は、引数にキーを与えることで特定のインスタンスをＭＡＰから取得することが出来る。
【００８２】
７０３は、クラス間の関連に新たにインスタンスを追加するプログラムコードであり、例えばＭＡＰに登録するときは、インスタンスとそのインスタンスを検索するキーを同時に登録する。ＭＡＰは、メモリ消費量が大であるかわりに検索スピードが高速であることが知られており、ＭＡＰを関連に対するプログラムコードとして生成することによって、特定のインスタンスを検索するのにかかるコストを抑えることが可能となる。
【００８３】
なお、本発明の目的は、上述した実施形態の機能を実現するソフトウェアのプログラムコードを記録した記憶媒体を、システム或いは装置に供給し、そのシステム或いは装置のコンピュータ（又はＣＰＵやＭＰＵ）が記憶媒体に格納されたプログラムコードを読み出し実行することによっても、達成されることは言うまでもない。
【００８４】
この場合、記憶媒体から読み出されたプログラムコード自体が上述した実施形態の機能を実現することになり、プログラムコード自体及びそのプログラムコードを記憶した記憶媒体は本発明を構成することになる。
【００８５】
プログラムコードを供給するための記憶媒体としては、例えば、フレキシブルディスク、ハードディスク、光ディスク、光磁気ディスク、ＣＤ−ＲＯＭ、ＣＤ−Ｒ、磁気テープ、不揮発性のメモリカード、ＲＯＭ等を用いることができる。
【００８６】
また、コンピュータが読み出したプログラムコードを実行することにより、上述した実施形態の機能が実現されるだけでなく、そのプログラムコードの指示に基づき、コンピュータ上で稼動しているＯＳ（基本システム或いはオペレーティングシステム）等が実際の処理の一部又は全部を行い、その処理によって上述した実施形態の機能が実現される場合も含まれることは言うまでもない。
【００８７】
さらに、記憶媒体から読み出されたプログラムコードが、コンピュータに挿入された機能拡張ボードやコンピュータに接続された機能拡張ユニットに備わるメモリに書き込まれた後、そのプログラムコードの指示に基づき、その機能拡張ボードや機能拡張ユニットに備わるＣＰＵ等が実際の処理の一部又は全部を行い、その処理によって上述した実施形態の機能が実現される場合も含まれることは言うまでもない。
【図面の簡単な説明】
【００８８】
【図１】本発明の実施の形態に係るプログラムコード生成装置の構成を示すブロック図である。
【図２】本発明の実施の形態に係るプログラムコード生成装置に関するデータフローを示す図である。
【図３】本発明の実施の形態に係るシステム全体の処理手順を示すフローチャートである。
【図４】本発明の実施の形態に係る設計図面情報について説明するための図である。
【図５】本発明の実施の形態に係るログ出力機能付きプログラムコード生成に関するフローチャートである。
【図６】本発明の実施の形態に係るプログラムコード生成装置によって生成されたプログラムコードの断片を示す図である。
【図７】本発明の実施の形態に係るプログラムコード生成装置によって出力されたログを示す図である。
【図８】本発明の実施の形態に係るプログラムコード生成装置によって出力されたログの解析に関するフローチャートである。
【図９】本発明の実施の形態に係るプログラムコード生成装置によって出力されたログを解析した結果得られるインスタンスアクセス情報を示す図である。
【図１０】本発明の実施の形態に係るプログラムコード生成装置によって生成されたプログラムコードの一例を示した図である。
【符号の説明】
【００８９】
１  ＣＰＵ
２  バス
３  ＲＯＭ
３ａ  処理プログラム
３ｂ  パラメータ
４  ＲＡＭ
４ａ  設計図面情報
４ｂ  プラットフォーム依存情報
４ｃ  プログラムコード
４ｄ  インスタンス配置情報
４ｅ  ライブラリ
４ｆ  プログラム実行形式
５  入力インターフェィス
６  キーボード、ボタン、マウス、ダイアル
７  出力インターフェィス
８ａ  ＣＲＴ・ＬＣＤ
８ｂ  プリンタ・プロッタ
９  外部記憶装置インターフェィス
１０  ＨＤ、ＦＤ、ＣＤ−ＲＯＭ、ＭＤ、ＣＦ、・・・（ファイル）
２０１  ＧＵＩ入力処理部
２０２  自動生成装置起動部
２０３  設計図面情報入力部
２０４  プラットフォーム依存情報入力部
２０５  インスタンス配置情報入力部
２０６  設計図面情報
２０７  プラットフォーム依存情報
２０８  インスタンス配置情報
２０９  プログラム生成部
２１０  プログラムコード
２１１  ライブラリ
２１２  コンパイラ・リンカ
２１３  プログラム実行形式
２１４  プログラム実行部
２１５  プログラム実行ログ
２１６  実行ログ解析部
２１７  インスタンスアクセス情報
【図１】
2007219725.tif 000003
【図２】
2007219725.tif 000004
【図３】
2007219725.tif 000005
【図４】
2007219725.tif 000006
【図５】
2007219725.tif 000007
【図６】
2007219725.tif 000008
【図７】
2007219725.tif 000009
【図８】
2007219725.tif 000010
【図９】
2007219725.tif 000011
【図１０】
2007219725.tif 000012