ISO/IEC 19506:2012 情報技術— Object Management Groupアーキテクチャ主導のモダナイゼーション(ADM)—ナレッジディスカバリーメタモデル(KDM) | ページ 6

※一部、英文及び仏文を自動翻訳した日本語訳を使用しています。

4 用語と定義

この節には、KDM 仕様全体で特殊な方法で使用される用語のみが含まれます。 KDM の大部分の用語は、一般に受け入れられている辞書の定義に従って使用されるか、ISO 用語集やその他のよく知られているソフトウェア エンジニアリング用語集に見られる一般的に受け入れられている定義に従って使用されます。 KDM で使用される一般的な用語のいくつかの組み合わせは、用語集の定義に値しませんが、それらが使用されるコンテキストで明確にするために説明されています。

抽象化: 特定の目的に関連する情報に焦点を当て、残りの情報を無視するオブジェクトのビュー。

集約: 2 つのグループのグループ化された要素間のすべての個々の関係を表す、他の要素のグループである 2 つの要素間の派生関係。

Architecture-Driven Modernization (ADM): ADM は、関心のあるシステムの既存のソフトウェア資産を理解し、進化させるプロセスです。 ADM は、既存システムのアーキテクチャ面のモデルの収集、共有、利用、変換、提示、維持、および保存に重点を置いています。 ADM は、ソースからソースへの移行 (適切な場合) を排除しませんが、ユーザー組織が分析と設計の観点からモダナイゼーションを検討することを奨励します。そうすることで、プロジェクト チームは、時代遅れの概念や設計が最新の言語やプラットフォームに伝播されないようにします。

ビルド: 最終製品が提供する機能の特定のサブセットを組み込んだ、システムまたはコンポーネントの運用バージョン。

ビルド プロセス: プロジェクト コード ベースを使用可能なアプリケーションに変換するプロセス。ソフトウェア ビルドの最終結果は、配布可能なパッケージ内の製品を構成するファイルのコレクションです。この場合、パッケージは、スタンドアロン アプリケーション、Web サービス、コンパクト ディスク、ホットフィックス、またはバグ修正を意味します。ビルド プロセスの各ステップは、汎用コンピューターで実行されるソフトウェアによって実行される変換です。単純なソフトウェア ビルドでは、単一のソース コード ファイルを実行可能コードにコンパイルする必要があります。複雑なソフトウェア ビルドでは、コンパイルによって正しい実行可能コードが生成されるように、何百万行ものソース コードを使用して、何百ものバージョンの何千ものファイルを調整する必要があります。システムの実装には、ビルドをシステム ノードに展開し、適切な構成設定を適用することも含まれます。

コンポーネント: システムの機能的または論理的に異なる部分 コンポーネントは、ハードウェアまたはソフトウェアである場合があり、他のコンポーネントに細分される場合があります。多くの場合、コンポーネントは、実装をパッケージ化し、一連のインターフェイスの実現を提供するシステムの物理的な交換可能な部分です。このようなコンポーネントは、ソフトウェア コード (ソース、バイナリ、または実行可能ファイル) またはスクリプトやコマンド ファイルなどの同等物を含む、システムの実装の物理的な部分を表します。

コンテナー: コンテナー要素と所有要素の間の特別な「所有」(「含む」) 関係を通じて 1 つ以上の別個の要素を所有するモデル要素。「包含」関係は、対応する所有要素の特別なグループを形成します。複数のコンテナを持つ要素はありません。

ドメイン: その分野の実践者が理解する一連の概念と用語によって特徴付けられる知識または活動の領域。

要素: 複合または複雑な全体の一部の 1 つ。たとえば、モデル要素、メタ モデル要素です。

グループ: 単一の別個の要素へのトレーサビリティ関係によって形成される単位とみなされるモデル要素の数。要素は、コンテナーとその所有要素との間の「包含」関係によって形成される単一のグループを含む、複数のグループの一部である場合があります。これらの要素が要素とのトレーサビリティ関係を持っている場合、要素は 1 つまたは複数の要素をグループ化すると言われます。

階層: トレーサビリティ関係に従ったモデル要素の配置。他の要素を「所有」または「グループ化」する要素は、所有 (グループ化) された要素よりも高いレベルにあると見なされます。

インターフェイス: (1) 情報が通過する 2 つの異なるオブジェクト、デバイス、またはシステム間の共有境界または接続。接続は、物理的または論理的のいずれかです。 (2) エンティティの動作を特徴付ける名前付きの一連の操作

項目: 個別に記述または検討できるもの。コンポーネント、エレメント、ユニット、モジュールも参照してください。

KDM エンティティ: 関心のあるシステムの重要なものを表すメタモデル要素 (および対応するモデル要素) であり、その情報について知るか保持する必要があります。 KDM エンティティは、対象となるシステムの要素を抽象化したものであり、別個の存在目的または概念的な現実を持ち、ユニットとして参照できる自己完結型のデータです。モデル要素として、各 KDM エンティティは特定のメタモデル要素のインスタンスであり、通常は個別の KDM 関係のエンドポイントです。

KDM インスタンス: 対象システムの 1 つ以上のビューを表す KDM モデル要素のコレクション。

KDM モデル: KDM ビューのコンテナーであるメタモデル要素 (および対応するモデル要素)

KDM 関係: 対象のシステムの要素間の意味的な関連付けを表すメタモデル要素 (および対応するモデル要素)すべての KDM 関係はバイナリです。モデル要素として、各 KDM 関係は特定のメタモデル要素のインスタンスです。

メタモデル: モデリング言語の抽象的な構文を指定する特別な種類のモデル。メタモデルの典型的な役割は、モデル内のモデル要素がインスタンス化される方法のセマンティクスを定義することです。通常、モデルにはモデル要素が含まれます。これらは、メタモデルからモデル要素をインスタンス化することによって作成されます (つまり、メタモデル要素)

メタモデル要素: モデル要素がインスタンス化されるメタモデルの要素。

モデル: モデルは、関連する一連の関心事の観点から、関心のあるシステムを表します。モデルは、明示的または暗黙的な同型によってシステムに関連付けられます。モデルは MOF メタモデルのインスタンスであるため、モデル要素とそれらの間のリンクで構成されます。

モデル要素: メタモデル要素のインスタンス。

モジュール: (1) コンパイル、他のユニットとの結合、およびロードに関して個別で識別可能なプログラムユニット。例えば、アセンブラー、コンパイラー、リンケージ・エディター、または実行ルーチンへの入力または出力です。 (2) プログラムの論理的に分離可能な部分。

リソース: 特定の目的に使用でき、ランタイム プラットフォームによって管理される、コンピュータ システム内で可用性が制限されている物理的または仮想的なコンポーネント。

