(57)【要約】  コンピュータソフトウェア構築物は、複数のコンポーネントを有し、その構築物のために設計されたアーキテクチャに従って組み立てられる。アーキテクチャは幾つかのパーティション及び幾つかの依存関係ルールを含み、ここで、各パーティションは自身に関連する少なくとも１つのコンポーネントを含み、各依存関係ルールは１つのパーティションのコンポーネントが他のパーティションの何れかのコンポーネントを参照してよいか否かを指定する。本発明による方法は、アーキテクチャの依存関係ルールを構築物の組立時の各コンポーネントに対して規則適用する。ソフトウェア構造物の特定コンポーネントをこれに対応する組立インストラクションに基づいて組み立てるように指令するコマンドが受信され、それらにまた依存関係ルールが受信される。その後、特定パーティションの特定コンポーネントが他のパーティションの他のコンポーネントを不正参照することによって依存関係ルールの何れかに違反しているか否かが判定される。このソフトウェア構造物の特定コンポーネントは、その依存関係ルールの何れにも違反していない場合にのみ組み立てられる。
2009524129.tif 000002
【特許請求の範囲】
【請求項１】
複数のコンポーネントを有するコンピュータソフトウェア構築物を前記構築物のために設計されたアーキテクチャに従って組み立てる方法であり、前記アーキテクチャは幾つかのパーティション及び依存関係ルールを含み、各パーティションは自身に関連する少なくとも１つのコンポーネントを含み、各依存関係ルールは１つのパーティションのコンポーネントが他のパーティションの何れかのコンポーネントを参照してよいか否かに関し、前記アーキテクチャの依存関係ルールを前記構築物の組立時の各コンポーネントに対して規則適用する方法であって、
前記ソフトウェア構築物の特定コンポーネントを対応する組立インストラクションに基づいて組み立てるコマンドを受信するステップと、
前記依存関係ルールを受信するステップと、
前記ソフトウェア構築物の前記特定コンポーネントおよび特定パーティションの前記特定コンポーネントが、他のパーティションの他のコンポーネントを不正参照することによって、前記依存関係ルールの何れかに違反しているか否かを判定するステップと、
前記特定コンポーネントが前記依存関係ルールの何れにも違反していない場合にのみ、前記ソフトウェア構築物の前記特定コンポーネントを組み立てるステップとを備えることを特徴とする方法。
【請求項２】
前記ソフトウェア構築物は、コンピュータアプリケーションを含むことを特徴とする請求項１に記載の方法。
【請求項３】
前記ソフトウェア構築物の前記特定コンポーネントを前記組立インストラクションに基づいて組み立てるビルダーによって実行されることを特徴とする請求項１に記載の方法。
【請求項４】
前記ソフトウェア構築物の前記特定コンポーネントが前記依存関係ルールの何れかに違反している場合に、前記特定コンポーネントの組立を拒否して、前記特定コンポーネントによる前記違反を記録するレポートを発行するステップをさらに備え、前記レポートに基づく前記違反を是正する試行がなされ得ることを特徴とする請求項１に記載の方法。
【請求項５】
幾つかのパーティションを含むように前記アーキテクチャを定義するステップと、
前記特定パーティションによりアクセスされるべきではない他のパーティションを各パーティション毎に指定するように前記依存関係ルールを定義するステップと、
前記ソフトウェア構築物の前記特定コンポーネントを特定パーティションに割り当て、前記ソフトウェア構築物をこれに対応する組立インストラクションに基づいて組み立てるビルダーによってアクセス可能な形式で前記割当結果を記録するステップとをさらに備えることを特徴とする請求項１に記載の方法。
【請求項６】
前記割当結果を記録するステップは、前記割当結果を前記組立インストラクションに指定するステップを含むことを特徴とする請求項５に記載の方法。
【請求項７】
前記割当結果を記録するステップは、前記割当結果を前記特定コンポーネント内に指定するステップを含むことを特徴とする請求項５に記載の方法。
【請求項８】
前記割当結果を記録するステップは、前記割当結果を前記特定コンポーネントに対応するデータファイルに指定するステップを含むことを特徴とする請求項５に記載の方法。
【請求項９】
前記特定コンポーネント毎に、
前記特定コンポーネントの前記パーティションを識別するステップと、
前記依存関係ルールを検査して前記識別されたパーティションに基づいて禁止パーティションを識別することによって、前記依存関係ルールに従って各禁止パーティションの各コンポーネントが前記特定コンポーネントによって参照されないようにするステップと、
前記特定コンポーネントによって参照される各参照コンポーネントを判別するステップと、
前記参照コンポーネント毎に、前記参照コンポーネントが前記禁止パーティション内にあるか否かを判定するステップと、
参照コンポーネントが前記禁止パーティション内にある場合には、前記ソフトウェア構築物の組立を停止するステップとを備えることを特徴とする請求項１に記載の方法。
【請求項１０】
前記特定コンポーネントの前記パーティションが識別できない場合には、停止するステップを備えることを特徴とする請求項９に記載の方法。
【請求項１１】
前記特定コンポーネント毎に、
前記特定コンポーネントの前記パーティションを識別するステップと、
前記依存関係ルールを検査して前記識別されたパーティションに基づいて禁止パーティションを識別することによって、前記依存関係ルールに従って各禁止パーティションの各コンポーネントが前記特定コンポーネントによって参照されないようにするステップと、
前記特定コンポーネントによって参照される各参照コンポーネントを判別するステップと、
前記参照コンポーネント毎に、前記参照コンポーネントが禁止パーティション内にあるか否かを判定するステップと、
前記参照コンポーネントが禁止パーティション内にある場合に違反フラグを設定するステップと、
識別されたコンポーネントの全てを処理した後に、前記違反フラグが設定されていたかどうかを判定し、前記違反フラグが設定されていた場合、前記ソフトウェア構築物の前記特定コンポーネントの組立を停止するステップとを備えることを特徴とする請求項１に記載の方法。
【請求項１２】
複数のコンポーネントを有するコンピュータソフトウェア構築物を前記構築物のために設計されたアーキテクチャに従って組み立てる方法を実行するコンピュータ実行可能命令が記録され、前記アーキテクチャは幾つかのパーティション及び依存関係ルールを含み、各パーティションは自身に関連する少なくとも１つのコンポーネントを含み、各依存関係ルールは１つのパーティションのコンポーネントが他のパーティションの何れかのコンポーネントを参照してよいか否かに関し、前記方法は前記アーキテクチャの依存関係ルールを前記構築物の組立時の各コンポーネントに対して規則適用する、コンピュータ読取可能記録媒体であって、
前記方法は、
前記ソフトウェア構築物の特定コンポーネントを対応する組立インストラクションに基づいて組み立てるコマンドを受信する手順と、
前記依存関係ルールを受信する手順と、
前記ソフトウェア構築物の前記特定コンポーネントおよび特定パーティションの前記特定コンポーネントが、他のパーティションの他のコンポーネントを不正参照することによって、前記依存関係ルールの何れかに違反しているか否かを判定する手順と、
前記特定コンポーネントが前記依存関係ルールの何れにも違反していない場合にのみ、前記ソフトウェア構築物の前記特定コンポーネントを組み立てる手順とを備えることを特徴とするコンピュータ読取可能記録媒体。
【請求項１３】
前記ソフトウェア構築物は、コンピュータアプリケーションを含むことを特徴とする請求項１２に記載の媒体。
【請求項１４】
前記方法は、前記組立インストラクションに基づいて前記ソフトウェア構築体の前記特定コンポーネントを組み立てるビルダーによって実行されることを特徴とする請求項１２に記載の媒体。
【請求項１５】
前記方法は、前記ソフトウェア構築物の前記特定コンポーネントが前記依存関係ルールの何れかに違反している場合に、前記特定コンポーネントの組立を拒否して、前記特定コンポーネントによる前記違反を記録するレポートを発行する手順をさらに備え、前記レポートに基づく前記違反を是正する試行がなされ得ることを特徴とする請求項１２に記載の媒体。
【請求項１６】
前記方法は、
前記特定コンポーネント毎に、
前記特定コンポーネントの前記パーティションを識別する手順と、
前記依存関係ルールを検査して前記識別されたパーティションに基づいて禁止パーティションを識別することによって、前記依存関係ルールに従って各禁止パーティションの各コンポーネントが前記特定コンポーネントによって参照されないようにする手順と、
前記特定コンポーネントによって参照される各参照コンポーネントを判別する手順と、
前記参照コンポーネント毎に、前記参照コンポーネントが前記禁止パーティション内にあるか否かを判定する手順と、
前記参照コンポーネントが禁止パーティション内にある場合には、前記ソフトウェア構築物の組立を停止する手順とを備えることを特徴とする請求項１２に記載の媒体。
【請求項１７】
前記方法は、前記特定コンポーネントの前記パーティションが識別できない場合には、停止する手順を含むことを特徴とする請求項１６に記載の媒体。
【請求項１８】
前記方法は、前記特定コンポーネント毎に、
前記特定コンポーネントの前記パーティションを識別する手順と、
前記依存関係ルールを検査して前記識別されたパーティションに基づいて禁止パーティションを識別することによって、前記依存関係ルールに従って各禁止パーティションの各コンポーネントが前記特定コンポーネントによって参照されないようにする手順と、
前記特定コンポーネントによって参照される各参照コンポーネントを判別する手順と、
前記参照コンポーネント毎に、前記参照コンポーネントが前記禁止パーティション内にあるか否かを判定する手順と、
前記参照コンポーネントが前記禁止パーティション内にある場合に違反フラグを設定する手順と、
識別されたコンポーネントの全てを処理した後に、前記違反フラグが設定されていたかどうかを判定し、前記違反フラグが設定されていた場合、前記ソフトウェア構築物の前記特定コンポーネントの組立を停止する手順とを備えることを特徴とする請求項１２に記載の媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンピュータアプリケーション等におけるアーキテクチャ的分割に規則適用を行うシステム及び方法に関する。より詳細には、本発明は、コンピュータアプリケーションの設計者等の者がかかるアプリケーションに関し許可される依存関係を含む分割規則の指定を可能とするシステム及び方法に関する。
【背景技術】
【０００２】
コンピュータアプリケーション、特に比較的大規模なコンピュータアプリケーションは、通常、かかるアプリケーションを論理的なグループに概念的に分割するアーキテクチャ的分割（partitioning）設計に従って構築される。かかるグループ化は、広い技術範囲にあるアプリケーションを理解する際の助けを提供する。かかるアーキテクチャ的分割の例としては、アプリケーションがグループ化され、パーティション（partition）、すなわちユーザインタフェース（ＵＩ）、アプリケーション論理、データストレージ及び同様の部位を含む対象領域に分割される場合がある。
【０００３】
とりわけ、特定のアプリケーションのアーキテクチャ的分割設計では、幾つかのパーティションのみを指定するだけでなく各指定パーティションにおいてそのアプリケーションのコンポーネントが他の指定パーティションにおけるそのアプリケーションのコンポーネントを参照してよいか否か又は如何に参照してもよいかをも指定する場合がある。第１のコンポーネントと他の第２のコンポーネント間の参照は、第１のコンポーネントの第２のコンポーネントへの依存関係を作成する。また、かかる参照すなわち依存関係は有用且つ必要でもあるが、望ましくないか又は賢明でない手法で、そのアプリケーションの複数コンポーネントを一緒にしてしまおうとする効果を有する場合がある。このように、そのアプリケーションのためのアーキテクチャ的分割設計は、第１のパーティション内にあるとする第１のコンポーネントが第２のパーティション内にあるとする第２のコンポーネントを参照することができるとする一方で、第３のパーティション内にあるとする第２のコンポーネントに対して参照できないと指定する場合がある。
【０００４】
論理的グループ化に従ったアーキテクチャ的分割を用いることによって、特にモジュール化システムにおいて、定義されたグループ化への遵守と共に許容された依存関係が構成上の柔軟性の余地を与えると認識されている。例えば、あるアプリケーションにおけるアプリケーション論理が分割され、かかるアプリケーションにおけるユーザインタフェースが別のものとして分割される場合、そのアプリケーション論理を提供するのに用いられるコンポーネントは、異なるユーザインタフェースを有する以外はおそらく性質を同様とするはずの他のアプリケーションにおいてもより簡単に使用され得る場合がある。このように、依存関係ルールとして、アプリケーション論理パーティションにおけるコンポーネントは、ユーザインタフェースパーティションのコンポーネントに依存するべきではなく、かかる依存関係が他のユーザインタフェースによってアプリケーション論理が使用されるのを妨げるからである。
【０００５】
アーキテクチャ的分割の理論及び用途はコンピュータアプリケーションに関してはよく確立されている。しかし、コンピュータアプリケーションのために１つ以上のコンポーネントを開発する開発者がそうするべき機会が与えられた場合にあっても故意又は意図せずにアプリケーションのために定義されたアーキテクチャ的分割に違反することがあることもまたよく確立されている。すなわち、アプリケーション、特に上述した比較的大規模なコンピュータアプリケーションでは、そのために定義されたアーキテクチャ的分割の規則適用外に逸脱する傾向がある。
【０００６】
かかる逸脱の１つの通常例において、特定のアプリケーションのアーキテクチャ的分割設計では、第１のパーティション内のコンポーネントが第２のパーティション内のコンポーネントを参照すなわち依存してよいとする一方で、第３のパーティション内のコンポーネントについて許さない規則を指定する場合がある。しかし、かかる依存関係ルールにも関わらず、アプリケーション開発者が実際には故意又は意図せずに第３のパーティション内のコンポーネントを参照又は依存する第１のコンポーネントを開発することによってこれに違反する場合がある。単純に言って、１つのコンポーネントから他のコンポーネントを参照することは通常単純なことであり、特定の参照が依存関係ルールに違反し逸脱を生んでいることを開発者に通知する安全装置は現時点では全く無い。
【０００７】
一般に、アプリケーションのアーキテクチャが設計された後に通常では該アプリケーション自身とは別々に維持管理されるという理由で逸脱が主に発生する。単純に言って、かかるアーキテクチャは、アプリケーションを実際に組み立てるのに用い得るソースコードや他の何らかの記憶形式では通常具体化されない。さらに、アーキテクチャ・アプリケーションが１人やグループによって定義され、さらに他の人やグループによって開発されるケースが多々ある。このように、開発時のアプリケーションとアプリケーション毎に定義されたアーキテクチャとの間で逸脱が発生し、この逸脱を認識しかかるアプリケーションのための定義されたアーキテクチャから逸脱したアプリケーションの組立を停止する方法や機構は何ら存在しない。
【発明の開示】
【発明が解決しようとする課題】
【０００８】
従って、アプリケーション毎に定義されるアーキテクチャ的分割を規則適用する方法及び機構に対する要請がある。特に、開発時のアプリケーションとそのアプリケーションのために定義されたアーキテクチャとの間の逸脱を実際に認識する方法及び機構に対する要請がある。同様に、かかるアプリケーションのために定義されたアーキテクチャから逸脱したアプリケーション組立を停止する方法及び機構に対する要請がある。
【課題を解決するための手段】
【０００９】
上述の要請は本発明によって少なくとも部分的には充足され、複数のコンポーネントを有すると共に自身のために設計されたアーキテクチャから組み立てられるコンピュータソフトウェア構築物に関する方法が提供される。アーキテクチャは幾つかのパーティション及び幾つかの依存関係ルールを含み、各パーティションは自身に関連する少なくとも１つのコンポーネントを含み、各依存関係ルールは１つのパーティションのコンポーネントが他のパーティションの何れかのコンポーネントを参照してもよいか否かを指定する。
【００１０】
本発明による方法は、アーキテクチャの依存関係ルールを構築物の組立時の各コンポーネントに対して規則適用する。この方法において、ソフトウェア構築物の特定コンポーネントをこれに対応する組立インストラクションに基づいて組み立てるように指令するコマンドが受信され、さらにまた依存関係ルールが受信される。その後、ソフトウェア構築物のある特定パーティションの特定コンポーネントが、他のパーティションの他のコンポーネントを不正参照することによって何れかの依存関係ルールに違反しているか否かが判定される。ソフトウェア構造物の特定コンポーネントは、その依存関係ルールの何れにも違反していない場合にのみ組み立てられる。
【００１１】
上記した概要のみならず以下の本発明の実施形態の詳細な説明は、添付の図面と共に参照されるときにより良く理解される。本発明を例示する目的のために現時点で好適である実施形態が図面に示されている。しかし本発明は、示される詳細な配置及び手段に限定されないことが理解されるべきである。
【発明を実施するための最良の形態】
【００１２】
＜コンピュータ環境＞
図１及び以下の説明は、本発明及び／又はその部分が実装され得る適切な計算機環境の簡潔な通常の説明を提供することが意図されている。要求されるものではないが、本発明は、例えばプログラムモジュールの如きコンピュータ実行可能命令の通常のコンテクストに記述され、例えばクライアントワークステーション又はサーバの如きコンピュータによって実行される。通常、プログラムモジュールは、ルーチン、プログラム、オブジェクト、コンポーネント、データ構造、並びに特定のタスクを実行するか若しくは特定の抽象データタイプを実装する同様の物を含む。更に、本発明及び／又はその部分が他のコンピュータシステム構成によって実施され得ることが認められなければならず、該構成は、ハンドヘルド装置、マルチプロセッサシステム、マイクロプロセッサベースのプログラム可能な消費者用エレクトロニクス、ネットワークＰＣ、ミニコンピュータ、メインフレームコンピュータ等を含む。本発明はまた、通信ネットワークによって連結された遠隔処理装置によってタスクが実行される分散配置された計算機環境においても実施し得る。分散コンピューティング環境において、プログラムモジュールはローカル及び遠隔ストレージ装置の両方に配置され得る。
【００１３】
図１に示されるように、例示的な汎用計算機システムは従来のパーソナルコンピュータ１２０等を含み、これは処理ユニット１２１と、システムメモリ１２２と、システムメモリを含む様々のシステムコンポーネントを処理ユニット１２１に結合するシステムバス１２３とを含む。システムバス１２３は、メモリバス若しくはメモリコントローラ、周辺バス、様々なバスアーキテクチャの何れかを使用するローカルバスを含む幾つかのタイプのバス構造の何れかであってもよい。システムメモリは、リードオンリーメモリ（ＲＯＭ）１２４及びランダムアクセスメモリ（ＲＡＭ）１２５を含む。基本入出力システム１２６（ＢＩＯＳ）は、例えば始動の間にパーソナルコンピュータ１２０内の要素間の情報転送を助ける基本的ルーチンを含み、ＲＯＭ１２４に格納される。
【００１４】
パーソナルコンピュータ１２０は、ハードディスク（図示せず）に対して読込及び書込を行うハードディスク装置１２７と、着脱可能な磁気ディスク１２９に対して読込及び書込を行う磁気ディスクドライブ１２８と、ＣＤ−ＲＯＭ又は他の光学式媒体の如き着脱可能な光ディスク１３１に対して読込及び書込を行う光学ディスクドライブ１３０と、を更に含む。ハードディスク装置１２７、磁気ディスクドライブ１２８及び光ディスクドライブ１３０は、ハードディスク装置インタフェース１３２、磁気ディスクドライブインタフェース１３３及び光学ドライブインタフェース１３４によって各々システムバス１２３に接続されている。ドライブ及びそれらに関連するコンピュータ読取可能記録媒体は、コンピュータ読取可能命令、データ構造、プログラムモジュール及びパーソナルコンピュータ１２０のための他のデータの不揮発性ストレージを提供する。
【００１５】
本記載における例示的な環境は、ハードディスク、着脱可能な磁気ディスク１２９及び着脱可能な光ディスク１３１を使用するものであるが、コンピュータによってアクセス可能なデータを格納することができる他のタイプのコンピュータ読取可能記録媒体が例示的動作環境においても使用され得ることが認められるべきである。他のタイプの媒体としては、磁気カセット、フラッシュメモリカード、デジタルビデオディスク、ベルヌーイ（Bernoulli）カートリッジ、ランダムアクセスメモリ（ＲＡＭ）、リードオンリーメモリ（ＲＯＭ）等がある。
【００１６】
幾つかのプログラムモジュールは、ハードディスク、磁気ディスク１２９、光ディスク１３１、ＲＯＭ１２４又はＲＡＭ１２５に格納されてもよく、オペレーティングシステム１３５、１つ以上のアプリケーションプログラム１３６、他のプログラムモジュール１３７及びプログラムデータ１３８を含む。ユーザは、パーソナルコンピュータ１２０に命令や情報を例えばキーボード１４０及びポインティングデバイス１４２の如き入力装置を通して入力してもよい。他の入力装置（図示せず）は、マイクロホン、ジョイスティック、ゲームパッド、周辺ディスク、スキャナ、等を含んでもよい。これらの及び他の入力装置がシステムバスに結合されるシリアルポートインタフェース１４６を通して処理ユニット１２１にしばしば接続されるが、例えばパラレルポート、ゲームポート又は汎用シリアルバス（ＵＳＢ）の如き他のインタフェースによって接続されてもよい。モニタ１４７又は他のタイプのディスプレイ装置がまた、例えばビデオアダプタ１４８の如きインタフェースを介してシステムバス１２３に接続されている。モニタ１４７に加えて、パーソナルコンピュータは通常、スピーカ及びプリンタの如き他の周辺出力装置（図示せず）を含む。図１の例示的なシステムもまた、ホストアダプタ１５５、小型計算機システムインターフェース（ＳＣＳＩ）バス１５６及びＳＣＳＩバス１５６に接続された外部ストレージ装置１６２を含む。
【００１７】
パーソナルコンピュータ１２０は、リモートコンピュータ１４９の如き１つ以上のリモートコンピュータへの論理的接続を使用してネットワーク化環境において動作してもよい。リモートコンピュータ１４９は、他のパーソナルコンピュータ、サーバ、ルータ、ネットワークＰＣ、ビアー（peer）装置又は他の通常のネットワークノードであってもよく、パーソナルコンピュータ１２０との関係において上記したような構成要素の多く又は全てを通常含むが、メモリストレージ装置１５０だけが図１に例示されている。図１に表される論理的接続は、ローカルエリアネットワーク（ＬＡＮ）１５１及びワイドエリアネットワーク（ＷＡＮ）１５２を含む。かかるネットワーク化環境は、事務所、広域企業コンピュータネットワーク、イントラネット及びインターネットにおいてありふれたものである。パーソナルコンピュータ１２０はまた、他のパーソナルコンピュータ１２０、ポータブルプレーヤや移動型データアシスタントの如くより特化した装置等へのホストとして機能してもよく、これによって、ホストは、他のデータのうちでゲストからのデータをダウンロード及び／又はアップロードする。
【００１８】
ＬＡＮネットワーク化環境において用いられるとき、パーソナルコンピュータ１２０はネットワークインタフェースすなわちアダプタ１５３を通してＬＡＮ１５１に接続される。ＷＡＮネットワーク化環境において用いられるとき、パーソナルコンピュータ１２０は通常、インターネット等のワイドエリアネットワーク１５２上の通信を確立するためにモデム１５４又は他の手段を含む。モデム１５４は、内臓又は外部であってもよく、シリアルポートインタフェース１４６を通してシステムバス１２３に接続されている。あるネットワーク化環境において、パーソナルコンピュータ１２０又はその部分に関連して表されるプログラムモジュールは遠隔メモリストレージ装置に保存されてもよい。示されるネットワーク接続が例示的なものであり、コンピュータ間の通信リンクを確立する他の手段が用いられてもよいことは認められるべきである。
【００１９】
＜アーキテクチャ的分割の組立時規則適用＞
本発明において、アーキテクチャ的分割は、アプリケーション毎に定義され、幾つかのパーティションと、各指定パーティションにおけるアプリケーションのコンポーネントが他の指定パーティションにおけるアプリケーションのコンポーネントを参照してよいか否か又は如何に参照してもよいかとを含み、そのアプリケーションがかかるアーキテクチャ的分割定義の範囲内で実際に構築されることが保証される。特に、本発明によれば、アプリケーションのアーキテクチャの分割規則を規則適用する方法及び機構が提供され、かかる方法及び機構はアプリケーションの各コンポーネントが組み立てられる組立時の間に動作される。このように、アプリケーションのアーキテクチャが規則適用され、そのアプリケーションは自身のために定義されたアーキテクチャからの逸脱が防止される。実際にかかる逸脱が検出された場合には、コンポーネントの組立が停止され、コンポーネント開発者にはかかる逸脱を修正する機会を与えるように通知がなされる。
【００２０】
尚、アーキテクチャ的分割が定義されるアプリケーション及びそのアプリケーションのアーキテクチャは、本発明の趣旨及び範囲から逸脱すること無く何らかのアプリケーション及びアーキテクチャであってもよい。かかるアプリケーション及びアーキテクチャを設計及び定義することは周知すなわち関連分野において明らかなはずであるから本明細書において詳細に記載する必要はない。尚、かかるアプリケーション及びアーキテクチャの設計及び定義において、かかるアーキテクチャの各パーティションが本発明の趣旨及び範囲から逸脱することなく何らかの適切な方法で定義されてもよい。例えば、各パーティションは１次元又は多次元であるように定義されてもよく、各パーティションは機能性、機密性、通信及び／又は同様の基準に基づいて定義されてもよい。
【００２１】
図２をここで参照すると、アプリケーション１０及びそのアーキテクチャ１２の例が示され、そこでは、該アプリケーションが計算プラットフォーム１４上でインスタンス化されることになる。尚、計算プラットフォーム１４は、単一の計算機装置又は複数のネットワーク化された計算機装置を含んでもよい。後者の場合、複数のネットワーク化された計算機装置は本発明の趣旨及び範囲から逸脱することなく何らかの適切な方法で組織化されてもよい。例えば、プラットフォーム１４の異なる計算機装置がアーキテクチャ１２の異なるパーティション１６に供されるか、又はかかる計算機装置が複数のかかるパーティション１６に対応することがあり得る。
【００２２】
何れにしても図２をなお参照すると、例示されるアプリケーション１０が格子すなわちグリッドを形成するように重ね合わされる複数の水平レイヤ及び垂直スライスを有するアーキテクチャ１２に組織化され、該グリッドの各セルは別々のパーティション１６であると考えられる。図示されていないが、図２に示されるようなアーキテクチャ１２が何れかの数の付加的な大きさを適切に含んでもよい。各々のパーティション１６は、アプリケーション１０が組み立てられる時に、１つ以上のコンポーネント１８として構築されることになる。特定パーティション１６の、すなわち特定パーティション１６「内」の各コンポーネント１８は、アプリケーション１０のためのアーキテクチャ１２に従って定義されるように、かかるパーティション１６の目的に実際に関連付けされるべきである。
【００２３】
かかる各コンポーネント１８は、本発明の趣旨及び範囲から逸脱することなく、何らかの適切なコンポーネント１８及びコンポーネント１８のタイプであってもよい。アーキテクチャ１２のコンポーネント１８を定義することは通常周知すなわち関連分野において明らかなはずであるから本明細書において詳細に記載する必要はない。例えば、アプリケーション１０が単一の論理的ファイル等として組み立てられる場合、各コンポーネント１８はコンパイルされるべき適切な論理セクションであってもよいし、さもなければアプリケーション１０のファイル内に含まれてもよい。同様に、該アプリケーションが複数の論理的ファイル等として組み立てられる場合には、各コンポーネント１８は複数のかかるファイル、個々のファイル又は個々のファイルの一部であってもよい。
【００２４】
後者の場合、通常の場合として各コンポーネント１８は特定のファイル等と一致してもよく、この場合、かかるファイルは、データファイル、実行可能ファイル、ライブラリファイルその他を含む。かかる各コンポーネント１８又はファイルは、１人以上の開発者によって１組のソースコード等として開発され、これはコンパイルさもなければ適切な組立プロセスすなわちビルダーによってコンポーネント１８又はファイルに組み立てられる。
【００２５】
図２に示されるアーキテクチャ１２において、製品、開発ツール及び共通ツールの如く、アプリケーション１０内のコンポーネント１８の通常の応用性に相応する、アーキテクチャ１２の水平レイヤが示されている。同様に、ユーザインタフェース（ＵＩ）、論理及びデータの如く、アプリケーション１０にまたがるコンポーネント１８の最上位レベルの機能的グループ化に相応する、アーキテクチャ１２の垂直スライスが示されている。このように、アプリケーション１０のアーキテクチャ１２内の水平レイヤと垂直スライスとの交差は１つ以上のコンポーネント１８を有するパーティション１６を表すが、この場合、かかるパーティション内のかかる各コンポーネント１８は共有された通常の応用性と共有された最上位レベルの機能性を有する。例えば、図２に示すように、製品レイヤと論理スライスとの交差は、アプリケーション１０の製品及び論理に関連する１つ以上のコンポーネント１８を中に有する製品−論理パーティション１６である。
【００２６】
変形例として、アーキテクチャ１２内の各レイヤ又はスライスはそれ自身でパーティション１６と考えられてもよく、この場合、スライスは第１パーティション計画（strategy）のパーティションを表し、レイヤは第１のパーティション計画と共存する第２パーティション計画のパーティション１６を表す。かかる場合において、各コンポーネント１８は、第１のパーティション計画の特定パーティション１６内と、第２のパーティション計画の特定パーティション１６内との双方に存在する。より一般的には、パーティション１６及びパーティション計画は、本発明の趣旨及び範囲から逸脱することなく、何らかの適切な方法でも定義されてもよい。
【００２７】
とりわけ、パーティション１６とおそらくパーティション計画とを定義することに加えて、アーキテクチャ的分割設計は依存関係制限すなわちルール２０を定義してもよく、これは、アプリケーション１０の特定パーティション１６の何れかのコンポーネント１８がアプリケーション１０の他の特定パーティション１６における何れかの他のコンポーネント１８によって参照されてよいか又は如何に参照されてもよいかを統御するために提供される。かかる依存関係ルール２０の１例の他に、図２をなお参照すると、水平レイヤを横切って左から右に流れ且つ垂直スライスを通して下方に流れて示されるアーキテクチャ１２の許可された依存関係が示されている。すなわち、ＵＩ−製品パーティション１６におけるコンポーネント１８は論理−製品パーティション１６におけるコンポーネント１８を横切って参照してもよいが、論理−製品パーティション１６におけるコンポーネント１８はＵＩ−製品パーティション１６におけるコンポーネント１８を横切って参照してはならない。同様に、データ−製品パーティション１６におけるコンポーネント１８はデータ−共通パーティション１６におけるコンポーネント１８を参照してもよいが、データ−共通パーティション１６におけるコンポーネント１８はデータ−製品パーティション１６におけるコンポーネント１８まで参照してはならない。
【００２８】
もちろん、アプリケーション１０の何れかの特定のアーキテクチャ１２のための依存関係ルール２０が本発明の趣旨及び範囲から逸脱することがない何らかの適切な依存関係ルール２０でもあってもよい。１方向の流れが指定された１つの通常例において、各パーティション１６におけるコンポーネント１８が直近で隣接するパーティション１６におけるコンポーネント１８を下流方向に参照するようなかかるルール２０を要求してもよい。他の例の場合、かかるルール２０は、特定パーティション１６又はパーティション１６の範囲を参照し、参照されたかかるパーティション１６に関して許される依存関係の特定の流れを指定してもよい。
【００２９】
尚、特定の依存関係ルール２０が如何なる状況でも特定パーティション１６から参照され得ない禁止パーティション１６を単に定義してもよいが、かかる特定の依存関係ルール２０がまた条件付き手法における、例えば特定パーティション１６からの参照目的に基づく手法におけるかかる禁止パーティション１６を定義してもよい。かかる依存関係ルール２０を定義する特定の方法及び機構は本発明の趣旨及び範囲から逸脱することなく何らかの適切な方法及び機構であってもよい。例えば、かかる依存関係ルール２０は、依存関係ファイル、スクリプト又は事前定義された依存関係定義言語の中で指定されても、又は１組の属性等として指定されてもよい。
【００３０】
上記で指摘されたように、図２に示された如きパーティション１６及び依存関係ルール２０を含むアーキテクチャ１２がアプリケーション１０のために定義されるが、アプリケーション１０のための特定コンポーネント１８の開発者がかかるアーキテクチャ１２に故意又は意図せずに違反することのないようには束縛されない。特に、かかるコンポーネント１８の開発の間、かかる開発者が他のコンポーネント１８について依存関係を創成することは妨げられない、この場合、創成された依存関係が依存関係ルール２０から逸脱することで違反することになる。
【００３１】
従って、本発明の１つの実施形態において、もし開発者がアプリケーション１０のためのアーキテクチャ１２の依存関係ルール２０に違反するコンポーネント１８を開発する場合、アプリケーション１０のためのコンポーネント１８を組み立てる試みは失敗する。このように、開発者はそのコンポーネント１８を依存関係ルール２０に従うように改変し、アプリケーション１０のためのかかるコンポーネント１８の組立を再試行しなければならない。
【００３２】
従来技術において、ソースコード等と共に発行された組立インストラクションに基づいてアプリケーション１０の各コンポーネント１８を組み立てるビルダーが提供されていた。かかるコンポーネント１８を組み立てるビルダーは周知すなわち関連分野において明らかなはずである。しかし、従来技術のビルダーは何れの依存関係ルール２０もまったく参照しないか、さもなければ組立中のコンポーネント１８がかかる依存関係ルール２０に違反していないと追認してしまう。
【００３３】
このように、図３をここで参照すると、本発明の１つの実施形態において、組立プロセス又は「ビルダー」２２が提供され、これはアプリケーション１０の各コンポーネント１８を、コンポーネント１８のためのソースコード等及び１組の組立インストラクション２４に基づいて、そしてまた依存関係ルール２０に基づいて組み立てる。このように、アプリケーション１０の組立が要求されているビルダー２２は、その各コンポーネント１８が依存関係ルール２０に違反しないと先ず確認する。
【００３４】
ビルダー２２が、組み立てられるべきコンポーネント１８に依存関係ルール２０の何れの違反も見つけない場合、ビルダー２２は実際に組立を行ってコンポーネント１８をそのための組立インストラクション２４に基づいて出力し、コンポーネント１８の組立からビルダー２２を妨げる何ら他の問題が当然には存在しないと推定する。しかし、コンポーネント１８において、依存関係ルール２０の何らかの違反を、ビルダーが見つける場合に、ビルダー２２は、かかるコンポーネント１８の組立を拒否し、代わりに依存関係ルール２０の各違反のレポート又はこれらを詳述する同様の物を発行する。このように、コンポーネント１８の開発者又開発者と同等の者は、レポートを検証しその中で詳述された各違反を直そうと試みてもよい。一旦各違反が直されると、次いで、開発者は、ビルダー２２にコンポーネント１８の組立を再要求することができる。
【００３５】
上記で言及されたように、アプリケーション１０のコンポーネント１８の組立を組立インストラクション２４に基づいて行うビルダー２２は周知すなわち関連分野において明らかなはずであるから本明細書において詳細に記載する必要はない。通常、必然的ではないが、実行状態のビルダー２２には、おそらくプロジェクトファイル等の形で組立インストラクション２４が提供される。組立インストラクション２４に基づいて、次いで、ビルダー２２は、コンポーネント１８の組立に必要なソースコード等の全ての所在を突き止めて、組立インストラクション２４内に含まれる指令に従ってコンポーネント１８を実際に組み立てる。尚、コンポーネント１８のためのソースコード等を参照するのに加えて、組立インストラクション２４は他のオブジェクトを参照してもよく、かかるオブジェクトとしては、コンポーネント１８の属性を定義するオブジェクト、コンポーネント１８を組み立てる際に使用される方法を提供するオブジェクト、条件を提供するオブジェクト等を含む。変形例として、かかるオブジェクトの少なくとも幾つかは組立インストラクション２４内に含まれてもよい。通常、かかる組立インストラクション２４は周知すなわち関連分野において明らかなはずであるから本明細書において詳細に記載する必要はない。従って、組立インストラクション２４の何らかの適切な形が本発明の趣旨及び範囲から逸脱することなく使用されてもよい。
【００３６】
このように、かかる組立インストラクション２４に基づいてアプリケーション１０のコンポーネント１８を実際に組み立てるためにかかるビルダー２２によって用いられる機能性は、本発明の趣旨及び範囲から逸脱することなく、何らかの適切な機能性であってもよい。しかし、本発明は、アプリケーション１０のコンポーネントの組立要求に応じて、アプリケーション１０のアーキテクチャ１２のために設定された依存関係ルール２０にコンポーネント１８が違反していないと最初に確認するかかるビルダー２２に少なくとも部分的に属すると理解されなければならない。
【００３７】
図４では、アプリケーション１０のコンポーネント１８を組み立てる方法が示され、コンポーネント１８がアプリケーション１０のアーキテクチャ１２のために設定された対応する依存関係ルール２０に違反しないとする確認を行い、アプリケーション１０のために設計され且つかかるアプリケーション１０のアーキテクチャ１２の依存関係ルール２０において記述されたアーキテクチャ的分割を規則適用する。予め、アーキテクチャ設計者は、アプリケーション１０のアーキテクチャ１２のためのアーキテクチャ的分割設計が幾つかのパーティション１６を含むように定義しなければならない（ステップ４０１）。ここで単一の分割計画が意図されていると仮定すると、当該アーキテクチャのためのアーキテクチャ的分割設計は、複数の定義済パーティション１６のうちの１つにアプリケーション１０の各コンポーネント１８を配置することになる。注目すべきは、アプリケーション１０の各コンポーネント１８は１つ又は１つだけのパーティション１６に関連付けされなければならないことである。
【００３８】
加えて、アーキテクチャ設計者は、アプリケーション１０のアーキテクチャ１２のためのアーキテクチャ的分割計画を、アーキテクチャ１２の各パーティション１６における各コンポーネント１８によって遵守されるべき依存関係ルール２０を含むように定義しなければならない（ステップ４０３）。この場合、かかる依存関係ルール２０はパーティション１６の複数間の依存関係制限を指定することで、そのアーキテクチャ１２における各特定パーティション１６毎に他のパーティション１６が識別され、当該特定パーティション１６から参照されないようにされる。言い換えると、依存関係ルール２０は、特定パーティション１６毎に、当該特定パーティション１６によってアクセスされるべきでない他のパーティション１６を定義する。上記されたように、かかる依存関係ルール２０は、アプリケーション１０のアーキテクチャ１２のパーティション１６のためのコンポーネント１８を開発する開発者の利益のためだけでなく、依存関係ルール２０及びそのアーキテクチャ的分割設計を規則適用する過程で参照を行うビルダー２２の利益のためでもある。
【００３９】
パーティション１６及び依存関係ルール２０が一旦定義されると、アプリケーション１０の各コンポーネント１８はある特定パーティション１６に割り当てられなければならない（ステップ４０５）。とりわけ、かかる割り当ては、ビルダー２２によってアクセス可能な手法で記録又は記憶されなければならず、かかるビルダー２２が依存関係ルール２０を規則適用できるようにする。かかる割り当ての達成は、本発明の趣旨及び範囲から逸脱することなく、何らかの適切な手法で実行されてもよい。１例の場合、かかる割り当ては、少なくとも幾つかのコンポーネント１８の各々毎に組立インストラクション２４において指定され、これらはコンポーネント１８と依存関係ルール２０とが一緒にビルダー２２に提供される。他の例の場合、かかる割り当ては、少なくとも幾つかのコンポーネント１８の各々毎に、コンポーネント１８内で、おそらくその属性として指定されていてもよい。更に別の例の場合、かかる割り当ては、少なくとも幾つかのコンポーネント１８の各々毎に、コンポーネント１８に対応するデータファイルの一部として指定されていてもよい。最後の例の場合、かかる各データファイルはコンポーネント１８と組立インストラクション２４と依存関係ルール２０と一緒にビルダー２２に提供されなければならない。
【００４０】
尚、パーティション１６へのコンポーネント１８の割り当てを指定するための少なくとも幾つかの選択肢は、コンポーネント１８を開発している開発者が、例えばコンポーネント１８内に割り当てを含むようにする如くして、指定動作を行うことを要求するのが普通である。このように、開発者はおそらく面倒を避ける努力において割り当て指定を怠ることを選ぶ可能性がある。かかる状況を克服する努力において、本発明の１つの実施形態では、アプリケーション１０の各コンポーネント１８がアプリケーション１０のアーキテクチャ１２のために設定された依存関係ルール２０に違反しないと確認する役割としてビルダー２２が、各コンポーネント１８の対応するパーティション１６への割り当てを要求するようにしてもよい。このように、ビルダー２２が特定コンポーネント１８毎の割り当てを見つけることができない場合には組立は失敗する。
【００４１】
何れにしても、ここでアプリケーション１０の特定コンポーネント１８毎の割り当てが指定され且つ見つけたと仮定し、更にその特定コンポーネント１８のためのソースコード等が開発されたと仮定すると、ビルダー２２は依存関係ルール２０が特定コンポーネント１８に関して違反されていないと以下の手法で確認する。ビルダーでのプロセスは、ビルダー２２への最低限１組の組立インストラクション２４の発行で始まり（ステップ４０７）、かかる組立インストラクション２４は、特定のコンポーネント１８のためのソースコード等、対応する何れかのデータファイル、並びに依存関係ルール２０を取得するべき場所を含む。変形例として、コンポーネント１８のためのソースコード等、対応する何れかのデータファイル、並びに依存関係ルール２０が必要に応じて発行される。
【００４２】
その後で、特定コンポーネント１８毎に、ビルダー２２は、組立インストラクション２４、コンポーネント１８のソースコード等、何らかのデータファイル、又は使用される全ての他のソースの何れかから、そのパーティション１６を識別し（ステップ４０９）、依存関係ルール２０を検査して、自身のコンポーネント１８が当該特定コンポーネント１８によって参照されるべきでない禁止パーティション１６を識別する（ステップ４１１）。ビルダー２２は、次いで、当該特定コンポーネント１８によって参照される各コンポーネント１８を適切な手法で、例えばソースコード等内の特定部位の手法、すなわちソースコード等の各ラインを検査する等の手法で判定する（ステップ４１３）。参照されたコンポーネント１８毎に、次いで、ビルダーは参照されたコンポーネント１８が禁止パーティション１６にあるか否かを判定する（ステップ４１５）。もし全ての参照されたコンポーネント１８が依存関係ルール２０に従って当該特定コンポーネント１８によって適正に参照されている場合には、ビルダーは次に進む（ステップ４１７）。一方そうではない場合には違反が見つかり、プロセスが停止され適切なレポートが発行されてもよい。変形例として、違反フラグ等がセットされた後にそのプロセスの継続が許されてもよく、それによって、もしあるならば他の違反が見つけられてもよい。
【００４３】
プロセスが停止されないと仮定すると、プロセスは当該特定コンポーネント１８の参照されたコンポーネント１８の各々毎に継続する。全ての参照されたコンポーネント１８がビルダー２２によって見つけられ且つ依存関係ルール２０に従うと確認された場合には、ビルダーは次に進む。特に、もし違反フラグが使用される場合、ビルダー２２はかかる違反フラグがセットされた否かを判定する。そうであれば、プロセスは当該特定コンポーネント１８が組み立てらないように停止され、適切なレポートが発行されてもよい。そうでないならば、ビルダー２２は次に進み、そのソースコード等に基づいて組立インストラクション２４に従ってアプリケーション１０の当該特定コンポーネント１８を組み立て（ステップ４１９）、かかるコンポーネント１８のかかる組立を妨げるだろう何ら他の問題がビルダー２２によって当然には見つけられなかったと推定する。
【００４４】
前に注記したように、ビルダー２２が依存関係ルール２０の違反を見つけた場合、ビルダー２２はレポート等を発行する上で依存関係ルール２０の各違反を詳細化する。このように、アプリケーション１０及び／又はその特定のコンポーネント１８の開発者等は、そのレポートをレビューして詳細化された各違反を直す試みを行ってもよい。各違反が一旦直されると、次いでその開発者は、図４のステップ４０７以降に従ってそのアプリケーション１０の特定コンポーネント１８を組み立てるようにビルダー２２に再要求してもよい。
【００４５】
＜結論＞
本発明は特に、コンポーネント１８から組み立てられる大規模アプリケーションの如きアプリケーション１０との関連において有用なものであるが、本発明の趣旨及び範囲から全て逸脱することなく本発明は何れの適切なアプリケーション１０に関して実現されてもよい。更に、本発明がアプリケーション１０のためのアーキテクチャ１２に関して開示されたにもかかわらず、本発明はコンピュータ若しくはネットワークのソフトウェア構築物すなわちコンポーネント１８から構築されるオブジェクトの何れのタイプのアーキテクチャに関しても実現されてもよい。従って、本発明は、コンピュータ若しくはネットワークのソフトウェア構築物すなわちコンポーネント１８から構築されるオブジェクトの何れのタイプを含むように解釈されなければならず、そこにおいて、各コンポーネント１８は定義されたアーキテクチャ１２に従って開発され、アーキテクチャ１２は、パーティション１６と、そのオブジョクト毎にコンポーネント１８が部分をなすパーティション１６に関する依存関係ルール２０とを指定する。
【００４６】
本発明と結合して実行されるプロセスを成し遂げるのに必要なプログラミングは比較的容易であって、関連するプログラミング分野において明らかなはずである。従って、かかるプログラミングは本明細書では取り扱われない。何らかの特定のプログラミングが本発明の趣旨及び範囲から逸脱することなく本発明を成し遂げるために使用されてもよい。
【００４７】
前述の説明において本発明は、アプリケーション１０毎に定義されたアーキテクチャ１２のアーキテクチャ的分割を規則適用する新規かつ有用な方法及び機構を含むことが理解され得るものである。その方法及び機構は、開発時のアプリケーション１０とアプリケーション１０のために定義されたアーキテクチャ１２との間の何らかの逸脱を識別し、もしかかるアプリケーション１０のために定義されたアーキテクチャ１２からの逸脱があれば、アプリケーション１０の組立を停止する。理解されるべきこととして、故に本発明は開示された実施形態に限定されず、添付された請求項によって定義されている本発明の思想及び範囲内での変更態様を包括することが意図されている。
【図面の簡単な説明】
【００４８】
【図１】本発明の特徴及び／又はその部分が組み入れられた汎用コンピュータシステムを示すブロック図である。
【図２】アプリケーション及びそのアーキテクチャの例を示すブロック図であり、そのアプリケーションが計算機プラットフォーム上で実証されるべき本発明の１つの実施形態に従って組み立てられる。
【図３】本発明の１つの実施形態に従って図２のアプリケーションを組み立てるビルダーのブロック図である。
【図４】図２のアプリケーションの組立に先立って図３のビルダーによって実行される主要ステップを示すフローチャートであり、ここで、ビルダーは図２のアプリケーションのコンポーネントが図２のアーキテクチャの分割化を充足する否かを判定する。
【図１】
2009524129.tif 000003
【図２】
2009524129.tif 000004
【図３】
2009524129.tif 000005
【図４】
2009524129.tif 000006
【国際調査報告】
2009524129.tif 000007
2009524129.tif 000008