de_DEen_USes_ESfa_IRfr_FRid_IDjapl_PLpt_PTru_RUvizh_CNzh_TW

Visual Paradigm と VPasCode を用いた UML 実践ガイド

UML(統一モデリング言語)は、システムの構造と振る舞いを記述するための標準化された方法です。チームはこれを用いて要件の議論、ソフトウェアの設計、意思決定の文書化を行います。UML はプログラミング言語ではなくモデリング言語であり、図はモデルを伝達しますが、実装がモデルと一致することを自動的に保証するものではありません。

このガイドでは、オンラインショッピングシステムを継続的な例として使用します。主な UML 図の種類と、Visual Paradigmによる視覚的モデリングとVPasCodeによるテキストベースの図を扱います。

1. 図が答えるべき問いから始める

描画する前に、読者が理解すべきことを決定してください:

  • ユーザーは何ができるか?ユースケース図を使用してください。

  • シナリオ中に何が起こるか?シーケンス図またはアクティビティ図を使用してください。

  • ドメインを構成する概念と関係は何か?クラス図を使用してください。

  • ソフトウェアは、デプロイ可能または交換可能な部品にどのように分割されるか?コンポーネント図とデプロイメント図を使用してください。

  • あるオブジェクトは時間とともにどのように変化するか?状態機械図を使用してください。

すべての問いに一度に答えようとする図は、通常、読みづらくなります。一つの混雑した概要図よりも、複数の焦点を絞った図を好んでください。

2. UML 図のファミリー

UML 2.x には 14 の標準図タイプが含まれており、通常は構造図と振る舞い図に分類されます。インタラクション図は振る舞い図の部分集合です。

14種類のUML図の概要

ファミリー 図 表示に適している
構造 クラス クラス、属性、操作、および関係
構造 オブジェクト 特定のインスタンスとリンクのスナップショット
構造的 コンポーネント ソフトウェアコンポーネントとそれらの依存関係またはインターフェース
構造的 複合構造 分類子の内部にある部品、ポート、およびコネクタ
構造的 パッケージ モデル要素がどのようにグループ化され、互いに依存しているか
構造的 デプロイメント ハードウェアまたは実行環境にマッピングされたソフトウェア成果物
構造的 プロファイル UML拡張、ステレオタイプ、およびタグ付き値
行動的 ユースケース アクター、目標、およびシステム範囲
行動的 アクティビティ ワークフロー、意思決定、並列作業、および責任レーン
行動的 状態マシン オブジェクトの状態とイベントトリガーによる遷移
相互作用 シーケンス 参加者間で時間経過とともに交換されるメッセージ
相互作用 コミュニケーション 参加者とそれらのメッセージリンク、ネットワーク構造の強調
相互作用 タイミング 時間軸に沿った状態または値の変化
相互作用 相互作用の概要 相互作用シナリオを接続する高レベルのフロー

プロジェクトで14種類すべてを必要とすることはめったにありません。多くのアプリケーション設計では、ユースケース図、クラス図、シーケンス図、アクティビティ図、コンポーネント図、デプロイメント図が強力な出発点となります。

3. 最も有用な図、eコマースの例付き

ユースケース図:目標とシステム境界

ユースケース図は、画面レイアウトや内部コードではなく、ユーザーの目標を記述します。オンラインストアの場合、アクターには以下が含まれる可能性があります:顧客, 決済プロバイダー、および倉庫サービス。ユースケースには以下が含まれる可能性があります:商品の閲覧, 注文の作成, 注文の支払い、および配送の追跡.

使用<<include>>ユースケースが常に別の必要な動作を呼び出す場合に使用します。使用<<extend>>基本ユースケースに追加されるオプションまたは条件付きの動作に使用します。システム境界を明確に保ち、読者がシステムと外部アクターを区別できるようにしてください。

アクティビティ図:ワークフローと意思決定

アクティビティ図は、分岐や並行作業を伴うプロセスに有用です。チェックアウトフローは以下のようになるかもしれません:

  1. カートと住所を検証する。

  2. 送料と税金を計算する。

  3. 保留中の注文を作成する。

  4. 支払いの承認を要求する。

  5. 支払いが成功した場合、注文を確認し、履行を通知する。

  6. 支払いが失敗した場合、失敗を表示し、注文を確認済みとしない。

分岐には分岐ノードと結合ノードを、並行作業にはフォークノードとジョインノードを、顧客、店舗、外部プロバイダー間で責任が変化する場合はスイムレーンを使用する。

シーケンス図:時間の経過に伴う一つのシナリオ

シーケンス図は、参加者とそれらが交換するメッセージを示します。特に、サービスの境界、呼び出し順序、エラーケースを明確にするのに役立ちます。支払いの拒否や在庫の不足などの結果に対する代替パスを追加してください。

