クラス図とシーケンス図の整合性確保 マニュアル

Consistency between Class and Sequenceby SparxSystems JapanEnterprise Architect 日本語版
クラス図とシーケンス図の整合性確保 マニュアル(2022/04/12 最終更新)

1

クラス図とシーケンス図の整合性確保 マニュアル

目次
1. はじめに............................................................................................................................. 3
2. クラス図のモデリング....................................................................................................... 3
3. シーケンス図のモデリング ............................................................................................... 5
4. 整合性の最終確認 .............................................................................................................115.

まとめ ............................................................................................................................ 126.

シーケンス図チェックアドインについて ..................................................................... 132

クラス図とシーケンス図の整合性確保 マニュアル

1. はじめに
UML を利用したモデリングにおいて、クラス図は最も利用される図の 1 つです。クラス図は対象のシステムなどの構造をモデリングするために利用されます。一方で、振る舞いについてはクラス図では表現できないため、振る舞い図を利用してモデリングする必要があります。振る舞い図の中では、シーケンス図が最も多く利用される図です。
クラス図とシーケンス図の組み合わせで設計する場合には、クラス図とシーケンス図の間の整合性を確保することが重要になります。このドキュメントでは、Enterprise Architectのサポートが有効であれば無料で利用できる「シーケンス図チェックアドイン」を利用し、この整合性を効率的に確保する方法について説明します。
なお、
このドキュメントでは、Enterprise Architect 15.0 ビルド 1507 を利用しています。
異なるバージョン・ビルドでは、表示内容などが異なる場合があります。

2. クラス図のモデリング
多くの場合には、シーケンス図等の振る舞い図より先に、クラス図で全体の構造をモデルとして表現します。このドキュメントでも、先にクラス図を作成するという仮定で話を進めます。
クラス図でのモデリングでは、それぞれのクラスに対して属性や操作を定義します。この属性や操作を過不足なく定義することが重要です。一方で、クラス図のみに着目していても、属性や操作の過不足がないかどうかを判断することは非常に困難です。
このドキュメントでは、一例として簡単なメール送受信ソフト(メーラー)を題材にします。
多くの方がメーラーを日常的に利用していますので、メーラーのクラス図を書きなさい、というと、ある程度はクラス図を書くことができるのではないかと思います。
一例として、ここでは以下のようなクラス図を考えました。

3

クラス図とシーケンス図の整合性確保 マニュアル

1フォルダ
メーラー
メール新規作成()

名前
1

1

*
フォルダ作成()フォルダ削除()フォルダ名前変更()
1
*
メール
タイトル
本文

宛先
1

1..*

メールアドレス

送信()

なお、上記の例のように、可視性や型などの情報は非表示にすることで、注目すべき点に着目できます。上記の例では、ダイアグラムのプロパティ画面の「属性・操作」グループにおいて、以下のように設定しています。

4

クラス図とシーケンス図の整合性確保 マニュアル

3. シーケンス図のモデリング
一方で、クラス図で定義した内容が適切かどうか、クラス図だけで検証することは困難です。レビューを経ることで不足している内容が見つかることもありますが、必要かどうかを判断することは容易ではありません。
このような場合には、シーケンス図を利用して、振る舞いをモデリングすることにより、発生しうる状況を洗い出すことが有効です。ここでは、クラス図の検証のために、シーケンス図を利用します。
具体的な方法の一例として、ユースケースのそれぞれに対して、正常系と異常系のシーケンス図を作成することになります。正常系は通常 1 つのユースケースに対して 1 つですが、異常系はその内容に応じて複数存在することが多いです。1 つのシーケンス図に複数の異常系を表現したり、正常系と異常系を複合フラグメントやサブジェクト(境界)要素を利用して 1 つのシーケンス図に同居させることも可能ですし、それぞれの状況毎にシーケンス図を作成することもできます。
Enterprise Architect では、クラス図で作成したクラス要素を、モデルブラウザからシーケンス図にドロップすることで、シーケンス図で利用することができます。
シーケンス図でメッセージを作成すると、クラス図で定義した操作(メソッド)を選択して利用することができます。以下の画像は、メッセージの作成時に表示されるクイック編集
ダイアログのコンボボックスで、クラス図で定義した操作を選択している状況の例です。