ランタイム プラットフォーム: アプリケーション ソフトウェアによって利用されるサービスを実装するハードウェアおよびソフトウェア コンポーネントのセット。ランタイム システムは、通常、複数のタスクの実行スケジュールを制御し、リソースを管理します。プログラマー向けの規定は、通常、アプリケーション プログラミング インターフェイスを形成します。これは、十分に文書化されたシステムの使用方法のセットです。

セグメント: 1 つの単位として保存または転送される対象システムの 1 つまたは複数の首尾一貫したビューに対応するデータのコレクション。

ソフトウェア アーティファクト: ソフトウェア アーティファクトは、ソフトウェア開発中に作成された有形の機械可読ドキュメントです。例としては、要件仕様ドキュメント、設計ドキュメント、ソース コード、および実行可能ファイルがあります。

ソフトウェア資産: ソフトウェア資産は、エンジニアがソフトウェア製品を構築または変更するために使用する部分的なソリューション (コンポーネントや設計ドキュメントなど) または知識 (要件データベースやテスト手順など) の記述です。ソフトウェア資産は、その資産を後続のコンテキストで繰り返し適用する目的で作成または収集された、1 つ以上の関連成果物のセットです。アセットの消費者は、ソリューション ビジネス モデリング、分析 (使用されるアセットはモデル)、および設計からアプリケーション開発 (使用されるアセットはコードの一部) まで、あらゆるタイプの IT またはビジネス プロセス ソリューションのアーキテクトまたはデザイナーです。

トレーサビリティ: 開発プロセスの 2 つ以上の製品、特に相互に前後関係または主従関係を持つ製品の間で関係を確立できる程度。たとえば、特定のソフトウェア コンポーネントの要件と設計が一致する程度。

ユニット: (1) 1 つの特定の機能を実行するのに役立つ装置の一部または複合体 (2) 他の要素に分割されていないソフトウェア要素。

ユーザー・インターフェース: 人間のユーザーと、コンピューター・システムのハードウェアまたはソフトウェア・コンポーネントとの間で情報をやり取りできるようにするインターフェース。

ビュー: 関連する懸念事項の観点から見たシステム全体の表現。

ビューポイント: ビュー を構築して使用するための規則の仕様。ビューの目的と対象者、およびその作成と分析の手法を確立することによって、個々のビューを作成するためのパターンまたはテンプレート。

サブパート I インフラストラクチャ層

KDM は、既存のエンタープライズ ソフトウェア システムに関するさまざまな側面の知識の中間表現を提供するため、大規模な仕様です。 KDM の複雑さを管理するために、少数の概念が選択され、仕様全体で使用されました。これらの概念は、いわゆるインフラストラクチャ レイヤーで定義されます。以下の3つのパッケージで構成されています。

  • •コア
  • • kdm
  • •ソース

コア パッケージは、基本的なメタモデル要素の種類と対応する制約を定義します。コア パッケージは、サブクラス化によって個々の KDM メタモデル要素を決定する一連の型を提供します。各 KDM メタモデル要素は、Core パッケージで定義されたクラスの 1 つのサブクラスです。メタモデルの観点から見ると、KDM はエンティティ関係の表現です。つまり、Core パッケージの 2 つの基本クラスは KDMEntity と KDMRelationship です。エンティティは重要なものであり、それに関する情報を把握または保持する必要があります。 KDM エンティティは、既存のソフトウェア システムの一部の要素を抽象化したものであり、1 つの単位として参照できる、別個の別個の存在である自己完結型のデータを持ちます。各 KDM パッケージは、特定の KDM ドメインの特定のエンティティを表すいくつかのメタモデル要素を定義します。

リレーションシップは、エンティティ間の相互作用、相互依存、または相互依存を表す、エンティティ間の関連付け、リンケージ、または接続を表します。 KDM リレーションシップは、既存のソフトウェア システムの要素間のセマンティック アソシエーションを表します。各 KDM パッケージは、特定の KDM ドメインの特定のリレーションシップを表すいくつかのメタモデル要素を定義します。すべての KDM 関係はバイナリです。

KDM は 2 つの特別な関係を定義します。

  • •封じ込め
  • •グループ化

一部の KDM エンティティは、他のエンティティのコンテナです。コンテナーと、このコンテナーが直接所有するエンティティーとの間には、特別なコンテナー所有(包含) 関係があります。一部の KDM エンティティは、他の KDM エンティティのグループです。グループと、このグループに直接「グループ化」されたエンティティとの間には、特別なグループ関連付け(グループ化) 関係があります。

コアパッケージは、分析メカニズム、いわゆる集約関係メカニズムを定義します。これは、エンティティ関係モデルの包含とグループ化の特別な関係と通常の関係をまとめたものです。

Core パッケージは、KDM 表現へのリフレクション API を定義します。他の KDM パッケージは、既存のソフトウェア システムに関する知識の特定の側面に対応する、特定の操作によってこの API を拡張します。

Core パッケージは OMG SBVR 仕様に準拠しています。これは、用語(さまざまな KDM エンティティ) と事実(KDM エンティティのさまざまな属性、および KDM エンティティ間の関係) の形で既存のソフトウェア システムの抽象化を提供するためです。実際、KDM 仕様のほとんどは、既存のソフトウェア システムの言語およびプラットフォームに依存しないオントロジーの定義です。 KDM は、既存のソフトウェア システムの記述に関連する標準語彙と見なすことができるため、この調整は重要です。この語彙を使用して SBVR ルールを記述し、既存のソフトウェア システムの詳細なプロパティを正式に記述することができます。

「kdm」という名前のパッケージは、各 KDM インスタンスのフレームワークを一緒に構成するいくつかの要素を定義します。フレームワークは、KDM 表現の物理構造を決定します。フレームワークの要素は、特定の既存のソフトウェア システムを表す KDM のすべてのインスタンスに存在します. フレームワークの観点から、各 KDM 表現は 1 つ以上のセグメントで構成され、各セグメントは複数の KDM モデルを所有します.各 KDM パッケージは、特定のタイプの KDM モデルを定義します。これは、既存のソフトウェア システムに関する特定の知識面に対処します。個々の KDM 実装は、KDM コンプライアンス セクションで定義されているように、1 つ以上の選択された KDM モデルをサポートする場合があります。 KDM ツールは、複数の KDM 実装を使用して、既存のソフトウェア システムに関する知識のさまざまな側面を表し、それらを単一の一貫した表現に統合することができます。さらに、KDM 設計は段階的な実装を容易にします。この場合、既存のソフトウェアに関する特定の知識が、より低レベルの KDM 表現を分析することによって収集されます。このアプローチによれば、特定の KDM ツールは、「KDM エンリッチメント」プロセス、「KDM から KDM への変換」を実行できます。このプロセスでは、ツールが入力 KDM モデルを分析し、1 つまたは複数の追加のセグメントとモデルを生成します。システム。

