UMLのシーケンス図でオブジェクト間の相互作用を明確にしよう

n-ozawan

皆さん、こんにちは。技術開発グループのn-ozawanです。
欧州の研究チームがクモをゾンビ化して操る菌類を発見しました。もし人間が映画のようにゾンビ化した場合、原因は菌類かもしれませんね。

本題です。
これまでシステム開発をしていた人であれば、設計書などでシーケンス図を見たことは多いのではないでしょうか。なんなら新人研修の時に学んだという人もいるかと思います。それぐらい有名であり、システム開発においてはなくてはならない存在と言っても過言ではないシーケンス図。今回はそんなシーケンス図についてのお話です。

シーケンス図

概要

シーケンス図は、オブジェクト間の相互作用を時系列に沿って表現した図です。システムは複数のオブジェクトで構成されており、そのオブジェクト同士はメッセージをやり取りすることでシステムが動作します。「オブジェクト間の相互作用」というのは、オブジェクト間でのメッセージをやり取りを指します。


シーケンス図の仕様はUMLで定義されています。UMLには14種類の図が定められており、シーケンス図はその内の1つです。ユースケース図もUMLの1つです。14種類の図の中でも、クラス図、アクティビティ図、シーケンス図の3つが特に利用されており、シーケンス図はいろいろな所で利用されています。

凡例

シーケンス図の凡例を以下に示します。私個人の判断で恐縮ですが、シーケンス図を読み書きする上で最低限これだけ覚えれば大丈夫なものを記載しています。

説明
フレーム
シーケンス図を囲むことで、このシーケンス図は何を表現しているのかを明示します。省略されていることが多いです。左上の五角形にはこのシーケンス図の名前を記載します。その際は、「’sd’ + 名前」とします。
※’sd’は、’Sequence Diagram’の略です。
ライフライン
オブジェクトやクラスを表現します。一般的に名前は「オブジェクト名:クラス名」のように書きます。どちらか一方のみでも大丈夫です。例えば「山田太郎:顧客」でも良ければ、「山田太郎」や「顧客※」でもOKです。※クラス名であることを強調する場合は、先頭に「:」を付けます。
実行仕様
ライフラインがアクティブに処理されていることを表現します。
複合フラグメント
分岐処理やループ処理など、ライフライン間の具体的な処理内容を表現します。複合フラグメントには以下があります。

  • alt: 分岐処理(分岐先の処理は点線で区切る)
  • loop: ループ処理(特定の条件になるまでループする)
  • opt: オプション(特定の条件により処理されることを表現)
  • break: 中断処理(特定の条件により処理が中断されることを表現)
  • ref: 外部参照(他で表現したシーケンス図を参照させたいときに使う)
  • par: 並列処理(複数の処理を並列で行うことを表現)
  • critical: 排他処理(処理中は他からの処理を受け付けないことを表現)
ライフラインの消滅
ライフラインがなくなることを表現します。
メッセージ 同期メッセージ
関数呼び出しなど、同期的にメッセージを送信する際に使用します。
非同期メッセージ
HTTP API送信など、非同期的にメッセージを送信する際に使用します。
応答メッセージ
メッセージに対して応答を受ける際に使用します。
オブジェクト作成メッセージ
オブジェクトを作成する際に使用します。
ロストメッセージ
メッセージの送信はあるものの、その送信先がシーケンス図の範囲外にある場合に使用します。

シーケンス図はオブジェクト間の相互作用を表現しますが、時にはシーケンス図に含めたくないオブジェクトも存在します。例えば、とある共通関数のシーケンス図を記載する場合、その共通関数の呼び出し元は不特定多数であり図の本題ではありません。シーケンス図の範囲外とは、そういったシーケンス図で表現していないオブジェクトを指します。
ファウンドメッセージ
メッセージを受信するものの、その送信元がシーケンス図の範囲外にある場合に使用します。

サンプル

参考までにシーケンス図のサンプルを掲載します。


もちろんプログラムに近い内容でシーケンス図を書くことも出来ます。

おわりに

シーケンス図は上流工程から下流工程まで幅広く扱える図です。シーケンス図で整理すると、誰が、誰に、どのタイミングで、何をするのかが分かるようになります。人に説明するためでなく、自分自身がそのシステムを理解するのにも有用ですので、是非、活用することをお勧めします。

ではまた。

Recommendおすすめブログ