はじめに
統一モデリング言語(UML)は、ソフトウェアシステムの構造と振る舞いを分析し、設計し、文書化し、伝達するために使用される標準化された視覚的モデリング言語です。開発者、アーキテクト、ビジネスアナリスト、プロジェクトマネージャー、およびその他の関係者がシステムがどのように機能するかを理解できるよう、共通の記号セットと図示技法を提供します。
UMLはプログラミング言語ではありません。その代わりに、ソフトウェアのための視覚的な設計図として機能します。チームは「UML図」を使用して、要件を記述し、システムアーキテクチャを計画し、ビジネスプロセスをモデル化し、既存のアプリケーションを文書化し、システムの異なる部分がどのように相互作用するかを説明することができます。
例えば、電子商取引アプリケーションには、ユーザー、製品、ショッピングカート、注文、支払いサービス、配送サービスなどが含まれる可能性があります。UML図はこれらの要素を表現し、それらの関係を示し、顧客が注文を出したときに何が起こるかを説明することができます。

UMLは、オブジェクト管理グループ(OMG)によって業界標準として管理されており、国際標準としても採用されています。現代のUMLは一般的にUML 2.xを指し、これは広範な構造図と行動図のコレクションを定義しています。例えば、UML 2.2では、構造モデリングと行動モデリングに均等に分割された14種類の図タイプを定義しました。
UMLとは何ですか?
UMLは、ソフトウェア集約型システムのための汎用モデリング言語です。以下を表現するための標準化された記法を提供します:
-
システムコンポーネント
-
クラスとオブジェクト
-
ユーザー要件
-
ワークフローとビジネスプロセス
-
オブジェクト間で交換されるメッセージ
-
システムの状態と遷移
-
ソフトウェア展開環境
-
パッケージとコンポーネント間の依存関係
UMLの目的はソースコードを置き換えることではありません。むしろ、実装の前、中、後にわたって、チームがシステムについて考え、コミュニケーションを取るのを支援します。
UMLモデルは、異なる詳細レベルで作成できます:
-
概念レベル:実装の詳細を含まずに、主要なビジネス概念を記述します。
-
分析レベル:要件、責任、およびシステムの動作を探求します。
-
設計レベル:クラス、インターフェース、コンポーネント、および相互作用を定義します。
-
実装レベル:ソースコードおよびデプロイメントインフラストラクチャに密接に対応する詳細を表します。
なぜUMLは重要なのか?
UMLソフトウェアシステムがソースコードや長大な文書のみで記述されると理解が困難になるため、有用です。
複雑なシステムを簡素化する
図は、大規模システムの視覚的な概要を提供します。例えば、クラス図は、数ページにわたるテキストよりも、数十のクラスとその関係をより明確に示すことができます。
コミュニケーションを向上させる
開発者、デザイナー、アーキテクト、テスター、ビジネスアナリスト、および顧客は、異なる技術的背景を持っている可能性があります。UMLは、システム要件や設計決定について議論するための共通の視覚的言語を提供します。
計画を支援する
チームは、コードを書く前にワークフロー、クラス、サービス、およびデプロイメント環境をモデル化できます。これにより、早期段階で要件の欠落、重複する責任、およびアーキテクチャ上の問題を明らかにすることができます。
ソフトウェアの文書作成を支援します
UML 図は長期的な技術文書として機能できます。これらは新しい開発者が既存のシステムを理解するのを助け、変更が必要な場合に保守チームを支援します。
より良い設計を促進します
モデルを作成することで、チームは以下のような問いを検討せざるを得なくなります:
-
どのオブジェクトがタスクの責任を負うのか?
-
コンポーネントはどのように接続されているのか?
-
操作が失敗した場合、何が起こるのか?
-
どのクラスが互いに依存しているのか?
-
システムは異なるイベントにどのように応答するのか?
主要な UML の概念