ソースパッケージは、いわゆるインベントリモデルを定義します。これは、既存のシステムの物理的な成果物を KDM エンティティとして表すだけでなく、KDM 要素とソースコード内の「元の」言語依存表現との間の関連付けを提供するトレーサビリティリンクのメカニズムも定義します。 KDM ビューが作成される既存のソフトウェア システム。これは、KDM インフラストラクチャの重要な部分です。他の KDM パッケージは、このメカニズムを使用してソース コードと既存のソフトウェア システムの物理的な成果物を参照するためです。

サブパート II プログラム要素レイヤー

Program Elements Layer は、共通のプログラミング言語によって決定されるさまざまな構成要素に言語に依存しない中間表現を提供することを目的とするメタモデル要素の大規模なセットを定義します。

Program Elements Layer のパッケージは、コード ドメインのアーキテクチャの視点を定義します。

  • • 懸念事項 :
    • •システムの計算要素は何か?
    • •システムのモジュールは何ですか。
    • •計算要素の下位レベルの編成は?
    • •計算要素で使用されるデータ型は何ですか。
    • •システムの動作の単位は何ですか。
    • •コード要素間の低レベルの関係、特に制御フローとデータフローの関係は?
    • •計算以外の重要な要素は何ですか?
    • •計算要素とモジュールは、システムの物理的成果物とどのように関連していますか?
  • 視点言語 :

    コード ビューは KDM XMI スキーマに準拠しています。 Codeアーキテクチャ ビューポイントビューポイント言語は、Code および Action パッケージによって定義されます。これには、AbstractCodeElement や CodeItem などのいくつかの抽象エンティティ、Datatype, ComputationalObject, Module などのいくつかの汎用エンティティ、および StorableUnit, CallableUnit, CompilationUnit, ActionElement などのいくつかの具象エンティティが含まれます。コード アーキテクチャ ビューポイントのビューポイント言語には、AbstractCodeRelationship および AbstractActionRelationship のサブクラスであるいくつかの関係も含まれます。

  • 分析方法 :

    コード アーキテクチャの観点では、次の主な種類のチェックがサポートされています。

    • •コンポジション (たとえば、CompilationUnit, SharedUnit, または CodeAssembly が所有するコード要素は何か、CallableUnit が所有するアクション要素は何か)
    • •データフロー (たとえば、特定の StorableUnit から読み取るアクション要素、特定の StorableUnit に書き込むアクション要素、特定の Datatype の動的インスタンスを作成するアクション要素、特定の StorableUnit をアドレス指定するアクション要素、読み取られるデータ要素など)呼び出しの実際のパラメーターとして)?
    • •制御フロー (たとえば、呼び出しで使用される CallableUnit, 特定のアクション要素の後に実行されるアクション要素、特定のアクション要素の前に実行されるアクション要素、特定のアクションから制御フローをディスパッチするために使用されるデータ要素)要素、特定の要素の後にどのアクション要素がどのような条件で実行されるか、制御の例外フローとは何か、特定のモジュールまたは CallableUnit へのエントリ ポイントとして実行されるアクション要素は何か)
    • •データ型 (たとえば、特定の格納可能ユニットのデータ型は何か、特定のポインター型の基本データ型は何か、レコード型の特定の要素の基本データ型は何か、署名は何かなど)指定された呼び出し可能ユニット) ?

他の種類のチェックは、インターフェイス、テンプレート、およびプリプロセッサに関連しています。コード モデルで定義されたすべての関係は非推移的です。たとえば、特定のアクション要素の後に実行できるすべてのアクション要素、または特定のアクション要素が制御をディスパッチできるすべての CallableUnits を導出するには、追加の計算が必要です。

集約された関係の KDM メカニズムは、個々のコード要素間の低レベルの関係に基づいて、さまざまなコード要素 (通常はモジュールとコード アセンブリ) を所有または参照する KDM 要素間の関係を導出するために使用されます。

  • • 建設方法 :
    • • KDM コード アーキテクチャの観点に対応するコード ビューは、通常、システムのアーティファクトを入力として受け取り、1 つまたはモードのコード ビューを出力として生成するパーサーのようなツールによって構築されます。
    • •コード ビューの構築は、対応するアーティファクトのプログラミング言語の構文とセマンティクスによって決定され、特定のプログラミング言語から KDM へのマッピングに基づいています。このようなマッピングは、特定のソフトウェア システムではなく、プログラミング言語にのみ固有です。
    • •特定のプログラミング言語から KDM へのマッピングにより、追加情報 (システム固有、プログラミング言語固有、または抽出ツール固有) が生成される場合があります。この情報は、ステレオタイプ、属性、または注釈を使用して KDM 要素に添付できます。

Program Layer は、CodeModel と呼ばれる単一の KDM モデルを定義し、次の KDM パッケージで構成されます。

  • •コード
  • •アクション

コード パッケージは、コードアイテム (プログラミング言語によって決定される名前付き要素、いわゆる「シンボル」、「定義」など) とそれらの間の構造的関係を定義します。 CodeItems は、ComputationalObject, Datatypes, および Modules にさらに分類されます。アクション パッケージは、コード項目間の制御とデータ フローを決定する動作要素とさまざまな動作関係を定義します。

コード パッケージの説明は、さらに次の部分に分けられます。

  • •モジュールを表すコード要素
  • •計算オブジェクトを表すコード要素
  • •データ型を表すコード要素
  • •プリプロセッサ ディレクティブを表すコード要素
  • •その他のコード要素

KDM のデータ表現は、ISO/IEC 1140, 複雑なユーザー定義データ型 (配列、ポインター、シーケンスなど)、および名前付きデータ型 (クラス、シノニム型など) を区別します。データ型に対応する KDM メタモデル要素は、ジェネリック クラス Datatype のサブクラスです。データ要素に対応する KDM メタモデル要素は、ジェネリック クラス DataElement のサブクラスです。

KDM モデル要素は、プログラミング言語によって決定される既存の成果物を表します。 KDM メタモデル要素は、プログラミング言語に共通するほとんどの一般的なデータ型とデータ要素を十分にカバーします。 KDM はまた、一般的ではない状況を表現するためにステレオタイプでさらに使用できる、いくつかの強力で一般的な拡張可能な要素を提供します。

タイプの関連付けに加えて、KDM 関係「HasType」を使用して名前付きデータタイプを追跡します。匿名データ型は、それを使用するデータ要素が所有できます。

