【文献】
          「FORMULATOR  for  Windows(32bit版)  設計書作成支援(C/C++/VC++/Java/COBOL言語)  F1版」,株式会社東芝  e−ソリューション社,2001年10月15日,第F1版,pp.209−218
        
      
    (58)【調査した分野】(Int.Cl.,DB名)
  ファイル・システムのファイル又はコンテンツが、前記カスタマイズされた規則内で定義されたファイル名パターンとの一致に関してスキャンされ、ここで前記ファイル名パターンは完全修飾ファイル名パターンであり、前記ファイル名と一致するファイルを突き止めるがディレクトリの一致は許容しない、請求項2から請求項5までのいずれか1項に記載の方法。
  前記原モデルの推論バージョンと前記原モデルの現行バージョンとを比較してソース要素における差分を検出することが、前記原モデルの前記推論バージョンのコンテンツと前記原モデルの前記現行バージョンのコンテンツとを比較することを含む、請求項1から請求項8のいずれか1項に記載の方法。
  前記比較することが、前記原モデルの前記推論バージョンのコンテンツ及び構造と、前記原モデルの前記現行バージョンのコンテンツ及び構造とを比較することを含む、請求項9に記載の方法。
  前記原モデルの前記推論バージョンと前記原モデルの現行バージョンとを比較してソース要素における差分を検出することが、前記原モデルの前記推論バージョン全体をメモリ内に構築し、モデル対モデルの直接比較を行うことを含む、請求項1から請求項10のいずれか1項に記載の方法。
【発明の概要】
【発明が解決しようとする課題】
【0008】
  本発明の目的は、コード生成器の出力の完全性を維持するための方法及びシステムを提供することである。
 
【課題を解決するための手段】
【0009】
  本発明の第1の態様によれば、コード生成器の出力の完全性を維持するための、コンピュータで実装される方法であって、原モデル(original  model)に基づいて特定のコード生成アプリケーションによって生成された被生成出力を判定することと、被生成出力を解析して、原モデルの推論バージョンのコンテンツを推論することと、原モデルの推論バージョンと原モデルの現行バージョンとを比較して、ソース要素における差分を検出することと、検出された差分を用いて、被生成出力内の冗長要素を識別することと、を含む方法が提供される。
【0010】
  被生成出力を判定することは、ファイル・システムのファイル又はコンテンツを入力し、特定のコード生成アプリケーションの動作に基づいてカスタマイズされた規則を適用したリバース・エンジニアリングを行って被生成出力を識別することを含むことができる。
【0011】
  被生成出力を解析して原モデルの推論バージョンのコンテンツを推論することは、特定のコード生成アプリケーションの動作に基づいてカスタマイズされた規則を適用して被生成出力をリバース・エンジニアリングすることを含むことができる。
【0012】
  カスタマイズされた規則は、特定のコード生成アプリケーションが命
名及び/又は原モデルのコンテンツ
に用いる規則に基づくものとすることができる。
【0013】
  カスタマイズされた規則は、指令の基本セットを含み、必要に応じてカスタム論理に委譲(delegate)することができる。
【0014】
  ファイル・システムのファイル又はコンテンツを、カスタマイズされた規則内で定義されたファイル名パターンとの一致に関してスキャンすることができ、ここでファイル名パターンは、完全修飾(fully  qualified)ファイル名パターンであり、ファイル名と一致するファイルを突き止めるがディレクトリの一致は許容しない。定義されたファイル名パターンは、埋め込まれた名前付きワイルドカードを含むことができる。
【0015】
  スキャンすることは、カスタマイズされた規則内で指定された1つ又は複数の付加的な指令に対する、一致したファイル名の合致(compliance)をチェックすることを含むことができ、付加的な指令は、期待コンテンツの形態の署名コンテンツを含む。
【0016】
  ポピュレートされた名前変数を有する一致したファイル名パターンを用いて、原モデルの推論バージョンのソース要素を推論することができる。
【0017】
  原モデルの推論バージョンと原モデルの現行バージョンとを比較してソース要素における差分を検出することは、原モデルの推論バージョンのコンテンツと原モデルの現行バージョンのコンテンツとを比較することを含むことができる。
【0018】
  比較することは、原モデルの推論バージョンのコンテンツ及び構造と、原モデルの現行バージョンのコンテンツ及び構造とを比較することを含むことができる。
【0019】
  1つの実施形態において、原モデルの推論バージョンと原モデルの現行バージョンとを比較してソース要素における差分を検出することは、データを規則毎にスキャンし、推論モデルをメモリ内に部分的に作成して、その規則に関する比較を行うことを可能にする、規則毎手法(rule  by  rule  approach)を含むことができる。
【0020】
  別の実施形態において、原モデルの推論バージョンと原モデルの現行バージョンとを比較してソース要素における差分を検出することは、原モデルの推論バージョン全体をメモリ内に構築し、モデル対モデルの直接比較を行うことを含むことができる。
【0021】
  本方法は、被生成出力内の識別された冗長要素を自動的にアーカイブすること又は削除することを含むことができる。
