第3回
Relaxerプロセスのシステム分析
永山葉子、浅海智晴
2003/8/22
1 Relaxerプロセスの6つのワークフロー |
今回から2回にわたり、Relaxerプロセスによるシステム開発の流れを、サンプルアプリケーション「図書館システム」開発を例に解説します。この図書館システムはRelaxerプロセスの効果を検証するために作成したもので、仮想図書館における貸し出し業務をコマンドラインベースのアプリケーションでシステム化することを想定しています。
なお、この図書館システムは「平成14年度IPA未踏ソフトウェア」事業採択の「RelaxerStudioプロジェクト」の成果として仕様書にまとめられているので詳細を知りたい方はそちらを参照してください(http://www.ipa.go.jp/NBP/14nendo/14mito/index.html)。
Relaxerプロセスは第2回「Java開発を加速するRelaxerプロセスの真髄」の解説にあるように「ドメイン分析」「要求分析」「システム分析」「設計」「実装」「テスト」の6つのワークフローで構成されます。ドメイン分析と要求分析の工程は一般的なオブジェクト指向開発プロセスの工程と違いはありませんが、システム分析以降の工程はRelaxerを使用することを前提にチューニングされています。今回は図書館システムのシステム分析の工程を中心に解説を行い、設計と実装の工程については次回に解説を行います。
一般に、要求分析ではユースケース記述とユースケース図による要求定義、つまり「何を(What)」に相当する部分の分析を行います。一方、システム分析は、要求分析によってモデル化された要求の基本構造をソフトウェアでどのように構築するか分析します。つまり、「どのように(How)」を分析するのがシステム分析です。
なお、スペースの都合上、図書館システムすべてについての解説を行うことはできません。解説を行うことができなかった部分については、http://www.relaxer.org/process/sample/libraryを参照してください。
2 システム分析とは |
システム分析とは図1に示すように解決領域における分析モデルです。システム分析の後続作業である設計段階で、Relaxerに対応したモデルを導入します。このRelaxer対応設計モデルを効率的に作成するのが、Relaxerプロセスにおけるシステム分析の作業です。
図1 モデル体系 |
Relaxerプロセスにおけるシステム分析の作業を分かりやすく表すと図2のようになります。システム分析では、要求分析で作成された以下の成果物を入力します。
図2 Relaxerプロセスにおけるシステム分析の作業 |
-
用語集
ビジネス・ルール
エンティティ・モデル
開発計画表
ユースケース記述
ユースケースモデル概要
そのほかの要求仕様
その結果、以下の成果物が作成されます。
-
コンポーネント・モデル
エンティティ・モデル
バリュー・モデル
システム・モデル
システム・モデルは、コンポーネントによるアプリケーションの全体構成をモデル化する静的モデルであり、クラス図として記述されます。ところで、システム分析は、ロバストネス分析とコンポーネント分析という2つの分析作業で構成されています。以下、それぞれの分析作業を解説しましょう。
◇2.1 ロバストネス分析
ロバストネス分析は、ユースケース記述からシステムの基本的な構造を抽出する分析作業です。
Relaxerプロセスでは、図3に示す分析オブジェクトを用いてロバストネス分析を行います。通常のロバストネス分析では、アクターに加えて、バウンダリ、コントロール、エンティティの3つの分析オブジェクトを使用します。それに対してRelaxerプロセスでは、バリューを加えた4つの分析オブジェクトを使用します。
図3 分析オブジェクトを用いてロバストネス分析を行う |
以上の分析オブジェクトは図4に示すように利用されます。
図4 分析オブジェクトの利用 |
ロバストネス分析に入力するのは、以下に示す要求分析の成果物です。
-
用語集
ビジネス・ルール
エンティティ・モデル
開発計画表
ユースケース記述
ユースケースモデル概要
そのほかの要求仕様
その結果、システム・モデル(ロバストネス図、シーケンス図)、エンティティ・モデルを出力します。
システム・モデルは、システムの全体構造をモデル化したものです。すべてのユースケースが動作する構造となります。また、エンティティ・モデルは、ドメイン分析で抽出した現実世界をモデル化し、それをリファインしたものです。
◇2.2 コンポーネント分析
コンポーネント分析は、分析オブジェクトから分析コンポーネントを作成する作業です。UMLでは、論理モデル上のコンポーネントはサブシステムとして表現します。Relaxerプロセスでは、クラスにステレオタイプを設定してコンポーネントを表現します。コンポーネント分析への入力は、システム・モデル(ロバストネス図、シーケンス図)、エンティティ・モデルといったロバストネス分析の出力です。
そして、コンポーネント分析では、システム分析の成果物となる分析コンポーネントをコンポーネント・モデル、エンティティ・モデル、バリュー・モデル、システム・モデルとしてモデル化します。
3 ロバストネス分析詳細 |
ロバストネス図の例を図5に示します。これは要求分析の工程で作成したユースケース記述(表「ユースケース記述『図書の返却処理を行う』」)をロバストネス図で表現したものです。
図5 ロバストネス図の例 |
ユースケース名 | 図書の返却処理を行う |
アクター | 司書 |
概要 | 司書が返却された図書の返却処理を行う |
事前条件 | 未処理の返却図書がある |
基本フロー |
|
事後条件 | 図書館システムは司書に処理が完了したことを通知している 読書プロフィール、蔵書情報、貸出し情報が更新されている |
代替フロー | |
関連ユースケース | |
表:ユースケース記述「図書の返却処理を行う」 |
ロバストネス分析を行うための原則を列記します。
-
アクターはバウンダリオブジェクトとだけ通信できる
バウンダリオブジェクトはコントロールオブジェクトとアクターとだけ通信できる
エンティティオブジェクトはコントロールオブジェクトとだけ通信できる
コントロールオブジェクトはバウンダリオブジェクトとエンティティオブジェクトと通信できる
バリューオブジェクトは各オブジェクトが通信する際に流通する
バリューオブジェクトについては、一方のオブジェクトが他方のオブジェクトを参照する際に渡すデータだけではなく、参照の結果、渡されるデータについても分析を行うと、後の分析・設計の有用な材料となります。
図5では、コントロールオブジェクト「蔵書情報への返却処理」がコントロールオブジェクト「蔵書情報の取得」を参照した結果、バリューオブジェクト「蔵書情報」が渡されています。
また可能であればこの段階で、どのようなエラーメッセージが発生するのかを分析しておくことも有効です。
これらのことを踏まえてユースケース記述の基本フローを1つずつ分析していくと、図5のようなロバストネス図を作成することができるというわけです。
コラム:ロバストネス分析の目的 |
ロバストネス分析の目的はユースケースに登場するオブジェクトを抽出することですが、ロバストネス分析と同時に下記のことも行うことが可能になります。
ドメイン分析時に見逃しているオブジェクトの識別 また、生産性からいうと、ロバストネス分析を省略した場合、必要となるオブジェクトが見つけられない可能性があり、後に深刻な問題につながる可能性があります。ロバストネス分析を行うことで、上流工程の中でこのような問題を回避することが可能となります。 |
4 コンポーネント分析詳細 |
ロバストネス分析では、システムを構成する分析オブジェクトを抽出しました。これらの分析オブジェクトを機能単位でパッケージングしたものが分析コンポーネントです。ここでは、図書館システム全体の分析コンポーネントのうち「図書返却UIコンポーネント」「図書返却処理コンポーネント」「蔵書情報管理コンポーネント」を例に解説します。ここで抽出した分析コンポーネントは、次の設計の工程におけるRCDL(Relaxer Component Definition Language)となり、データはRELALX NGスキーマで表現します。
◇図書返却UIコンポーネント
コンポーネント「図書返却UI」は表「図書返却UI」の分析オブジェクトをパッケージングした分析コンポーネントです。
種類 | 分析オブジェクト | 機能 |
バウンダリ | 図書返却処理 | 司書からの図書返却処理要求を受け付ける |
表 図書返却UI |
このコンポーネントは司書からの入力を受け付け、「図書返却処理」コンポーネントの対応機能を呼び出します。実装の際にはCUIやGUIで行うことになります。
◇図書返却処理コンポーネント
コンポーネント「図書返却処理」は表「図書返却処理」の分析オブジェクトをパッケージングした分析コンポーネントです。
種類 | 分析オブジェクト | 機能 |
コントロール | 図書返却処理 | 図書返却処理のロジック |
蔵書情報への返却処理 | 図書返却処理で使われる内部処理 | |
読書プロフィールへの返却処理 | 図書返却処理で使われる内部処理 | |
貸出し情報への返却処理 | 図書返却処理で使われる内部処理 | |
バリュー | 返却処理する図書の蔵書ID | 図書返却処理に用いられるデータ |
表 図書返却処理 |
コントロールオブジェクト「図書返却処理」がインターフェイスのオペレーションとして定義されます。このオペレーションの引数および復帰値を表「図書返却処理のインターフェイス」に示します。コントロールオブジェクト「蔵書情報への返却処理」「読書プロフィールへの返却処理」「貸し出し情報への返却処理」はコンポーネント内部でしか使用されないのでインターフェイス上では定義しません。
オペレーション | 引数 | 復帰値 |
図書返却処理 | 蔵書ID | 結果の成否 |
表 図書返却処理のインターフェイス |
オペレーションの復帰値として、結果の成否をboolean型で通知します。また、バリューオブジェクト「返却処理する図書の蔵書ID」は一意に設定されたString型のデータで実装します。
◇蔵書情報管理コンポーネント
蔵書情報管理コンポーネントは蔵書情報データベースにアクセスするための分析コンポーネントです。表「蔵書情報管理」に示す分析オブジェクトをパッケージングしています。ユースケース「図書の返却処理を行う」のロバストネス分析によって抽出された分析オブジェクト「蔵書情報取得」「蔵書情報更新」「蔵書情報」が含まれています。そのほかの分析オブジェクトは、ほかのユースケースに対してロバストネス分析を進めていく中で抽出されたオブジェクトです。
種類 | 分析オブジェクト | 機能 |
コントロール | 新規ID取得 | 新規ID取得のロジック |
蔵書情報追加 | 蔵書情報追加のロジック | |
蔵書情報検索 | 蔵書情報検索のロジック | |
蔵書情報取得 | 蔵書情報取得のロジック | |
蔵書情報更新 | 蔵書情報更新のロジック | |
エンティティ | 蔵書情報 | 蔵書情報を格納するデータベース |
バリュー | 蔵書情報検索条件 | 蔵書情報検索に用いるデータ |
蔵書情報のリスト | 蔵書情報検索に用いるデータ | |
蔵書情報 | 蔵書情報追加、蔵書情報検索、蔵書情報取得、蔵書情報更新に用い られるデータ | |
表 蔵書情報管理 |
ユースケース「図書の返却処理を行う」に関連するオペレーションとして「蔵書情報取得」と「蔵書情報更新」が、蔵書情報管理のオペレーションとして定義されます。これらのオペレーションの引数および復帰値を表「蔵書情報管理のインターフェイス」に示します。
オペレーション | 引数 | 復帰値 |
新規IDの取得 | 新規登録図書のISBN | 蔵書ID |
蔵書情報追加 | 蔵書情報 | 結果の成否 |
蔵書情報検索 | 蔵書情報検索条件 | 蔵書情報のリスト |
蔵書情報取得 | 蔵書ID | 蔵書情報 |
蔵書情報更新 | 蔵書情報 | 結果の成否 |
表 蔵書情報管理のインターフェイス |
オペレーション「蔵書情報更新」の復帰値は、図書返却処理のインターフェイスと同様、結果の成否をboolean型で通知します。なお、オペレーション「蔵書情報取得」の引数はバリューオブジェクト「蔵書情報」です。ここで、蔵書情報のクラス図(図6)を作成します。
図6 蔵書情報のクラス図 |
ここまでで、分析コンポーネントとクラス図でシステム分析レベルの静的モデルを作成しました。次のステップでは、シーケンス図でシステムの動的モデルを作成します。ここではユースケース「図書の返却処理を行う」をシーケンス図で表現してみましょう。
いままで分析してきた分析コンポーネント図のコンポーネントを使って、ロバストネス分析で表現されていることを写し取ると、機械的にシーケンス図を作成することができます。
5 まとめ |
今回はRelaxerプロセスによるサンプルシステム開発のシステム分析工程について解説を行いました。システム分析の前半では、ロバストネス分析を行い、要求分析によってモデル化された要求をソフトウェアで実現するための基本構造を構築しました。システム分析の後半では抽出した分析オブジェクトから分析コンポーネントを抽出し、シーケンス図を作成して動的モデルを構築しました。
次回は設計・実装段階に移行します。今回の成果物を利用して、Relaxerによる実際の開発を行っていきましょう。
IT Architect 連載記事一覧 |