Program Elements Layer のメタモデル要素は、次の命名規則を使用します (実用的な場合)

  • •接尾辞「要素」 — 通常、一般的なメタモデル要素を示します。
  • • suffix"Type" — データ型を表すメタモデル要素を指定します。
  • •接尾辞 "Unit" — 具体的なメタモデル要素を指定します。

サブパート III 実行時リソース層

この節では、既存のソフトウェア システムの動作環境を表すための一般的なパターンについて説明します。以下は、ランタイム リソース レイヤー パッケージのデータ、UI, プラットフォーム、およびイベントの共通プロパティです。

  • • 「リソース」 (ランタイム プラットフォームによって管理されるもの) を表すモデリング要素を提供します。
  • •これらのリソースを管理するための抽象的な「リソース アクション」を提供します。
  • •これらのアクションは、一部の外部プラットフォーム固有のパッケージへの 1 つまたは複数の API 呼び出しとして、プログラム要素によって実装されます。
  • •アクションとリソースの間に関連するバインディングがあります。
  • •リソースには、コールバックとイベント ハンドラの形式で「逆」の制御が含まれている場合があり、アプリケーションをイベント ドリブン スタイルでプログラムできます。
  • •リソースに関連する情報フローの内容は、何らかのデータ編成に関連付けられています。
  • •リソースには特定の状態があることが多く、時間の経過に伴う状態の変化を追跡することは、既存のシステムのロジックを理解する上で重要な問題になる場合があります。

ランタイム リソース レイヤー パッケージは、既存のシステムとその運用環境に関する価値の高い知識を収集するため、これには高度な分析と手作業の専門知識が必要になる場合があります。KDM は、ランタイム リソース レイヤーの分析でプログラム要素レイヤーの KDM モデルを使用できるように設計されています。入力として実行し、Runtime Resources Layer モデルを出力として生成します。下位の KDM レイヤーから上位のレイヤーへの参照があってはなりません。したがって、新しいランタイム リソース レイヤー モデルは、既存のプログラム エレメント レイヤー モデルの上に構築できます。

したがって、Runtime Resources Layer パッケージのパッケージは、次の KDM パターンを使用します。

  • •各ランタイム リソース レイヤー パッケージは、特定の「リソース」を表すエンティティとコンテナーを定義します。各パッケージは、追加の懸念事項を表す追加の要素を定義する場合があります。たとえば、データ パッケージに含まれるリソース定義は少なく、さまざまなデータ編成機能の表現に重点を置いています。 Event パッケージは、イベントによって引き起こされる状態、状態遷移を表すためのメタモデル要素を提供します。状態、遷移、およびイベントは、ランタイム プラットフォーム リソースと見なすことができます。 UI パッケージは、ユーザー インターフェイスを表すメタモデル要素を提供します。ユーザー インターフェイスは、ランタイム プラットフォーム リソースと見なすこともできます。プラットフォーム パッケージは、プロセス間通信、レジストリの使用、データの管理など、従来のランタイム プラットフォーム リソースを扱います。
  • •各ランタイム リソース レイヤー パッケージは、「リソース」間の特定の構造的関係を定義します。たとえば、Platform パッケージは、2 つのリソース間の論理的な関連付けを表す BindsTo 関係を定義します。
  • •各 Runtime Resources Layer パッケージは、API 呼び出しによるリソースの操作を表す特定のリソース アクションを定義します。リソース アクションは、次の KDM パターンを使用します。各リソース アクションは、対応するパッケージの基本抽象クラスのエンティティです。このクラスの名前は AbstractXXXElement で、"XXX" はパッケージの名前です。そのため、リソース アクションは ActionElement のサブクラスではありません。これにより、KDM パッケージ間のモジュール性が促進され、それぞれが独立した KDM 準拠ポイントを定義します。ただし、各リソース アクションは、「抽象化」と呼ばれるプロパティを通じて 1 つまたは複数の ActionElement を所有します。各リソース アクションには、「実装」と呼ばれるプロパティもあり、KDM グループ化メカニズムを使用して、コード モデルが所有する 1 つ以上の ActionElement にリソース アクションを関連付けます。リソース アクションの「実装」グループは、プログラム要素層の入力モデルで表された元の API 呼び出しを表します。 「抽象化」プロパティは、KDM コンテナー メカニズムを使用して、データと制御の流れを含む、リソース操作の真のロジックを表す API 呼び出しに対応する動作を追加します。 「抽象化された」ActionElements は、対応するリソース アクションによって直接所有され、コード モデルの一部ではありません。
  • •特定のリソース アクションによって実行されるリソース固有の操作の性質は、リソース アクションの「kind」属性によって表されます。リソース アクションは、「抽象化」アクション コンテナを介してリソース アクション関係を所有します。リソース アクション関係の直接の所有者は、所有されている「抽象化された」アクションです。
  • • 「抽象化」アクション コンテナ プロパティは、実際には、Runtime Resources Layer パッケージのすべての要素に追加されます。このようにして、各リソースは、プログラム要素レイヤーで定義されたメタモデル要素を使用して、そのリソースに固有の動作を指定できます。
  • • 「抽象化」アクション コンテナ パターンは、ランタイム プラットフォームによって提供される「反転」コントロールの形式を表すために使用されます。このパターンは、個別に KDM イベント パターンと呼ぶことができます。各ランタイム リソース レイヤー パッケージは、イベントを表す独自のメタモデル要素を定義します。たとえば、UI パッケージはクラス UIEvent を定義します。 「抽象化」アクション コンテナ メカニズムにより、ActionElements をイベント要素に追加できます。このような抽象化されたアクション要素から発生する呼び出し関係は、いくつかのランタイム プラットフォームによって提供される「コールバック」メカニズムを表します。

ランタイム リソース レイヤー パッケージは独立していますが、複数のパッケージが実装されている場合は追加機能を提供できます。これらのパッケージを実装する特定の順序を強制しないようにするために、KDM には次のアプローチが含まれます。リソース アクションの関係は、アクション パッケージの AbstractActionRelationship クラスのサブクラスです。すべてのパッケージを使用する完全な KDM 実装では、すべてのリソース アクションを任意の ActionElement で使用できます。コード モデルでは拡張リレーションシップを使用しないでください。拡張リソース アクションの関係は、ランタイム リソース レイヤー モデルの「抽象化」アクション コンテナー内のアクションでのみ使用できます。このメカニズムの注目すべき例は、Event パッケージで定義されたアクション「HasState」です。これにより、イベント モデルの要素を任意のリソースに関連付けることができます。もう 1 つの例は、Data パッケージで定義された「HasContent」関係です。これにより、データ モデルの要素を任意のリソースに関連付けることができます。

  • ・各リソースに利用可能な「抽象化」アクションコンテナは、「リソースアクション」間およびリソース間の任意のフロー関係を可能にし、「リソースアクション」間のフローの抽象化を提供する。
  • •ランタイム リソース レイヤー パターンはマイクロ KDM と連携しており、既存のソフトウェア システムの全体的な忠実度の高い分析の基盤として、リソースに関連する動作の正確なモデリングを可能にします。これは、正確なマイクロ KDM アクションのセットを「抽象化」アクション コンテナに関連付けることで実現できます。