クラス
クラスは、一群のオブジェクトが共有する属性と操作を定義する設計図です。
例えば、注文クラスには以下が含まれる可能性があります:
-
属性:
注文ID,注文日、およびステータス -
操作:
calculateTotal()およびcancelOrder()
オブジェクト
オブジェクトはクラスの実際のインスタンスです。もしOrderがクラスであれば、order1001はそのクラスから作成された特定のオブジェクトである可能性があります。
属性
属性は、クラスまたはオブジェクトが保持するデータを表します。
例は次の通りです:
-
name -
price -
emailAddress -
orderStatus
操作
操作は、クラスが提供する振る舞いを表します。操作は、プログラミング言語ではメソッドとして実装されることが多いです。
例は次の通りです:
-
addItem() -
submitPayment() -
sendNotification()
アクター
アクターとは、システムと相互作用する外部の役割です。アクターは人、別のシステム、または外部デバイスになり得ます。
例は次の通りです:
-
顧客
-
管理者
-
決済ゲートウェイ
-
倉庫システム
インターフェース
インターフェースは、クラスまたはコンポーネントが提供する約束のある一連の操作を定義します。インターフェースは依存関係を減らし、交換可能な実装をサポートします。
関係
関係は、UML要素がどのように接続されているかを記述します。一般的な関係には、関連、依存、一般化、集約、および合成が含まれます。
多重度
多重度は、関係に参加できるオブジェクトの数を指定します。
一般的な例は次の通りです:
-
1: ちょうど1つ -
0..1: 0 または 1 -
*: 多数 -
1..*: 1 以上 -
0..*: 0 以上
例えば、1 人の顧客が 0 件または多数の注文を行う場合があります。これは以下のように表すことができます:
顧客 1 -------- 0..* 注文
UML ダイアグラムの分類
UML ダイアグラムは通常、2 つの主要なカテゴリに分類されます:
-
構造図
-
行動図
構造図は、システムが何で構成されているかを記述します。行動図は、システムが何を行い、時間とともにどのように振る舞うかを記述します。

構造 UML ダイアグラム
構造図は、システムの静的な組織構造を表します。クラス、オブジェクト、コンポーネント、パッケージ、ノード、および関係性に焦点を当てます。
1. クラス図

クラス図は、最も広く使用されている UML ダイアグラムの一つです。これは以下を示すことで、システムの静的な構造を表します:
-
クラス
-
属性
-
操作
-
インターフェース
-
関係
-
可視性
-
多重度
簡略化された電子商取引のクラスモデルは、次のようになる可能性があります:
顧客
- customerId
- name
+ placeOrder()
注文
- orderId
- orderDate
- status
+ calculateTotal()
製品
- productId
- name
- price
+ updatePrice()
考えられる関係には、以下が含まれます:
顧客 1 -------- 0..* 注文
注文 1 -------- 1..* 製品
より詳細な設計では、注文項目クラスが注文と製品.
クラス図は、以下に役立ちます:
-
ドメインモデリング
-
オブジェクト指向設計
-
データベースおよびアプリケーションの計画
-
責任の特定
-
継承とインターフェースの説明
クラス図はクラスを一般的に記述するのに対し、オブジェクト図はそれらのクラスの特实例を示します。Visual Paradigm では、クラス図をオブジェクト指向システム内のクラス、属性、操作、および関係のモデルとして説明しています。
2. オブジェクト図
オブジェクト図は、特定の時点におけるシステムのスナップショットを示します。これは一般的なクラスではなく、実際のオブジェクトインスタンスを表します。

例えば:
customerA:Customer
name = "Alex"
order1001:Order
status = "Paid"
オブジェクト図は、以下を示す必要がある場合に役立ちます:
-
実行時のオブジェクトの状態
-
データ関係の例
-
特定の使用例
-
クラスインスタンスがどのように接続されているか
クラス図では、顧客が多数の注文をできることが示されるかもしれません。オブジェクト図では、customerAが現在所有しているorder1001およびorder1002.
3. コンポーネント図

コンポーネント図は、交換可能なソフトウェアコンポーネントの構成と依存関係を示します。
電子商取引のコンポーネント図には、以下が含まれる可能性があります:
-
Webアプリケーション
-
注文サービス
-
商品サービス
-
決済サービス
-
通知サービス
-
データベース
例:
Webアプリケーション --> 注文サービス
注文サービス --> 決済サービス
注文サービス --> 通知サービス
注文サービス --> 注文データベース
コンポーネント図は特に、以下に役立ちます:
-
マイクロサービスアーキテクチャ
-
サービス指向システム
-
API設計
-
アプリケーションアーキテクチャ
-
サービスの境界と依存関係の可視化
4. デプロイメント図