【0022】
  本発明の第2の態様によれば、コード生成器の出力の完全性を維持するためのシステムであって、原モデルに基づいて特定のコード生成アプリケーションによって生成された被生成出力を判定するための被生成出力認識コンポーネントと、被生成出力を解析して原モデルの推論バージョンのコンテンツを推論するための推論モデル生成コンポーネントと、原モデルの推論バージョンと原モデルの現行バージョンとを比較してソース要素における差分を検出するための比較コンポーネントと、検出された差分を用いて被生成出力内の冗長要素を識別するためのクリーンアップ・コンポーネントと、を含むシステムが提供される。
【0023】
  被生成出力を判定するための被生成出力認識コンポーネントは、ファイル・システムのファイル又はコンテンツを入力し、特定のコード生成アプリケーションの動作に基づいてカスタマイズされた規則を適用したリバース・エンジニアリングを行って被生成出力を識別することを含むことができる。
【0024】
  被生成出力を解析して原モデルの推論バージョンのコンテンツを推論するための推論モデル生成コンポーネントは、特定のコード生成アプリケーションの動作に基づいてカスタマイズされた規則を適用して被生成出力をリバース・エンジニアリングすることを含むことができる。
【0025】
  被生成出力認識コンポーネントは、ファイル・システムのファイル又はコンテンツを、カスタマイズされた規則内で定義されたファイル名パターンとの一致に関してスキャンするためのものとすることができ、ファイル名パターンは完全修飾ファイル名パターンであり、ファイル名と一致するファイルを突き止めるが、ディレクトリの一致は許容しない。定義されたファイル名パターンは、埋め込まれた名前付きワイルドカードを含むことができる。
【0026】
  被生成出力認識コンポーネントにおいて、スキャンすることは、カスタマイズされた規則内で指定された1つ又は複数の付加的な指令に対する、一致したファイル名の合致をチェックすることを含むことができ、ここで付加的な指令は、期待コンテンツの形態の署名コンテンツを含む。
【0027】
  被生成出力認識コンポーネントにおいて、ポピュレートされた名前変数を有する一致したファイル名パターンを用いて、原モデルの推論バージョンのソース要素を推論することができる。
【0028】
  クリーンアップ・コンポーネントは、被生成出力内の識別された冗長要素を自動的にアーカイブする又は削除するためのものとすることができる。
【0029】
  本発明の第3の態様によれば、コード生成器の出力の完全性を維持するためのコンピュータ・プログラム製品が提供され、このコンピュータ・プログラム製品は、処理回路によって可読の、処理回路によって本発明の第1の態様による方法を実施するために実行される命令を格納するコンピュータ可読ストレージ媒体を含む。
【0030】
  本発明の第4の態様によれば、コンピュータ可読媒体上に格納され、デジタル・コンピュータの内部メモリ内にロード可能なコンピュータ・プログラムであって、該プログラムがコンピュータ上で実行されたときに本発明の第1の態様の方法を実施するためのソフトウェア・コード部分を含む、コンピュータ・プログラムが提供される。
【0031】
  本発明の第5の態様によれば、添付の図面を参照して実質的に説明される方法が提供される。
【0032】
  本発明の第6の態様によれば、添付の図面を参照して実質的に説明されるシステムが提供される。
【0033】
  本発明の説明される態様は、コード生成アプリケーションの出力を、アプリケーション自体を何ら修正する必要なく、遡及的に解析し及び訂正するために用いることができる点で利点を提供する。
【0034】
  本発明と見なされる主題は、本明細書の結論部分において具体的に指摘され、明確に権利請求される。本発明は、添付の図面と併せて読むときの以下の詳細な説明を参照することによって、機構及び動作の方法の両方について、その目的、特徴、及び利点と共に最も良く理解される。
【0035】
  これより、添付の図面を参照して、本発明の好ましい実施形態を例示のみを目的として説明する。
 
 
【発明を実施するための形態】
【0037】
  図面内に示される要素は、説明を簡単且つ明確にするために、必ずしも縮尺通りに描かれているわけではないことが認識されるであろう。例えば、図面内の幾つかの要素は、明確にするために、他の要素と比べて寸法が誇張されている場合がある。さらに、適切であると考えられる場合には、対応する特徴又は類似する特徴を示すために、図面間で参照符号が繰り返されることがある。
 
【0038】
  以下の詳細な説明において、本発明の完全な理解を与えるために、多数の特定の詳細が示される。しかしながら、当業者には、本発明がこれらの特定の詳細なしで実施され得ることが理解されるであろう。他の例を挙げれば、周知の方法、手順、及び構成要素は、本発明を不明瞭にしないために、詳細には説明されていない。
 
【0039】
  ファイル・システム上のファイル(及び/又はそのコンテンツ)を用いてソース・モデル・コンテンツを非常に高い信頼度で推論することができる、コード生成プロセスのリバース・エンジニアリングのための方法及びシステムが提供される。この推論モデル・コンテンツは次に、コード生成以降に適用された変更を検出するために、任意の現行モデルに対して比較することができる。この知識に基づいて、現行ソース・モデルと被生成コードとの間の一貫性を保証するために、冗長な生成リソースを「クリーンにする」(アーカイブする及び/又は削除する)ことができる。
 