追加の実行時の問題には、ソフトウェア システムのいわゆる「実行時」に出現する動的構造 (一部の論理エンティティとその関係のインスタンス) が含まれます。たとえば、動的エンティティにはプロセスとスレッドが含まれます。プロセスとスレッドのインスタンスは動的に作成でき、多くの場合、動的に作成されたプロセスとスレッドのインスタンス間の関係は、既存のシステムの知識の重要な部分です。その場合、純粋な論理的視点は不十分かもしれません。

アプリケーション コードとランタイム プラットフォーム間の関心の分離を検討する場合、いわゆるバインディングと、バインディングを実現または遅延させるためのさまざまなメカニズムについて明確にすることが重要です。

バインディングは、特定の取消不能な実装決定を参照する一般的な方法です。結合が多すぎることは、しばしば「ハードコーディング」と呼ばれます。これにより、システムの保守と再利用が困難になることがよくあります。理解するのが非常に難しいことがよくあります。バインドが少なすぎると、すべてが実行時に (できるだけ遅く) 解決される動的システムにつながります。これにより、システムが理解しにくく、エラーが発生しやすくなることがよくあります。最新のプラットフォームは、拘束時間の管理に優れています。通常、バインドは展開時に管理されます。

ポータブル アダプター、コード生成、モデル駆動型アーキテクチャーなど、多くのソフトウェア開発プラクティスはバインディング時間の効率的な管理に関するものです。バインド時間を効率的に管理することは、多くの場合、プラットフォームの独立性と呼ばれます。

結束時間

  • •生成時間バインディング
  • •言語とプラットフォームの設計バインディング
  • •バージョン管理時間
  • •コンパイル時のバインディング。
    • •マクロ展開
    • •テンプレート
    • •条件付きコンパイルによって定義された製品ライン バリアント
  • リンク時のバインディング

  • 導入時の拘束力

  • 初期化時のバインディング

  • 実行時間

表 3.結合時間表 4.バインドされるもの表 5.結果
生成時間構文、バリアント、パターン、マッピングなど生成コード
言語とプラットフォームの設計プラットフォーム リソース タイプを含む、構文、エンティティ、および関係ソースコード
バージョン管理モジュールのソース ファイルモジュールバージョン
コンパイル時間モジュール内関係 (解除)モジュール
  • 大きい
構文、展開されたコードへのマクロ展開マクロ(ソースコード)
  • テンプレート
テンプレート パラメータテンプレート インスタンス
  • 条件付きコンパイルによって定義された製品ライン バリアントとインクルード
条件付きコンパイル、マクロ、インクルード、シンボリック リンク。コンポーネントバリアント
(静的) リンク時間デプロイ可能なコンポーネント内のコンポーネント内関係デプロイされたコンポーネント
展開時間リソースへのリソース名 (プラットフォーム固有の構成ファイルを使用)配備されたシステム
初期化時間コンポーネント インターフェイスへのコンポーネント実装。主要なプロセスとスレッド。動的リンク、動的ロード (プラットフォーム固有の構成ファイルを使用)システム
ランタイムユーザー入力、オブジェクト ファクトリ、仮想関数、関数ポインター、リフレクション、プロセスのインスタンス、オブジェクトのインスタンス、データのインスタンスなど。特定の実行パス

サブパート IV 抽象化レイヤー

抽象化レイヤーは、ドメイン固有およびアプリケーション固有の抽象化を表すメタモデル要素のセットと、既存のソフトウェア システムの構築プロセスに関連する成果物を定義します. 抽象化レイヤーのメタモデル要素は、さまざまなコンテナーとグループを提供します他のメタモデル要素に。

抽象化レイヤーは、次の 3 つの KDM モデルを定義します。

  • •構造
  • •概念的
  • •ビルド

4 Terms and Definitions

This subclause contains only those terms which are used in a specialized way throughout the KDM specification. The majority of terms in KDM are used either according to their accepted dictionary definitions or according to commonly accepted definitions that may be found in ISO glossaries or other well-known collections of software engineering terms. Some combinations of common terms used in KDM, while not meriting glossary definition, are explained for clarity in the context where they are used.

Abstraction: A view of an object that focuses on the information relevant to a particular purpose and ignores the remainder of the information.

Aggregation: a derived relationship between two elements that are groups of other elements that represents all individual relationships between the grouped elements of the two groups.

Architecture-Driven Modernization (ADM): ADM is the process of understanding and evolving existing software assets of a system of interest. ADM focuses at collecting, sharing, utilizing, transforming, presenting, maintaining and storing models of the architectural aspects of existing systems. ADM does not preclude source-to-source migrations (where appropriate), but encourages user organizations to consider modernization from an analysis and design perspective. In doing so, project teams ensure that obsolete concepts or designs are not propagated into modern languages and platforms.

Build: An operational version of a system or component that incorporates a specified subset of the capabilities that the final product provides.

Build process: a process of transforming of project code base into usable applications. The end result of a software build is a collection of files that constitute a product in a distributable package. In this case, package can mean a standalone application, Web service, compact disc, hotfix, or bug fix. Each step of a build process is a transformation performed by software running on a general purpose computer. A simple software build may involve compiling a single source code file into an executable code. A complex software build may involve orchestrating hundreds of versions of thousands of files with millions of lines of source code such that a correct executable code results from the compilation. The implementation of a system also involves deploying the build onto the system nodes, and applying appropriate configuration settings.

Component: a functionally or logically distinct part of a system. A component may be hardware or software and may be subdivided into other components. Often a component is a physical, replaceable part of a system that packages implementation and provides the realization of a set of interfaces. Such component represents a physical piece of implementation of a system, including software code (source, binary or executable) or equivalents such as scripts or command files.

Container: a model element that owns one or more distinct elements through the special"owns" ("contains") relationships between the container element and owned elements."Containment" relationships form a special group of the corresponding owned elements. No element has more than one container.

Domain: An area of knowledge or activity characterized by a set of concepts and terminology understood by practitioners in that area.

Element: one of the parts of a compound or complex whole. For example, a model element, a meta-model element.