@startuml
actor Customer
participant "Storefront" as UI
participant "Order Service" as Orders
participant "Inventory Service" as Inventory
participant "Payment Provider" as Payment

Customer -> UI: submit checkout
UI -> Orders: placeOrder(cart, address)
Orders -> Inventory: reserve(items)

alt items available
    Inventory --> Orders: reservation confirmed
    Orders -> Payment: authorize(total)
    alt payment approved
        Payment --> Orders: approved
        Orders --> UI: order confirmed
        UI --> Customer: show confirmation
    else payment declined
        Payment --> Orders: declined
        Orders -> Inventory: release reservation
        Orders --> UI: payment failed
        UI --> Customer: show payment error
    end
else items unavailable
    Inventory --> Orders: reservation failed
    Orders --> UI: item unavailable
    UI --> Customer: show availability error
end
@enduml

この例は PlantUML 構文を使用しています。これは動作のスケッチであり、すべてのタイムアウト、リトライ、またはセキュリティルールを指定したものではありません。それらが設計にとって重要になったときに、それらの詳細を追加してください。

クラス図:ドメイン構造

クラス図は型とその関係性を記述します。小さな注文モデルには以下が含まれるかもしれません:

  • 顧客

  • 注文

  • 注文行

  • 商品

  • 支払い

責任の理解を助ける場合は、属性と操作を表示してください。数量ルールを明確にするために多重度を使用します:例えば、1 つの注文には 1 つ以上の注文行オブジェクトが含まれますが、各注文行は 1 つの製品.

一般的な関係型の種類:

  • 関連:一般的な構造的なリンク。

  • 継承/一般化:あるクラスが別のクラスの特殊化された種類である。

  • 集約:部品が独立して存在できる全体と部分の関係;控えめに使用する。

  • 合成:部分のライフサイクルが全体に紐付く、強い全体と部分の関係。

  • 依存:ある要素が別の要素を使用する、または依存する。

コマースモデルにおいて、注文行は、通常、1 つの注文に属するものとしてモデル化されるが、製品は特定の注文とは無関係に独立して存在する。ドメインの実際のライフサイクルとルールを反映する関係を選択すること。

状態機械図:ライフサイクルルール

オブジェクトの許可された遷移が重要である場合、状態機械を使用する。注文は以下のような遷移を経る可能性がある:

保留中 → 支払い待ち → 確認済み → 履行済み