【0040】
  定義済み規則と、必要に応じたカスタム論理への委譲とを処理することが可能なフレームワークが、a)特定のコード生成アプリケーションの出力であるマテリアル、及びb)冗長なクラッタを表し、それゆえ自動的に除去することができるそのマテリアルのサブセット、を推論するためにファイル・システムのコンテンツのリバース・エンジニアリングを行う目的で提供される。
 
【0041】
  ソース・モデルを推論するために被生成コードをリバース・エンジニアリングすることは、コード生成器が、被生成出力の命名及び/又はコンテンツに関して予測可能な規則に従うこと、及び、原ソース内で定義された情報を出力に注入すること、を利用する。上述の例の場合、これは、従来のSQL及びJava構文に従うファイルに注入されるテーブル及びフィールド名を含むことになる。特に、これらは、恣意的に構造化されたデータ又はランダムなデータを出力しない。
 
【0042】
  したがって、特定の型式の被生成出力を記述する規則を定義すること、及び、任意のファイルをかかる規則と比較して、それがコード生成器からの出力である(又は含む)か否か、及び、その中に注入されたソース要素がソース・モデル内にまだ存在しているか否かを高精度で判定することが可能である。
 
【0043】
  ファイル又はそのコンテンツのある部分が特定のコード生成アプリケーションからの出力を表すこと、及び、原ソース要素のいずれかが(削除又はリネームされたことにより)もはや存在していないことを判定することができた場合、出力のその項目は、除去することができる冗長なクラッタを表すことになる。
 
【0044】
  説明される方法及びシステムは、被生成出力の完全性を、カスタマイズ可能な規則から原ソースマテリアルを推論することによって遡及的に保証する。
 
【0045】
  しかし実際には、このタスクを行うには、ファイル・システム内の全てのファイルを潜在的に検査しなければならず、また、被生成コードに似ているが被生成コードではないデータの形でのフォールスポジティブも回避しなければならないので、性能面での困難を克服しなければならない。
 
【0046】
  図1を参照すると、ブロック図は、説明されるシステム100の例示的な実施形態を示す。
 
【0047】
  コード生成アプリケーション110がプログラム・コード又はリソースの形で被生成出力102を生成する元になる、原モデル101を提供することができる。
 
【0048】
  説明される方法は、被生成出力102の完全性を維持するための出力更新コンポーネント120を提供する。出力更新コンポーネント120は、コード生成アプリケーションに組み込むこともでき、又はそれとは別個のものとすることもできる。
 
【0049】
  コード更新コンポーネント120は、コード生成アプリケーション110に関して被生成出力102のリバース・エンジニアリングを可能にする、カスタマイズ可能な規則122を伴う規則エンジンの形態のリバース・エンジニアリング・コンポーネント121を含むことができる。カスタマイズ可能な規則122は、特定の型式の被生成出力に関して生成することができる。コード生成アプリケーション110は、しばしば、プログラム・コード又はリソースを生成するための予測可能な規則に従い、また、原モデル101からの情報を出力に注入する。このような予測可能な規則を用いて、リバース・エンジニアリング・コンポーネント121の規則をカスタマイズすることができる。
 
【0050】
  リバース・エンジニアリング・コンポーネント121は、被生成出力102がその中に存在し得るファイル・システム106のファイル又はコンテンツを入力として取得することができる。リバース・エンジニアリング・コンポーネント121は、あるファイル、コード、又はコンテンツが特定のコード生成アプリケーション110からの出力を表していることを判定するための、被生成出力認識コンポーネント123を含むことができる。出力認識コンポーネント123は、カスタマイズ可能な規則122を用いてこれを実行することができる。
 
【0051】
  リバース・エンジニアリング・コンポーネント121はまた、カスタマイズ可能な規則122を用いて被生成出力102から推論モデル103のコンテンツ及び構造を生成するための、推論モデル生成コンポーネント124も含むことができる。カスタマイズ可能な規則122は、原モデルがどのように見えるはずであるかを、検出された被生成出力102に基づいて推論するのに必要な情報を提供する。
 
【0052】
  理想的な場合、全ての詳細において原モデル101と同一の推論モデル103を作成することができる。実際には、差異が存在する可能性があり、例えば、原モデル内の文書が被生成マテリアル内には存在せず、そのため推論モデル103内で再現されないことがあるかもしれない。しかしながら、被生成出力102に曖昧さが存在しない限り、a)モデルの現行ビュー104に対して比較するのに十分なコンテンツ、又はb)実際に被生成出力102を再作成するのに十分なコンテンツを含む、推論モデル103を構築することが可能である。
 
【0053】
  出力更新コンポーネント120は、推論モデル103のコンテンツと原モデル101に対応する現行モデル104とを比較するための比較コンポーネントを含むことができる。比較コンポーネント125は、被生成出力102の作成以降に原モデル101に適用された何らかの変更を検出することができる。
 
【0054】
  出力更新コンポーネント120は、被生成出力102の現時点で冗長ないずれかの構成要素をアーカイブして及び/又は削除して、クリーンにされた被生成出力105を提供するための、クリーンアップ・コンポーネント126を含むことができる。
 