Group: a number of model elements regarded as a unit formed by traceability relationships to a single distinct element. An element may be part of multiple groups, including a single group formed by the"containment" relationships between a container and its owned elements. An element is said to group together one or more elements, if these elements have traceability relationships to the element.

Hierarchy: an arrangement of model elements according to traceability relationships, where an element that"owns" or"group" other elements is considered at a higher level than the owned (grouped) elements.

Interface: (1) a shared boundary or connection between two dissimilar objects, devices or systems through which information is passed. The connection can be either physical or logical. (2) a named set of operations that characterize the behavior of an entity

Item: that which can be individually described or considered. See also Component, Element, Unit, Module.

KDM Entity: a meta-model element (as well as the corresponding model elements) that represents a thing of significance of the system of interest, about which information needs to be known or held. A KDM entity is an abstraction of some element of the system of interest that has a distinct, separate existence objective or conceptual reality, a self-contained piece of data that can be referenced as a unit. As a model element each KDM entity is an instance of some specific metamodel element and it is usually the endpoint of distinct KDM relationships.

KDM instance: a collection of KDM model elements that represent one or more views of the system of interest.

KDM model: a meta-model element (as well as the corresponding model elements) that is a container for a KDM view.

KDM Relationship: a meta-model element (as well as the corresponding model elements) that represents some semantic association between elements of the system of interest. All KDM relationships are binary. As a model element each KDM relationship is an instance of some specific meta-model element.

Meta-model: a special kind of model that specifies the abstract syntax of a modeling language. The typical role of a metamodel is to define the semantics for how model elements in a model get instantiated. A model typically contains model elements. These are created by instantiating model elements from a metamodel (i.e., metamodel elements).

Meta-model element: an element of a meta-model from which model elements are instantiated.

Model: a model represents a system of interest, from the perspective of a related set of concerns. The model is related to the system by an explicit or implicit isomorphism. Models are instances of MOF meta-models and therefore consist of model elements and links between them.

Model element: instance of a meta-model element.

Module: (1) A program unit that is discrete and identifiable with respect to compiling, combining with other units, and loading; for example, the input to, or output from, an assembler, compiler, linkage editor, or executive routine. (2) A logically separable part of a program.

Resource: any physical or virtual component of limited availability within a computer system available for a given purpose and managed by the runtime platform.

Runtime platform: the set of hardware and software components that implement the services utilized by the application software. A runtime system generally controls how several tasks are scheduled to run, and manages resources. Its provisions for the programmer typically form an Application Programming Interface- a set the well-documented ways of using the system.

Segment: A collection of data that corresponds to one or more coherent views of a system of interest that is stored or transferred as a unit.

Software artifact: A software artifact is a tangible machine-readable document created during software development. Examples are requirement specification documents, design documents, source code and executables.

Software asset: A software asset is a description of a partial solution (such as a component or design document) or knowledge (such as requirements database or test procedures) that engineers use to build or modify software products. A software asset is a set of one or more related artifacts that have been created or harvested for the purpose of applying that asset repeatedly in subsequent contexts. The asset consumer is an architect or a designer of any type of IT or business process solutions from solution business modeling, analysis (assets used are models) and design to application development (assets used are pieces of code).

Traceability: The degree to which a relationship can be established between two or more products of the development process, especially products having a predecessor-successor or master-subordinate relationship to one another; for example, the degree to which the requirements and design of a given software component match.

Unit: (1) a piece or complex of apparatus serving to perform one particular function (2) A software element that is not subdivided into other elements.

User interface: An interface that enables information to be passed between a human user and hardware or software components of a computer system.

View: A representation of a whole system from the perspective of a related set of concerns.

Viewpoint: A specification of the conventions for constructing and using a view. A pattern or template from which to develop individual views by establishing the purposes and audience for a view and the techniques for its creation and analysis.

Subpart I Infrastructure Layer

KDM is a large specification, since it provides an intermediate representation for several facets of knowledge about existing enterprise software systems. In order to manage the complexity of KDM, a small set of concepts was selected and systematically used throughout the entire specification. These concepts are defined in the so-called Infrastructure Layer. It consists of the following 3 packages:

  • • Core
  • • kdm
  • • Source

The Core package defines the fundamental meta-model element types and the corresponding constraints. Core package provides a set of types that determine each individual KDM meta-model element through subclassing. Each KDM meta-model element is a subclass of one of the classes defined in the Core package. From the meta-model perspective KDM is an entity-relationship representation. So, the two fundamental classes of the Core package are KDMEntity and KDMRelationship. An entity is a thing of significance, about which information needs to be known or held. A KDM entity is an abstraction of some element of an existing software system, that has a distinct, separate existence, a self-contained piece of data that can be referenced as a unit. Each KDM package defines several meta-model elements that represent specific entities for a particular KDM domain.

A relationship represents an association, linkage, or connection between entities that describes their interaction, the dependence of one upon the other, or their mutual interdependence. A KDM relationship represents some semantic association between elements of an existing software system. Each KDM package defines several meta-model elements that represent specific relationships for a particular KDM domain. All KDM relationships are binary.

KDM defines two special relationships:

  • • containment
  • • grouping

Some KDM entities are containers for other entities. There is a special container ownership (containment) relationship between a container and the entities that are directly owned by this container. Some KDM entities are groups of other KDM entities. There is a special group association (grouping) relationship between the group and the entities that are directly"grouped into" this group.

Core package defines an analysis mechanism, the so-called Aggregated Relations mechanism that brings together special relationships of containment and grouping and regular relationships of the entity-relationship model.

Core package defines a reflective API to KDM representation. Other KDM packages extend this API by specific operations, corresponding to specific facets of knowledge about existing software systems.

The Core package is aligned with the OMG SBVR specification, as it provides an abstraction of existing software systems in the form of terms (various KDM entities) and facts (various attributes of KDM entities, and relationships between KDM entities). Indeed, most of the KDM specification is a definition of a language- and platform-independent ontology of existing software systems. This alignment is important since KDM can be viewed as a standard vocabulary related to descriptions of existing software systems. SBVR rules can be written using this vocabulary to formally describe further properties of existing software systems.

The package with name"kdm" defines several elements that together constitute the framework of each KDM instance. The framework determines the physical structure of a KDM representation. The elements of the framework are present in every instance of KDM that represents a particular existing software system. From the framework perspective, each KDM representation consists of one or more Segments, where each Segment owns several KDM models. Each KDM package defines some specific type of KDM model, which addresses a certain specific facet of knowledge about existing software systems. Individual KDM implementations may support one or more selected KDM models, as defined in the KDM compliance section. KDM tools may use multiple KDM implementations to represent different facets of knowledge about the existing software system and integrate them into a single coherent representation. Further, KDM designs facilitate incremental implementations, where certain pieces of knowledge about the existing software is collected by analyzing more lower level KDM representations. According to this approach certain KDM tools may perform a"KDM enrichment" process, a"KDM to KDM transformation," where a tool analyzes the input KDM model and produces one or more additional Segments and Models, explicitly representing certain derived pieces of knowledge about the system.

