今回から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を参照してください。
システム分析とは図1に示すように解決領域における分析モデルです。システム分析の後続作業である設計段階で、Relaxerに対応したモデルを導入します。このRelaxer対応設計モデルを効率的に作成するのが、Relaxerプロセスにおけるシステム分析の作業です。
Relaxerプロセスにおけるシステム分析の作業を分かりやすく表すと図2のようになります。システム分析では、要求分析で作成された以下の成果物を入力します。
ビジネス・ルール エンティティ・モデル 開発計画表 ユースケース記述 ユースケースモデル概要 そのほかの要求仕様 その結果、以下の成果物が作成されます。
エンティティ・モデル バリュー・モデル システム・モデル システム・モデルは、コンポーネントによるアプリケーションの全体構成をモデル化する静的モデルであり、クラス図として記述されます。ところで、システム分析は、ロバストネス分析とコンポーネント分析という2つの分析作業で構成されています。以下、それぞれの分析作業を解説しましょう。 ◇2.1 ロバストネス分析 ロバストネス分析は、ユースケース記述からシステムの基本的な構造を抽出する分析作業です。 Relaxerプロセスでは、図3に示す分析オブジェクトを用いてロバストネス分析を行います。通常のロバストネス分析では、アクターに加えて、バウンダリ、コントロール、エンティティの3つの分析オブジェクトを使用します。それに対してRelaxerプロセスでは、バリューを加えた4つの分析オブジェクトを使用します。
以上の分析オブジェクトは図4に示すように利用されます。
ロバストネス分析に入力するのは、以下に示す要求分析の成果物です。
ビジネス・ルール エンティティ・モデル 開発計画表 ユースケース記述 ユースケースモデル概要 そのほかの要求仕様 その結果、システム・モデル(ロバストネス図、シーケンス図)、エンティティ・モデルを出力します。 システム・モデルは、システムの全体構造をモデル化したものです。すべてのユースケースが動作する構造となります。また、エンティティ・モデルは、ドメイン分析で抽出した現実世界をモデル化し、それをリファインしたものです。 ◇2.2 コンポーネント分析 コンポーネント分析は、分析オブジェクトから分析コンポーネントを作成する作業です。UMLでは、論理モデル上のコンポーネントはサブシステムとして表現します。Relaxerプロセスでは、クラスにステレオタイプを設定してコンポーネントを表現します。コンポーネント分析への入力は、システム・モデル(ロバストネス図、シーケンス図)、エンティティ・モデルといったロバストネス分析の出力です。 そして、コンポーネント分析では、システム分析の成果物となる分析コンポーネントをコンポーネント・モデル、エンティティ・モデル、バリュー・モデル、システム・モデルとしてモデル化します。
ロバストネス図の例を図5に示します。これは要求分析の工程で作成したユースケース記述(表「ユースケース記述『図書の返却処理を行う』」)をロバストネス図で表現したものです。
ロバストネス分析を行うための原則を列記します。
バウンダリオブジェクトはコントロールオブジェクトとアクターとだけ通信できる エンティティオブジェクトはコントロールオブジェクトとだけ通信できる コントロールオブジェクトはバウンダリオブジェクトとエンティティオブジェクトと通信できる バリューオブジェクトは各オブジェクトが通信する際に流通する バリューオブジェクトについては、一方のオブジェクトが他方のオブジェクトを参照する際に渡すデータだけではなく、参照の結果、渡されるデータについても分析を行うと、後の分析・設計の有用な材料となります。 図5では、コントロールオブジェクト「蔵書情報への返却処理」がコントロールオブジェクト「蔵書情報の取得」を参照した結果、バリューオブジェクト「蔵書情報」が渡されています。 これらのことを踏まえてユースケース記述の基本フローを1つずつ分析していくと、図5のようなロバストネス図を作成することができるというわけです。
ロバストネス分析では、システムを構成する分析オブジェクトを抽出しました。これらの分析オブジェクトを機能単位でパッケージングしたものが分析コンポーネントです。ここでは、図書館システム全体の分析コンポーネントのうち「図書返却UIコンポーネント」「図書返却処理コンポーネント」「蔵書情報管理コンポーネント」を例に解説します。ここで抽出した分析コンポーネントは、次の設計の工程におけるRCDL(Relaxer Component Definition Language)となり、データはRELALX NGスキーマで表現します。 ◇図書返却UIコンポーネント コンポーネント「図書返却UI」は表「図書返却UI」の分析オブジェクトをパッケージングした分析コンポーネントです。
このコンポーネントは司書からの入力を受け付け、「図書返却処理」コンポーネントの対応機能を呼び出します。実装の際にはCUIやGUIで行うことになります。 ◇図書返却処理コンポーネント コンポーネント「図書返却処理」は表「図書返却処理」の分析オブジェクトをパッケージングした分析コンポーネントです。
コントロールオブジェクト「図書返却処理」がインターフェイスのオペレーションとして定義されます。このオペレーションの引数および復帰値を表「図書返却処理のインターフェイス」に示します。コントロールオブジェクト「蔵書情報への返却処理」「読書プロフィールへの返却処理」「貸し出し情報への返却処理」はコンポーネント内部でしか使用されないのでインターフェイス上では定義しません。
オペレーションの復帰値として、結果の成否をboolean型で通知します。また、バリューオブジェクト「返却処理する図書の蔵書ID」は一意に設定されたString型のデータで実装します。 ◇蔵書情報管理コンポーネント 蔵書情報管理コンポーネントは蔵書情報データベースにアクセスするための分析コンポーネントです。表「蔵書情報管理」に示す分析オブジェクトをパッケージングしています。ユースケース「図書の返却処理を行う」のロバストネス分析によって抽出された分析オブジェクト「蔵書情報取得」「蔵書情報更新」「蔵書情報」が含まれています。そのほかの分析オブジェクトは、ほかのユースケースに対してロバストネス分析を進めていく中で抽出されたオブジェクトです。
ユースケース「図書の返却処理を行う」に関連するオペレーションとして「蔵書情報取得」と「蔵書情報更新」が、蔵書情報管理のオペレーションとして定義されます。これらのオペレーションの引数および復帰値を表「蔵書情報管理のインターフェイス」に示します。
オペレーション「蔵書情報更新」の復帰値は、図書返却処理のインターフェイスと同様、結果の成否をboolean型で通知します。なお、オペレーション「蔵書情報取得」の引数はバリューオブジェクト「蔵書情報」です。ここで、蔵書情報のクラス図(図6)を作成します。
ここまでで、分析コンポーネントとクラス図でシステム分析レベルの静的モデルを作成しました。次のステップでは、シーケンス図でシステムの動的モデルを作成します。ここではユースケース「図書の返却処理を行う」をシーケンス図で表現してみましょう。 いままで分析してきた分析コンポーネント図のコンポーネントを使って、ロバストネス分析で表現されていることを写し取ると、機械的にシーケンス図を作成することができます。
今回はRelaxerプロセスによるサンプルシステム開発のシステム分析工程について解説を行いました。システム分析の前半では、ロバストネス分析を行い、要求分析によってモデル化された要求をソフトウェアで実現するための基本構造を構築しました。システム分析の後半では抽出した分析オブジェクトから分析コンポーネントを抽出し、シーケンス図を作成して動的モデルを構築しました。 次回は設計・実装段階に移行します。今回の成果物を利用して、Relaxerによる実際の開発を行っていきましょう。
|
![]() [an error occurred while processing this directive] |