【0055】
  図2を参照すると、本発明の態様を実装するための例示的なシステムは、バス・システム203を通じてメモリ要素に直接的又は間接的に結合された少なくとも1つのプロセッサ201を含む、プログラム・コードを格納する及び/又は実行するのに適したデータ処理システム200を含む。メモリ要素は、プログラム・コードの実際の実行中に用いられるローカル・メモリ、大容量記憶装置、及び、実行中に大容量記憶装置からコードを取り出さなければならない回数を減らすために少なくとも幾つかのプログラム・コードの一時的な記憶場所を提供するキャッシュ・メモリを含むことができる。
 
【0056】
  メモリ要素は、読出し専用メモリ(ROM)204及びランダム・アクセス・メモリ(RAM)205の形態のシステム・メモリ202を含むことができる。基本入力/出力システム(BIOS)206を、ROM204内に格納することができる。システム・ソフトウェア207は、RAM205内に格納することができ、オペレーティング・システム・ソフトウェア208を含む。ソフトウェア・アプリケーション210もまた、RAM205内に格納することができる。
 
【0057】
  システム200はまた、磁気ハード・ディスク・ドライブなどの一次ストレージ手段211、並びに、磁気ディスク・ドライブ及び光ディスク・ドライブなどの二次ストレージ手段212を含むことができる。これらドライブ及びそれらに関連関連付けられたコンピュータ可読媒体は、コンピュータ実行可能命令、データ構造体、プログラム・モジュール、及びシステム200のためのその他のデータの不揮発性記憶装置を提供する。ソフトウェア・アプリケーションを、一次及び二次ストレージ手段211、212並びにシステム・メモリ202上に格納することができる。
 
【0058】
  コンピューティング・システム200は、ネットワーク・アダプタ216を介した1つ又は複数の遠隔コンピュータへの論理接続を用いて、ネットワーク化された環境内で動作することができる。
 
【0059】
  入力/出力デバイス213は、直接的に、又は介在するI/Oコントローラを通じて、システムに結合することができる。ユーザは、キーボード、ポインティング・デバイス、又は他の入力デバイス(例えば、マイクロフォン、ジョイスティック、ゲームパッド、衛星通信用アンテナ、スキャナ等)などの入力デバイスを通じて、コマンド及び情報をシステム200に入力することができる。出力デバイスは、スピーカ、プリンタ等を含むことができる。ディスプレイ・デバイス214もまた、ビデオ・アダプタ215などのインターフェースを介してシステム・バス203に接続することができる。
 
【0060】
  図3を参照すると、流れ
図300は、コード生成アプリケーションにより生成される出力の完全性を維持するための説明される方法の実施形態を示す。
 
【0061】
  ファイル・システムのファイル又はコンテンツを、更新すべき被生成出力がその中に存在する入力として用いる(301)ことができる。更新の対象となる被生成プログラム出力は、原モデルに基づく特定のコード生成アプリケーションによって生成されたものとすることができる。
 
【0062】
  この方法は、特定の製品に制限されるものではない。ある種のソース・マテリアル(モデル等)を用いてある種のターゲット・マテリアル(ファイル等)が生成されるようないかなる事例も、説明される方法を利用することができる。
 
【0063】
  被生成出力を、特定のコード生成アプリケーションの出力であり、かつソース・モデルから生成されたマテリアルであると判定する(302)ことができる。この判定は、定義済みのカスタマイズ可能な規則を用いてファイル・システムのファイル又はコンテンツをリバース・エンジニアリングすることによって行うことができる。カスタマイズ可能な規則は、原モデルがどのように見えるはずであるかを、検出された被生成出力に基づいて推論するのに必要な情報を提供することができる。
 
【0064】
  例えば、この判定は、ファイル・システムのコンテンツを完全修飾ファイル名パターンに対する一致に関してスキャンし及びマッチングすることによって行うことができる。完全修飾により、ディレクトリではなくファイルを突き止めることができる。例えば、「/a/b/c/d/file.java」と称されるファイルに関する一致を見いだすことができるが、ディレクトリ「a/b/c/d」(それゆえ暗黙的にそのコンテンツ)は一致しているものとして許容されない。なぜなら、ディレクトリの中に何が入っているかを(全てのファイルを読むことなく)正確に知ることは不可能であり、それゆえディレクトリ自体及びその全てのコンテンツが全てある特定のソース・モデルから生成されたものであると断言することはできないからである。したがって、本方法は、個々のファイル・レベルで機能し、それゆえ「完全修飾」という用語が用いられる。
 
【0065】
  スキャン及びマッチングは、埋め込まれた名前付きワイルドカードを利用することができる。
 
【0066】
  ワイルドカードは、Hello*Worldのような星印とすることができる。これは、Helloで始まり、Worldで終わる任意の文字列(例えば、HelloThereWorld)と一致することになる。ワイルドカードは、説明される方法において、そのワイルドカードを置き換える文字列の値を決定する能力と共に提供することができる。したがって、ワイルドカードに対して、それらを識別する名前を与えることができる。上記の例では、Hello%WildCard1%Worldを用いることができる。このワイルドカードの名前は「WildCard1」であり、文字%で囲まれていることによりワイルドカードとして解釈される。マッチングアルゴリズムは、これらのワイルドカードの値を追跡することができる。例えば、HelloThereWorldと一致する場合、「WildCard1」の値は「There」である。これは、マッチングコードと、一致ヒットを検査するために用いられる論理との間の、都合の良い分離を提供する。
 