The Source package defines the so called Inventory model, which represents the physical artifacts of an existing system as KDM entities as well as the mechanism of traceability links that provide associations between KDM elements and their"original" language-dependent representation in the source code of the existing software system, for which the KDM views are created. This is an important part of the KDM Infrastructure, because other KDM packages use this mechanism to refer to the source code and the physical artifacts of the existing software system.

Subpart II Program Elements Layer

The Program Elements Layer defines a large set of meta-model elements whose purpose is to provide a languageindependent intermediate representation for various constructs determined by common programming languages.

Packages of the Program Elements Layer define an architecture viewpoint for the Code domain.

  • • Concerns :
    • • What are the computational elements of the system?
    • • What are the modules of the system?
    • • What is the low-level organization of the computational elements?
    • • What are the datatypes used by the computational elements?
    • • What are the units of behavior of the system?
    • • What are the low-level relationships between the code elements, in particular what are the control-flow and dataflow relationships ?
    • • What are the important non-computational elements?
    • • How are computational elements and modules related to the physical artifacts of the system?
  • Viewpoint language :

    Code views conform to KDM XMI schema. The viewpoint language for the Code architectural viewpoint is defined by the Code and Action packages. It includes several abstract entities, such as AbstractCodeElement and CodeItem, several generic entities, such as Datatype, ComputationalObject and Module, as well as several concrete entities, such as StorableUnit, CallableUnit, CompilationUnit, and ActionElement. The viewpoint language for the Code architectural viewpoint also includes several relationships, which are subclasses of AbstractCodeRelationship and AbstractActionRelationship.

  • Analytic methods :

    The Code architectural viewpoint supports the following main kinds of checking:

    • • Composition (for example, what code elements are owned by a CompilationUnit, SharedUnit, or a CodeAssembly; what action elements are owned by a CallableUnit)?
    • • Data flow (for example, what action elements read from a given StorableUnit; what action elements write to a given StorableUnit; what action elements create dynamic instances of a given Datatype; what action elements address a particular StorableUnit; what data element are being read as actual parameters in a call)?
    • • Control flow (for example, what CallableUnit is used in a call; what action element is executed after the given action element; what action elements are executed before the given action element; what data element is used to dispatch control flow from a given action element; what action element is executed after the given element under what conditions; what is the exceptional flow of control; what action elements are executed as entry points to a given module or a CallableUnit)?
    • • Datatypes (for example, what is the datatype of the given storable unit; what is the base datatype of the given pointer type; what is the base datatype of the given element of the record type; what is the signature of the given CallableUnit)?

Other kinds of checking are related to the interfaces, templates, and pre-processor. All relationships defined in the Code model are non-transitive. Additional computations are required to derive, for example, all action elements that can be executed after the given action element, or all CallableUnits that a given action element can dispatch control to.

The KDM mechanism of aggregated relationship is used to derive relationships between KDM elements that own or reference various Code elements (usually, Module and CodeAssembly) based on the low-level relationship between individual Code elements.

  • • Construction methods :
    • • Code views that correspond to the KDM Code architectural viewpoint are usually constructed by parser-like tools that take artifacts of the system as the input and produce one or mode Code views as output.
    • • Construction of the Code view is determined by the syntax and semantics of the programming language of the corresponding artifact, and is based on the mapping from the given programming language to KDM; such mapping is specific only to the programming language and not to a specific software system.
    • • The mapping from a particular programming language to KDM may produce additional information (systemspecific, or programming language-specific, or extractor tool-specific). This information can be attached to KDM elements using stereotypes, attributes, or annotations.

Program Layer defines a single KDM Model, called CodeModel, and consists of the following KDM packages:

  • • Code
  • • Action

Code package defines Codeltems (named elements determined by the programming language, the so-called"symbols,""definitions," etc.) and structural relations between them. CodeItems are further categorized into ComputationalObject, Datatypes, and Modules. Action package defines behavioral elements and various behavioral relationships, which determine the control- and data- flows between code items.

Description of the Code package is further subdivided into the following parts:

  • • Code Elements representing Modules
  • • Code Elements representing Computational Objects
  • • Code Elements representing Datatypes
  • • Code Elements representing Preprocessor Directives
  • • Miscellaneous Code Elements

Data representation of KDM is aligned with ISO/IEC 11404 (General-Purpose Datatypes) standard. In particular, KDM provides distinct meta-model elements for"data elements" (for example, global and local variables, constants, record fields, parameters, class members, array items, and pointer base elements) and"datatypes." Each data element has an association"type" to its datatype. KDM distinguishes primitive datatypes (for example Integer, Boolean), complex userdefined datatypes (for example, array, pointer, sequence) and named datatypes (for example, a class, a synonym type). KDM meta-model elements corresponding to datatypes are subclasses of a generic class Datatype. KDM meta-model elements corresponding to data elements are subclasses of a generic class DataElement.

KDM model elements represent existing artifacts determined by a programming language. KDM meta-model elements provide sufficient coverage for most common datatypes and data elements, common to programming languages. KDM also provides several powerful generic extensible elements that can be further used with stereotypes to represent uncommon situations.

In addition to the type association, KDM relationship"HasType" is used to track named datatypes. Anonymous datatypes can be owned by the data element that uses it.

The meta-model elements of the Program Elements Layer uses the following naming conventions (whenever practical):

  • • suffix"Element" — usually designates a generic meta-model element.
  • • suffix"Type" — designates a meta-model element representing some datatype.
  • • suffix"Unit" — designates a concrete meta-model element.

Subpart III Runtime Resources Layer

This clause describes common patterns for representing the operating environment of existing software systems. The following are the common properties of the Runtime Resources Layer packages Data, UI, Platform, and Event:

  • • They provide modeling elements to represent"resources" (something managed by the runtime platform).
  • • They provide abstract"resource actions" to manage these resources.
  • • These actions are implemented by the program elements as one or more API calls to some external platform-specific packages.
  • • There is a binding involved between the actions and the resources.
  • • Resource may involve some"inverted" control in the form of callbacks and event handlers, allowing applications to be programmed in event-driven style.
  • • The content of the information flow involving the resource is associated with some data organization.
  • • Resource often has a certain state, and tracking the changes of the state over time may be an important concern in understanding the logic of the existing system.

