 |
使えるUML 第4回 |
2007.5.9 掲載
枠組みを使用してとらえる
「物事を分けてとらえる」をテーマにお送りしておりますが、今回は関連して「枠組みを使用してとらえる」ということについて考えてみたいと思います。
UMLは標準化および統一された表記法を提供しており、どのようなソフトウェア開発にも適用することができます。その一方で、UMLをどのタイミングでどの粒度で適用していくのかはそれぞれのプロジェクトに任されています。しかし、こうしたUMLを利用する上での枠組みがUML自体にはないことにより、自由すぎてどのようにモデリングして良いものか途方にくれてしまう方も多いのではないでしょうか。
◇開発プロセスという枠組み
こうしたUMLの適用方法の枠組みは、ソフトウェア開発では一般に開発プロセスによって定められます。例えばどの工程でどのダイアグラムをどの粒度でどの範囲を記述するのかといったことです。たとえUMLを利用したとしても、適用方法が良くなければ使い物にならないモデルになってしまいますので、UML とその適用方法である開発プロセスは車輪の両輪であり、お互いを補完するものだといえます。こうした開発プロセスが提供する枠組みがあることで、必要な部分に意識を集中させることができ、効率良くモデリングを行うことができるのです。
開発プロセスは多様で、開発プロセス全体を説明することは困難ですので、今回はその中に登場することの多い手法のひとつであるロバストネス分析※を使用します。しかし、ロバストネス分析を学ぶことが今回の目的ではありません。今回の目的は枠組みがモデリングにあたえる影響をロバストネス分析を通して感じていただくことです。
◇システム内部の役割という枠組み
多くの開発プロセスには「要求定義」「分析」「設計」「実装」といった工程が存在します。一般にUMLを利用した要求定義の工程では、ユースケースとそのユースケース記述および概念レベルのクラス図を作成します。ロバストネス分析はこれらのインプットを基にして分析工程で行います。
ロバストネス分析では、「バウンダリ」「コントロール」「エンティティ」という枠組みでシステムをとらえることによって、システム内部の基本的な構造を抽出していきます。ロバストネス分析を行う目的は、概念レベルのクラス図とユースケースを洗練し、設計工程で使用するクラスを識別するための基礎を手に入れることです。
| 構成要素 |
表記法 |
説明 |
| バウンダリ |
|
システムとアクタの境界で作用するクラス。具体的には、画面や外部システムアクセスを担当する。
|
| コントロール |
|
ユースケースで表現されるシステムとしての機能を提供するクラス。
一般にユースケース記述でのシステムとの相互作用が行われるステップに対して1操作を提供し、関連する操作をまとめて1クラスとすることが多い。
|
| エンティティ |
|
システム内の情報を意味し属性および振る舞いを保持する。一般にデータベース等を利用して永続化されることが多い。
|
表1 ロバストネス図の構成要素
システムを表1のような役割で分離した構成要素としてとらえ、下位の工程である設計につなげていく事によって、変更に強いシステムになることが知られています。例えばバウンダリは、そこへアクタとの相互作用を押し込めることによって、システムの本質(この場合コントロールおよびエンティティ)を保護します。またコントロールは、ユースケース特有の振る舞いとエンティティが本質的に持つ振る舞いを切り分ける助けとなります。
◇ダイアグラム間の整合性という枠組み
ロバストネス分析は、ユースケースを詳しく説明したユースケース記述ごとに行っていきます。
今回は説明のために、単純なセミナー管理システムを例として使用します。そして「セミナーの受講の申込みを登録する」ユースケースを考えてみましょう。以下は、ユースケース記述です。
| 項目 |
内容 |
| 事前条件 |
受講者はユーザー情報登録済みのユーザーとしてログインしていること。
|
| 基本系列 |
- 受講者は、システムに対してセミナーおよび実施日を選択して、受講の登録を行う。
- システムは、登録内容の確認(最大受講者数のチェックなど)を行う。
- [登録内容に問題がない場合]システムは、登録内容を保存し、受講者に受講確認メールを送信する。
|
※もちろん実務では、より多くの項目をユースケース記述として記述する必要があります。
表2 ユースケース記述
また以下の図は、概念レベルのクラス図と、ロバストネス図で表現したものです。
図1 概念レベルのクラス図
図2 ロバストネス分析
概念レベルのクラス図に現れるクラスがこのエンティティに対応しなければなりません(名前が同じになります)。ということは、エンティティはこのクラスの中から選択して記述していけば良い事になります。逆に、エンティティがどの概念レベルのクラスにも該当しない場合には、概念モデルへ追加するなどして修正する必要があります。このように、ダイアグラム間の整合性が枠組みとなってお互いの記述を助け、また整合性を通してお互いが洗練されていくのです。
ロバストネス分析の結果は、設計工程でも利用されます。設計工程では、アーキテクチャが適用されたシーケンス図を、ロバストネス分析と同じユースケース単位で作成することが一般的です。ロバストネス分析を行うことにより、システム内部のメッセージのやり取りをシーケンス図で記述しやすくなります。これは、ロバストネス分析が概念的なシステムの内部の構造をあらわしており、登場するクラスとその関連が、実際にシステム内部に登場するオブジェクト間の相互作用と類似するからです。
図3 ロバストネス図とその周囲のダイアグラムの整合性
この図は、ロバストネス分析が仲介役となってダイアグラム(図)間に必要な整合性が存在することを俯瞰した図です。このようにそれぞれのダイアグラムは工程あるいは視点により異なりながらも、それらの間には何らかの形で整合性をとっていることが理解頂けると思います。もちろん今回の例は説明のために単純になっています。実際のシステムではより多くのダイアグラムや画面・帳票レイアウトなどが作成され、そしてそれらの間にはより多くの整合性が存在します。
◇まとめ
今回の記事では、以下のことを見てきました。
- 枠組みがあることで、思考を集中させ効率的なモデリングを行うことができる。
- 開発プロセスはUMLへ思考の枠組みを与えるため、お互いになくてはならないものであり、モデリングにおける車輪の両輪といえる。
- UMLダイアグラムは単体で記述されるものではなく、システムへの視点の違いや工程間の粒度の違いによって記述され、それぞれのダイアグラム間で整合性を取らねばならない。しかし、ダイアグラム間の整合性を利用することにより、それぞれのダイアグラムの記述を助け、また洗練させる手立てとなる。
枠組みを使用して、モデリングを行っていくことを感じていただけたでしょうか?
そしてその利点までも理解いただけたなら嬉しく思います。
◇書籍紹介
ロバストネス分析に関して詳しく学習したい方は、弊社が翻訳を行いました「ユースケース入門」をご参照ください。
| ユースケース入門 〜ユーザマニュアルからプログラムを作る〜 |
 |
【著作】 ダグ・ローゼンバーグ/ケンドール・スコット
【翻訳】 株式会社テクノロジックアート
【監訳】 長瀬 嘉秀/今野 睦
【出版】 株式会社ピアソンエデュケーション
|
また、UMLによる設計/開発・支援に関しましては、弊社テクノロジックアートで提供しておりますトレーニングコースや、コンサルティングサービスをご活用いただけます。
■筆者紹介 山下 智也/Tomonari Yamashita 株式会社テクノロジックアート テクニカルデプト UMLモデリングチーム
|