【0067】
  複数フォルダにわたることができる高度に複雑なオープンエンドのワイルドカードマッチングを用いることもでき、例えば、C:\%%whoknowswhere%%\Wibble.txtは、Wibble/txtという名前のファイルを突き止め、「whoknowswhere=myDir\\A\B\C\someOtherDir」「whoknowswhere=myDir\X\Y」等の値を返すことができる。
 
【0068】
  規則内の付加的な指令に対する合致を、例えば「署名」語又は語句の存在に関して、チェックすることができる。
 
【0069】
  これは、ファイル内部をチェックして、ある特定の期待コンテンツが存在することを確認することを含むことができる。例えば、「Alpha」と呼ばれる原モデル内のエンティティの存在に応答して、AlphaBusinessObject.javaというファイルが生成されるものとする。同じ位置でBataBusinessObject.jarというファイルに遭遇したとする。このファイルは、原モデル内に同等のオブジェクト「Beta」がかつて存在していたために存在しているかもしれず、又は無関係なユーザ・ファイルかもしれない。これを推論モデルに組み入れる前に、ファイルのコンテンツを検査して、被生成コンテンツを含んでいることをチェックすることができる。チェックは、特定のキーワード、文字列、テキストのまとまり、及び、そのファイルが生成されたものであることを本方法が保証することを可能にする意図的に生成されたマーカーに関して行うことができる。
 
【0070】
  被生成出力に対して、それを生成した特定のコード生成アプリケーションに関連するカスタマイズされた規則に従ってリバース・エンジニアリングを行い(303)、推論モデルのコンテンツを得ることができる。推論モデルは、特定の生成アプリケーションがそれに基づいて被生成出力を生成したソース・モデルの、リバース・エンジニアリングされたモデルである。推論モデルは、ステップ302のスキャン及びマッチング・プロセスによってポピュレートされた名前付き変数の推論ソース要素を含むことができる。
 
【0071】
  推論モデルのコンテンツと現行モデルのコンテンツとを比較する(304)ことができ、この現行モデルは、特定のコード生成アプリケーションによって被生成プログラム・コード又はリソースを生成する元となった原モデルの、最新バージョンである。
 
【0072】
  1つの実施形態において、推論モデルのコンテンツ及び構造の両方を、現行モデルのコンテンツ及び構造と比較することができ、抽出された構造及びコンテンツの一致を要求することができる。どのように比較を行うかは、モデル自体の意味論に依存する。別の実施形態において、推論モデル及び現行モデルは、意味論的に同等であり得るが、異なる構造を有し得る。
 
【0073】
  推論モデルのコンテンツと現行モデルのコンテンツとの間の何らかの差分を検出する(305)ことができる。例えば、スキャン及びマッチング・プロセスによりポピュレートされた名前付き変数から推論されたソース要素を、現行モデル(任意のサブモデル部分を含む)において解決しようと試みる。解決できないものはいずれも、関連付けられたファイル又はその一部が冗長であり、自動的にクリーンにされることができることを示す。
 
【0074】
  スキャン及びマッチング・プロセスは、特定の型式のモデル(規則によって定義される)に関して、冗長なアーチファクトを突き止めることができるが、これはある型式のモデルの多数の分離したインスタンスに関係するマテリアルを見いだすことができるはずであり、どのモデルがどの冗長なアーチファクトに適用可能であるかを識別することが可能である。
 
【0075】
  図4に示される説明される方法の第1の実施形態において、規則毎手法を用いることができ、この場合、ファイル・システムは規則毎にスキャンされ、推論モデルがメモリ内に部分的に作成され、その規則に関する比較を行うことを可能にする。第2の実施形態において、モデル全体をメモリ内に構築することができ、次いで、モデル対モデルの直接比較を行うことができる。
 
【0076】
  図4の流れ
図400を参照して、被生成出力を判定し、冗長なコンポーネントを検出する、説明される方法の態様の第1の実施形態を説明する。
 
【0077】
  リバース・エンジニアリング・コンポーネントの規則を適用して(401)、ファイル・システムの入力ファイル又はコンテンツにおける完全修飾ファイル名パターンを認識することができる。
 
【0078】
  ファイル・システムの入力ファイル又はコンテンツをスキャンして(402)、規則内で定義されたような完全修飾ファイル名をマッチングすることができる。
 
【0079】
  ひとたび一致した完全修飾ファイル名が突き止められると、ポピュレートされた名前付き変数を用いて(403)、情報を推論することができる。一致したファイルと、規則内で指定されたいずれかの付加的な指令、例えば「署名」コンテンツとの合致をチェックする(404)ことができる。
 
【0080】
  一致したファイルが、その規則がそれに合わせてカスタマイズされた特定の生成アプリケーションによって生成された被生成出力であることが納得できる(compelling)か否かが判定される(405)。何らかの疑義があれば、その一致したファイルに「未検証」とラベル付けする(406)ことができ、そのファイルのクリーンアップに進むためには手動確認を要するものとすることができる。
 
【0081】
  一致したファイルが被生成出力であることが納得できる場合、スキャン及びマッチング・プロセスによってポピュレートされた名前付き変数からソース要素を推論する(407)ことができる。推論されたソース要素を、現行ソース・モデルに対して解決する(408)ことができる。
 