このようにして、シーケンス図を作成することで、それぞれのクラスの操作が不足なく5クラス図とシーケンス図の整合性確保 マニュアル

定義されているかどうかを確認することができます。

では、コンボボックスの選択肢に必要な操作(メソッド)が存在しない場合、つまり、不足を見つけた場合には、どのようにすればよいのでしょうか。
このような状況の対応方法 1 つは、クラス図に戻り該当のクラス要素に操作を追加してから、再度シーケンス図でメッセージの操作を選択する方法があります。しかし、この方法は場合によっては適切とは言えません。(理由は後述します。)
このような状況の 1 つの対応方法として、メッセージのコンボボックスから選択するのではなく、必要な操作の内容を直接入力します。以下の例で、「利用者」から「メーラー」へのメッセージの「送信ボタン押下」は先ほどのクラス図には定義されていなかった操作です。メッセージのプロパティで、名前に直接「送信ボタン押下」と入力しました。

:メーラー

:メール

利用者

送信ボタン押下()

送信()

一方で、ここで入力した「送信ボタン押下」は、この時点ではクラス図のメーラークラスには追加されていません。
メッセージを作成する都度、クラス要素の操作として追加するという方法もありますが、複数名で設計を行っている場合には、この方法には以下の問題があります。

6

クラス図とシーケンス図の整合性確保 マニュアル✓

この時点では、このシーケンス図の内容は作成中であり、この図の内容の作成が進むにつれて、作成済みの内容を変更する可能性もある。そのたびにクラス要素・クラス図の内容が変わるのは、混乱を招く危険性がある(クラス図やクラス要素は他の設計者も共有し、参照しているという前提)✓

今後設計が進むにつれて、対象のメッセージ(処理)が変更・削除される場合もあるので、作成した直後にクラス要素にも修正を加えるのが良い方法とは限らない✓

対象のメッセージに関連する処理が不足しているとしても、どのクラスにその処理を追加するのが最適かは、議論が必要である。
(クラスの責務や、保守性など他の条件を考慮すると、新しいクラスを追加しそのクラスの操作を呼び出すようにするというような解決策もありうる)✓

作成したメッセージを削除した場合、クラス要素に操作として残すのかそれとも削除するのか、ツールとしては判断することが難しい

そのため、シーケンス図の作成中(設計中)にリアルタイムに操作として追加する(あるいは、ツール側で自動的に追加される)のは、複数名で作業を行っている場合には適切とは言い切れません。
(すべての設計を 1 名のみで行っているのであれば、どのクラスにどの操作を追加するかは自分自身で判断できるので、上記のような問題が起きる状況は減ります。)

一方で、このようにしてシーケンス図側で名前入力した場合に、以下の問題があります。
✓

クラスの操作から選択して設定したメッセージと、直接入力して名前を設定したメッセージの区別が付かない✓

最終的にはクラス要素の操作として反映する必要があるが、いつどのような方法で反映させるのかが明確ではない

この問題は、「シーケンス図チェックアドイン」を利用することで解決できます。アドインが有効になっていれば、「アドイン・拡張」リボン内の「アドイン」パネルにある「ウィンドウ」ボタンを押すと、表示することができます。
(このアドインについては、「6. シーケンス図チェックアドインについて」もご覧ください。)
作成済みの全てのシーケンス図の内容を完成させた段階で、このアドインを利用してクラス図とシーケンス図の間の整合性を確保します。シーケンス図の内容のレビューを行う
場合には、レビュー中にこのアドインも起動し、内容のレビューと整合性確認を同時に進
7クラス図とシーケンス図の整合性確保 マニュアル

めると効果的です。
(まず、シーケンス図のそれぞれのメッセージが妥当かどうかをレビューによって確認し、妥当な場合でクラス図に操作が存在しない場合には、このアドインを利用して操作を追加する。)

先ほどのシーケンス図を例にしますと、このアドインが表示されている状況で、シーケンス図内の要素をクリックします。すると、下の図のように、メッセージの内容を検証することができます。