Since Runtime Resources Layer packages capture high-value knowledge about the existing system and its operating environment, which may involve advance analysis and some manual expertise KDM is designed in such a way that the Runtime Resources Layer analysis can use KDM models from the Program Elements Layer as input and produce Runtime Resources Layer models as output. There should be no references from lower KDM layers to higher layers; therefore, new Runtime Resources Layer models can be built on top of existing Program Element layer models.

Packages of the Runtime Resources Layer package systematically uses the following KDM patterns:

  • • Each Runtime Resources Layer package defines entities and containers to represent specific"resources." Each package may define additional elements to represent additional concerns. For example, the Data package involves less resource definitions, and focuses on the representation of various data organization capabilities. The Event package provides the meta-model elements for representing state, state transitions caused by events. States, transitions, and events can be considered as runtime platform resources. The UI package provides the meta-model elements for representing user interfaces. User interfaces can also be considered runtime platform resources. The Platform package deals with conventional runtime platform resources, such as inter-process communication, the use of registries, management of data, etc.
  • • Each Runtime Resources Layer package defines specific structural relations between"resources." For example, the Platform package defines relationship BindsTo, which represents a logical association between two resources.
  • • Each Runtime Resources Layer package defines specific resource actions to represent manipulation of resource through API calls. Resource actions use the following KDM pattern. Each resource action is an entity of the base abstract class for the corresponding package. This class is named AbstractXXXElement, where"XXX" is the name of the package. So, the resource action is not a subclass of ActionElement, and this promotes modularity between KDM packages, each of which defines an independent KDM compliance point. However, each resource action owns one or more ActionElements through property called"abstraction." Each resource action also has the property called"implementation" that uses the KDM grouping mechanism to associate the resource action with one or more ActionElements owned by the Code model. The"implementation" group of the resource action represents the original API calls as they were represented in the Program Elements layer input model. The"abstraction" property uses KDM container mechanism to add the behavior counterparts to the API calls that represent the true logic of the resource operation, including the flow of data and control. The"abstracted" ActionElements are owned directly by the corresponding resource action, and are not part of any Code model.
  • • The nature of the resource-specific operation performed by a particular resource action is represented by the"kind" attribute of the resource actions. The resource action owns resource action relations through the"abstraction" action container. It is the owned"abstracted" action that is the direct owner of the resource action relationship.
  • •"abstraction" action container property is in fact systematically added to all elements of Runtime Resources Layer packages. This way each resource can use the meta-model elements defined in the Program Elements layer to specify behavior specific to that resource.
  • • The"abstraction" action container pattern is used to systematically represent the forms of"inverted" control provided by runtime platforms. This pattern can be separately referred to as the KDM Event pattern. Each Runtime Resources Layer package defines its own meta-model element for representing events. For example, the UI package defines the class UIEvent. The"abstraction" action container mechanism allows ActionElements to be added to event elements. Calls relation originating from such an abstracted action element represents the"callback" mechanism, provided by several runtime platforms.

Runtime Resources Layer packages are independent, however they can offer additional capabilities when more than one is implemented. In order not to enforce any particular order in which these packages should be implemented, KDM involves the following approach: resource action relationships are subclasses of the AbstractActionRelationship class from the Action Package. In the full KDM implementation that uses all packages, all resource actions are available for any ActionElement. Code models should not use the extended relationships. The extended resource action relationships can only be used by the actions in"abstraction" action containers in Runtime Resources Layer models. A notable example of this mechanism are the actions"HasState" defined in the Event package, which makes it possible to associate an element of an event model with any resource. Another example is the"HasContent" relation defined in the Data package, which allows associating an element of a data model with any resource.

  • • The"abstraction" action containers, available for each resource also allow arbitrary Flow relations between"resource actions" and between resources to provide abstractions of the flow between"resource actions."
  • • The Runtime Resources Layer patterns are aligned with the micro KDM, which allow precise modeling of behavior related to resources as the foundation for holistic high-fidelity analysis of existing software systems. It can be achieved by associating sets of precise micro KDM actions with"abstraction" action containers.

Additional Runtime concerns involve dynamic structures (instances of some logical entities and their relationships) that emerge at the so-called"run time" of the software system. For example, dynamic entities include processes and threads. Instances of processes and threads can be created dynamically and in many cases relations between the dynamically created instances of processes and threads are an essential part of the knowledge of existing systems. Pure logical perspective in that case may be insufficient.

When separation of concerns between application code and Runtime platform is considered, it is important to be clear about the so-called bindings and various mechanisms to achieve a binding or delay it.

A binding is a common way of referring to a certain irrevocable implementation decision. Too much binding is often referred to as"hardcoding." This often results in systems that are difficult to maintain and reuse. They are often also difficult to understand. Too little binding leads to dynamic systems, where everything is resolved at run time (as late as possible). This often results in systems that are difficult to understand and error-prone. Modern platforms excel in managing binding time. Usually binding is managed at deployment time.

A large number of software development practices is about efficient management of binding time, including portable adaptors, code generation, model-driven architecture. Efficient management of binding time is often called platform independence.

Binding time

  • • Generation time binding
  • • Language & platform design binding
  • • Versioning time
  • • Compile time binding, including
    • • macro expansion
    • • Templates
    • • Product line variants defined by conditional compilation
  • Link time binding

  • Deployment time binding

  • Initialization time binding

  • Run time

Table 3. Binding TimeTable 4. What is being boundTable 5. Result
Generation timeSyntax, variant, pattern, mapping, etc.Generated code
Language & platform designSyntax, entities and relations, including platform resource typesSource code
VersioningModule source filesModule version
Compile timeIntra-module relations (def-use)Module
  • Macro
Syntax, macro to expanded codeExpanded macro (source code)
  • Template
Template parametersTemplate instance
  • Product line variant defined by conditional compilation and includes
Conditional compilation, macro, includes, symbolic links.Component Variant
(static) Link timeIntra-component relations within deployable componentDeployed Component
Deployment timeResource names to resources (using platform-specific configuration files)Deployed System
Initialization timeComponent implementation to component interface; major processes and threads; dynamic linking, dynamic load (using platform-specific configuration files).System
Run timeUser input, object factory, virtual function, function pointer, reflection, instances of processes, instances of objects, instances of data, etc.Particular Execution Path

Subpart IV Abstractions Layer

Abstraction Layer defines a set of meta-model elements that represent domain-specific and application-specific abstractions, as well as artifacts related to the build process of the exsting software system. The meta-model elements of the Abstractions Layer provide various containers and groups to other meta-model elements.

Abstractions Layer defines the following 3 KDM Models:

  • • Structure
  • • Conceptual
  • • Build