【0082】
  解決されないソース要素はいずれも冗長な構成要素であり、一致したファイルから自動的にクリーンにされる(409)ことができる。
 
【0083】
  第1の実施形態の方法を用いて被生成出力を識別するための規則の一例を以下に示す。
 
【0084】
  完全修飾出力ファイル名の「形」が以下の通りであることを、(例えば標準拡張マークアップ言語(XML)を用いて)指定することができる。
<ruleString>%Project%/src/%%Package%Name%/entity/E%EntityExtention%Ext.java</ruleString>
 
【0085】
  これは、ソース「Project」に対してマッピングされるトップレベルフォルダ、その直下の「src」という名前のサブフォルダ、その後に続く、「PackageName」と呼ばれる要素に対してマッピングされる不定長のサブフォルダ構造、最後に「EntityExtention」要素に対してその名前が間接的にマッピングされるファイルを識別することが意図される。
 
【0086】
  また、このパターンに一致するファイルがいずれも、2つの特定のクラスのうちの1つ(このパターンは既にこれをJavaファイルとして定義している)を直接実装しなければならないこと、及び、そのファイルが生成されたものであることをさらに示す何らかの恣意的な「署名」を含んでいなければならないことを指定することもできる。
<implements>com.ibm.common.IExtension|com.ibm.base.IBaseExtension</implements>
<containsString><!−−ExtendedObject−−></containsString>
 
【0087】
  最後に、規則に関連するソース・モデルの型式をナビゲートするために、カスタム論理を指定することができる。カスタム論理は、規則の構文がある特定の基準を記述するのに不十分な場合に用いることができ、ユーザが自身のコードをフレームワークにフックすることを許容することができる。
 
【0088】
  カスタム論理は、ひとたびファイルが突き止められると、そのファイルを通るナビゲーションを補助するためにケース・バイ・ケースの基準で用いることができる。例えば、ファイルは、モデル内の異なる要素が寄与する一連の類似したエントリを含んでいるかもしれない。これらの各々が「一致」(即ち、単一ファイル内の複数の一致)と見なされる場合があり、このカスタム論理は、各々の一致の識別を補助することができる。
 
【0089】
  この後者の特徴はまた、カスタム論理が扱うことができる規則構造に恣意的なXML拡張を導入することも可能にする。
 
【0090】
  これらの型式の規則と、XML指令の基本セットのハンドリングと、必要に応じたカスタム論理への委譲とを処理することが可能なフレームワークが、a)特定のコード生成器の出力であるマテリアル、及びb)冗長なクラッタを表し、それゆえ自動的に除去することができるそのマテリアルのサブセット、推論するためにファイル・システムのコンテンツのリバース・エンジニアリングを行う目的で提供される。
 
【0091】
  このフレームワークは、最初にファイル・システムを完全修飾ファイル名パターンに対する一致に関してスキャンすることができる。これは、埋め込まれた「名前付き」ワイルドカード(上記で%又は%%記号で囲まれた変数名により例示した)を利用するが、この技術は、ファイル・システムの無関係部分を迅速に識別することが可能であり、それゆえスキャンの量を減らすことができるので、性能面での利益ももたらす。
 
【0092】
  上記の例示的なパターンを例に取ると、直下に「src」という名前のサブフォルダを含まないトップレベルフォルダはいずれも絶対に一致をもたらさないので、プロセスは次のトップレベルフォルダに直行することができる。同様に、パターンのパッケージネーム(package  name)部分は不定長ではあるが、「entity」というフォルダ名に遭遇しない限り、ファイル・レベルでそれ以上スキャンする理由はない。
 
【0093】
  完全修飾ファイル名に対する一致が見いだされたと仮定すると、フレームワークは、ファイル名パターンの中に埋め込まれたポピュレートされた名前付き変数を有することになる。上記の例を用いると、
MyProject/src/com/ibm/models/entity/EMyAddressExt.java
のようなファイルが一致し、以下の情報
Project=MyProject
PackageName=com/ibm/models
EntityExtention=MyAddress
が推論されることになる。
 
【0094】
  ここでフレームワークは、一致したファイルを、規則内で指定することができる付加的な指令との合致に関して検査することができ、例えば「署名」語又は語句の存在に関して、並びにJavaファイルが特定のクラスを実装する及び/又は拡張するか否かに関してチェックする。これらの全てのチェックに合格すれば、これが被生成出力である(又は被生成出力を含む)ことの合理的な確実性が存在することになる。
 
【0095】
  証拠が、そのファイルが生成されたことを納得させるようなものではない場合(例えば、「署名」が欠落しているような場合、又は、ユーザがカスタマイズしたことの明らかな証拠となる、注入された「@generated」タグに「not」という語が追加されているというサインが存在しているような場合)、フレームワークはこの一致を「未検証」とラベル付けし、そのクリーンアップに進むためには手動確認を必要とすることになる。
 
【0096】
  この段階で、フレームワークは、特定のコード生成アプリケーションに由来するものであると確信できる一致のセットを有する。ここで、スキャン及びマッチング・プロセスによってポピュレートされた名前付き変数(上記参照)からソース要素を推論し、これらを全ての適用可能なソース・モデルにおいて解決しようと試みる。解決することができないソース要素はいずれも、関連付けられたファイル又はその一部が冗長であり、自動的にクリーンにされることができることを示す。このように、フレームワークは、被生成出力が常にソース入力と一致していることを保証することが可能である。
 
