分析設計 重要そうな作業手順メモ

UMLを使った分析設計の講習を受けた。忘れてしまわないうちにメモする。講習を受けるとなんとなくわかった気になるけどちょっとまとめてみるといろいろ疑問点がわいて来る。たしかに経験者が何人かいないとあっという間にプロジェクトが難航しそうだ。経験者がいないことの問題というのは、だれも作成したモデルを評価できないかららしいけれど、作業手順としても正しい手順を知っている人が何人か必要だ。さもなければメンバーの大半が今って何を何のためにやってるんだろうと目的を見失ってしまいそう。だからこそ、どの段階で何をどこまで詳細化すればいいのかといった目安やどこまで文書化すべきなのかといったガイドラインを決定するのが必要なのだろうけど、それを決定するのさえ難しそうだ。基本的にRUPを実行する場合、Rationalのツールを使わなければうまくいかないらしい。しかもかなり値がはるとか。うーんリスクが高い。でもRUPを使う使わないかかわらずオブジェクト指向設計で実現されたシステムを作るにはプロセスが必要なのは確かだろう。モデリングを重視したプロセスでないと機能単位にクラスが作成されてしまうだろうから。そもそもモデリングが出来るだけのオブジェクト指向技術があるのかどうかが問われるだろう、きっと。
分析設計は次のような流れで行われる。要求フェーズですでにユースケースモデルが作成されていることが前提。各工程のまとまりごとにレビューを行うことが大事。この流れを反復ごとに繰り返すことになる。

  • アーキテクチャ分析(アーキテクト)
    • レイヤ化を行う
    • 分析メカニズム(永続性/分散性/セキュリティなど)を洗い出す
    • 基本的な抽象概念(coreとなるクラス)を洗い出す
    • 基本的な抽象概念と分析メカニズムをマッピングする(どの概念に永続性が必要かなど)
    • ユースケースモデルを設計モデルにマッピングする(基盤となるところだけ)
  • ユースケース分析(設計者)
    • ユースケースから分析クラス(バウンダリ/コントロール/エンティティ)を洗い出す
    • シナリオの数だけ相互作用図を作成し、ユースケースの振る舞いを各クラスに割り付ける(シナリオと対比させやすいのでここでは主にシーケンス図を使用)
    • VOPCを作成する(責務、属性、関係、多重度に気をつける。分析段階で使用する関係は汎化/集約/関連の3つだけ)
    • 各クラスに分析メカニズムを規定する(どのクラスが永続性を必要とするかなど)
    • 個々のユースケースから導き出した分析クラス(群)を統合してひとつのVOPCを作成し、責務の重複などがないか確認する
  • アーキテクチャ設計(アーキテクト)
    • レイヤ構造を決定する
    • サブシステムを決定する
    • パッケージ構造を決定する(クラス間強度に着目する、またコラボレーション図からメッセージの頻度がわかりグルーピングの目安となる)
    • 設計者に提供するための永続性/分散性/並行性などのメカニズムを決定
  • ユースケース設計(設計者)
    • サブシステムインタフェースを取り込み相互作用図を作成する(外部とのインタフェースとなるバウンダリをサブシステムインタフェースとする)
    • すでに洗い出されているアーキテクチャカニズム(永続性/分散性など)をサブシステムとして1つずつ取り込む詳細な相互作用図を作成する(サブシステムとして取り込むことで複雑性を軽減する)
    • 個々のユースケースから導き出された設計モデルを統合しひとつの設計モデル(クラス図)を作成する
    • サブシステムの責務を振り分け、内部構造を決定し、サブシステムの依存関係を特定する(責務の振り分けは操作1つに対して1つ以上の相互作用図を作成して行う)
    • 個々のクラスを詳細化し(派生属性に注意)、クラス間の関係も詳細化する(誘導可能性、関連クラス、変態に注意)