仕様シーケンス図は、通常、設計者の頭の中にある 1 つの特定のスレッドだけを取り出したものになっています。したがって、いくつかのインスタンスやメッセージは、描かれていません。ただし、実行 (アニメーション化) シーケンス図は、オブジェクト間の完全な協調動作を表現しています。このため、仕様シーケンス図と実行シーケンス図を単純に比較しても、必ず不一致が見つかります。IBM® Rational® Rhapsody® では、この 2 つのダイアグラムの必然的な違いを埋め合わせて意味のある結果を出すための、シーケンス比較のオプションを提供します。
「シーケンス図の比較」ウィンドウで「オプション」を選択して、「シーケンス図の比較オプション」ウィンドウを開きます。
「一般」タブの以下のフィールドを使用して、同期を使用するかどうか、およびオプション設定を保存またはアップロードするかどうかを指定することができます。
到着メッセージの順序が重要ではない場合があります。「同期」オプションを指定すると、メッセージの到着時刻は無視され、送信順序だけが考慮されるようになります。
結果の比較表示では、同等のメッセージは隣接するウィンドウ・ペインで縦に揃っています。これにより、両方のダイアグラムで対応するメッセージを確認できます。
同期オプションを有効または無効にするには、「一般」タブで「同期」ボックスを選択または選択解除します。
オプション設定をファイルへ保存し、後にメッセージ比較のために再ロードできます。
設定を保存するには、以下のようにします。
<SD2>_<SD1>.sdo
ファイル拡張子 .sdo は Sequence Diagram Options の略です。必要に応じて、オプション・ファイルのパスとデフォルト名を編集します。
オプション設定を再ロードするには、次のようにします。
シーケンス比較オプションは、最後にファイルに保存した設定に戻されます。
下図に示す「メッセージ選択」タブでは、比較にどのメッセージを含めるかと、比較に引数を含めるかどうかを指定できます。

「メッセージ選択」タブでは、すべてのメッセージの引数欄に「無視」がデフォルト設定されています。つまり、デフォルトでは、引数の比較はしません。
このタブから以下の作業を行います。
仕様シーケンス図には通常、特定のユースケースまたはシナリオに不可欠の情報が含まれています。多くの場合、このダイアグラムでは初期設定フェーズのメッセージは除外されますが、実行シーケンス図にはすべてのメッセージが含まれています。したがって、比較を行うときには、コンストラクターなど特定のメッセージを無視する必要があります。無視したメッセージは、結果の比較ウィンドウではアクセスできません。
メッセージを比較から除外するには、以下のようにします。