【0097】
  説明される方法及びシステムを用い、カスタマイズ可能な規則エンジンを用いて、任意のファイル(Javaクラス、XML、テキスト等)を解析することができ、そのコードが特定の型式のコード生成器アプリケーションによって作成されたものか否か、及び、それがいまだ妥当(relevant)であるか否かを非常に高い精度で判定することができる。
 
【0098】
  説明される方法及びシステムは、明示のカップリングが無い状態で、かつ、モデルとコードの両方を同時に互いに位置合わせされた状態で保持する専用のエディタに頼らずに、被生成コードからモデル情報をリバース・エンジニアリングする能力を提供する。これは、多くの異なるモデル−コード生成シナリオに合うように適合させることができるカスタマイズ可能な規則もサポートする。
 
【0099】
  説明される方法及びシステムは、コード生成器の挙動の主要な局面を記述する自由度の高い規則の使用を通じて、コード生成器に対する入力を被生成出力から推論する。
 
【0100】
  ファイル・システム上には多数のファイルが存在し得るものであり、その全てを一致に関して多数の異なる規則に対してチェックしなければならない。説明される方法は、これを、プロセスをコード生成に組み入れるのに十分なほど高速に行うことができる。
 
【0101】
  説明される方法はまた、実際に生成されたコードのみが変更されることを保証するための機構も含む。詳細には、ファイル又はファイル由来のコンテンツは、単にそれが生成されたコンテンツに類似しているという理由で除去されることはない。
 
【0102】
  本発明は、完全にハードウェアの実施形態、完全にソフトウェアの実施形態、又はハードウェアとソフトウェアの要素を含む実施形態の形を取ることができる。好ましい実施形態において、本発明は、ファームウェア、常駐ソフトウェア、マイクロコード等を含むがそれらに限定されないソフトウェアとして実装される。
 
【0103】
  本発明は、コンピュータ又は任意の命令実行システムによって又はそれらとの関連で使用するためのプログラム・コードを提供する、コンピュータ使用可能媒体又はコンピュータ可読媒体からアクセスすることができるコンピュータ・プログラム製品の形を取ることができる。この説明の目的に関して、コンピュータ使用可能媒体又はコンピュータ可読媒体は、命令実行システム、装置若しくはデバイスによって又はこれらと関連して使用するためのプログラムを収容し、格納し、伝達し、伝搬し、又は輸送することができる任意の装置とすることができる。
 
【0104】
  媒体は、電子、磁気、光学、電磁気、赤外、若しくは半導体のシステム(又は装置若しくはデバイス)又は伝搬媒体とすることができる。コンピュータ可読媒体の例としては、半導体若しくは固体メモリ、磁気テープ、取外し可能コンピュータ・ディスケット、ランダム・アクセス・メモリ(RAM)、読み出し専用メモリ(ROM)、剛性磁気ディスク及び光ディスクが挙げられる。現在の光ディスクの例として、コンパクトディスク読出し専用メモリ(CD−ROM)、コンパクトディスク読出し/書込(CD−R/W)、及びDVDが挙げられる。
 
【0105】
  当業者であれば理解するように、本開示の態様は、システム、方法又はコンピュータ・プログラム製品として具体化することができる。従って、本開示の態様は、完全にハードウェアの実施形態、完全にソフトウェアの実施形態(ファームウェア、常駐ソフトウェア、マイクロコード等を含む)、又は、ソフトウェアの態様とハードウェアの態様とを組み合わせた実施形態の形を取ることができ、本明細書においてはこれらの全てを一般に、「回路」、「モジュール」又は「システム」と呼ぶことができる。さらに、本開示の態様は、コンピュータ可読プログラム・コードが組み入れられた1つ又は複数のコンピュータ可読媒体内として具体化されたコンピュータ・プログラム製品の形を取ることができる。
 
【0106】
  1つ又は複数のコンピュータ可読媒体の任意の組み合わせを用いることができる。コンピュータ可読媒体は、コンピュータ可読信号媒体又はコンピュータ可読ストレージ媒体とすることができる。コンピュータ可読ストレージ媒体は、例えば、電子、磁気、光学、電磁気、赤外線若しくは半導体のシステム、装置、若しくはデバイス、又は上記のもののいずれかの適切な組み合わせとすることができる。コンピュータ可読ストレージ媒体のより具体的な例(非網羅的なリスト)として、以下のもの:即ち、1つ又は複数の配線を有する電気的接続、ポータブル・コンピュータ・ディスケット、ハード・ディスク、ランダム・アクセス・メモリ(RAM)、読み出し専用メモリ(ROM)、消去可能なプログラム可能読み出し専用メモリ(EPROM又はフラッシュ・メモリ)、光ファイバ、ポータブル・コンパクト・ディスク読み出し専用メモリ(CD−ROM)、光記憶装置、磁気記憶装置、又は上記のもののいずれかの適切な組み合わせが挙げられる。本明細書の文脈においては、コンピュータ可読ストレージ媒体は、命令実行システム、装置若しくはデバイスによって、又はこれらと関連して用いるためのプログラムを収容し又は格納することができる任意の有形媒体とすることができる。
 