デプロイメント図は、ソフトウェアが実行される物理的または仮想環境を表します。
以下が表示される場合があります:
-
クライアントデバイス
-
Web サーバー
-
アプリケーションサーバー
-
データベースサーバー
-
クラウドノード
-
コンテナ
-
ネットワーク接続
-
デプロイされたソフトウェアアーティファクト
例:
顧客デバイス
|
v
Web サーバー
|
v
アプリケーションサーバー
|
v
データベースサーバー
デプロイメント図は、アーキテクトがソフトウェアがどこで実行され、インフラストラクチャコンポーネントがどのように通信するかを理解するのに役立ちます。
5. パッケージ図

パッケージ図は、関連するモデル要素をパッケージに整理し、それらのパッケージ間の依存関係を示します。
プロジェクトには、以下のようなパッケージが含まれる場合があります:
-
ユーザー -
カタログ -
注文 -
支払い -
通知
例:
order --> user
order --> catalog
order --> payment
payment --> notification
パッケージ図は、次のために役立ちます:
-
大規模なモデルの整理
-
モジュールの依存関係の表示
-
アーキテクチャ層の特定
-
望ましくない結合の防止
6. 複合構造図

複合構造図は、クラス、コンポーネント、またはその他の構造化された分類子の内部構造を示します。
次のものを表示できます:
-
内部部品
-
ポート
-
コネクタ
-
内部の共同作業
-
内部要素間の関係
例えば、OrderControllerは、次のものを含んだり接続したりできます:
-
OrderService -
OrderRepository -
PaymentService -
NotificationService
コンポーネント図が一般的に高レベルのコンポーネントに焦点を当てるのに対し、複合構造図は分類子の内部組織に焦点を当てます。
7. プロファイル図
プロファイル図は、特定のドメインや技術のためにUMLを拡張するものです。それは、ステレオタイプ、タグ付き値、および制約を通じて、専門的なモデリング要素を定義します。

例えば、プロファイルは以下のようなステレオタイプを導入する場合があります:
<<entity>>
<<controller>>
<<service>>
<<microservice>>
標準的なUML記法を以下に適応させる必要がある場合、プロファイル図は有用です:
-
Webアプリケーション
-
エンタープライズアーキテクチャ
-
リアルタイムシステム
-
組み込みシステム
-
特定のプログラミングフレームワーク
-
業界固有のモデリング
プロファイル図は入門的なリストからしばしば省略されますが、標準的なUML 2.xの図タイプに含まれています。UML 2.xは、一般的に7つの構造型と7つの行動型の図タイプを持つと説明されています。
行動型UML図
行動型図は、システムの動的な振る舞いを記述します。それらはワークフロー、イベント、相互作用、状態変化、および応答を示します。
1. ユースケース図

ユースケース図は、外部のアクターからの視点で、システムの機能要件を示します。
典型的なオンラインショッピングシステムには、以下のアクターが含まれる場合があります:
-
顧客
-
管理者
-
決済ゲートウェイ
-
配送サービス
考えられるユースケースには以下が含まれます:
-
アカウント登録
-
ログイン
-
商品を検索
-
商品をカートに追加
-
注文を確定
-
支払いを行う
-
配送を追跡
-
商品を管理
ユースケース図は、実装の詳細を記述せずに、システムが何を行うかの上記レベルの概要を提供します。
重要な関係には以下が含まれます:
-
関連:アクターをユースケースに接続します。
-
包含:他のユースケースによって常に再利用される動作を示します。
-
拡張:オプションまたは条件付きの動作を示します。
-
一般化:アクターまたはユースケース間の特殊化を示します。
例えば、注文を行うは以下を含みます支払いを行う、一方で割引を適用するは以下を拡張します注文を行う.
2. アクティビティ図