メッセージが同一かどうかを判断するオプションは 2 つあります。最初のオプションはメッセージとすべての引数を比較し、2 番目のオプションはメッセージ名だけを比較します。シーケンス図は、以下の 4 種類の引数を示すので後者のオプションの方が便利です。
仕様シーケンス図では、必ずしもメッセージ引数の完全な情報を与えるとは限りません。実行シーケンス図はシステムが実際に行うことを記録するため、常に引数値と名前を示します。したがって、メッセージ比較は理想的には引数を使わず、代わりにメッセージ名に注目する必要があります。
2 つのメッセージの名前が等しいとき、その引数を比較できます。
例えば、evDigitDialed(Digit) というメッセージを見てみましょう。これらは、引数名 (Digit) だけを比較した場合同等です。しかし、その値 (EvDigitDialed(Digit=0)、EvDigitDialed(Digit=1)など) を比較するとその引数値は同等ではありません。
引数比較は以下の手順で行われます。
引数名または値を使用するかどうかを指定するには、次のようにします。
以下に一般的に使用する設定を示します。
| 仕様シーケンス図 | 実行シーケンス図 | 値 |
|---|---|---|
| Message() | Message(Arg = 1) | 引数を無視する |
| Message(Arg) | Message(Arg = 1) | 名前のみを比較する |
| Message(1) | Message(Arg = 1) | 名前と値を比較する |
仕様シーケンス図では、必ずしもメッセージ引数の完全な情報を指定しているとは限りません。一方、実行シーケンス図はシステムの実際の動作を記録するため、常に引数値と引数名を指定しています。したがって、メッセージ比較では、引数は考慮せずに、まずメッセージ名に注目して比較を行う必要があります。
一般的に、実行シーケンス図と仕様シーケンス図の間で完全なオブジェクトの一致を求めることは要求が厳しすぎます。これを解決するには、1 つのシーケンス図のオブジェクトを他のシーケンス図のオブジェクトに関連付けます。すると、両シーケンス図でソースとターゲット・オブジェクトが関連しているとメッセージは一致させることができます。
オブジェクトを相互に関連付けるにはオブジェクト・グループを作成します。オブジェクト・グループは、本質的にハイレベル・ユースケースと実際の実装またはブラック・ボックスとホワイト・ボックス・シナリオの間のギャップを埋めるインスタンス抽象化です。グループ・オブジェクトを使用して、同じ名前を持たないオブジェクト同士または 1 つのオブジェクトと複数のオブジェクトを比較できます。
オブジェクト・グループを表示するには、「シーケンス図の比較」オプション・ウィンドウの「インスタンス・グループ」タブを選択します。下図に示す「インスタンス・グループ」タブは、モデル内の既存のオブジェクト・グループのリストを表示します。デフォルトでは、オブジェクトごとに 1 つのオブジェクト・グループがあります。つまり、その独自のグループの唯一のメンバーになっています。

グループに属するオブジェクトは、ウィンドウの下部の「オブジェクト・グループ」リストに表示されます。つまり、SD1 用に表示されているオブジェクトは、SD2 用に表示されているものと論理的に同じだとみなされます。
「インスタンス・グループ」タブにより、以下の操作を実行できます。
インスタンス・グループを作成するには、次のようにします。
既存のオブジェクト・グループを削除するには、次のようにします。
削除したグループに属する任意のオブジェクトはこれで未使用となり、別のグループに割り当てることができます。
すべてのインスタンス・グループを削除するには、次のようにします。
これですべてのオブジェクトが未使用となり、新しいオブジェクト・グループに割り当てることができます。
表示されているオブジェクトとは異なるオブジェクトを関連付けるには、1 つ以上のオブジェクトを別のオブジェクト・グループに移動するか、新しいグループを作成します。 いずれの場合も、オブジェクトは一度に 1 つのグループにしか属することができないため、まず移動するオブジェクトを現在属しているグループから取り除く必要があります。
オブジェクトをグループから除去するには、次のようにします。
グループにオブジェクトを追加するには、以下のようにします。
すべてのオブジェクト・グループの設定をオブジェクト当たり 1 グループのデフォルトに戻すには、「インスタンス・グループ」タブの「デフォルトに設定」をクリックします。 各オブジェクトに対して SD1 と SD2 の同じオブジェクトがグループに属するオブジェクト・グループが追加されます。
仕様シーケンス図では、メッセージのシーケンスを決めるためにたびたびメッセージ・キューの動作を想定する必要があります。 仕様シーケンス図でのメッセージの順序が、ステートチャートに指定されている実際のものと異なることは大いに起こり得ます。 間違った順序を仮定すると、多数の不一致が生じます。
この問題を避けるため、比較はメッセージのタイミングを無視できる必要があります。例えば、インスタンス A2 が送信したメッセージ M2 の後にインスタンス A1 が送信したメッセージ M1 が、M2 より前に送信された同じメッセージと一致する場合があります。

また、2 つ以上のメッセージを 同時に送信する必要があるが、その順序は重要でない場合もあります。 メッセージ・グループを使用すると、順序が重要ではないメッセージのグループを指定できます。 グループ内の任意のメッセージが任意の順序で発生すると一致とみなします。
下の例に示すような「メッセージ・グループ」タブで、メッセージ・グループの作成、変更、および削除ができます。