【0107】
  コンピュータ可読信号媒体は、例えばベースバンド内に、又は搬送波の一部として、具体化されたコンピュータ可読プログラム・コードをその中に有する、伝搬されるデータ信号を含むことができる。このような伝搬信号は、これらに限定されるものではないが、電磁気、光又はそれらのいずれかの適切な組み合わせを含む、種々の形態のいずれかを取ることができる。コンピュータ可読信号媒体は、コンピュータ可読ストレージ媒体ではなく、かつ、命令実行システム、装置若しくはデバイスによって、又はこれらと関連して用いるためのプログラムを伝達し、伝搬し、又は搬送することができる任意のコンピュータ可読媒体とすることができる。
 
【0108】
  コンピュータ可読媒体上に具体化されたプログラム・コードは、これらに限定されるものではないが、無線、有線、光ファイバ・ケーブル、RF等、又は上記のもののいずれかの適切な組み合わせを含む、任意の適切な媒体を用いて伝送することができる。
 
【0109】
  本発明の態様の操作を実行するためのコンピュータ・プログラム・コードは、Java、SmallTalk、C++等のようなオブジェクト指向型プログラミング言語、及び、「C」プログラミング言語又は同様のプログラミング言語のような従来の手続き型プログラミング言語を含む、1つ又は複数のプログラミング言語のいずれかの組み合わせで記述することができる。プログラム・コードは、完全にユーザのコンピュータ上で実行される場合もあり、一部がユーザのコンピュータ上で、独立型ソフトウェア・パッケージとして実行される場合もあり、一部がユーザのコンピュータ上で実行され、一部が遠隔コンピュータ上で実行される場合もあり、又は完全に遠隔コンピュータ若しくはサーバ上で実行される場合もある。一番最後のシナリオにおいては、遠隔コンピュータは、ローカル・エリア・ネットワーク(LAN)若しくは広域ネットワーク(WAN)を含むいずれかのタイプのネットワークを通じてユーザのコンピュータに接続される場合もあり、又は外部コンピュータへの接続が為される場合もある(例えば、インターネット・サービス・プロバイダを用いたインターネットを通じて)。
 
【0110】
  本開示の態様は、本明細書において、本開示の実施形態による方法、装置(システム)及びコンピュータ・プログラム製品のフローチャート図及び/又はブロック図を参照して説明される。フローチャート図及び/又はブロック図の各ブロック、並びにフローチャート図及び/又はブロック図内のブロックの組み合わせは、コンピュータ・プログラム命令によって実装できることが理解されよう。これらのコンピュータ・プログラム命令を、汎用コンピュータ、専用コンピュータ、又は他のプログラム可能データ処理装置のプロセッサに与えてマシンを製造し、それにより、コンピュータ又は他のプログラム可能データ処理装置のプロセッサによって実行される命令が、フローチャート及び/又はブロック図の1つ又は複数のブロック内で指定された機能/動作を実装するための手段を作り出すようにすることができる。
 
【0111】
  これらのコンピュータ・プログラム命令を、コンピュータ、他のプログラム可能データ処理装置、又は他のデバイスを特定の方式で機能させるように指示することができるコンピュータ可読媒体内に格納し、それにより、そのコンピュータ可読媒体内に格納された命令が、フローチャート及び/又はブロック図の1つ又は複数のブロックにおいて指定された機能/動作を実装する命令を含む製品を製造するようにすることもできる。
 
【0112】
  コンピュータ・プログラム命令を、コンピュータ、他のプログラム可能データ処理装置、又は他のデバイス上にロードして、一連の動作ステップをコンピュータ、他のプログラム可能データ処理装置、又は他のデバイス上で行わせてコンピュータ実施のプロセスを生成し、それにより、コンピュータ又は他のプログラム可能装置上で実行される命令が、フローチャート及び/又はブロック図の1つ又は複数のブロックにおいて指定された機能/動作を実行するためのプロセスを提供するようにすることもできる。
 
【0113】
  図面内のフローチャート及びブロック図は、本開示の種々の実施形態による、システム、方法、及びコンピュータ・プログラム製品の可能な実装の、アーキテクチャ、機能及び動作を示す。この点に関して、フローチャート又はブロック図内の各ブロックは、指定された論理機能を実装するための1つ又は複数の実行可能命令を含む、モジュール、セグメント、又はコードの一部を表すことができる。幾つかの代替的な実装において、ブロック内に記された機能は、図中に記された順序とは異なる順序で生じることがあることにも留意されたい。例えば、連続して示された2つのブロックは、関与する機能に応じて、実際には実質的に同時に実行されることもあり、又はこれらのブロックはときとして逆順で実行されることもある。ブロック図及び/又はフローチャート図の各ブロック、及びブロック図及び/又はフローチャート図中のブロックの組み合わせは、指定された機能又は動作を実行する専用ハードウェア・ベースのシステム、又は専用のハードウェアとコンピュータ命令との組み合わせによって実装することができることにも留意されたい。
 
【0114】
  本発明の範囲から逸脱することなく上記に対して改良及び変更を行うことができる。