この例では、「対応」の欄が「×」、つまり、クラス図に操作として存在しないことを示しています。この場合に、該当の行をダブルクリックすることで、クラスの操作として追加することができます。
また、既存の操作に「差し替える」ことができます。以下の例をご覧ください。

8

クラス図とシーケンス図の整合性確保 マニュアル

この例では、シーケンス図の作成中には「フォルダ追加」と直接入力しましたが、実は「フォルダ作成」という名前の同機能の操作が既に存在しました。つまり、「フォルダ追加」という操作を新規に追加することは適切ではなく、既存の「フォルダ作成」を利用するようにしなければなりません。
右クリックすることで既存の操作をコンテキストメニューの項目として表示します。希
望する操作を選択することで、差し替えることができます。
なお、このシーケンス図チェックアドインでは、以下の内容の確認も可能です。これらの機能を利用することで、クラス図とシーケンス図の間の整合性を確認することができます。
✓private な操作を外部から呼び出していないかどうか✓

クラス要素間で関係がないにもかかわらず、シーケンス図でメッセージを送信していないかどうか(以下の例では、クラス図で関係のない「宛先」クラスを配置して、この整合性に問題がある状況を作りました。
「クラス」タブでは、クラス要素間の関係と整合しているかどうかを確認することができます。)

9

クラス図とシーケンス図の整合性確保 マニュアル

なお、メッセージの戻りを属性に格納する場合に、プロパティ画面の「割当」に入力することで、クラス要素の属性とシーケンス図の整合性も確認できます。下の図では、「属性」タブに表示される内容で、属性についての整合性を確認しています。

(オプションの「属性の関係をチェック」を有効にする必要があります。このオプションは初期設定では無効になっています。)

10

クラス図とシーケンス図の整合性確保 マニュアル

4. 整合性の最終確認
ここまで説明した方法で、以下の内容ができました。
1.

まず、クラス図で全体の構成・クラスを定義する

2.

それぞれのクラスの属性や操作を定義する

3.

さまざまな状況でのシーケンス図を作成することで、不足している操作や属性を発見する

4.

レビュー後、最終的にクラスに追加すべき項目を、クラス要素に追加する
一方で、ここまでの手順の中では、上記の 2 番で定義した操作や属性のうち、どこのシーケンス図でも利用されていないもの、つまり「過不足」の「過」を見つけることができていません。この「過」を見つけるために、クラス図を開きます。
シーケンス図チェックアドインが表示されている状態で、クラス図やプロジェクトブラウザ内で操作や属性を選択します。クラス図内で操作や属性を選択するためには、対象のクラスをクリックして選択状態にした後に、さらにその内部の操作や属性をクリックしてください。
すると、その操作が利用されているシーケンス図の情報が、表示されます。下の例の場合には、「フォルダ作成」の操作は、「フォルダ追加」シーケンス図の 2 番目のメッセージに利用されていることが分かります。
一覧内の行をクリックすると、該当のシーケンス図が開きます。

11

クラス図とシーケンス図の整合性確保 マニュアル

一方で、「フォルダ削除」の操作を選択した場合には、この一覧に何も表示されません。

これは、次のいずれかの状況であることを示しています。
✓

この操作はどこのシーケンス図でも利用されていないので、不要である✓

この操作が含まれるシーケンス図の作成作業が漏れている
不要な場合には操作を削除し、この操作が必要な場合には、対応するシーケンス図を作成して設計内容を検討・検証します。
このようにすることで、クラス図とシーケンス図の間の過不足をなくし、整合性を確保することができます。

5. まとめクラス図とシーケンス図の整合性確保は、「シーケンス図チェックアドイン」を利用することで効率的に実現できます。この段階で考慮漏れや無駄のないクラス図を定義することにより、この後の工程の無駄を省くこともできます。
ぜひご活用ください！

12

クラス図とシーケンス図の整合性確保 マニュアル