アクティビティ図は、プロセスまたはユースケースにおける制御の流れを表します。順序付きおよび並行のワークフローをモデル化するのに役立ちます。
例:注文を行う
開始
|
製品を閲覧
|
製品をカートに追加
|
チェックアウトに進む
|
支払い詳細を入力
|
支払いは成功しましたか?
/
いいえ はい
| |
エラーを表示 注文を作成
|
確認を送信
|
終了
アクティビティ図は以下を表すことができます:
-
アクション
-
意思決定
-
マージ
-
ループ
-
並列アクティビティ
-
開始ノードと終了ノード
-
責任のためのスイムレーン
スイムレーンは、各アクションを実行するアクターまたはシステムコンポーネントを示すことができます。例えば、一つのレーンは顧客を、もう一つは注文サービス、さらに別のレーンは決済ゲートウェイを表すことができます。
3. シーケンス図

シーケンス図は、オブジェクトまたはコンポーネントが時間順のシーケンスでどのように通信するかを示します。
例:注文の作成
顧客 -> WebApp: 注文を送信
WebApp -> OrderService: createOrder()
OrderService -> PaymentService: authorizePayment()
PaymentService --> OrderService: 支払い承認
OrderService -> NotificationService: sendConfirmation()
OrderService --> WebApp: orderCreated
WebApp --> 顧客: 確認を表示
シーケンス図には次の要素が含まれます:
-
参加者
-
ライフライン
-
メッセージ
-
アクティベーションバー
-
応答メッセージ
-
条件
-
ループ
-
代替案
-
並列インタラクション
これらは、API 呼び出し、サービス間の相互作用、認証フロー、およびエラー処理を説明する際に特に有用です。
4. 通信図

通信図は、以前のUMLバージョンではコラボレーション図と呼ばれており、オブジェクト間の関係とそれらの間で交換されるメッセージを強調します。
シーケンス図のような垂直タイムラインに主に焦点を当てるのではなく、次の点に焦点を当てます:
-
オブジェクト
-
オブジェクト間のリンク
-
番号付きメッセージ
-
コラボレーション構造
例:
1: submitOrder()
顧客 ----------------> Webアプリ
2: createOrder()
Webアプリ ------------------> 注文サービス
3: authorizePayment()
注文サービス -------------> 支払いサービス
オブジェクトのコラボレーション構造が正確な視覚的タイムラインよりも重要である場合、通信図は有用です。
5. 状態機械図

状態機械図は、オブジェクトまたはシステムがイベントに応じてどのように状態を変化させるかを示します。
注文は以下の状態を通過する可能性があります:
新規 -> 支払い待ち -> 支払い済み -> 発送済み -> 配達完了
|
v
キャンセル
遷移はイベントまたは条件でラベル付けできます:
支払い待ち -- 支払い承認 --> 支払い済み
支払い待ち -- 支払い失敗 --> 支払い失敗
状態機械図は次のために有用です:
-
注文のライフサイクル
-
ユーザーアカウントの状態
-
ワークフローの状態
-
デバイスの動作
-
ネットワーク接続状態
-
承認プロセス
オブジェクトの動作が現在の状態に大きく依存する場合、これらは特に価値があります。
6. タイミング図

タイミング図は、1 つ以上の要素の状態または値が時間とともにどのように変化するかを示します。
主に以下に使用されます:
-
リアルタイムシステム
-
組み込みシステム
-
通信プロトコル
-
ハードウェアとソフトウェアの協調
-
パフォーマンスに敏感な相互作用
例えば、タイミング図は以下の間の関係を示すことができます:
-
デバイス信号
-
コントローラの状態
-
センサー値
-
定義された時間間隔における応答
7. 相互作用概要図

相互作用概要図は、アクティビティスタイルの制御フローと相互作用図を組み合わせることで、相互作用の概要を提供します。
以下を示すことができます:
-
主要なインタラクションの順序
-
インタラクションフラグメント間の分岐
-
並列のインタラクションパス
-
シーケンス図または通信図への参照
例えば、オンライン注文のインタラクション概要図は、以下を接続する可能性があります:
-
顧客認証
-
商品選択
-
チェックアウトインタラクション
-
支払い承認
-
注文履行
この図は、プロセスが単一のシーケンス図で説明するには複雑すぎる場合に役立ちます。
UML リレーションシップ
意味のある図を作成するには、UML リレーションシップを理解することが不可欠です。

