(57)【特許請求の範囲】
【請求項１】
コード生成器の出力の完全性を維持するための、コンピュータで実装される方法であって、
原モデルに基づいて特定のコード生成アプリケーションによって生成された被生成出力を、判定することと、
前記被生成出力を解析して前記原モデルの推論バージョンのコンテンツを推論することと、
前記原モデルの前記推論バージョンと前記原モデルの現行バージョンとを比較してソース要素における差分を検出することと、
検出された差分を用いて前記被生成出力内の冗長要素を識別することと、
を含み、
前記原モデルの前記推論バージョンと前記原モデルの現行バージョンとを比較してソース要素における差分を検出することが、データを規則毎にスキャンし、前記推論モデルをメモリ内に部分的に作成して、その規則に関する比較を行うことを可能にする、規則毎手法を含む、方法。
【請求項２】
前記被生成出力を判定することが、
ファイル・システムのファイル又はコンテンツを入力し、前記特定のコード生成アプリケーションの動作に基づいてカスタマイズされた規則を適用したリバース・エンジニアリングを行って被生成出力を識別することを含む、
請求項１に記載の方法。
【請求項３】
前記被生成出力を解析して前記原モデルの推論バージョンのコンテンツを推論することが、
前記特定のコード生成アプリケーションの動作に基づいてカスタマイズされた規則を適用して前記被生成出力をリバース・エンジニアリングすることを含む、
請求項１又は請求項２に記載の方法。
【請求項４】
前記カスタマイズされた規則が、特定のコード生成アプリケーションが命名及び／又は前記原モデルのコンテンツに用いる規則に基づくものである、請求項２又は請求項３に記載の方法。
【請求項５】
前記カスタマイズされた規則が、指令の基本セットを含み、必要に応じてカスタム論理に委譲する、請求項２から請求項４までのいずれか１項に記載の方法。
【請求項６】
ファイル・システムのファイル又はコンテンツが、前記カスタマイズされた規則内で定義されたファイル名パターンとの一致に関してスキャンされ、ここで前記ファイル名パターンは完全修飾ファイル名パターンであり、前記ファイル名と一致するファイルを突き止めるがディレクトリの一致は許容しない、請求項２から請求項５までのいずれか１項に記載の方法。
【請求項７】
定義されたファイル名パターンが、埋め込まれた名前付きワイルドカードを含む、請求項６に記載の方法。
【請求項８】
ポピュレートされた名前変数を有する一致したファイル名パターンを用いて、前記原モデルの前記推論バージョンのソース要素を推論する、請求項６又は請求項７に記載の方法。
【請求項９】
前記原モデルの推論バージョンと前記原モデルの現行バージョンとを比較してソース要素における差分を検出することが、前記原モデルの前記推論バージョンのコンテンツと前記原モデルの前記現行バージョンのコンテンツとを比較することを含む、請求項１から請求項８のいずれか１項に記載の方法。
【請求項１０】
前記比較することが、前記原モデルの前記推論バージョンのコンテンツ及び構造と、前記原モデルの前記現行バージョンのコンテンツ及び構造とを比較することを含む、請求項９に記載の方法。
【請求項１１】
前記原モデルの前記推論バージョンと前記原モデルの現行バージョンとを比較してソース要素における差分を検出することが、前記原モデルの前記推論バージョン全体をメモリ内に構築し、モデル対モデルの直接比較を行うことを含む、請求項１から請求項１０のいずれか１項に記載の方法。
【請求項１２】
前記被生成出力内の識別された冗長要素を自動的にアーカイブすること又は削除することを含む、請求項１から請求項１１のいずれか１項に記載の方法。
【請求項１３】
コード生成器の出力の完全性を維持するためのシステムであって、
請求項１ないし請求項３、請求項５ないし請求項８、および請求項１２のいずれかに記載の方法のすべてのステップを実行するコンポーネント、
を含む、システム。
【請求項１４】
コンピュータ・プログラムであって、前記プログラムがコンピュータ上で実行されたときに請求項１ないし請求項１２のいずれかに記載の方法のすべてのステップを実施する、コンピュータ・プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コード生成の分野に関する。具体的には、本発明は、コード生成器の出力の完全性を維持することに関する。
【背景技術】
【０００２】
コード生成又は自動プログラミングは、ある形式の「モデル」（例えばＸＭＬで捕捉される）がコード生成器によって解釈され、プログラム・コード及びその他のリソースに変換されるプロセスを記述する。
【０００３】
例えば、モデルは、データベース・テーブルの名称及びそのテーブル内のフィールドといった情報を捕捉するものとすることができる。すると、コード生成アプリケーションは、特定の型式のデータベース内のこれらの要素を定義するための構造化照会言語（ＳＱＬ）ステートメントを、それらの値をプログラム的に取得して修正するためのＪａｖａ（ＪａｖａはＳｕｎ  Ｍｉｃｒｏｓｙｓｔｅｍｓ，Ｉｎｃ．の商標である）コードと共に、作成することができる。
【０００４】
コード生成器の魅力は、入力（典型的には単純）に基づく出力（典型的には複雑）を、特定の知識及びベストプラクティスをカプセル化するような、及び、費用がかかり時間を浪費する誤りがヒューマン・エラーによって導入されることを防ぐようなやり方で、迅速に一貫して作成する能力を提供する点である。コード生成アプリケーションのユーザは、例えば種々のデータベース技術の熟練者になることを要さずに、容易に、高い信頼性でデータベース・テーブルを定義することができる。
【０００５】
しかしながら、コード生成器に固有の問題は、「書き出し専用」モードで動作する点であり、出力を発行するがそれを維持しない。従って、ある項目がモデルから除去されると（又はリネームされると）、それがもはやモデルの一部を形成していないにもかかわらず、それに関連する、以前のコード生成由来の出力が残ってしまう。この結果、冗長なクラッタが蓄積し、次にこれが、より新しい出力と干渉するところに誤りを導入する。
【０００６】
コード生成器が、単純化されたユーザ・インターフェースから高品質の複雑なコードを作成するためにますます一般的に用いられるようになるにつれて、ソースと出力との間の一貫性を維持する能力が、おそらくは、コード生成技術を取り上げることを潜在的に阻害する増大する懸念事項となってきている。
【０００７】
したがって、当該技術分野において上記の問題に対処する必要がある。
【発明の概要】
【発明が解決しようとする課題】
【０００８】
本発明の目的は、コード生成器の出力の完全性を維持するための方法及びシステムを提供することである。
【課題を解決するための手段】
【０００９】
本発明の第１の態様によれば、コード生成器の出力の完全性を維持するための、コンピュータで実装される方法であって、原モデル（ｏｒｉｇｉｎａｌ  ｍｏｄｅｌ）に基づいて特定のコード生成アプリケーションによって生成された被生成出力を判定することと、被生成出力を解析して、原モデルの推論バージョンのコンテンツを推論することと、原モデルの推論バージョンと原モデルの現行バージョンとを比較して、ソース要素における差分を検出することと、検出された差分を用いて、被生成出力内の冗長要素を識別することと、を含む方法が提供される。
【００１０】
被生成出力を判定することは、ファイル・システムのファイル又はコンテンツを入力し、特定のコード生成アプリケーションの動作に基づいてカスタマイズされた規則を適用したリバース・エンジニアリングを行って被生成出力を識別することを含むことができる。
【００１１】
被生成出力を解析して原モデルの推論バージョンのコンテンツを推論することは、特定のコード生成アプリケーションの動作に基づいてカスタマイズされた規則を適用して被生成出力をリバース・エンジニアリングすることを含むことができる。
【００１２】
カスタマイズされた規則は、特定のコード生成アプリケーションが命名及び／又は原モデルのコンテンツに用いる規則に基づくものとすることができる。
【００１３】
カスタマイズされた規則は、指令の基本セットを含み、必要に応じてカスタム論理に委譲（ｄｅｌｅｇａｔｅ）することができる。
【００１４】
ファイル・システムのファイル又はコンテンツを、カスタマイズされた規則内で定義されたファイル名パターンとの一致に関してスキャンすることができ、ここでファイル名パターンは、完全修飾（ｆｕｌｌｙ  ｑｕａｌｉｆｉｅｄ）ファイル名パターンであり、ファイル名と一致するファイルを突き止めるがディレクトリの一致は許容しない。定義されたファイル名パターンは、埋め込まれた名前付きワイルドカードを含むことができる。
【００１５】
スキャンすることは、カスタマイズされた規則内で指定された１つ又は複数の付加的な指令に対する、一致したファイル名の合致（ｃｏｍｐｌｉａｎｃｅ）をチェックすることを含むことができ、付加的な指令は、期待コンテンツの形態の署名コンテンツを含む。
【００１６】
ポピュレートされた名前変数を有する一致したファイル名パターンを用いて、原モデルの推論バージョンのソース要素を推論することができる。
【００１７】
原モデルの推論バージョンと原モデルの現行バージョンとを比較してソース要素における差分を検出することは、原モデルの推論バージョンのコンテンツと原モデルの現行バージョンのコンテンツとを比較することを含むことができる。
【００１８】
比較することは、原モデルの推論バージョンのコンテンツ及び構造と、原モデルの現行バージョンのコンテンツ及び構造とを比較することを含むことができる。
【００１９】
１つの実施形態において、原モデルの推論バージョンと原モデルの現行バージョンとを比較してソース要素における差分を検出することは、データを規則毎にスキャンし、推論モデルをメモリ内に部分的に作成して、その規則に関する比較を行うことを可能にする、規則毎手法（ｒｕｌｅ  ｂｙ  ｒｕｌｅ  ａｐｐｒｏａｃｈ）を含むことができる。
【００２０】
別の実施形態において、原モデルの推論バージョンと原モデルの現行バージョンとを比較してソース要素における差分を検出することは、原モデルの推論バージョン全体をメモリ内に構築し、モデル対モデルの直接比較を行うことを含むことができる。
【００２１】
本方法は、被生成出力内の識別された冗長要素を自動的にアーカイブすること又は削除することを含むことができる。
【００２２】
本発明の第２の態様によれば、コード生成器の出力の完全性を維持するためのシステムであって、原モデルに基づいて特定のコード生成アプリケーションによって生成された被生成出力を判定するための被生成出力認識コンポーネントと、被生成出力を解析して原モデルの推論バージョンのコンテンツを推論するための推論モデル生成コンポーネントと、原モデルの推論バージョンと原モデルの現行バージョンとを比較してソース要素における差分を検出するための比較コンポーネントと、検出された差分を用いて被生成出力内の冗長要素を識別するためのクリーンアップ・コンポーネントと、を含むシステムが提供される。
【００２３】
被生成出力を判定するための被生成出力認識コンポーネントは、ファイル・システムのファイル又はコンテンツを入力し、特定のコード生成アプリケーションの動作に基づいてカスタマイズされた規則を適用したリバース・エンジニアリングを行って被生成出力を識別することを含むことができる。
【００２４】
被生成出力を解析して原モデルの推論バージョンのコンテンツを推論するための推論モデル生成コンポーネントは、特定のコード生成アプリケーションの動作に基づいてカスタマイズされた規則を適用して被生成出力をリバース・エンジニアリングすることを含むことができる。
【００２５】
被生成出力認識コンポーネントは、ファイル・システムのファイル又はコンテンツを、カスタマイズされた規則内で定義されたファイル名パターンとの一致に関してスキャンするためのものとすることができ、ファイル名パターンは完全修飾ファイル名パターンであり、ファイル名と一致するファイルを突き止めるが、ディレクトリの一致は許容しない。定義されたファイル名パターンは、埋め込まれた名前付きワイルドカードを含むことができる。
【００２６】
被生成出力認識コンポーネントにおいて、スキャンすることは、カスタマイズされた規則内で指定された１つ又は複数の付加的な指令に対する、一致したファイル名の合致をチェックすることを含むことができ、ここで付加的な指令は、期待コンテンツの形態の署名コンテンツを含む。
【００２７】
被生成出力認識コンポーネントにおいて、ポピュレートされた名前変数を有する一致したファイル名パターンを用いて、原モデルの推論バージョンのソース要素を推論することができる。
【００２８】
クリーンアップ・コンポーネントは、被生成出力内の識別された冗長要素を自動的にアーカイブする又は削除するためのものとすることができる。
【００２９】
本発明の第３の態様によれば、コード生成器の出力の完全性を維持するためのコンピュータ・プログラム製品が提供され、このコンピュータ・プログラム製品は、処理回路によって可読の、処理回路によって本発明の第１の態様による方法を実施するために実行される命令を格納するコンピュータ可読ストレージ媒体を含む。
【００３０】
本発明の第４の態様によれば、コンピュータ可読媒体上に格納され、デジタル・コンピュータの内部メモリ内にロード可能なコンピュータ・プログラムであって、該プログラムがコンピュータ上で実行されたときに本発明の第１の態様の方法を実施するためのソフトウェア・コード部分を含む、コンピュータ・プログラムが提供される。
【００３１】
本発明の第５の態様によれば、添付の図面を参照して実質的に説明される方法が提供される。
【００３２】
本発明の第６の態様によれば、添付の図面を参照して実質的に説明されるシステムが提供される。
【００３３】
本発明の説明される態様は、コード生成アプリケーションの出力を、アプリケーション自体を何ら修正する必要なく、遡及的に解析し及び訂正するために用いることができる点で利点を提供する。
【００３４】
本発明と見なされる主題は、本明細書の結論部分において具体的に指摘され、明確に権利請求される。本発明は、添付の図面と併せて読むときの以下の詳細な説明を参照することによって、機構及び動作の方法の両方について、その目的、特徴、及び利点と共に最も良く理解される。
【００３５】
これより、添付の図面を参照して、本発明の好ましい実施形態を例示のみを目的として説明する。
【図面の簡単な説明】
【００３６】
【図１】本発明によるシステムの例示的な実施形態のブロック図である。
【図２】本発明を実装することができるコンピュータ・システムの実施形態のブロック図である。
【図３】本発明による方法の一態様の例示的な実施形態の流れ図である。
【図４】本発明による方法のさらなる態様の例示的な実施形態の流れ図である。
【発明を実施するための形態】
【００３７】
図面内に示される要素は、説明を簡単且つ明確にするために、必ずしも縮尺通りに描かれているわけではないことが認識されるであろう。例えば、図面内の幾つかの要素は、明確にするために、他の要素と比べて寸法が誇張されている場合がある。さらに、適切であると考えられる場合には、対応する特徴又は類似する特徴を示すために、図面間で参照符号が繰り返されることがある。
【００３８】
以下の詳細な説明において、本発明の完全な理解を与えるために、多数の特定の詳細が示される。しかしながら、当業者には、本発明がこれらの特定の詳細なしで実施され得ることが理解されるであろう。他の例を挙げれば、周知の方法、手順、及び構成要素は、本発明を不明瞭にしないために、詳細には説明されていない。
【００３９】
ファイル・システム上のファイル（及び／又はそのコンテンツ）を用いてソース・モデル・コンテンツを非常に高い信頼度で推論することができる、コード生成プロセスのリバース・エンジニアリングのための方法及びシステムが提供される。この推論モデル・コンテンツは次に、コード生成以降に適用された変更を検出するために、任意の現行モデルに対して比較することができる。この知識に基づいて、現行ソース・モデルと被生成コードとの間の一貫性を保証するために、冗長な生成リソースを「クリーンにする」（アーカイブする及び／又は削除する）ことができる。
【００４０】
定義済み規則と、必要に応じたカスタム論理への委譲とを処理することが可能なフレームワークが、ａ）特定のコード生成アプリケーションの出力であるマテリアル、及びｂ）冗長なクラッタを表し、それゆえ自動的に除去することができるそのマテリアルのサブセット、を推論するためにファイル・システムのコンテンツのリバース・エンジニアリングを行う目的で提供される。
【００４１】
ソース・モデルを推論するために被生成コードをリバース・エンジニアリングすることは、コード生成器が、被生成出力の命名及び／又はコンテンツに関して予測可能な規則に従うこと、及び、原ソース内で定義された情報を出力に注入すること、を利用する。上述の例の場合、これは、従来のＳＱＬ及びＪａｖａ構文に従うファイルに注入されるテーブル及びフィールド名を含むことになる。特に、これらは、恣意的に構造化されたデータ又はランダムなデータを出力しない。
【００４２】
したがって、特定の型式の被生成出力を記述する規則を定義すること、及び、任意のファイルをかかる規則と比較して、それがコード生成器からの出力である（又は含む）か否か、及び、その中に注入されたソース要素がソース・モデル内にまだ存在しているか否かを高精度で判定することが可能である。
【００４３】
ファイル又はそのコンテンツのある部分が特定のコード生成アプリケーションからの出力を表すこと、及び、原ソース要素のいずれかが（削除又はリネームされたことにより）もはや存在していないことを判定することができた場合、出力のその項目は、除去することができる冗長なクラッタを表すことになる。
【００４４】
説明される方法及びシステムは、被生成出力の完全性を、カスタマイズ可能な規則から原ソースマテリアルを推論することによって遡及的に保証する。
【００４５】
しかし実際には、このタスクを行うには、ファイル・システム内の全てのファイルを潜在的に検査しなければならず、また、被生成コードに似ているが被生成コードではないデータの形でのフォールスポジティブも回避しなければならないので、性能面での困難を克服しなければならない。
【００４６】
図１を参照すると、ブロック図は、説明されるシステム１００の例示的な実施形態を示す。
【００４７】
コード生成アプリケーション１１０がプログラム・コード又はリソースの形で被生成出力１０２を生成する元になる、原モデル１０１を提供することができる。
【００４８】
説明される方法は、被生成出力１０２の完全性を維持するための出力更新コンポーネント１２０を提供する。出力更新コンポーネント１２０は、コード生成アプリケーションに組み込むこともでき、又はそれとは別個のものとすることもできる。
【００４９】
コード更新コンポーネント１２０は、コード生成アプリケーション１１０に関して被生成出力１０２のリバース・エンジニアリングを可能にする、カスタマイズ可能な規則１２２を伴う規則エンジンの形態のリバース・エンジニアリング・コンポーネント１２１を含むことができる。カスタマイズ可能な規則１２２は、特定の型式の被生成出力に関して生成することができる。コード生成アプリケーション１１０は、しばしば、プログラム・コード又はリソースを生成するための予測可能な規則に従い、また、原モデル１０１からの情報を出力に注入する。このような予測可能な規則を用いて、リバース・エンジニアリング・コンポーネント１２１の規則をカスタマイズすることができる。
【００５０】
リバース・エンジニアリング・コンポーネント１２１は、被生成出力１０２がその中に存在し得るファイル・システム１０６のファイル又はコンテンツを入力として取得することができる。リバース・エンジニアリング・コンポーネント１２１は、あるファイル、コード、又はコンテンツが特定のコード生成アプリケーション１１０からの出力を表していることを判定するための、被生成出力認識コンポーネント１２３を含むことができる。出力認識コンポーネント１２３は、カスタマイズ可能な規則１２２を用いてこれを実行することができる。
【００５１】
リバース・エンジニアリング・コンポーネント１２１はまた、カスタマイズ可能な規則１２２を用いて被生成出力１０２から推論モデル１０３のコンテンツ及び構造を生成するための、推論モデル生成コンポーネント１２４も含むことができる。カスタマイズ可能な規則１２２は、原モデルがどのように見えるはずであるかを、検出された被生成出力１０２に基づいて推論するのに必要な情報を提供する。
【００５２】
理想的な場合、全ての詳細において原モデル１０１と同一の推論モデル１０３を作成することができる。実際には、差異が存在する可能性があり、例えば、原モデル内の文書が被生成マテリアル内には存在せず、そのため推論モデル１０３内で再現されないことがあるかもしれない。しかしながら、被生成出力１０２に曖昧さが存在しない限り、ａ）モデルの現行ビュー１０４に対して比較するのに十分なコンテンツ、又はｂ）実際に被生成出力１０２を再作成するのに十分なコンテンツを含む、推論モデル１０３を構築することが可能である。
【００５３】
出力更新コンポーネント１２０は、推論モデル１０３のコンテンツと原モデル１０１に対応する現行モデル１０４とを比較するための比較コンポーネントを含むことができる。比較コンポーネント１２５は、被生成出力１０２の作成以降に原モデル１０１に適用された何らかの変更を検出することができる。
【００５４】
出力更新コンポーネント１２０は、被生成出力１０２の現時点で冗長ないずれかの構成要素をアーカイブして及び／又は削除して、クリーンにされた被生成出力１０５を提供するための、クリーンアップ・コンポーネント１２６を含むことができる。
【００５５】
図２を参照すると、本発明の態様を実装するための例示的なシステムは、バス・システム２０３を通じてメモリ要素に直接的又は間接的に結合された少なくとも１つのプロセッサ２０１を含む、プログラム・コードを格納する及び／又は実行するのに適したデータ処理システム２００を含む。メモリ要素は、プログラム・コードの実際の実行中に用いられるローカル・メモリ、大容量記憶装置、及び、実行中に大容量記憶装置からコードを取り出さなければならない回数を減らすために少なくとも幾つかのプログラム・コードの一時的な記憶場所を提供するキャッシュ・メモリを含むことができる。
【００５６】
メモリ要素は、読出し専用メモリ（ＲＯＭ）２０４及びランダム・アクセス・メモリ（ＲＡＭ）２０５の形態のシステム・メモリ２０２を含むことができる。基本入力／出力システム（ＢＩＯＳ）２０６を、ＲＯＭ２０４内に格納することができる。システム・ソフトウェア２０７は、ＲＡＭ２０５内に格納することができ、オペレーティング・システム・ソフトウェア２０８を含む。ソフトウェア・アプリケーション２１０もまた、ＲＡＭ２０５内に格納することができる。
【００５７】
システム２００はまた、磁気ハード・ディスク・ドライブなどの一次ストレージ手段２１１、並びに、磁気ディスク・ドライブ及び光ディスク・ドライブなどの二次ストレージ手段２１２を含むことができる。これらドライブ及びそれらに関連関連付けられたコンピュータ可読媒体は、コンピュータ実行可能命令、データ構造体、プログラム・モジュール、及びシステム２００のためのその他のデータの不揮発性記憶装置を提供する。ソフトウェア・アプリケーションを、一次及び二次ストレージ手段２１１、２１２並びにシステム・メモリ２０２上に格納することができる。
【００５８】
コンピューティング・システム２００は、ネットワーク・アダプタ２１６を介した１つ又は複数の遠隔コンピュータへの論理接続を用いて、ネットワーク化された環境内で動作することができる。
【００５９】
入力／出力デバイス２１３は、直接的に、又は介在するＩ／Ｏコントローラを通じて、システムに結合することができる。ユーザは、キーボード、ポインティング・デバイス、又は他の入力デバイス（例えば、マイクロフォン、ジョイスティック、ゲームパッド、衛星通信用アンテナ、スキャナ等）などの入力デバイスを通じて、コマンド及び情報をシステム２００に入力することができる。出力デバイスは、スピーカ、プリンタ等を含むことができる。ディスプレイ・デバイス２１４もまた、ビデオ・アダプタ２１５などのインターフェースを介してシステム・バス２０３に接続することができる。
【００６０】
図３を参照すると、流れ図３００は、コード生成アプリケーションにより生成される出力の完全性を維持するための説明される方法の実施形態を示す。
【００６１】
ファイル・システムのファイル又はコンテンツを、更新すべき被生成出力がその中に存在する入力として用いる（３０１）ことができる。更新の対象となる被生成プログラム出力は、原モデルに基づく特定のコード生成アプリケーションによって生成されたものとすることができる。
【００６２】
この方法は、特定の製品に制限されるものではない。ある種のソース・マテリアル（モデル等）を用いてある種のターゲット・マテリアル（ファイル等）が生成されるようないかなる事例も、説明される方法を利用することができる。
【００６３】
被生成出力を、特定のコード生成アプリケーションの出力であり、かつソース・モデルから生成されたマテリアルであると判定する（３０２）ことができる。この判定は、定義済みのカスタマイズ可能な規則を用いてファイル・システムのファイル又はコンテンツをリバース・エンジニアリングすることによって行うことができる。カスタマイズ可能な規則は、原モデルがどのように見えるはずであるかを、検出された被生成出力に基づいて推論するのに必要な情報を提供することができる。
【００６４】
例えば、この判定は、ファイル・システムのコンテンツを完全修飾ファイル名パターンに対する一致に関してスキャンし及びマッチングすることによって行うことができる。完全修飾により、ディレクトリではなくファイルを突き止めることができる。例えば、「／ａ／ｂ／ｃ／ｄ／ｆｉｌｅ．ｊａｖａ」と称されるファイルに関する一致を見いだすことができるが、ディレクトリ「ａ／ｂ／ｃ／ｄ」（それゆえ暗黙的にそのコンテンツ）は一致しているものとして許容されない。なぜなら、ディレクトリの中に何が入っているかを（全てのファイルを読むことなく）正確に知ることは不可能であり、それゆえディレクトリ自体及びその全てのコンテンツが全てある特定のソース・モデルから生成されたものであると断言することはできないからである。したがって、本方法は、個々のファイル・レベルで機能し、それゆえ「完全修飾」という用語が用いられる。
【００６５】
スキャン及びマッチングは、埋め込まれた名前付きワイルドカードを利用することができる。
【００６６】
ワイルドカードは、Ｈｅｌｌｏ＊Ｗｏｒｌｄのような星印とすることができる。これは、Ｈｅｌｌｏで始まり、Ｗｏｒｌｄで終わる任意の文字列（例えば、ＨｅｌｌｏＴｈｅｒｅＷｏｒｌｄ）と一致することになる。ワイルドカードは、説明される方法において、そのワイルドカードを置き換える文字列の値を決定する能力と共に提供することができる。したがって、ワイルドカードに対して、それらを識別する名前を与えることができる。上記の例では、Ｈｅｌｌｏ％ＷｉｌｄＣａｒｄ１％Ｗｏｒｌｄを用いることができる。このワイルドカードの名前は「ＷｉｌｄＣａｒｄ１」であり、文字％で囲まれていることによりワイルドカードとして解釈される。マッチングアルゴリズムは、これらのワイルドカードの値を追跡することができる。例えば、ＨｅｌｌｏＴｈｅｒｅＷｏｒｌｄと一致する場合、「ＷｉｌｄＣａｒｄ１」の値は「Ｔｈｅｒｅ」である。これは、マッチングコードと、一致ヒットを検査するために用いられる論理との間の、都合の良い分離を提供する。
【００６７】
複数フォルダにわたることができる高度に複雑なオープンエンドのワイルドカードマッチングを用いることもでき、例えば、Ｃ：＼％％ｗｈｏｋｎｏｗｓｗｈｅｒｅ％％＼Ｗｉｂｂｌｅ．ｔｘｔは、Ｗｉｂｂｌｅ／ｔｘｔという名前のファイルを突き止め、「ｗｈｏｋｎｏｗｓｗｈｅｒｅ＝ｍｙＤｉｒ＼＼Ａ＼Ｂ＼Ｃ＼ｓｏｍｅＯｔｈｅｒＤｉｒ」「ｗｈｏｋｎｏｗｓｗｈｅｒｅ＝ｍｙＤｉｒ＼Ｘ＼Ｙ」等の値を返すことができる。
【００６８】
規則内の付加的な指令に対する合致を、例えば「署名」語又は語句の存在に関して、チェックすることができる。
【００６９】
これは、ファイル内部をチェックして、ある特定の期待コンテンツが存在することを確認することを含むことができる。例えば、「Ａｌｐｈａ」と呼ばれる原モデル内のエンティティの存在に応答して、ＡｌｐｈａＢｕｓｉｎｅｓｓＯｂｊｅｃｔ．ｊａｖａというファイルが生成されるものとする。同じ位置でＢａｔａＢｕｓｉｎｅｓｓＯｂｊｅｃｔ．ｊａｒというファイルに遭遇したとする。このファイルは、原モデル内に同等のオブジェクト「Ｂｅｔａ」がかつて存在していたために存在しているかもしれず、又は無関係なユーザ・ファイルかもしれない。これを推論モデルに組み入れる前に、ファイルのコンテンツを検査して、被生成コンテンツを含んでいることをチェックすることができる。チェックは、特定のキーワード、文字列、テキストのまとまり、及び、そのファイルが生成されたものであることを本方法が保証することを可能にする意図的に生成されたマーカーに関して行うことができる。
【００７０】
被生成出力に対して、それを生成した特定のコード生成アプリケーションに関連するカスタマイズされた規則に従ってリバース・エンジニアリングを行い（３０３）、推論モデルのコンテンツを得ることができる。推論モデルは、特定の生成アプリケーションがそれに基づいて被生成出力を生成したソース・モデルの、リバース・エンジニアリングされたモデルである。推論モデルは、ステップ３０２のスキャン及びマッチング・プロセスによってポピュレートされた名前付き変数の推論ソース要素を含むことができる。
【００７１】
推論モデルのコンテンツと現行モデルのコンテンツとを比較する（３０４）ことができ、この現行モデルは、特定のコード生成アプリケーションによって被生成プログラム・コード又はリソースを生成する元となった原モデルの、最新バージョンである。
【００７２】
１つの実施形態において、推論モデルのコンテンツ及び構造の両方を、現行モデルのコンテンツ及び構造と比較することができ、抽出された構造及びコンテンツの一致を要求することができる。どのように比較を行うかは、モデル自体の意味論に依存する。別の実施形態において、推論モデル及び現行モデルは、意味論的に同等であり得るが、異なる構造を有し得る。
【００７３】
推論モデルのコンテンツと現行モデルのコンテンツとの間の何らかの差分を検出する（３０５）ことができる。例えば、スキャン及びマッチング・プロセスによりポピュレートされた名前付き変数から推論されたソース要素を、現行モデル（任意のサブモデル部分を含む）において解決しようと試みる。解決できないものはいずれも、関連付けられたファイル又はその一部が冗長であり、自動的にクリーンにされることができることを示す。
【００７４】
スキャン及びマッチング・プロセスは、特定の型式のモデル（規則によって定義される）に関して、冗長なアーチファクトを突き止めることができるが、これはある型式のモデルの多数の分離したインスタンスに関係するマテリアルを見いだすことができるはずであり、どのモデルがどの冗長なアーチファクトに適用可能であるかを識別することが可能である。
【００７５】
図４に示される説明される方法の第１の実施形態において、規則毎手法を用いることができ、この場合、ファイル・システムは規則毎にスキャンされ、推論モデルがメモリ内に部分的に作成され、その規則に関する比較を行うことを可能にする。第２の実施形態において、モデル全体をメモリ内に構築することができ、次いで、モデル対モデルの直接比較を行うことができる。
【００７６】
図４の流れ図４００を参照して、被生成出力を判定し、冗長なコンポーネントを検出する、説明される方法の態様の第１の実施形態を説明する。
【００７７】
リバース・エンジニアリング・コンポーネントの規則を適用して（４０１）、ファイル・システムの入力ファイル又はコンテンツにおける完全修飾ファイル名パターンを認識することができる。
【００７８】
ファイル・システムの入力ファイル又はコンテンツをスキャンして（４０２）、規則内で定義されたような完全修飾ファイル名をマッチングすることができる。
【００７９】
ひとたび一致した完全修飾ファイル名が突き止められると、ポピュレートされた名前付き変数を用いて（４０３）、情報を推論することができる。一致したファイルと、規則内で指定されたいずれかの付加的な指令、例えば「署名」コンテンツとの合致をチェックする（４０４）ことができる。
【００８０】
一致したファイルが、その規則がそれに合わせてカスタマイズされた特定の生成アプリケーションによって生成された被生成出力であることが納得できる（ｃｏｍｐｅｌｌｉｎｇ）か否かが判定される（４０５）。何らかの疑義があれば、その一致したファイルに「未検証」とラベル付けする（４０６）ことができ、そのファイルのクリーンアップに進むためには手動確認を要するものとすることができる。
【００８１】
一致したファイルが被生成出力であることが納得できる場合、スキャン及びマッチング・プロセスによってポピュレートされた名前付き変数からソース要素を推論する（４０７）ことができる。推論されたソース要素を、現行ソース・モデルに対して解決する（４０８）ことができる。
【００８２】
解決されないソース要素はいずれも冗長な構成要素であり、一致したファイルから自動的にクリーンにされる（４０９）ことができる。
【００８３】
第１の実施形態の方法を用いて被生成出力を識別するための規則の一例を以下に示す。
【００８４】
完全修飾出力ファイル名の「形」が以下の通りであることを、（例えば標準拡張マークアップ言語（ＸＭＬ）を用いて）指定することができる。
＜ｒｕｌｅＳｔｒｉｎｇ＞％Ｐｒｏｊｅｃｔ％／ｓｒｃ／％％Ｐａｃｋａｇｅ％Ｎａｍｅ％／ｅｎｔｉｔｙ／Ｅ％ＥｎｔｉｔｙＥｘｔｅｎｔｉｏｎ％Ｅｘｔ．ｊａｖａ＜／ｒｕｌｅＳｔｒｉｎｇ＞
【００８５】
これは、ソース「Ｐｒｏｊｅｃｔ」に対してマッピングされるトップレベルフォルダ、その直下の「ｓｒｃ」という名前のサブフォルダ、その後に続く、「ＰａｃｋａｇｅＮａｍｅ」と呼ばれる要素に対してマッピングされる不定長のサブフォルダ構造、最後に「ＥｎｔｉｔｙＥｘｔｅｎｔｉｏｎ」要素に対してその名前が間接的にマッピングされるファイルを識別することが意図される。
【００８６】
また、このパターンに一致するファイルがいずれも、２つの特定のクラスのうちの１つ（このパターンは既にこれをＪａｖａファイルとして定義している）を直接実装しなければならないこと、及び、そのファイルが生成されたものであることをさらに示す何らかの恣意的な「署名」を含んでいなければならないことを指定することもできる。
＜ｉｍｐｌｅｍｅｎｔｓ＞ｃｏｍ．ｉｂｍ．ｃｏｍｍｏｎ．ＩＥｘｔｅｎｓｉｏｎ｜ｃｏｍ．ｉｂｍ．ｂａｓｅ．ＩＢａｓｅＥｘｔｅｎｓｉｏｎ＜／ｉｍｐｌｅｍｅｎｔｓ＞
＜ｃｏｎｔａｉｎｓＳｔｒｉｎｇ＞＆ｌｔ；！−−ＥｘｔｅｎｄｅｄＯｂｊｅｃｔ−−＆ｇｔ；＜／ｃｏｎｔａｉｎｓＳｔｒｉｎｇ＞
【００８７】
最後に、規則に関連するソース・モデルの型式をナビゲートするために、カスタム論理を指定することができる。カスタム論理は、規則の構文がある特定の基準を記述するのに不十分な場合に用いることができ、ユーザが自身のコードをフレームワークにフックすることを許容することができる。
【００８８】
カスタム論理は、ひとたびファイルが突き止められると、そのファイルを通るナビゲーションを補助するためにケース・バイ・ケースの基準で用いることができる。例えば、ファイルは、モデル内の異なる要素が寄与する一連の類似したエントリを含んでいるかもしれない。これらの各々が「一致」（即ち、単一ファイル内の複数の一致）と見なされる場合があり、このカスタム論理は、各々の一致の識別を補助することができる。
【００８９】
この後者の特徴はまた、カスタム論理が扱うことができる規則構造に恣意的なＸＭＬ拡張を導入することも可能にする。
【００９０】
これらの型式の規則と、ＸＭＬ指令の基本セットのハンドリングと、必要に応じたカスタム論理への委譲とを処理することが可能なフレームワークが、ａ）特定のコード生成器の出力であるマテリアル、及びｂ）冗長なクラッタを表し、それゆえ自動的に除去することができるそのマテリアルのサブセット、推論するためにファイル・システムのコンテンツのリバース・エンジニアリングを行う目的で提供される。
【００９１】
このフレームワークは、最初にファイル・システムを完全修飾ファイル名パターンに対する一致に関してスキャンすることができる。これは、埋め込まれた「名前付き」ワイルドカード（上記で％又は％％記号で囲まれた変数名により例示した）を利用するが、この技術は、ファイル・システムの無関係部分を迅速に識別することが可能であり、それゆえスキャンの量を減らすことができるので、性能面での利益ももたらす。
【００９２】
上記の例示的なパターンを例に取ると、直下に「ｓｒｃ」という名前のサブフォルダを含まないトップレベルフォルダはいずれも絶対に一致をもたらさないので、プロセスは次のトップレベルフォルダに直行することができる。同様に、パターンのパッケージネーム（ｐａｃｋａｇｅ  ｎａｍｅ）部分は不定長ではあるが、「ｅｎｔｉｔｙ」というフォルダ名に遭遇しない限り、ファイル・レベルでそれ以上スキャンする理由はない。
【００９３】
完全修飾ファイル名に対する一致が見いだされたと仮定すると、フレームワークは、ファイル名パターンの中に埋め込まれたポピュレートされた名前付き変数を有することになる。上記の例を用いると、
ＭｙＰｒｏｊｅｃｔ／ｓｒｃ／ｃｏｍ／ｉｂｍ／ｍｏｄｅｌｓ／ｅｎｔｉｔｙ／ＥＭｙＡｄｄｒｅｓｓＥｘｔ．ｊａｖａ
のようなファイルが一致し、以下の情報
Ｐｒｏｊｅｃｔ＝ＭｙＰｒｏｊｅｃｔ
ＰａｃｋａｇｅＮａｍｅ＝ｃｏｍ／ｉｂｍ／ｍｏｄｅｌｓ
ＥｎｔｉｔｙＥｘｔｅｎｔｉｏｎ＝ＭｙＡｄｄｒｅｓｓ
が推論されることになる。
【００９４】
ここでフレームワークは、一致したファイルを、規則内で指定することができる付加的な指令との合致に関して検査することができ、例えば「署名」語又は語句の存在に関して、並びにＪａｖａファイルが特定のクラスを実装する及び／又は拡張するか否かに関してチェックする。これらの全てのチェックに合格すれば、これが被生成出力である（又は被生成出力を含む）ことの合理的な確実性が存在することになる。
【００９５】
証拠が、そのファイルが生成されたことを納得させるようなものではない場合（例えば、「署名」が欠落しているような場合、又は、ユーザがカスタマイズしたことの明らかな証拠となる、注入された「＠ｇｅｎｅｒａｔｅｄ」タグに「ｎｏｔ」という語が追加されているというサインが存在しているような場合）、フレームワークはこの一致を「未検証」とラベル付けし、そのクリーンアップに進むためには手動確認を必要とすることになる。
【００９６】
この段階で、フレームワークは、特定のコード生成アプリケーションに由来するものであると確信できる一致のセットを有する。ここで、スキャン及びマッチング・プロセスによってポピュレートされた名前付き変数（上記参照）からソース要素を推論し、これらを全ての適用可能なソース・モデルにおいて解決しようと試みる。解決することができないソース要素はいずれも、関連付けられたファイル又はその一部が冗長であり、自動的にクリーンにされることができることを示す。このように、フレームワークは、被生成出力が常にソース入力と一致していることを保証することが可能である。
【００９７】
説明される方法及びシステムを用い、カスタマイズ可能な規則エンジンを用いて、任意のファイル（Ｊａｖａクラス、ＸＭＬ、テキスト等）を解析することができ、そのコードが特定の型式のコード生成器アプリケーションによって作成されたものか否か、及び、それがいまだ妥当（ｒｅｌｅｖａｎｔ）であるか否かを非常に高い精度で判定することができる。
【００９８】
説明される方法及びシステムは、明示のカップリングが無い状態で、かつ、モデルとコードの両方を同時に互いに位置合わせされた状態で保持する専用のエディタに頼らずに、被生成コードからモデル情報をリバース・エンジニアリングする能力を提供する。これは、多くの異なるモデル−コード生成シナリオに合うように適合させることができるカスタマイズ可能な規則もサポートする。
【００９９】
説明される方法及びシステムは、コード生成器の挙動の主要な局面を記述する自由度の高い規則の使用を通じて、コード生成器に対する入力を被生成出力から推論する。
【０１００】
ファイル・システム上には多数のファイルが存在し得るものであり、その全てを一致に関して多数の異なる規則に対してチェックしなければならない。説明される方法は、これを、プロセスをコード生成に組み入れるのに十分なほど高速に行うことができる。
【０１０１】
説明される方法はまた、実際に生成されたコードのみが変更されることを保証するための機構も含む。詳細には、ファイル又はファイル由来のコンテンツは、単にそれが生成されたコンテンツに類似しているという理由で除去されることはない。
【０１０２】
本発明は、完全にハードウェアの実施形態、完全にソフトウェアの実施形態、又はハードウェアとソフトウェアの要素を含む実施形態の形を取ることができる。好ましい実施形態において、本発明は、ファームウェア、常駐ソフトウェア、マイクロコード等を含むがそれらに限定されないソフトウェアとして実装される。
【０１０３】
本発明は、コンピュータ又は任意の命令実行システムによって又はそれらとの関連で使用するためのプログラム・コードを提供する、コンピュータ使用可能媒体又はコンピュータ可読媒体からアクセスすることができるコンピュータ・プログラム製品の形を取ることができる。この説明の目的に関して、コンピュータ使用可能媒体又はコンピュータ可読媒体は、命令実行システム、装置若しくはデバイスによって又はこれらと関連して使用するためのプログラムを収容し、格納し、伝達し、伝搬し、又は輸送することができる任意の装置とすることができる。
【０１０４】
媒体は、電子、磁気、光学、電磁気、赤外、若しくは半導体のシステム（又は装置若しくはデバイス）又は伝搬媒体とすることができる。コンピュータ可読媒体の例としては、半導体若しくは固体メモリ、磁気テープ、取外し可能コンピュータ・ディスケット、ランダム・アクセス・メモリ（ＲＡＭ）、読み出し専用メモリ（ＲＯＭ）、剛性磁気ディスク及び光ディスクが挙げられる。現在の光ディスクの例として、コンパクトディスク読出し専用メモリ（ＣＤ−ＲＯＭ）、コンパクトディスク読出し／書込（ＣＤ−Ｒ／Ｗ）、及びＤＶＤが挙げられる。
【０１０５】
当業者であれば理解するように、本開示の態様は、システム、方法又はコンピュータ・プログラム製品として具体化することができる。従って、本開示の態様は、完全にハードウェアの実施形態、完全にソフトウェアの実施形態（ファームウェア、常駐ソフトウェア、マイクロコード等を含む）、又は、ソフトウェアの態様とハードウェアの態様とを組み合わせた実施形態の形を取ることができ、本明細書においてはこれらの全てを一般に、「回路」、「モジュール」又は「システム」と呼ぶことができる。さらに、本開示の態様は、コンピュータ可読プログラム・コードが組み入れられた１つ又は複数のコンピュータ可読媒体内として具体化されたコンピュータ・プログラム製品の形を取ることができる。
【０１０６】
１つ又は複数のコンピュータ可読媒体の任意の組み合わせを用いることができる。コンピュータ可読媒体は、コンピュータ可読信号媒体又はコンピュータ可読ストレージ媒体とすることができる。コンピュータ可読ストレージ媒体は、例えば、電子、磁気、光学、電磁気、赤外線若しくは半導体のシステム、装置、若しくはデバイス、又は上記のもののいずれかの適切な組み合わせとすることができる。コンピュータ可読ストレージ媒体のより具体的な例（非網羅的なリスト）として、以下のもの：即ち、１つ又は複数の配線を有する電気的接続、ポータブル・コンピュータ・ディスケット、ハード・ディスク、ランダム・アクセス・メモリ（ＲＡＭ）、読み出し専用メモリ（ＲＯＭ）、消去可能なプログラム可能読み出し専用メモリ（ＥＰＲＯＭ又はフラッシュ・メモリ）、光ファイバ、ポータブル・コンパクト・ディスク読み出し専用メモリ（ＣＤ−ＲＯＭ）、光記憶装置、磁気記憶装置、又は上記のもののいずれかの適切な組み合わせが挙げられる。本明細書の文脈においては、コンピュータ可読ストレージ媒体は、命令実行システム、装置若しくはデバイスによって、又はこれらと関連して用いるためのプログラムを収容し又は格納することができる任意の有形媒体とすることができる。
【０１０７】
コンピュータ可読信号媒体は、例えばベースバンド内に、又は搬送波の一部として、具体化されたコンピュータ可読プログラム・コードをその中に有する、伝搬されるデータ信号を含むことができる。このような伝搬信号は、これらに限定されるものではないが、電磁気、光又はそれらのいずれかの適切な組み合わせを含む、種々の形態のいずれかを取ることができる。コンピュータ可読信号媒体は、コンピュータ可読ストレージ媒体ではなく、かつ、命令実行システム、装置若しくはデバイスによって、又はこれらと関連して用いるためのプログラムを伝達し、伝搬し、又は搬送することができる任意のコンピュータ可読媒体とすることができる。
【０１０８】
コンピュータ可読媒体上に具体化されたプログラム・コードは、これらに限定されるものではないが、無線、有線、光ファイバ・ケーブル、ＲＦ等、又は上記のもののいずれかの適切な組み合わせを含む、任意の適切な媒体を用いて伝送することができる。
【０１０９】
本発明の態様の操作を実行するためのコンピュータ・プログラム・コードは、Ｊａｖａ、ＳｍａｌｌＴａｌｋ、Ｃ＋＋等のようなオブジェクト指向型プログラミング言語、及び、「Ｃ」プログラミング言語又は同様のプログラミング言語のような従来の手続き型プログラミング言語を含む、１つ又は複数のプログラミング言語のいずれかの組み合わせで記述することができる。プログラム・コードは、完全にユーザのコンピュータ上で実行される場合もあり、一部がユーザのコンピュータ上で、独立型ソフトウェア・パッケージとして実行される場合もあり、一部がユーザのコンピュータ上で実行され、一部が遠隔コンピュータ上で実行される場合もあり、又は完全に遠隔コンピュータ若しくはサーバ上で実行される場合もある。一番最後のシナリオにおいては、遠隔コンピュータは、ローカル・エリア・ネットワーク（ＬＡＮ）若しくは広域ネットワーク（ＷＡＮ）を含むいずれかのタイプのネットワークを通じてユーザのコンピュータに接続される場合もあり、又は外部コンピュータへの接続が為される場合もある（例えば、インターネット・サービス・プロバイダを用いたインターネットを通じて）。
【０１１０】
本開示の態様は、本明細書において、本開示の実施形態による方法、装置（システム）及びコンピュータ・プログラム製品のフローチャート図及び／又はブロック図を参照して説明される。フローチャート図及び／又はブロック図の各ブロック、並びにフローチャート図及び／又はブロック図内のブロックの組み合わせは、コンピュータ・プログラム命令によって実装できることが理解されよう。これらのコンピュータ・プログラム命令を、汎用コンピュータ、専用コンピュータ、又は他のプログラム可能データ処理装置のプロセッサに与えてマシンを製造し、それにより、コンピュータ又は他のプログラム可能データ処理装置のプロセッサによって実行される命令が、フローチャート及び／又はブロック図の１つ又は複数のブロック内で指定された機能／動作を実装するための手段を作り出すようにすることができる。
【０１１１】
これらのコンピュータ・プログラム命令を、コンピュータ、他のプログラム可能データ処理装置、又は他のデバイスを特定の方式で機能させるように指示することができるコンピュータ可読媒体内に格納し、それにより、そのコンピュータ可読媒体内に格納された命令が、フローチャート及び／又はブロック図の１つ又は複数のブロックにおいて指定された機能／動作を実装する命令を含む製品を製造するようにすることもできる。
【０１１２】
コンピュータ・プログラム命令を、コンピュータ、他のプログラム可能データ処理装置、又は他のデバイス上にロードして、一連の動作ステップをコンピュータ、他のプログラム可能データ処理装置、又は他のデバイス上で行わせてコンピュータ実施のプロセスを生成し、それにより、コンピュータ又は他のプログラム可能装置上で実行される命令が、フローチャート及び／又はブロック図の１つ又は複数のブロックにおいて指定された機能／動作を実行するためのプロセスを提供するようにすることもできる。
【０１１３】
図面内のフローチャート及びブロック図は、本開示の種々の実施形態による、システム、方法、及びコンピュータ・プログラム製品の可能な実装の、アーキテクチャ、機能及び動作を示す。この点に関して、フローチャート又はブロック図内の各ブロックは、指定された論理機能を実装するための１つ又は複数の実行可能命令を含む、モジュール、セグメント、又はコードの一部を表すことができる。幾つかの代替的な実装において、ブロック内に記された機能は、図中に記された順序とは異なる順序で生じることがあることにも留意されたい。例えば、連続して示された２つのブロックは、関与する機能に応じて、実際には実質的に同時に実行されることもあり、又はこれらのブロックはときとして逆順で実行されることもある。ブロック図及び／又はフローチャート図の各ブロック、及びブロック図及び／又はフローチャート図中のブロックの組み合わせは、指定された機能又は動作を実行する専用ハードウェア・ベースのシステム、又は専用のハードウェアとコンピュータ命令との組み合わせによって実装することができることにも留意されたい。
【０１１４】
本発明の範囲から逸脱することなく上記に対して改良及び変更を行うことができる。
【符号の説明】
【０１１５】
１００：システム
２０３：バス・システム
【図１】
0006282281.tif 000002
【図２】
0006282281.tif 000003
【図３】
0006282281.tif 000004
【図４】
0006282281.tif 000005