また、以下のような状態に遷移する可能性もある:キャンセル済みまたは支払い失敗。トリガーイベントまたはガード(例:支払い承認または[在庫可能]. この図は、無効な遷移を明らかにする可能性があります。例えば、履行済みの注文をキャンセルできるかどうかなどです。

コンポーネント図とデプロイメント図:ソフトウェアとランタイム

「コンポーネント図」は、ストアフロント、注文サービス、在庫サービス、支払いアダプターなどのソフトウェアの責任と依存関係を示します。モジュール化と統合境界について議論する際に役立ちます。

「デプロイメント図」は、ソフトウェアが実行される場所を示します。例えば、ブラウザ、アプリケーションランタイム、データベース、外部支払いプロバイダーなどです。ランタイムトポロジーについて議論するために使用し、詳細なネットワーク構成については使用しません。

4. 適切にモデル化する:実践的な慣習

  • 各図に明確なタイトルと単一の目的を与えてください。

  • ドメイン言語を一貫して使用し、同じ概念に異なる名前を考案しないようにしてください。

  • 図は、意図したサイズで読み取れるように小さく保ってください。

  • 図の問いに答える詳細のみを含めてください。

  • 重要な関連付けとメッセージフローにラベルを付けてください。

  • 数量ルールが重要になる場合、関連付けに多重度を追加してください。

  • 前提条件、制約、未解決の決定については注記を使用してください。

  • 図全体で名前と責任を一貫させてください。

  • 確認されたものと、提案されたもの、またはまだ不明なものを区別してください。

  • 重要な設計決定や動作の変更があった場合は、図を更新してください。

UMLをコミュニケーションの補助ツールとして扱ってください。ラベル、前提条件、または範囲が不明確な場合、図は構文上は有効であっても誤解を招く可能性があります。

5. Visual Paradigm の使用

Visual Paradigm はグラフィカルモデリングに適しています。キャンバス上で UML 要素を作成して配置し、関連する図を整理し、ビジュアル編集を通じてモデルを洗練させることができます。その製品資料には、ビジュアルモデリング機能の一つとして UML モデリングが記載されています。

実践的なワークフロー:

テキストからアーキテクチャへ:ビジュアルパラダイムの生成AIでUMLモデリングを加速 - ビジュアルパラダイムブログ

  1. プロジェクトを作成するモデル化しようとしているシステムまたは境界領域のために。

  2. 要件と範囲から始めてください。ユーザー、外部システム、および主要な目標を特定してください。

  3. ユースケース図を作成する境界と主要な相互作用を確立するために。

  4. 動作図を追加する最もリスクや不確実性が高いシナリオに対して。

  5. クラスモデルを構築するドメイン概念とそのルールを中心に。

  6. コンポーネント図とデプロイメント図を追加するアーキテクチャやランタイム配置について議論が必要な場合。

  7. 関係者とレビューを行う。名前、スコープ、代替フロー、および多重性を確認する。

  8. 図をエクスポートまたは共有するレビューやドキュメントに適した形式で。

  9. モデルを常に最新に保つ。所有者を割り当て、意思決定が変更された際に図を更新する。

正確なメニュー名と利用可能な機能は、Visual Paradigmのエディションやリリースによって異なる場合があります。エディション固有の手順については、製品の最新のインターフェースドキュメントを参照してください。

6. VPasCode の使用

VPasCode は、Visual Paradigm が提供するブラウザベースの「図-as-コード」エディタです。製品情報では、PlantUML や Mermaid を含むテキストベースの図形式のサポート(リアルタイムレンダリング機能付き)や、SVG や PNG などのエクスポート機能について説明されています。

無料のJavaクラス図ジェネレーター:VPasCodeでJavaコードをUMLに変換

シンプルなワークフロー:

  1. VPasCode を開き、PlantUML などの図言語を選択します。

  2. 図のスクリプトを入力するか貼り付けます。

  3. 編集しながらレンダリングされたプレビューを確認します。

  4. 名前、関係、レイアウト、およびエラーパスを調整します。

  5. ドキュメントやレビュー用に画像をエクスポートします。

  6. レビュー可能でバージョン管理可能なテキストベースの記録を残したい場合は、ソーススクリプトをプロジェクトと一緒に保管してください。

VPasCode は、素早いドラフト作成、ドキュメント用図、およびテキストベースの編集を好むチームに適しています。一方、Visual Paradigm のグラフィカルモデルは、モデル要素を視覚的に操作し、より大規模なモデリングプロジェクトの一部として図を整理したい場合に有用です。これら 2 つのアプローチは互いに補完し合いますが、すべての図やモデルが両者間で完全な双方向忠実度で変換されるとは限らないため、ワークフロー内で変換を検証してください。

7. 有用なエンドツーエンドのワークフロー

チェックアウト機能の場合、軽量なモデリング手順は以下のようになります:

  1. ユースケース:誰が注文できるか、およびどの外部システムが関与するかを定義する。

  2. アクティビティ:チェックアウトの流れとその意思決定をマッピングする。

  3. シーケンス:成功、支払い失敗、在庫切れの各パスにおける詳細な相互作用を記述する。

  4. クラス:注文、行項目、商品、および支払いの概念とそれらのルールを定義する。

  5. 状態機械:有効な注文のライフサイクルを指定する。

  6. コンポーネント:どのサービスがそれらの責任を担うかを示す。

  7. デプロイメント:インフラストラクチャの決定が関連する場合は、ランタイムでの配置を文書化する。

チームがキャンバスベースのモデリングと管理された視覚モデルから利益を得る場合は Visual Paradigm を使用し、チームが素早く図のテキストを書き、レンダリングしたい場合は VPasCode を使用します。一般的なアプローチは、VPasCode でシナリオの草案を作成し、チームでレビューして洗練させた後、プロジェクトのドキュメント化と変更プロセスに最も適した形式で図を維持することです。

8. 一般的な落とし穴

  • システム全体を一度に図にしようとする:関心やシナリオごとに分割する。

  • アクティビティとシーケンスを混同する:アクティビティはワークフローを強調し、シーケンスは時間経過に伴うメッセージを強調する。

  • クラス図に情報を詰め込みすぎる:関連するドメイン概念に焦点を当て、すべての実装詳細にこだわらない。

  • “include” と “extend” を装飾として使用すること:それらはユースケース間の特定の関係を表現する。

  • 代替パスを省略する:失敗やキャンセルは、しばしば重要な要件を明らかにする。

  • 図を仕様として扱う:重要なビジネスルール、前提条件、および制約を明示的に文書化する。

  • 図を陳腐化させる:古くなった図は、読者がそれを信頼する可能性があるため、図がないことよりも悪影響を及ぼすことがある。

強力な UML セットは、最も大きなセットではありません。それは、意図された読者がシステムを理解し、意思決定について議論し、コストがかかる前にギャップを発見できるようにする、最小限の図のセットです。