CIMapを使ったシステム設計
最初のサンプルはプログラム・レベルの設計ですが、CIMapは、もっと大雑把なモデリングを目的としたもので、
業務システムの初期設計や業務プロセスのモデリングなどに使用することができます。
CIMapを使ったシステム設計は以下のような流れになります。
サンプル(sample2.cimap)を示しながら、作業内容について簡単に説明していきます。サンプルはかなり適当に作っていますので、設計そのものについては突っ込まないでください。(^^;)
システム・コンテキストの作成

まず、設計/分析対象と外部との境界を明確化します。ここでは、”システムを使用するユーザー”、”連携する外部システム”、”外部とやりとりするインタラクション(サービス/機能)” を定義します。(ユースケースにあたります)
なお、各々のエレメントについて以下のような内容を押さえておくと、非機能要件のもとになる制約などとして扱えます。
- ユーザー/外部システム
- 数、ロケーション、対応インターフェース、サービス時間など
- インタラクション
- 提供時間/RPO/RTOなどの利用可能度要件、頻度(トランザクション量)、Submit/Receiveするデータ量 など
CIMapエディターでは各エンティティ(or エレメント)の”詳細” プロパティにこれらを記入します。
コンポーネントの展開

システム・コンテキストから順次、コンポーネントを展開・詳細化することによって、機能的な論理分割を行います。
この際、上位のコンポーネント図上の周辺エレメントとの整合性を維持しながら展開を行います。こうすることで、複数の担当者で作業分担する場合でも
全体を確認しながら、各担当者間の意識をあわせることができます。
コンポーネントをどのような単位に分割するかは、設計者の考えによると思います。作者自身は各コンポーネントにどんなデータをカプセレーションするか、ということを意識して分割しています。
コンポーネントを展開し、詳細化する過程で、その他のエンティティも同様に展開・詳細化が必要になってきます。CIMapエディターでは エンティティの階層は <エンティティ>ダイアログから ”エンティティ・ツリー”を使用して管理します。
配置ユニット/ノード マトリックスの作成

コンポーネント分割が完了したら、末端のコンポーネントをさらに物理的なノード(ハードウェア、最近では仮想マシン?)に配置する単位(配置ユニット(DU: Deployment Unit))に分割します。たとえば、CIMap上のコンポーネント(論理的な機能分割)を、アプリケーション実行モジュール/使用するデータ、といった形で、各々独立したDUとして分割します。そして各DUをどの物理ノードに配置するかを決めていきます。小規模な構成ではひとつのノードに同居させるかもしれませんし、複数コンポーネントのDUをひとつのノードに集約して運用する(統合DBなど)、といったケースも考えられます。
また、パッケージ製品/フレームワークなど、具体的な実装に使うものを考慮しながら、DUを識別していきます。
CIMapエディターでは ”エンティティ・リストの作成” で、コンポーネントのレベル付リストが作成できます(CSV形式)。これを表計算ソフトなどに取り込んで編集します。
さらにこのマトリックスを使って、コンポーネントのDUとは別に、運用(監視/ジョブ制御/バックアップなど)関連のエージェントなどの DUを追加し、どのノードに配置するかを記述することもできます。
物理ノード配置図の作成

ネットワーク・セグメントなどを考慮し、配置ユニット/ノード マトリックスで導出した物理ノードの配置図を作成します。(実際にはマトリックスと配置図は並行に考慮しながら作業します)。また、配置図上にクラスター構成(負荷分散構成)、HA構成(Active/Standby)などの冗長化構成についても記述します。
この図はCIMapエディターを流用して書いています(各エレメントのもともとの定義は無視)。一般のプレゼンテーション作成ソフトの方が見栄えがよいでしょうが、これくらいシンプルでも必要な内容は伝わると思います。(ネットワークの担当者には不十分かも)
全体を通じて
このように、システム全体の外部インターフェースを表すシステム・コンテキストから、それを実現するための物理構成まで、一貫した流れで、整合性を持って設計を進めることが重要だと考えています。分析・設計などを進めて行くと、”木を見て森を見ず” になってしまいがちです。全体の品質向上のために、常にコンポーネントの階層構造を意識して、インタラクションの整合性を取りながら進めることが重要だと思います。(ちなみに、このエディターのアイコン(3重の角丸四角形)はコンポーネントの階層構造を表しています。)