6. シーケンス図チェックアドインについて
このドキュメントで利用しているシーケンス図チェックアドインは「動作期間限定アドイン」です Enterprise Architect のサポートが有効な期間中に利用できます。利用するためには、以下のページから「シーケンス図チェックアドイン」をダウンロードしインストールしてください。
アドインを使ってみる
https://www.sparxsystems.jp/products/EA/tech/Addins.htm#SeqCheckerアドインのインストール方法は、下記ページをご覧ください。
https://www.sparxsystems.jp/products/EA/tech/Addins.htm#install

このアドインを利用する場合は、まずアドインサブウィンドウを開いておきます。アドイ
ンサブウィンドウは、「アドイン・拡張」リボン内の「アドイン」パネルにある「ウィンドウ」 で呼び出すことができます。最初に開いた場合には動作が無効になっていますので、ボタンを押してアドインの動作を有効にしてください。

このアドインのサブウィンドウが表示されている状態で、シーケンス図内のライフラインやコミュニケーション図のオブジェクトを選択してください。ライフライン(オブジェク
ト)に分類子(クラス)が関連づけられている場合には、このアドインで、クラス図とシーケンス図(コミュニケーション図)との整合性を確認することができます。

このサブウィンドウには、3つのタブがあります。

タブ

説明操作タブ• ライフラインに関連するメッセージが分類子(クラス)の操作として登録されているかどうかを確認できます。

• アドインサブウィンドウに表示された一覧内の項目をダブルクリックすると、分類子に操作を追加できます。

• アドインサブウィンドウに表示された一覧内の項目を右クリックすると、既存の操作に差し替えることができます。

13

クラス図とシーケンス図の整合性確保 マニュアル

属性タブ• メッセージのプロパティ画面の「割り当て」欄に入力されている内容について、分類子(クラス)の属性として登録されているかどうかを確認できます。

• アドインサブウィンドウに表示された一覧内の項目をダブルクリックすると、分類子に属性を追加できます。

• アドインサブウィンドウに表示された一覧内の項目を右クリックすると、既存の属性に差し替えることができます。
クラスタブ• シーケンス図でメッセージを送信している他のクラスに対して、関連や集約などの関係があるかどうかを確認することができます。

• 未定義の場合に右クリックして接続の種類を指定すると、接続を追加することができます。

このアドインは、もう1つの別の使い方ができます。クラス要素の属性や操作を選択すると、その属性や操作が利用されているシーケンス図を表示することができます。この機能を利用することで、それぞれの属性や操作がどのシーケンス図で利用されているのか、あるいは利用されていないのかを確認することができます。

属性や操作の選択は、モデルブラウザ内で選択する方法の他、クラス図の中で選択することもできます。クラス図の中で属性や操作を選択するためには、対象のクラス要素をダイアグラム内で選択した状態で、さらに対象の属性や操作をクリックしてください。

ツールバーの説明
ツールバーには、3つのボタンがあります。左から順に、機能を説明します。

• 調査対象の要素を固定します。固定中は、他の要素を選択しても表示内容は変わりません。

• シーケンス図チェックアドインの機能の有効・無効を切り替えます。有効になっている場合には、ダイアグラム内やモデルブラウザ内で要素を選択するたびにチェック処理が起動しますので、動作が低下します。チェックが不要な場合には無効にしておくと快適です。

• シーケンス図内で、問題となっているメッセージを赤色で表示します。他の要素を選択すると赤色表示は解除されますので、ツールバーの左端のロックボタンと合わせて利用すると便利です。

メニューの説明14

クラス図とシーケンス図の整合性確保 マニュアル「アドイン・拡張」リボン内の「アドインメニュー」パネルにあるボタン「シーケンス図チェック」以下からは、いくつかの機能を呼び出すことができます。

項目説明

ダイアグラム全体をチェック表示しているダイアグラム内に配置されている全てのライフラインを対象に、チェックを実行します。

パッケージ内をチェック選択されているパッケージ内の全てのダイアグラムを対象に、チェックを実行します。

オプション

チェック対象を限定します。属性に関するチェックやクラス間の関係との整合性チェックが不要な場合には、チェック対象から外すことでチェック処理の速度を改善できます。

15