アソシエーション
アソシエーションは、2 つの要素間の構造的な接続を表します。
顧客 -------- 注文
これは、顧客と注文が関連していることを示しています。
指向性アソシエーション
指向性アソシエーションは、一方方向へのナビゲーション可能性を示します。
注文 ------> 支払い
これは、注文が支払いオブジェクトを知っているか使用しているが、その逆は必ずしも真ではないことを示唆しています。
一般化
一般化は継承または特殊化を表します。
ユーザー
/
顧客 管理者
ここで、顧客および管理者は、ユーザー.
依存関係
依存関係は、ある要素が一時的に別の要素を使用または依存していることを示します。
OrderService - - - -> PaymentGateway
支払いゲートへの変更は注文サービスに影響を与える可能性があります。
集約
集約は、部品が独立して存在できる全体と部分の関係を表します。
チーム ◇------ プレーヤー
チームが解散しても、プレーヤーは存続し続ける可能性があります。
合成
コンポジションは、強い全体と部分の関係を表します。部分は、そのライフサイクルにおいて全体に依存するのが一般的です。
Order ◆------ OrderItem
An OrderItemは注文の一部とみなされ、その注文の外では意味をなさない場合があります。
実現
実現は、クラスまたはコンポーネントがインターフェースを実装することを示します。
PaymentService - - -|> PaymentProcessor
The PaymentServiceは、PaymentProcessorインターフェースによって定義された振る舞いを提供します。
UMLの例:オンラインショッピングシステム
オンラインショッピングアプリケーションを考えてみましょう。
主要なアクター
-
顧客
-
管理者
-
決済ゲートウェイ
-
配送サービス
主なユースケース
-
アカウント作成
-
商品閲覧
-
商品をカートに追加
-
注文を確定
-
支払いを行う
-
配送を追跡
-
在庫管理
想定されるクラス
Customer
Product
ShoppingCart
CartItem
Order
OrderItem
Payment
Shipment
想定されるサービスコンポーネント
User Service
Catalog Service
Cart Service
Order Service
Payment Service
Shipping Service
Notification Service
相互作用の例
顧客が注文を行う場合:
-
顧客がカートを送信します。
-
ウェブアプリケーションが注文サービスにリクエストを送信します。
-
注文サービスが商品を検証します。
-
支払いサービスが支払いを承認します。
-
注文が保存されます。
-
配送サービスに通知が送られます。
-
通知サービスは確認メールを送信します。
この単一のビジネスプロセスは、複数のUML図で表現される可能性があります:
-
ユースケース図:顧客が注文を提出できることを示します。
-
アクティビティ図:ワークフローと意思決定ポイントを示します。
-
シーケンス図:サービス間のメッセージを示します。
-
クラス図:~を示します
顧客,注文,製品、および関連するクラス。 -
コンポーネント図:関与するサービスを示します。
-
デプロイメント図:それらのサービスが実行される場所を示します。
適切なUML図の選び方
| モデリングの目的 | 推奨されるUML図 |
|---|---|
| クラスとその関係性を示す | クラス図 |
| 実際のオブジェクトインスタンスを示す | オブジェクト図 |
| システムの機能性を記述する | ユースケース図 |
| ビジネスまたはシステムのワークフローをモデル化する | アクティビティ図 |
| 時間経過に伴って交換されるメッセージを示す | シーケンス図 |
| オブジェクトの協力を示す | 通信図 |
| ライフサイクルと状態変化を示す | 状態マシン図 |
| ソフトウェアモジュールまたはサービスを示す | コンポーネント図 |
| 物理的なデプロイメントを示す | デプロイメント図 |
| モデル要素を整理する | パッケージ図 |
| 分類子の内部構造を示す | 複合構造図 |
| 時間経過に伴う変化を示す | タイミング図 |
| 複数の相互作用を要約する | 相互作用概要図 |
| 専門分野向けにUMLを拡張する | プロファイル図 |
良いモデリングの慣行は、特定の質問に答える図のみを選択することです。考えられるすべてのUML図を作成すると、ドキュメントが不必要に複雑になる可能性があります。
UMLとソフトウェア開発ライフサイクル
UMLはソフトウェア開発の多くのフェーズをサポートできます。
要件分析
ユースケース図はアクターとシステム機能の特定を支援します。アクティビティ図はビジネスプロセスとワークフローを明確にできます。
システム分析
クラス図はドメイン概念を表現できます。シーケンス図は、アナリストがユースケースがどのように満たされるかを理解するのを支援できます。
アーキテクチャ設計
コンポーネント図、パッケージ図、およびデプロイメント図は、アプリケーションとそのインフラストラクチャの構造を定義するのに役立ちます。
詳細設計
クラス図、シーケンス図、状態機械図、および複合構造図は、実装責任とオブジェクトの相互作用を記述できます。
開発
開発者は、クラス、サービス、API、およびデータベース構造を実装する際に、モデルを参照として使用できます。
テスト
テスターは、ユースケース、アクティビティ図、およびシーケンス図からシナリオを導き出すことができます。状態機械図は、有効および無効な状態遷移を特定するのに役立ちます。
保守
UML図は既存システムのドキュメントを提供し、チームが提案された変更の影響を評価するのを支援します。
Visual Paradigmを使用したUML図の作成
Visual Paradigmは、UML図の作成をはじめ、その他のモデリングおよび開発活動をサポートするビジュアルモデリングおよびソフトウェア設計プラットフォームです。そのUML機能には、クラス、シーケンス、ユースケース、アクティビティ、コンポーネント、デプロイメント、ステートマシン、パッケージ、オブジェクト、複合構造図などの図が含まれます。
UMLプロジェクトの開始
Visual Paradigmにおける実用的なワークフローは以下の通りです:
-
新しいプロジェクトを作成します。
-
モデルを「
要件,ドメインモデル,サービス」、および「デプロイメント. -
システムの機能を捉えるためにユースケース図を作成します。
-
重要なワークフローのためにアクティビティ図またはシーケンス図を追加します。
-
ドメインモデル用のクラス図を作成します。
-
アーキテクチャのためにコンポーネント図およびデプロイメント図を追加します。
-
ステークホルダーと図を確認する。
-
システムが進化するにつれてモデルを更新する。
-
必要に応じて図をエクスポートするか、ドキュメントを生成する。
クラス図の作成
クラス図を作成するには:
-
新しいクラス図を作成する。
-
主要なドメインクラスを追加する。
-
属性と操作を追加する。
-
適切な関係を用いてクラスを接続する。
-
多重度を追加する。
-
必要に応じて継承とインタフェースを示す。
-
関連するクラスが追跡しやすいように図を配置する。
-
要件に対してモデルを検証する。
例えば、オンラインストアのクラス図には以下が含まれる場合があります:顧客, 注文, 商品, 支払い、および出荷.
ユースケース図の作成
ユースケース図は、以下の手順で作成できます:
-
外部アクターを特定する。
-
システムの主要な機能をリスト化する。
-
システム境界を追加する。
-
ユースケースを境界内に配置する。
-
アクターを、そのアクターが関与するユースケースに接続する。
-
再利用やオプションの動作を明確にする場合のみ、include 関係または extend 関係を追加する。
シーケンス図の作成
シーケンス図を作成する際:
-
モデル化するシナリオを特定する。
-
アクターまたは開始コンポーネントを追加する。
-
参加するオブジェクトまたはサービスを追加する。
-
左から右へ並べる。
-
メッセージを時系列順に追加する。
-
代替案、ループ、およびエラー条件をモデル化する。
-
すべてのメッセージが現実的な責任に対応していることを確認してください。
コラボレーションとドキュメント
Visual Paradigm は、視覚的モデリング機能、チームコラボレーション機能、ドキュメントサポート、およびモデリングをより広範なソフトウェア開発活動に接続するための統合機能を提供します。そのプラットフォームは、共同での図レビューとコメント機能もサポートしています。
一部のバージョンやワークフローでは、コードエンジニアリング、データベースモデリング、モデルの整理、図のエクスポート、ドキュメント生成などの機能も提供される場合があります。これらの機能は、すべてのモデルに自動的に追加するのではなく、プロジェクトの要件に応じて選択すべきです。
効果的な UML モデリングのためのベストプラクティス
目的を持ってモデリングする
すべての図は明確な問いに答えるべきです。例えば:
-
顧客はどのように注文を行うのか?
-
どのサービスが支払いサービスに依存しているのか?
-
注文はどのような状態に入り得るのか?
-
どのクラスが注文ドメインに属するのか?
図に焦点を絞る
システム全体を一つの図にまとめないでください。大規模なモデルは、要件、ドメイン構造、振る舞い、アーキテクチャ、デプロイメントなどのためのより小さなビューに分割してください。
一貫した名前を使用する
図全体で同じ名前を使用してください。ある図でコンポーネントを「OrderService」と呼んでいる場合、別の図では「OrderManager」と呼んではなりません。それらが本当に異なる要素でない限り。
適切な詳細レベルを選択する
ステークホルダー向けの図は、通常、実装図よりも技術的な詳細を少なく含めるべきです。聴衆に関連する場合を除き、メソッドのシグネチャ、データベースのフィールド、またはフレームワーク固有の詳細を追加しないでください。
不要な関係は避ける
考えられるすべての依存関係を追加すると、図が読みづらくなる可能性があります。意味のある設計情報を伝える関係を含めてください。
重要となる箇所で多重性を示す
多重性は、ビジネスルールやデータ関係の明確化に役立ちます。例えば、注文が1件以上の注文項目を含むことを示すことは、単に2つのクラスを接続するよりも情報量が多いです。
要件に対して図を検証する
モデルは、システムを正確に表している場合にのみ有用です。図を要件、テストシナリオ、ソースコード、およびステークホルダーからのフィードバックと比較してください。
図を生きたドキュメントとして活用する
主要な設計決定が変更されたら、UML図を更新してください。時代遅れの図は、図がないことよりも混乱を招く可能性があります。
相補的な図を組み合わせる
単一のUML図でシステムのすべての側面を説明することはできません。クラス図は構造を示す一方で、シーケンス図はその構造が特定シナリオでどのように振る舞うかを説明します。
避けるべき一般的な間違い
-
UMLをソースコードとして扱う
-
特定の目的なしに図を作成する
-
概念と実装の詳細を説明なしに混ぜる
-
継承を使用するべきではなく、コンポジションの方が適切な場合に継承を使用する
-
重要な関係から多重性を省略する
-
1つの図に要素を多すぎ追加する
-
誤ったincludeおよびextend関係を使用する
-
エラーフローや代替フローをモデル化しない
-
異なる図が不一致の名前を使用することを許可する
-
視覚的に整理されているという理由だけで、図が正しいと仮定すること
UML 2.x と図の種類の数
初期のUMLバージョンでは、一般的に図の種類の数は少なかった。UML 2.x言語を拡張し、以下の追加図を導入または形式化した:
-
複合構造図
-
通信図
-
インタラクション概要図
-
タイミング図
また、ステートチャート図をステートマシン図に名称変更した。一般的なUML 2.xの分類には14種類の図が含まれる:7種類の構造図と7種類の行動図である。行動グループには、ユースケース図、アクティビティ図、ステートマシン図、シーケンス図、通信図、インタラクション概要図、タイミング図が含まれる。構造グループには、クラス図、オブジェクト図、コンポーネント図、複合構造図、デプロイメント図、パッケージ図、プロファイル図が含まれる。
したがって、UML 2.xが13種類の図しか持たないと記述するリストは、一般的に使用される14種類図の分類においては不十分である。
結論
UMLは、ソフトウェアシステムの理解、設計、文書化のための実用的な視覚言語を提供する。チームが要件を伝達し、アーキテクチャを探求し、オブジェクト間の関係をモデル化し、ワークフローを記述し、実行時の動作を説明することを支援する。
最も頻繁に使用される図は通常以下の通りである:
-
機能要件のためのユースケース図
-
静的構造のためのクラス図
-
ワークフローのためのアクティビティ図
-
インタラクションのためのシーケンス図
-
アーキテクチャのためのコンポーネント図
-
インフラのためのデプロイメント図
-
ライフサイクルの動作のための状態機械図
Visual Paradigmは、以下のツールを提供することで、このモデリングプロセスをサポートできます:UML 図の作成、モデルの整理、チームメンバーとの共同作業、および技術文書の作成。最も効果的なアプローチは、すべての UML 図をむやみに使用するのではなく、重要な設計上の疑問を明確にする図を選択することです。
一貫して使用され、実際のシステムと整合性が保たれている場合、UML は単なる記号の集合を超え、ビジネス要件、ソフトウェアアーキテクチャ、実装、テスト、および長期的な保守を結びつける共通の設計言語となります。












