(57)【要約】      （修正有）【課題】ソフトウェア成果物の第２バージョンに移行する際に、当該ソフトウェア成果物の第１バージョンになされたカスタマイズをマージするためのツールを生成する方法を提供する。【解決手段】第２コード・セット内に補完要素を有していない第１コード・セット内の最上位要素ごとに、一のマッピング要素をインスタンス化するステップと、前記マッピング要素内にマージ命令が提供されていない最上位要素ごとに、マージ命令を要求し且つ受け取るステップと、マージ命令が提供されている最上位要素ごとに、当該マージ命令がカスタマイズを前記第２コード・セットにマージすることを必要とするかを決定するステップと、カスタマイズをマージすることを必要とする各最上位要素用の前記マージ命令が有効であるかを決定するステップと、最上位要素ごとに受け取られた前記マージ命令を前記マッピング要素内に格納するステップを含む。【選択図】図４
2010079905.tif 000002
【特許請求の範囲】
【請求項１】
ソフトウェア成果物の第２バージョンに移行する際に、当該ソフトウェア成果物の第１バージョンになされたカスタマイズをマージするためのツールを生成する方法であって、
前記第２バージョン用の第２コード・セット内に相補的データ要素を有していない前記第１バージョン用の第１コード・セット内の最上位データ要素ごとに、一のマッピング情報要素を第１データ・ストア内でインスタンス化するステップと、
前記対応するマッピング情報要素内にマージ命令が提供されていない前記第１コード・セット内の最上位データ要素ごとに、当該最上位データ要素用のマージ命令を要求するステップと、
マージ命令が提供されていない前記第１コード・セット内の最上位データ要素ごとに、マージ命令を受け取るステップと、
マージ命令が提供されている前記第１コード・セット内の最上位データ要素ごとに、当該マージ命令が、当該最上位データ要素になされたカスタマイズを前記第２コード・セットにマージすることを必要とするか否かを決定するステップと、
前記第１コード・セット内の各最上位データ要素になされたカスタマイズをマージすることを必要とする当該最上位データ要素用のマージ命令が、有効であるか否かを決定するステップと、
前記マージ命令が有効でないと決定された前記第１コード・セット内の最上位データ要素ごとに、マージ命令を要求するステップと、
前記マージ命令が有効でないと決定された前記第１コード・セット内の最上位データ要素ごとに、マージ命令を受け取るステップと、
前記第１コード・セット内の最上位データ要素ごとに受け取られた前記マージ命令を、前記第１データ・ストア内の前記対応するマッピング情報要素内に格納するステップを含む、方法。
【請求項２】
前記第２コード・セット内に相補的データ要素を有していない前記第１コード・セット内の各最上位データ要素の子孫データ要素ごとに、一のマッピング情報要素を前記第１データ・ストア内で生成するステップをさらに含む、請求項１に記載の方法。
【請求項３】
前記第１コード・セット内の各最上位データ要素になされたカスタマイズをマージすることを必要としない当該最上位データ要素の子孫データ要素ごとに、マージ命令を生成し且つ当該子孫データ要素になされたカスタマイズをマージする必要がないことを指定するステップと、
前記第１コード・セット内の各最上位データ要素になされたカスタマイズをマージすることを必要としない当該最上位データ要素の子孫データ要素ごとに生成された、前記マージ命令を格納するステップをさらに含む、請求項２に記載の方法。
【請求項４】
前記マージ命令が有効であると決定された前記第１コード・セット内の最上位データ要素ごとに、当該マージ命令を、前記第１データ・ストア内の前記対応するマッピング情報要素内に格納するステップをさらに含む、請求項２に記載の方法。
【請求項５】
前記マージ命令が有効であると決定された前記第１コード・セット内の各最上位データ要素の子データ要素ごとに、マージ命令を生成するステップと、
前記マージ命令が有効であると決定された前記第１コード・セット内の各最上位データ要素の各子データ要素用の前記マージ命令が、有効であるか否かを決定するステップと、
前記マージ命令が有効でないと決定された前記第１コード・セット内の各最上位データ要素の子データ要素ごとに、マージ命令を要求するステップと、
前記マージ命令が有効でないと決定された前記第１コード・セット内の各最上位データ要素の子データ要素ごとに、マージ命令を受け取るステップと、
前記マージ命令が有効でないと決定された前記第１コード・セット内の各最上位データ要素の子データ要素ごとに受け取られた前記マージ命令を、前記第１データ・ストア内の前記対応するマッピング情報要素内に格納するステップと、
前記マージ命令が有効であると決定された前記第１コード・セット内の各最上位データ要素の子データ要素ごとに、当該マージ命令を、前記第１データ・ストア内の前記対応するマッピング情報要素内に格納するステップをさらに含む、請求項４に記載の方法。
【請求項６】
前記第１コード・セット内の各最上位データ要素になされたカスタマイズをマージすることを必要としない当該最上位データ要素の子孫データ要素ごとに、マージ命令を生成し且つ当該子孫データ要素になされたカスタマイズをマージする必要がないことを指定するステップと、
前記第１コード・セット内の各最上位データ要素になされたカスタマイズをマージすることを必要としない当該最上位データ要素の各子孫データ要素用の前記マージ命令を格納するステップをさらに含む、請求項５に記載の方法。
【請求項７】
前記第２コード・セット内に相補的データ要素を有していない前記第１コード・セット内の各データ要素になされたカスタマイズを当該データ要素用の前記対応するマッピング情報要素に従ってマージするために、前記第１コード・セットを前記第２コード・セットに移行させる場合にアクセス可能な機能性を提供するように、前記第１データ・ストア内の前記マッピング情報要素を一のアプリケーション・プログラミング・インタフェース内でラップするステップをさらに含む、請求項６に記載の方法。
【請求項８】
前記マッピング情報要素及び前記アプリケーション・プログラミング・インタフェースが、前記第１コード・セットから前記第２コード・セットへの移行を実行するように構成された一の移行ツール内に組み込まれる、請求項７に記載の方法。
【請求項９】
前記第１データ・ストア内の各マッピング情報要素が、
対応するデータ要素が位置する、前記第１コード・セット内の第１ファイルの名前値用の第１フィールドと、
前記対応するデータ要素が位置する、前記第１ファイル内の第１位置値用の第２フィールドと、
前記第１コード・セット内の前記対応するデータ要素になされたカスタマイズを前記第２コード・セットにマージすべきか否かを指示する、キー値用の第３のフィールドと、
前記対応するデータ要素になされたカスタマイズをマージすべき、前記第２コード・セットの第２ファイルの第２名前値用の第４のフィールドと、
前記対応するデータ要素になされたカスタマイズをマージすべき、前記第２ファイル内の第２位置値用の第５のフィールドを含む、請求項１に記載の方法。
【請求項１０】
前記第２コード・セット内に相補的データ要素を有していない前記第１コード・セット内の各最上位データ要素を識別するために、前記第１コード・セットを前記第２コード・セットと比較するステップをさらに含む、請求項１に記載の方法。
【請求項１１】
前記比較するステップが、
前記第１コード・セットを、固有識別子によって識別される前記第１コード・セット内のデータ要素ごとに一のコンテキスト要素を含む、第１コンテキスト・オブジェクトに並列化するステップと、
前記第２コード・セットを、固有識別子によって識別される前記第２コード・セット内のデータ要素ごとに一のコンテキスト要素を含む、第２コンテキスト・オブジェクトに並列化するステップと、
前記第１コンテキスト・オブジェクト内の各コンテキスト要素を前記第２コンテキスト・オブジェクト内の各コンテキスト要素と比較するステップを含む、請求項１０に記載の方法。
【請求項１２】
前記第１コード・セット及び前記第２コード・セットが、ＳＧＭＬ、ＸＭＬ、ＨＴＭＬ、ＷＭＬ、ＸＨＴＭＬ、ＤＨＴＭＬ、他のＳＧＭＬ派生言語及びユーザ・インタフェース・マークアップ言語から選択された、構造化プログラミング言語の文書から成る、請求項１に記載の方法。
【請求項１３】
前記第１コード・セット及び前記第２コード・セットが、ＸＭＬスキーマによって定義されていないＸＭＬ言語の文書から成り、前記第１コード・セット及び前記第２コード・セット内の各データ要素が、一のＸＭＬ要素である、請求項１２に記載の方法。
【請求項１４】
前記ソフトウェア成果物が、１つ以上のソフトウェア・コンポーネント、システム・アーキテクチャ、アプリケーション・パッケージ、分析モデル、設計モデル、設計パターン、データベース・スキーマ及びウェブ・サービスである、請求項１に記載の方法。
【請求項１５】
前記方法が、前記第２バージョンの開発中に定期的に実行される、請求項１に記載の方法。
【請求項１６】
前記第２コード・セットを作成するように、前記第１コード・セット上でコード・リファクタリングが実行された、請求項１に記載の方法。
【請求項１７】
前記マージ命令を要求するステップ及び前記マージ命令を受け取るステップが、
一のユーザ・インタフェースを介して一のマージ命令要求を生成するステップと、
ユーザ入力によって提供された一のマージ命令指定を、前記ユーザ・インタフェースを介して受け取るステップを含む、請求項１に記載の方法。
【請求項１８】
ソフトウェア成果物の第２バージョンに移行する際に、当該ソフトウェア成果物の第１バージョンになされたカスタマイズをマージするためのツールを生成する方法を一のプロセッサに実行させる、コンピュータ可読命令を記録したコンピュータ使用可能な媒体であって、
前記方法が、
前記第２バージョン用の第２コード・セット内に相補的データ要素を有していない前記第１バージョン用の第１コード・セット内の最上位データ要素ごとに、一のマッピング情報要素を第１データ・ストア内でインスタンス化するステップと、
前記対応するマッピング情報要素内にマージ命令が提供されていない前記第１コード・セット内の最上位データ要素ごとに、当該最上位データ要素用のマージ命令を要求するステップと、
マージ命令が提供されていない前記第１コード・セット内の最上位データ要素ごとに、マージ命令を受け取るステップと、
マージ命令が提供されている前記第１コード・セット内の最上位データ要素ごとに、当該マージ命令が、当該最上位データ要素になされたカスタマイズを前記第２コード・セットにマージすることを必要とするか否かを決定するステップと、
前記第１コード・セット内の各最上位データ要素になされたカスタマイズをマージすることを必要とする当該最上位データ要素用のマージ命令が、有効であるか否かを決定するステップと、
前記マージ命令が有効でないと決定された前記第１コード・セット内の最上位データ要素ごとに、マージ命令を要求するステップと、
前記マージ命令が有効でないと決定された前記第１コード・セット内の最上位データ要素ごとに、マージ命令を受け取るステップと、
前記第１コード・セット内の最上位データ要素ごとに受け取られた前記マージ命令を、前記第１データ・ストア内の前記対応するマッピング情報要素内に格納するステップを含む、コンピュータ使用可能な媒体。
【請求項１９】
データ処理システムであって、
少なくとも１つのプロセッサと、
データ及び前記少なくとも１つのプロセッサによって実行すべきプログラムを格納するためのランダム・アクセス・メモリと、
ソフトウェア成果物の第２バージョンに移行する際に、当該ソフトウェア成果物の第１バージョンになされたカスタマイズをマージするためのツールを生成する方法を前記少なくとも１つのプロセッサに実行させる、前記ランダム・アクセス・メモリ内に格納されたコンピュータ可読命令を備え、
前記方法が、
前記第２バージョン用の第２コード・セット内に相補的データ要素を有していない前記第１バージョン用の第１コード・セット内の最上位データ要素ごとに、一のマッピング情報要素を第１データ・ストア内でインスタンス化するステップと、
前記対応するマッピング情報要素内にマージ命令が提供されていない前記第１コード・セット内の最上位データ要素ごとに、当該最上位データ要素用のマージ命令を要求するステップと、
マージ命令が提供されていない前記第１コード・セット内の最上位データ要素ごとに、マージ命令を受け取るステップと、
マージ命令が提供されている前記第１コード・セット内の最上位データ要素ごとに、当該マージ命令が、当該最上位データ要素になされたカスタマイズを前記第２コード・セットにマージすることを必要とするか否かを決定するステップと、
前記第１コード・セット内の各最上位データ要素になされたカスタマイズをマージすることを必要とする当該最上位データ要素用のマージ命令が、有効であるか否かを決定するステップと、
前記マージ命令が有効でないと決定された前記第１コード・セット内の最上位データ要素ごとに、マージ命令を要求するステップと、
前記マージ命令が有効でないと決定された前記第１コード・セット内の最上位データ要素ごとに、マージ命令を受け取るステップと、
前記第１コード・セット内の最上位データ要素ごとに受け取られた前記マージ命令を、前記第１データ・ストア内の前記対応するマッピング情報要素内に格納するステップを含む、データ処理システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ソフトウェア保守に係り、さらに詳細に説明すれば、マージ能力を含む改訂管理ソフトウェア・ツールに係る。
【背景技術】
【０００２】
バージョン管理は、データ・ファイル及びソフトウェアの異なるバージョン及びバリアントを管理することを意味する。ソフトウェアが開発され、設計され、展開されるにつれて、同じソフトウェアの複数のバージョンが異なるサイトに導入されたり、ソフトウェアの開発者がそれぞれの更新を同時に実行することが極めて一般的となっている。コード再利用（すなわち、ソフトウェアを更新するか又は新しいソフトウェアを実装するために、既存のソフトウェアを利用すること）は、或る時点で書かれたコンピュータ・プログラムの一部又は全部を、その後書かれる他のプログラム内で利用することが可能である、又は利用すべきであるという着想に基づいている。プログラマは、冗長な開発作業を減少させることを通して時間及びエネルギーを節約するために、プログラミングの最も初期の時期から、コード、テンプレート、機能及びプロシージャの一部を再利用してきた。最も一般的な再利用は、ソフトウェア・コンポーネントの再利用であるが、ソフトウェア開発プロセス中に作成されたシステム・アーキテクチャ、分析モデル、設計モデル、設計パターン、データベース・スキーマ、ウェブ・サービス等の他の成果物（artifact）も再利用することができる。次期バージョン用の土台として既存プログラムの先行バージョンを使用するという一般的な開発プラクティスは、コード再利用の標準的な形式である。
【０００３】
コード再利用の一般的な例は、エンド・ユーザ開発（ＥＵＤ）、すなわち専門の開発者でないエンド・ユーザがソフトウェア成果物を作成又は変更することを可能にするという活動又は技術である。ＥＵＤは、本質的に、開発努力をエンド・ユーザに外注することと見なすことができる。ＥＵＤの一般的な事例は、既存のアプリケーション・パッケージ（例えば、オフィス・パッケージ）を拡張し且つ適応させるようにプログラムすることである。ＥＵＤが普及した２つの主な理由は、プロジェクトの完成期日を有効に短縮するために諸組織がＥＵＤを使用できるという点と、ソフトウェア・ツールがより強力で且つより使いやすいという点にある。
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかし、ＥＵＤの実装上の欠点は、ソフトウェア保守（すなわち、ソフトウェア製品の引き渡し後に、障害を訂正するか、性能又は他の属性を改良するか、又は当該製品を変更済みの環境に適応させるために、当該製品を変更することを含む活動又は技術）の複雑さを増加させる場合があるという点にある。特に、エンド・ユーザがプログラミング・コードに個別的なカスタマイズをなした場合、実装のプロセス及び変更されたバージョンの製品受容を考慮すると、当該コードの元の開発者がこれらのカスタマイズの責任を持つことは困難である。
【課題を解決するための手段】
【０００５】
本発明の第１側面によれば、ソフトウェア成果物の第２バージョンに移行する際に、当該ソフトウェア成果物の第１バージョンになされたカスタマイズをマージするためのツールを生成する方法が提供される。本方法は、次のステップを含む。
即ち、前記第２バージョン用の第２コード・セット内に相補的なデータ要素（complementarydata element）を有していない前記第１バージョン用の第１コード・セット内の最上位データ要素（top-leveldata element）ごとに、一のマッピング情報要素を第１データ・ストア内でインスタンス化するステップ；
前記対応するマッピング情報要素内にマージ命令が提供されていない前記第１のコード・セット内の最上位データ要素ごとに、当該最上位データ要素用のマージ命令を要求するステップ；
マージ命令が提供されていない前記第１のコード・セット内の最上位データ要素ごとに、マージ命令を受け取るステップ；
マージ命令が提供されている前記第１のコード・セット内の最上位データ要素ごとに、当該マージ命令が、当該最上位データ要素になされたカスタマイズを前記第２のコード・セットにマージすることを必要とするか否かを決定するステップ；
前記第１のコード・セット内の各最上位データ要素になされたカスタマイズをマージすることを必要とする当該最上位データ要素用のマージ命令が、有効であるか否かを決定するステップ；
前記マージ命令が有効でないと決定された前記第１のコード・セット内の最上位データ要素ごとに、マージ命令を要求するステップ；
前記マージ命令が有効でないと決定された前記第１のコード・セット内の最上位データ要素ごとに、マージ命令を受け取るステップ；
前記第１のコード・セット内の最上位データ要素ごとに受け取られた前記マージ命令を、前記第１のデータ・ストア内の前記対応するマッピング情報要素内に格納するステップを含む。
【０００６】
本発明の他の側面によれば、前述の方法に対応するコンピュータ・プログラム及びデータ処理システムが提供される。
【発明の効果】
【０００７】
本発明は、現バージョンになされたカスタマイズを新バージョンに自動的にマージするために生成されるツールが、開発者による最小量の入力だけを必要とし、その結果、旧バージョン及び新バージョンのリリースの間に相当な量のコード・リファクタリングが実行された場合でさえ、開発コストを著しく減少させることができるという効果を奏する。
【図面の簡単な説明】
【０００８】
【図１】本発明に従った、マージ・ソリューション・ツール・フレームワークの実施形態を示すブロック図である。
【図２】図１の要素モニタのサブコンポーネントを示すブロック図である。
【図３】本発明に従った、２つの異なるＸＭＬファイル内にある２つのＸＭＬ要素を比較するプロセスを示すフローチャートである。
【図４】本発明に従った、マージ・ソリューション・ツールを生成するプロセスを示すフローチャートである。
【図５】本発明の実施形態を実装するために使用することができるコンピュータ・システムを示すブロック図である。
【発明を実施するための形態】
【０００９】
新規であると想定される本発明の特徴は、請求項において定義されているが、実施形態に係る以下の説明及び図面を参照すれば、本発明を一層よく理解することができるであろう。本発明は、種々の形態で実施することができるから、本明細書に開示した実施形態は、本発明の例示であるに過ぎない。従って、実施形態について開示した特定の構造的及び機能的な詳細事項は、本発明を制限するものとして解釈すべきではなく、本発明を任意の適切な形態で使用することを当業者に教示するための代表的な基礎として解釈すべきである。
【００１０】
本発明の実施形態（以下「実施形態」と表記）が提供する機構は、ソフトウェア成果物の新バージョンの開発中に、当該ソフトウェア成果物の現バージョン用のコードになされた変更をモニタするとともに、当該ソフトウェア成果物の現バージョン用のコード内に存在するデータ要素が当該ソフトウェア成果物の新バージョン内に相補的なデータ要素を有していないという事例ごとに、第３者が現バージョン用のコードになしたカスタマイズをマージするためのソリューションを提供する自動化ツールを生成するように、定期的に使用することができる。これらの事例ごとに、カスタマイズをマージするためのソリューションを提供することにより、実施形態は、ソフトウェア成果物のコードが現バージョンと新バージョンとの間で著しくリファクタリングされた場合でさえ、当該ソフトウェア成果物の現バージョンのデータ要素になされたカスタマイズを新バージョンに自動的にマージするためのツールを生成するように動作することができる。本明細書において、「データ要素」という用語は、データ要素名、データ要素定義及び１つ以上の表記用語のような識別子を含む、データの原子単位を意味する。
【００１１】
本明細書において、ソフトウェア成果物の現バージョン内に存在するデータ要素が当該ソフトウェア成果物の新バージョン内に相補的データ要素を有していないと称するのは、当該データ要素が当該ソフトウェア成果物の新バージョン内にもはや存在しないか、又は新バージョン内で異なった態様で構造化される場合である。具体的には、現バージョンと新バージョンとの間に、次の５つの相違点のうちの１つが存在する場合である。（１）当該データ要素は、両バージョン間で削除された、（２）当該データ要素は、現バージョンと同じ構造化プログラミング言語文書内に存在するが、新バージョン内の異なる親（parent）要素に関連付けられている、（３）当該データ要素は、異なる構造化プログラミング言語文書内に存在し且つ新バージョン内の異なる親要素に関連付けられている、（４）当該データ要素は、同じ親要素と関連付けられているが、新バージョン内の異なる構造化プログラミング言語文書内に存在する、（５）当該データ要素は、新バージョン内でリネームされた。
【００１２】
実施形態では、ソフトウェア成果物の現バージョン用のコードになされたカスタマイズを自動的にマージするために生成されるツールは、当該ソフトウェア成果物の現バージョン内に存在するが当該ソフトウェア成果物の新バージョン内に相補的データ要素を有していないデータ要素になされたカスタマイズを調整するためのマージ・ソリューションのデータ・ストアと、現バージョンから新バージョンへのコード移行を実行する際に自動化データ移行ツールがアクセス可能であり且つユーザが現バージョン用のコードになしたカスタマイズによって指示されるように前記マージ・ソリューションにサービスするインタフェースを提供することができる。本明細書において、「データ・ストア」という用語は、マニュアル・ファイル、コンピュータ可読ファイル及びデータベースを含む、データを格納するために使用することができる任意の適切なメモリ装置を意味する。実施形態は、次のように実装することができる。すなわち、現バージョンになされたカスタマイズを新バージョンに自動的にマージするために生成されるツールが、最小量の開発者入力だけを必要とし、その結果、旧バージョン及び新バージョンのリリースの間に相当な量のコード・リファクタリングが実行された場合でさえ、開発コストを著しく減少させることができる。
【００１３】
以上で概説した前記機構については、前記ソフトウェア成果物がＸＭＬスキーマによって定義されていないＸＭＬ文書の形式を有する構造化文書から成り且つ当該ＸＭＬ文書が順序付き（ordered）又は順序なし（unordered）の多数の要素を含むように意味制約（semantic constraint）に従ってフォーマットされた実施形態を参照して、以下で詳細に説明する。もちろん、このシナリオは例示であるに過ぎない。というのは、実施形態は、ＸＭＬ言語文書だけでなく、任意のタイプの構造化文書から成るソフトウェア成果物にも適用することができるからである。実施形態が適用可能なソフトウェア成果物は、種々の構造化言語、例えば、ＨＴＭＬ、ＷＭＬ、ＸＨＴＭＬ、ＤＨＴＭＬ又は他のＳＧＭＬ派生言語、並びにユーザ・インタフェース・マークアップ言語（例えば、ＵＩＭＬ、ＸＡＬ、ＳＶＧ、ＸＡＭＬ及びＬＺＸ）のような他の構造化言語、パスカル及びＣのようなプログラミング言語、２次元又は３次元のレイアウトを定義するために使用される言語等でコード化した文書から成る。また、実施形態は、科学情報、エンジニアリング情報、経済情報、ゲーム、暗号等を格納するために使用される構造化言語でコード化した文書から成るソフトウェア成果物にも適用することができる。一般に、構造化言語で書かれた文書は、諸要素の階層構造を有し、その構造はタグ（すなわち、当該文書内の文字シーケンス）によって定義される。さらに、実施形態は、ソフトウェア・コンポーネント、システム・アーキテクチャ、アプリケーション・パッケージ、分析モデル、設計モデル、設計パターン、データベース・スキーマ、ウェブ・サービス等のような、任意の適切なタイプのソフトウェア成果物に適用することができる。
【００１４】
ＸＭＬ標準は、ＷＷＷコンソーシアム（Ｗ３Ｃ）によって管理され、Ｗ３Ｃのウェブ・サイト上で維持管理される。ＸＭＬは、ＸＭＬ文書と呼ばれるデータ・オブジェクトのクラスを記述し、それらを処理するコンピュータ・プログラムの振る舞いを一部記述する。ＸＭＬ文書は、数々の要素の集合を含む自己記述型の構造化文書であり、自動的な意味的統合の形式に対して都合が良い場合がある。従って、本明細書において、「ＸＭＬ要素」又は「ＸＭＬデータ要素」という用語は、ＸＭＬの諸規則によって定義されるような、１セットのブラケット間に含まれるコード語を意味する。ＸＭＬが拡張可能言語として分類されるのは、ユーザが（解析対象データ又は解析対象外データを含む）ユーザ自体の要素を定義することを可能にするためである。解析対象データは、諸文字から構成され、そのうちの或るものは文字データを形成し、そのうちの或るものはマークアップを形成する。各要素は、関連する属性及び要素のリストを有することがある。或る要素は、他の要素を文書内に組み込ませるために、当該他の要素を参照することがある。或る文書は、或る「ルート」又は文書要素内で開始する。マークアップは、文書のストレージ・レイアウト及び論理構造の記述をエンコードする。論理上、この文書は、宣言、要素、コメント、文字参照及び処理命令から成り、それらの全ては明示的なマークアップによって当該文書内に指示される。ＸＭＬは、ストレージ・レイアウト及び論理構造に制約を課すための機構を提供する。これらの意味制約を追加することにより、アプリケーション言語は、ＸＭＬで実装することができる。
【００１５】
以下に例示するシナリオは、ＸＭＬスキーマが定義されていないカスタマイズ可能なＸＭＬ文書を含むソフトウェア成果物をマージすることに係り、当該ソフトウェア成果物の保守中に生じることがある幾つかの問題を示す（なお、実施形態は、これらの問題に対処するために実装することができる）。このシナリオでは、ソフトウェア・ベンダは、最初に、１セットのカスタマイズ可能なＸＭＬ文書を含むアプリケーション・パッケージ用のコードの「バージョン１」を作成する。前記ＸＭＬ文書は、指定された意味制約に従って提供されるが、前記ＸＭＬ文書については、ＸＭＬスキーマは定義されていない。ユーザが、前記アプリケーション・パッケージのバージョン１を購入し、前記ＸＭＬ文書の意味構造を理解した上で、前記ＸＭＬ文書の諸要素を変更することにより、前記アプリケーション・コードをカスタマイズする。また、前記ユーザは、前記カスタマイズ可能なＸＭＬ文書内で使用するための新しい要素を定義することができる。その後、前記ベンダは、新しい機能性を追加することにより、前記アプリケーション・パッケージを拡張することを決定する。前記新しい機能性のうちの或るものは、前記カスタマイズ可能なＸＭＬ文書への更新を通して実装されるであろう。
【００１６】
前記アプリケーション・パッケージを更新する前に、前記ベンダは、当該パッケージの「バージョン１」用のコードをリファクタリングすることを決定する。一般に、コード・リファクタリング（非公式には、「クリーン・アップ」とも呼ばれる）は、プログラムに新しい機能性を追加したり、当該プログラム内のバグを修正することが困難である場合に動機づけられるものであって、プログラミング・コードの既存の機能性を維持しつつ、変更に適応しやすくし、可読性を改良し、又は構造を単純化するように、プログラミング・コードを変更するプロセスを意味する。例えば、コード・リファクタリングは、コードの内部構造及び設計を変更し且つ不要コード及び他のコード肥大を除去することによって、コードの分かりやすさを改良するために使用することができる。単純なリファクタリングの１例は、可変名を単一文字の「i」から一層意味のある「interestRate」という文字シーケンスに変更する場合のように、識別子として使用すべき文字シーケンスを変更するというものである。
【００１７】
リファクタリングを実行し且つ新しい機能性を前記コードに追加した後、前記アプリケーション・パッケージの更新済みバージョン、すなわち「バージョン２」用の前記ベンダのコードは、バージョン１に基づく。次に、前記ユーザは、前記アプリケーション・パッケージのバージョン２にアップグレードすることを決定する。前記ユーザは、前記カスタマイズを失うことなくバージョン２の新しい機能を獲得するために、バージョン１内の前記ＸＭＬ文書をカスタマイズしたのであるから、前記ユーザがバージョン１用の前記ＸＭＬ文書になした諸変更は、バージョン２のＸＭＬ文書にマージする必要があろう。しかし、前記リファクタリングのために、バージョン１内に存在していた幾つかの要素は、バージョン２内にもはや存在しないか、又はバージョン２内で異なった態様で構造化されることがある。その結果、前記ユーザがカスタマイズした前記アプリケーション・パッケージのバージョン１用のコードの要素が、バージョン２内にもはや存在しないか、又はバージョン２内で異なった態様で構造化されることがあり、従って、従来技術のマージ技術を使用する場合は、これらのカスタマイズを手動的に統合する必要があろう。これに対し、実施形態は、たとえ前記アプリケーション・パッケージのコードがバージョン１とバージョン２との間でリファクタリングの処理対象となったとしても、バージョン２内にもはや存在しないか、又はバージョン２内で異なった態様で構造化される、バージョン１用のコードの要素になされたカスタマイズを自動的にマージするためのツールを提供することができる。
【００１８】
実施形態は、新バージョンのリリースまで、ソフトウェア成果物の現バージョン用のコードになされたカスタマイズを新バージョンにマージするための生成済みソリューションに関する検証を定期的に実行することにより、当該ソリューションの正確さを検証するように実装することができる。このアプローチは、リリース後の保守コストの点で、有利となることがある。このアプローチのエラー出現頻度は、（１）新バージョンに移行した後に、ユーザがそのカスタマイズを再実装することを必要とするという手動的アプローチ、又は（２）新バージョンの開発中に、開発者が現バージョン用のコードになされた更新を手動的にモニタし、そして新バージョンに移行する間又はその後にユーザが現バージョン・コードへのその変更を新バージョン・コードに手動的にマージする際に当該ユーザが順守すべき指示を文書化することを必要とするという手動的アプローチに比べて、遙かに小さくなる。特に、このことが顕著であるのは、ソフトウェア成果物が大きな開発チームによって作成され、そして多数のファイルを含むような場合である。
【００１９】
図１は、本発明に従った、マージ・ソリューション・ツール・フレームワーク１００の実施形態を示す。後述するように、マージ・ソリューション・ツール・フレームワーク１００は、１セットのカスタマイズ可能なＸＭＬ文書を含むソフトウェア成果物の新バージョン用のＸＭＬコード・ファイルを開発する間に、当該ソフトウェア成果物の現バージョンのＸＭＬコード・ファイルになされた変更をモニタし、また前記現バージョン用のＸＭＬ文書内に存在していたが前記新バージョン用のＸＭＬ文書内に相補的ＸＭＬ要素を有していないＸＭＬ要素ごとに、第３者が前記現バージョン用のカスタマイズ可能なＸＭＬ文書になしたカスタマイズをマージするためのソリューションを提供する自動化ツールを生成する。マージ・ソリューション・ツール・フレームワーク１００は、前記自動化ツールが提供するマージ・ソリューションを更新することにより、両バージョン間でなされた変更を連続的に統合するために、ソフトウェア開発サイクル中に定期的に使用することができる機構を提供する。
【００２０】
マージ・ソリューション・ツール・フレームワーク１００は、最上位要素モニタ・モジュール（以下「要素モニタ」と表記）１１０、マージ資源モジュール（以下「マージ資源」と表記）１２０、マージ・ソリューション検証モジュール（以下「検証手段」と表記）１３０、マージ・ソリューション作成モジュール（以下「ソリューション作成手段」と表記）１４０、マージ要求作成モジュール（以下「要求作成手段」と表記）１５０、マージ・ソリューション消費モジュール（以下「ソリューション消費手段」と表記）１６０及びマージ・インタフェース作成モジュール（以下「マージ・インタフェース」と表記）１７０を含む。本明細書において、「モジュール」及び「プログラム・モジュール」という用語は、特定のタスクを実行するか又は特定の抽象データ・タイプを実装する、ルーチン、プログラム、オブジェクト、コンポーネント、データ構造、命令又は命令セット等を意味する。これらのモジュールは、記述された機能性を提供するソフトウェア、ハードウェア、ファームウェア、又は他の適切なコンポーネントとして実装することができ、そして本発明に従ったバージョン比較機構の実施形態を具体化するコンピュータのメモリにロードすることができる。これらのモジュールの諸側面は、Ｃ、Ｃ＋＋、Ｊａｖａ（登録商標）等の種々のプログラミング言語で書くことができる。これらのモジュールによって提供される機能性は、これを組み合わせたり、分割することができる。
【００２１】
一般に、要素モニタ１１０は、後日にリリースするためにソフトウェア成果物の新バージョンが開発されている間に、当該ソフトウェア成果物の現バージョン内に存在し且つ新バージョン内に相補的ＸＭＬ要素を有していない最上位（親）ＸＭＬ要素を識別するように、開発を定期的にモニタする。ＸＭＬ文書は、正確に１つのルート要素を有する、ツリー・ベースの意味論的構造を含む。以下で詳述するように、要素モニタ１１０によって識別される最上位ＸＭＬ要素は、ソフトウェア成果物の現バージョン内に存在し且つ新バージョン内に相補的ＸＭＬ要素を有していないＸＭＬ文書の全てのＸＭＬ要素であって、さらに新バージョン内に相補的ＸＭＬ要素を有していない先祖（ancestor）要素をＸＭＬ文書のツリー構造内に有していないものである。
【００２２】
一般に、マージ資源１２０は、新バージョン内にもはや存在しないか、又は新バージョン内で異なった態様で構造化される各要素になされたカスタマイズをマージするためのソリューション用のカスタマイズ・マッピング情報を格納する。検証手段１３０は、マージ資源１２０からカスタマイズ・マッピング情報を受け取り且つ新バージョンに関するカスタマイズ・マッピングの検証を実行する。ソリューション作成手段１４０は、要素モニタ１１０によって識別された親要素の子孫（descendent）要素になされたカスタマイズ用のマージ・ソリューションを自動的に生成する。要求作成手段１５０は、マージ・ソリューションをソリューション作成手段１４０によって生成することができないか、又は検証手段１３０によって検証することができない場合に、新バージョン内に相補的要素を有していない各要素になされたカスタマイズ用のマージ・ソリューションのために、開発者からカスタマイズ・マッピング情報入力を要求し且つ受理する。ソリューション消費手段１６０は、マージ資源１２０からのカスタマイズ・マッピング情報を読み取り且つ処理することにより、一の要素用のマージ・ソリューションがマッピング情報によって提供されるか否かを決定するとともに、当該要素用のマージ・ソリューションを生成する必要があるか否かを決定する。マージ・インタフェース１７０は、遙かに少ない開発者入力を必要とするような態様で新バージョンに移行する間に、ソフトウェア成果物の現バージョンになされたカスタマイズの完全に自動化されたマージを可能にする態様で、生成済みのマージ・ソリューションを提供するためのインタフェースを提供する。
【００２３】
図２は、要素モニタ１１０のサブコンポーネントを一層詳細に示すブロック図である。特に、要素モニタ１１０は、開発対象となっているソフトウェア成果物の第１バージョン１０２（例えば、現リリース）及び当該開発によって現に更新される当該ソフトウェア成果物の変更済みの第２バージョン１０４を、汎用メモリ・モデル・データ・ストア（以下「メモリ・モデル」又は「データ・ストア」と表記）１１２に定期的にロードする。後述するように、要素モニタ１１０は、汎用メモリ・モデル１１２内に各バージョンのメモリ・モデル表現を生成し、２つの文書の２つのメモリ・モデル表現を比較してそれらの間の相違点を識別し、２つの文書の間の当該識別された相違点に関する情報を含むようにメモリ・モデルを更新する。具体的には、バージョン比較モジュール（以下「比較モジュール」と表記）１１４は、データ・ストア１１２にアクセスし、第１バージョン１０２及び第２バージョン１０４を比較することにより、第１バージョン１０２内に存在し且つ第２バージョン１０４内に相補的要素を有していない親コード要素を識別する。
【００２４】
並列化機構１１６は、第１バージョン１０２及び第２バージョン１０４を並列化し、各バージョンのメモリ・モデル表現を生成し且つこれをメモリ・モデル１１２内に格納する。各メモリ・モデル表現は、階層的な、ノード・ラベル付きの、ツリー・データ構造の形式を取る。ツリー・データ構造は、１セットのリンク・ノードを有する非同期的な連結グラフであり、一般に、正確に１つのルート要素を有するツリー・ベースの意味論的構造を使用する、ＸＭＬ文書を表すために使用される。ツリーは、テキスト・ラインの順序付きリストよりも複雑な方法で操作することができる。例えば、実施形態では、文書のツリー構造化メモリ・モデル表現の各々は、多数の順序付き又は順序なしのノードを含むことができる。ツリー内の各ノードは、当該ツリーの下方に、ゼロ又はそれ以上の子ノードを有する（規約により、ツリーは、上方ではなく、下方に伸びる）。子を有するノードは、当該子の親ノード（又は先祖ノード）と呼ばれる。ツリーの最上位ノードは、ルート・ノードと呼ばれる。最上位ノードであるため、ルート・ノードは、親を有していない。図２に示すように、並列化機構１１６は、第１バージョン１０２及び第２バージョン１０４を、第１メモリ・モデル表現（以下「第１モデル」と表記）１０２ａ及び第２メモリ・モデル表現（以下「第２モデル」と表記）１０４ａにそれぞれ並列化して、これらのメモリ・モデル表現をメモリ・モデル１１２内に格納するように動作する。
【００２５】
以下で詳述するように、並列化機構１１６によって生成されるメモリ・モデル表現は、比較モジュール１１４によって実行される構文的及び意味論的比較の要件を満たすのに十分に柔軟な、両入力バージョンのＸＭＬ文書の要素間のマッピング関係を自動的に作成するように動作する。メモリ・モデル１１２内に維持される表現形式では、表された文書の各ＸＭＬ要素は、当該表現内のツリー・ノードに対応する。かかる各ツリー・ノードが有するコンテキストは、（ａ）対応するＸＭＬ要素の属性、（ｂ）対応する要素の全ての子孫ＸＭＬ要素（及びそれらの属性）、（ｃ）当該ノード用の固有（unique）識別子を保持する。この定義によれば、ノード・コンテキストが階層的であることが分かる。一のノードの子は、当該ノードに対応する要素内に保持される要素である。
【００２６】
幾つかのＸＭＬ文書が有する意味については、一部又は全部の要素の順序が重要でないということを説明する。メモリ・モデル表現は、文書間にわたって対照（counterpart）要素を識別するために、固有識別子の概念を使用する。固有識別子は、両バージョン間でソフトウェア成果物コードの要素になされた変更を追跡する場合に、比較モジュール１１４がアクセスすべき信頼性のあるマーカを提供する。すなわち、固有識別子は、諸要素の内容が、正確な対応する親要素の下で比較されることを保証する。一のノード用の固有識別子は、対応する要素の名前と、当該対応する要素のゼロ又はそれ以上の属性値を含む。各ノード・コンテキストの固有識別子を生成するために、並列化機構１１６は、要素の１つ以上の属性の値に従って各ＸＭＬ要素に適用される、識別子決定規則のリポジトリを使用する。
【００２７】
並列化機構１１６は、識別子決定規則の容易な追加及び変更をサポートする、固有識別子を生成するための識別子決定規則のリポジトリ用のプラグ可能なフレームワークを提供する。例えば、各ノード用の固有識別子は、各ノードの対応する要素の名前又は属性に依存することなく各ノードを明確に識別することを可能にする、代替的な識別子決定規則の任意の適切な実装に従って、生成することができる。並列化機構１１６によって実行される固有識別子の生成は、プラグ可能なリポジトリ内の識別子決定規則に依存する。従って、並列化機構１１６は、ユーザが識別子決定の詳細を制御することにより、特定のアプリケーションの要件を満たすように固有識別子を調整することができる、という点で柔軟性を有する。
【００２８】
実施形態のメモリ・モデルの下では、兄弟（sibling）ノードは、同じ固有識別子を有することができない。この要件を満たすために、並列化機構１１２は、異なる対応する要素タイプについて異なる複合セットの属性値を有する、固有識別子を生成するように構成することができる。従って、メモリ・モデル表現には、２種類の形式の固有識別子があり得る。第１タイプでは、ノードによって表されるＸＭＬ要素の名前は、固有識別子を形成するために、属性値なしで使用される。かかる場合、各バージョンのメモリ・モデル表現内には、このタイプの唯１つのノード・コンテキストが生じることが期待される。第２タイプの固有識別子では、ノードによって表されるＸＭＬ要素の名前及び当該要素の１つ以上の属性の各値は、固有識別子を形成するのに使用される。かかる場合、この要素名を有する２つ以上のノードが各バージョンのメモリ・モデル表現内に保持されることがあり、そして当該固有識別子における１つ以上の選択された属性の値は、各ノードを識別するのに使用される。
【００２９】
一のＸＭＬ要素用の全ての属性の値又は当該値の組み合わせが、一の親ノード及び当該親の下の各子孫ノードに対し個別に固有である限り、これらの値を当該ＸＭＬ要素に対応するノード用の固有識別子内に含めることは、必要とされない。このため、要素モニタ１１０は、各メモリ・モデル表現が良好に形成されることを保証することに加え、各文書のメモリ・モデル表現内の各固有識別子が生成される表現内で固有であることを検証する。
【００３０】
複合セットの属性値を有する固有識別子は、文書の意味を考慮に入れることにより、ソフトウェア成果物の２つのバージョン間の相違点を正確に決定するための比較を実行する際に、比較モジュール１１４が使用すべき柔軟性及び信頼性を有し且つ透明な機構を提供する。メモリ・モデルの下では、第１バージョン１０２の一のＸＭＬ文書内の一の要素は、第２バージョン１０４の一のＸＭＬ文書内の他の要素の対照要素と見なされる。但し、両要素用の対応するノードが、両バージョンのメモリ・モデル表現内で同じ固有識別子を有することを条件とする。両対照要素が同一であるのは、それらの対応するノードが同じ固有識別子及び複合属性セット内の対応する属性の各々について同等の値を有する場合である。
【００３１】
固有識別子は、ベンダが提供するソフトウェア成果物の両バージョン間で、一貫性を維持しなければならない。しかし、ソフトウェア成果物のバージョンを変更するユーザは、当該ユーザが追加又はカスタマイズする要素について固有識別子を定義することを必要とされない。ユーザが、一の要素に対応するノード用の固有識別子を生成するために使用される当該要素の任意の部分を変更する場合、このことは、あたかも当該要素が新バージョン内で削除され且つ新しい要素として新バージョンに追加されたかのように、マージ・ソリューション・ツール・フレームワーク１００内で同じ効果を有するであろう。このことは、表される文書の要素に対応するメモリ・モデル・ノードにおいて、ベンダが当該要素用に提供する任意の更新をマージすることをユーザが望んでいない、という指示を提供するための方法として使用することができる。
【００３２】
比較モジュール１１４は、比較規則のプラグ可能なリポジトリを使用して、諸文書のメモリ・モデル表現間の比較を実行することにより、それらの間の相違点を決定する。２つの異なるメモリ・モデル表現内の「同じ」ノードを識別するため、これらの比較規則は、比較中のソフトウェア文書の両バージョンの２つの表現内の対照ノード（すなわち、比較中の２つの表現内で同じ固有識別子を有するノード）をリンクし且つ比較中に２つのバージョン内の対照ノードに対応する要素間の相違点に関する情報を生成するように適用される。実施形態では、比較モジュール１１４は、比較規則のプラグ可能なリポジトリに対し、追加の規則を加える機構を提供する。その結果、比較中のソフトウェア成果物の両バージョンの各文書の諸要素間の相違点に関するより多くの情報を決定することができる。比較モジュール１１４によって実行される比較は、プラグ可能なリポジトリ内の比較規則に依存する。従って、比較モジュール１１４は、ユーザが比較の詳細を制御することにより、特定のアプリケーションの要件を満たすように特定の比較中に生成された情報を調整することができるという点で、柔軟性を有する。
【００３３】
図３は、比較モジュール１１４によって、２つの異なるＸＭＬファイル内にある２つのＸＭＬ要素を比較し、比較中の両バージョンのメモリ・モデル表現内にある諸要素に対応するノードのコンテキストにアクセスすることにより、それらの相違点を決定するためのプロセス２００を示すフローチャートである。両バージョン間のかかる比較を実行するために、比較モジュール１１４は、第１バージョン内の各要素を第２バージョン内の各要素と比較することにより、２つのバージョン間の最上位要素の全ての可能な追加、削除及び他の変更を調査するように、プロセス２００を反復的に実行する。
【００３４】
プロセス２００は、判定ブロック２１０で開始し、そこで比較中の要素を含むソフトウェア成果物のＸＭＬ文書が、当該要素にとって順序が重要でないことを指定する意味を具備するか否かを決定する。もし、これらのＸＭＬ文書が、順序が重要であることを指定する意味を具備するのであれば、プロセス２００は判定ブロック２２０に進み、そこで比較中の両バージョン用のメモリ・モデル表現内の要素に対応するノード用のそれぞれの固有識別子が同じであるか否かを決定する。もし、これらの固有識別子が同じでなければ、プロセス２００はブロック２８０に進み、そこで比較中の第１要素が比較中の第２要素を含むバージョン内に存在しないことを記録する。その後、プロセス２００は終了する。一方、判定ブロック２１０で、アプリケーション・パッケージのＸＭＬ文書が、前記要素にとって順序が重要でないことを指定する意味を具備することを決定すれば、プロセス２００は判定ブロック２３０に進み、そこで比較中の両バージョン用のメモリ・モデル表現内の要素に対応するノード用のそれぞれの固有識別子が同じであるか否かを決定する。
【００３５】
判定ブロック２２０又は判定ブロック２３０で、比較中の２つの要素に対応するノード用のそれぞれの固有識別子が同じであることを決定すれば、比較中の２つの要素は対照要素である。その場合、プロセス２００はブロック２４０に進み、そこで前記２つの対照要素の属性（当該要素に対応するノードのメモリ・モデル表現コンテキスト内に提供されるもの）を比較することにより、追加された任意の属性、削除された任意の属性又は変更された値を有する任意の属性を識別する。その後、プロセス２００はブロック２５０に進み、そこで前記２つの対照要素の子要素（当該要素に対応するノードのメモリ・モデル表現コンテキスト内に提供されるもの）のシーケンスを、当該子要素の固有識別子に基づいて比較することにより、前記２つの対照要素の子要素シーケンス内の任意の相違点を識別する。ブロック２４０及び２５０における比較中に識別された要素間の相違点に関する情報は、ブロック２６０で、汎用メモリ・モデル１１２内に記録される。
【００３６】
判定ブロック２３０で、比較中の２つの要素に対応するノード用のそれぞれの固有識別子が同じでないことを決定すれば、プロセス２００は判定ブロック２７０に進み、そこで比較中の第１要素に対応するノード用の固有識別子が、比較中の第２要素の兄弟要素に対応するノード用の任意の固有識別子と同じであるか否かを決定する。第１要素に対応するノード用の固有識別子が、第２要素の兄弟要素に対応するノード用の任意の固有識別子と同じでないことを決定すれば、プロセス２００はブロック２８０に進み、そこで比較中の第１要素が比較中の第２要素を含むバージョン内に存在しないことを記録する。一方、判定ブロック２３０で、第１要素に対応するノード用の固有識別子が、第２要素の兄弟要素に対応するノード用の固有識別子と同じであることを決定すれば、プロセス２００はブロック２４０に進み、ブロック２４０及び２５０で、前述のように、第１要素と第２要素のマッチする兄弟要素との間の比較を実行する。ブロック２４０及び２５０における比較中に識別された要素間の相違点に関する情報は、ブロック２６０で、汎用メモリ・モデル１１２内に記録され、そしてプロセス２００が終了する。
【００３７】
図２を再び参照して説明する。データ・ストア１１２内のコンテキスト・オブジェクト１０２ａ及びコンテキスト・オブジェクト１０４ａにアクセスすることにより、第１バージョン１０２及び第２バージョン１０４の間の比較を完了する際、比較モジュール１１４は、比較規則を適用することにより識別された２つの文書間の相違点に関する少なくとも次の情報で、メモリ・モデル内のコンテキスト・オブジェクトを更新する。（１）両バージョン間で削除された諸要素に関する情報、（２）同じＸＭＬ文書の異なるバージョン内に存在する異なる親要素に関連する諸要素に関する情報、（３）１つの親要素に関連し且つ１つのバージョン内の１つのＸＭＬ文書内に存在し、しかも異なる親要素に関連し且つ他のバージョン内の異なるＸＭＬ文書内に存在する諸要素に関する情報、（４）１つの親要素に関連し且つ１つのバージョン内の１つのＸＭＬ文書内に存在し、しかも同じ親要素に関連し且つ他のバージョン内の異なるＸＭＬ文書内に存在する諸要素に関する情報、（５）更新済みバージョン内でリネームされた諸要素に関する情報。これらの５つの情報セットは、現バージョン１０２内に存在する一の要素が新バージョン１０４内にもはや存在しないか、又は新バージョン１０４内で異なった態様で構造化される状況を表す。一般に、これらの状況は、コード・リファクタリングに起因する。
【００３８】
図１を再び参照して説明する。マージ資源１２０は、現バージョン１０２内に存在し且つ新バージョン１０４内に相補的要素を有していない各要素に対応する、メモリ・モデル内に格納された記録済みのコンテキスト情報を受け取るとともに、これらの変更済み要素ごとにカスタマイズ・マッピング情報ＸＭＬ要素をインスタンス化及び格納すするように、要素モニタ１１０のデータ・ストア１１２と通信する。このカスタマイズ・マッピング情報は、第１バージョンのカスタマイズを新バージョンにマージする場合に、生成されるものである。変更済み要素の各々については、対応するカスタマイズ・マッピング情報ＸＭＬ要素は、次の６つのフィールドを含むようにフォーマットされる。（１）第１バージョン１０２用のファイル名、（２）第１バージョン１０２内にある変更済み要素の位置、（３）マージ・ソリューション・キー、（４）第２バージョン１０４用のファイル名、（５）カスタマイズをマージすべき第２バージョン１０４内の位置、（６）開発者によって提供される任意の追加的な記述又はコメント（例えば、２つのバージョン間に適用された任意のコード・リファクタリング規則、リファクタリングを実行する特定の理由又は諸要素用のカスタマイズをマージするための特定の命令）。第１バージョン１０２内の変更済み要素の位置、及びカスタマイズをマージすべき第２バージョン１０４内の位置の両方に対する値は、ＸＰＡＴＨフォーマットで提供される。
【００３９】
以下、図４に示すフローチャートを参照して、マージ・ソリューション・ツール・フレームワーク１００の動作中に実行される、マージ・ソリューションを生成するためのプロセス３００を説明する。プロセス３００は、マージ資源１２０によってインスタンス化されるカスタマイズ・マッピング情報ＸＭＬ要素ごとに、マージ・ソリューション・ツール・フレームワーク１００によって実行される。マージ資源１２０によってインスタンス化されるマッピング情報要素のうち任意のものについてプロセス３００を実行する前に、各要素のために指定されるフィールドは、第１バージョン１０２用のファイル名、第１バージョン１０２内の変更済み要素の位置及び開発者によって提供される任意の追加的な記述又はコメントであるに過ぎない。マッピング情報要素ごとに、マージ・ソリューション・キーは、第１バージョン１０２内のこの要素になされたカスタマイズを第２バージョン１０４において再適用する必要がないことを指示する「DO_NOT_MERGE」、又は第１バージョン１０２内のこの要素になされたカスタマイズを第２バージョン１０４内の新しい位置にマージすべきであることを指示する「MERGE_TO_NEW_INSTANCE」の何れかに設定することができる。
【００４０】
プロセス３００のブロック３１０で、ソリューション消費手段１６０は、マージ資源１２０から現マッピング情報要素を読み取る。判定ブロック３２０で、ソリューション消費手段１６０は、当該マッピング情報要素を分析することにより、当該要素内に一のカスタマイズ・マージ・ソリューションが提供されているか否かを決定する。すなわち、ソリューション消費手段１６０は、マージ・ソリューション・キー用のマッピング情報要素フィールド、第２バージョン１０４用のファイル名、及びカスタマイズをマージすべき第２バージョン内の位置に対する値が指定されているか否かを決定する。もし、如何なるカスタマイズ・マージ・ソリューションも提供されていなければ、ブロック３３０で、要求作成手段１５０は、判定ブロック３２０で分析された諸フィールド用の値を指定することにより、アプリケーション開発者に対する要求を生成して、当該要素用のマージ・ソリューションを提供することを求める。例えば、当該要求は、マージ・ソリューション・ツール・フレームワーク１００内で実装され且つ当該ツール・フレームワークが稼働中のコンピュータ・システムを通して開発者がアクセス可能なユーザ・インタフェースを通して、これを提供することができる。また、当該要求は、第１バージョン１０２用のファイル名、第１バージョン１０２内の変更済み要素の位置及び開発者によって提供された任意の追加的な記述又はコメントに対する、既に指定済みの値を指示することができる。一般に、当該マッピング情報要素に対応する要素が第１バージョン１０２内に存在するが、第２バージョン１０４の開発中に削除されたか、或いは第２バージョン内でカスタマイズ可能でなければ、開発者は、マージ・ソリューション・キーを「DO_NOT_MERGE」と設定し、さもなければ、マージ・ソリューション・キーを「MERGE_TO_NEW_INSTANCE」と設定するであろう。この開発者入力を受け取った後、プロセス３００はブロック３８０に進み、そこでソリューション消費手段１６０は、マージ・ソリューション情報をマージ資源１２０内に維持された対応するマッピング情報要素内に格納し、そしてプロセス３００が終了する。
【００４１】
もし、判定ブロック３２０で、ソリューション消費手段１６０が、一のカスタマイズ・マージ・ソリューションを見つければ、ソリューション消費手段１６０は、判定ブロック３４０で、当該マッピング情報要素に対応する要素へのカスタマイズをマージする必要があるか否かを決定する。すなわち、ソリューション消費手段１６０は、マージ・ソリューション・キーの値を読み取る。もし、このキーが「DO_NOT_MERGE」と設定されていれば、ブロック３５０で、ソリューション作成手段１４０は、子孫要素用のマージ・ソリューション・キーを「DO_NOT_MERGE」と指定することにより、現マッピング情報要素に対応する要素の各子孫要素用のカスタマイズ・マージ・ソリューションをマッピング情報フォーマットで生成する。その後、プロセス３００はブロック３６０に進み、そこでソリューション消費手段１６０は、各子孫要素用の生成済みソリューションをマージ資源１２０内の対応するマッピング情報要素内に格納する。その後、プロセス３００が終了する。
【００４２】
もし、判定ブロック３４０で、現マッピング情報要素用のマージ・ソリューション・キーが「MERGE_TO_NEW_INSTANCE」と設定されていれば、判定ブロック３７０で、検証手段１３０は、第２バージョン１０４用のファイル名及びカスタマイズをマージすべき第２バージョン内の位置について現マッピング情報要素の諸フィールドによって指定された要素にアクセスし、そして当該ソフトウェア成果物のＸＭＬ文書用に提供された意味に従って、第２バージョン１０４内のカスタマイズ・マージ・ソリューションの結果について検証を実行する。もし、判定ブロック３７０で、当該ソリューションが検証されるならば、プロセス３００はブロック３８０に進み、そこでソリューション消費手段１６０は、当該ソリューションを、マージ資源１２０内の対応するマッピング情報要素内に格納する。その後、プロセス３００はブロック３９０に進み、そこでソリューション作成手段１４０は、現マッピング情報要素に対応する要素の各子要素用のカスタマイズ・マージ・ソリューションをマッピング情報フォーマットで生成する。図４に示すように、プロセス３００は、現マッピング情報要素に対応する要素の子要素ごとに、判定ブロック３７０から再帰的にインスタンス化され且つ実行される。一方、判定ブロック３７０で、現マッピング情報要素用のカスタマイズ・マージ・ソリューションが検証されなければ、プロセス３００はブロック３３０に進み、そこで要求作成手段１５０は、アプリケーション開発者に対する要求を生成して、前述の要素用のマージ・ソリューションを提供することを求める。その後、プロセス３００が終了する。
【００４３】
図１を再び参照して説明する。一旦システムが、現バージョン１０２内に存在し且つ新バージョン１０４内に相補的要素を有していない各要素用のマージ・ソリューションを生成したならば、マージ・ソリューション・ツール・フレームワーク１００は、当該マージ・ソリューションのインタフェース・バージョンをマージ・インタフェース１７０内に生成する。そうするため、ソリューション消費手段１６０は、マージ資源１２０にアクセスするとともに、当該マージ・ソリューションをＡＰＩ内でラップする。当該ＡＰＩは、現バージョン１０２から新バージョン１０４へのアップグレードが実行される間に、現バージョン１０２内に存在する要素のうち新バージョン内に相補的要素を有していない要素に対しユーザがなしたカスタマイズをマージするための移行ツールによってアクセスすることができる。マージ・インタフェース１７０の当該ＡＰＩは、ユーザによってカスタマイズされた現バージョン１０２内の一の要素が移行ツールによって識別された場合に、マージ資源１２０にアクセスして、第２バージョン１０４用のファイル名及びカスタマイズをマージすべき第２バージョン内の位置を獲得するための MergingInterface.getTargetElement（）オブジェクト及び MergingInterface.getTargetFile（）オブジェクトを含むことができる。
【００４４】
マージ資源１２０及びマージ・インタフェース１７０は、現バージョン１０２から新バージョン１０４への移行を実行するソフトウェア・ツールと同時に引き渡され、その後は、新バージョンに移行する際に、現バージョンにユーザがなしたカスタマイズをマージするために当該ユーザによって使用することができる。幾つかの実施形態では、マージ資源１２０及びマージ・インタフェース１７０は、ソフトウェア成果物の現バージョン１０２から新バージョン１０４に移行するための対応する移行ツール内で実装することができる。マージ資源１２０及びマージ・インタフェース１７０は、対応する移行ツール用のソフトウェア・パッケージの一の側面として、或いは対応する移行ツールに組み込むように実装されるソフトウェア・モジュール若しくはコンポーネント（例えば、１つ以上の機能ライブラリ、１つ以上のプラグ・イン又は拡張モジュール、１つ以上の動的リンク・ライブラリ等）として実装することができる。
【００４５】
前述のように、実施形態は、ＸＭＬ言語文書だけでなく、任意のタイプの構造化文書内のコードから成るソフトウェア成果物になされたカスタマイズを自動的にマージするためのツールを生成するように実装することができる。実施形態では、並列化機構１１６だけが、ＸＭＬの構文を有する文書を扱うという仮定の下で実装されるのに対し、前述の他の手段及びハンドラ・モジュールの各々は、汎用の、階層的メモリ・モデルのコンテキスト・オブジェクトを扱う。従って、代替実施形態では、マージ・ソリューション・ツール・フレームワーク１００は、非ＸＭＬ言語を扱うために、例えば、次の２つの方法の何れかで拡張することができる。（１）並列化機構１１６を、非ＸＭＬ言語を理解するハンドラで置き換える、又は（２）非ＸＭＬ言語をＸＭＬフォーマットに変換するためのプリプロセッサを実装する。さらに、実施形態では、ソフトウェア成果物バージョンの諸文書及び当該バージョンのメモリ・モデル表現の各々は、異なる構文規則を順守することができ、そしてメモリ・モデル表現の諸ノードは、比較中の諸文書及び諸要素の特定のタイプに適切な機構を使用して生成することができる。例えば、ソフトウェア成果物バージョンの諸文書が、ＨＴＭＬ言語の構文を有することができるのに対し、諸メモリ・モデル表現は、ＸＭＬ言語の構文を有することができる。
【００４６】
以上では、実施形態を十分に理解することができるように、特定の詳細事項を説明した。しかし、当業者には明らかなように、これらの特定の詳細事項に依拠することなく、他の実施形態を実施することが可能であり、その場合において構造的、論理的及び電気的変更を施すことができる。
【００４７】
実施形態は、ハードウェア、ソフトウェア又はハードウェア及びソフトウェアの組み合わせの形態で実現することができる。実施形態は、１つ以上のプログラム・モジュール及びデータ・ストレージ・ユニットを使用して実現することができる。実施形態は、１つのコンピュータ・システム内で集中的に実現するか、又は異なる要素が相互接続された幾つかのコンピュータ・システム間に散在する場合は、分散的に実現することができる。任意の種類のコンピュータ・システム、又は本明細書に開示した方法を実施するのに適した他の装置を使用することができる。ハードウェア及びソフトウェアの代表的な組み合わせは、汎用コンピュータ・システムと、当該コンピュータ・システムにロードされ且つそこで実行される場合、本明細書に開示した方法を実施するように当該コンピュータ・システムを制御するコンピュータ・プログラムの組み合わせとすることができる。
【００４８】
また、実施形態は、本明細書に開示した方法の実施を可能にする全ての機能を具備する、コンピュータ・プログラム内に埋め込むことができる。かかるコンピュータ・プログラムは、コンピュータ・システムにロードされると、これらの方法を実施することができる。本明細書において、コンピュータ・プログラム手段又はコンピュータ・プログラムは、任意の言語、コード又は表記に従った１セットの命令の任意の表現であって、情報処理能力を有するシステムに対し、特定の機能を、直接的に、或いは（ａ）他の言語、コード又は表記への変換、及び（ｂ）他の資料形式における再生の一方又は両方の後に、実行させるように意図されたものを意味する。
【００４９】
実施形態を実装することができるコンピュータ・システムは、特に、１つ以上のコンピュータ及びコンピュータ可読媒体上の少なくとも１つのコンピュータ・プログラムを含み、当該コンピュータ・プログラムは、コンピュータ・システムが前記コンピュータ可読媒体からデータ、命令、メッセージ又はメッセージ・パケット及び他のコンピュータ可読情報を読み取ることを可能にする。コンピュータ可読媒体は、ＲＯＭ、フラッシュ・メモリ、ディスク・ドライブ・メモリ、ＣＤ−ＲＯＭ及び他の永続ストレージのような不揮発性メモリを含むことができる。さらに、コンピュータ可読媒体は、ＲＡＭ、バッファ、キャッシュ・メモリ及びネットワーク回路のような揮発性ストレージを含むことができる。さらに、コンピュータ可読媒体は、有線ネットワーク又は無線ネットワークを含むネットワーク・リンク又はネットワーク・インタフェースのような過渡状態媒体内にコンピュータ読み取り可能な情報を含むことができ、コンピュータ・システムがかかるコンピュータ読み取り可能な情報を読み取ることを可能にする。
【００５０】
図５は、実施形態を実装するために使用することができる、コンピュータ・システム５００のブロック図である。コンピュータ・システム５００は、プロセッサ５０４のような１つ以上のプロセッサを含む。プロセッサ５０４は、通信インフラストラクチャ５０２（例えば、通信バス、クロスオーバー・バー又はネットワーク）に接続される。種々のソフトウェア実施形態は、このコンピュータ・システム５００の観点から説明される。この説明を十分に理解すれば、他のコンピュータ・システム又はコンピュータ・アーキテクチャを使用する場合、本発明をどのように実装するかということが明らかになるであろう。
【００５１】
コンピュータ・システム５００は、通信インフラストラクチャ５０２（又は図示されていないフレーム・バッファ）からのグラフィックス、テキスト及び他のデータを、表示ユニット５１０に転送する表示インタフェース５０８を含むことができる。また、コンピュータ・システム５００は、ランダム・アクセス・メモリ（ＲＡＭ）形式の主メモリ５０６及び２次メモリ５１２を含むことができる。２次メモリ５１２は、例えば、ハード・ディスク・ドライブ５１４及び（フレキシブル・ディスク・ドライブ、磁気テープ・ドライブ、光ディスク・ドライブ等を表す）取り外し可能なストレージ・ドライブ５１６を含むことができる。取り外し可能なストレージ・ドライブ５１６は、当業者には周知の態様で、取り外し可能なストレージ・ユニット５１８を対象とする読み取り及び書き込みを行う。取り外し可能なストレージ・ユニット５１８は、例えば、フレキシブル・ディスク、磁気テープ、光ディスク等を表し、その各々を対象とする読み取り及び書き込みは、取り外し可能なストレージ・ドライブ５１６によって行われる。取り外し可能なストレージ・ユニット５１８は、コンピュータ・ソフトウェア及びデータを格納したコンピュータ使用可能なストレージ媒体を含む。
【００５２】
２次メモリ５１２は、コンピュータ・プログラム又は他の諸命令をコンピュータ・システムにロードすることを可能にするための他の同様の手段を含むことができる。かかる手段は、例えば、取り外し可能なストレージ・ユニット５２２及びインタフェース５２０を含むことができる。これらの例は、プログラム・カートリッジ及びカートリッジ・インタフェース（例えば、ビデオ・ゲーム装置に見られるようなもの）、取り外し可能なメモリ・チップ（例えば、ＥＰＲＯＭ又はＰＲＯＭ）及び関連するソケット、並びにソフトウェア及びデータを取り外し可能なストレージ・ユニット５２２からコンピュータ・システム５００に転送することを可能にする他の取り外し可能なストレージ・ユニット５２２及びインタフェース５２０を含むことができる。
【００５３】
また、コンピュータ・システム５００は、通信インタフェース５２４を含むことができる。通信インタフェース５２４は、ソフトウェア及びデータをコンピュータ・システムと外部装置の間で転送することを可能にする。通信インタフェース５２４の例は、モデム、ネットワーク・インタフェース（例えば、イーサネット・カード）、通信ポート、ＰＣＭＣＩＡスロット及びカード等を含むことができる。通信インタフェース５２４を介して転送されるソフトウェア及びデータは、例えば、通信インタフェース５２４によって受信することができる電子、電磁気、光、又は他の信号の形式とすることができる。これらの信号は、通信パス（すなわち、チャネル）５２６を介して、通信インタフェース５２４に提供される。チャネル５２６は、諸信号を担持し、ケーブル、光ファイバ、電話線、携帯電話リンク、ＲＦリンク及び他の通信チャネルを使用して実装することができる。
【００５４】
本明細書において、「コンピュータ・プログラム媒体」、「コンピュータ使用可能な媒体」及び「コンピュータ可読媒体」という用語は、主メモリ５０６及び２次メモリ５１２、取り外し可能なストレージ・ドライブ５１６、ハード・ディスク・ドライブ５１４内に装着されたハード・ディスク及び諸信号のような媒体を包括的に意味する。これらのコンピュータ・プログラムは、ソフトウェアをコンピュータ・システムに提供するための手段である。
【００５５】
コンピュータ・プログラムは、コンピュータ制御論理とも呼ばれ、主メモリ５０６及び２次メモリ５１２の一方又は両方に格納される。また、コンピュータ・プログラムは、通信インタフェース５２４を介して受け取られることもある。かかるコンピュータ・プログラムは、実行されるとき、コンピュータ・システムが、前述の実施形態の諸機能を実行することを可能にする。特に、コンピュータ・プログラムは、実行されるとき、プロセッサ５０４がコンピュータ・システム５００の諸機能を実行することを可能にする。従って、かかるコンピュータ・プログラムは、コンピュータ・システムのコントローラを表す。
【００５６】
以上では実施形態を詳述したが、本発明に関する記述は、網羅的であること又は開示された実施形態に本発明を制限することを意図するものではない。請求項の記載によって定義される本発明の趣旨及び範囲から逸脱することなく、種々の変更、置換及び修正をなし得ることは明らかであろう。実施形態に対する変形は、特定の各アプリケーションにとって望ましい任意の組み合わせにおいて実現することができる。従って、本明細書に開示した実施形態の特定の制限又は拡張が、特定のアプリケーションにとって特定の利点を有することがあるとしても、これを全てのアプリケーションについて使用する必要はない。さらに、実施形態に関連して説明した１つ以上の概念を含む、方法、システム及び装置において、全ての制限事項を実装する必要があるとは限らない。
【００５７】
本明細書に提示した実施形態は、本発明の原理及び実際的な応用を最もよく説明し、当業者が本発明を理解することを可能にするために、選択され説明されたものである。当業者にとって、実施形態に対する多くの修正及び変形が明らかであろう。かかる修正及び変形は、請求項の記載によって定義される本発明の範囲内に属することが意図される。
【符号の説明】
【００５８】
１０２・・・・第１バージョン
１０２ａ・・・第１モデル
１０４・・・・第２バージョン
１０４ａ・・・第２モデル
１１０・・・・要素モニタ
１１２・・・・メモリ・モデル
１１４・・・・比較モジュール
１１６・・・・並列化機構
１２０・・・・マージ資源
１３０・・・・検証手段
１４０・・・・ソリューション作成手段
１５０・・・・要求作成手段
１６０・・・・ソリューション消費手段
１７０・・・・マージ・インタフェース
【図１】
2010079905.tif 000003
【図２】
2010079905.tif 000004
【図３】
2010079905.tif 000005
【図４】
2010079905.tif 000006
【図５】
2010079905.tif 000007