シーケンス図比較のオプション

仕様シーケンス図は、通常、設計者の頭の中にある 1 つの特定のスレッドだけを取り出したものになっています。したがって、いくつかのインスタンスやメッセージは、描かれていません。ただし、実行 (アニメーション化) シーケンス図は、オブジェクト間の完全な協調動作を表現しています。このため、仕様シーケンス図と実行シーケンス図を単純に比較しても、必ず不一致が見つかります。IBM® Rational® Rhapsody® では、この 2 つのダイアグラムの必然的な違いを埋め合わせて意味のある結果を出すための、シーケンス比較のオプションを提供します。

「シーケンス図の比較」ウィンドウで「オプション」を選択して、「シーケンス図の比較オプション」ウィンドウを開きます。

一般比較オプション

「一般」タブの以下のフィールドを使用して、同期を使用するかどうか、およびオプション設定を保存またはアップロードするかどうかを指定することができます。

到着メッセージの順序が重要ではない場合があります。「同期」オプションを指定すると、メッセージの到着時刻は無視され、送信順序だけが考慮されるようになります。

結果の比較表示では、同等のメッセージは隣接するウィンドウ・ペインで縦に揃っています。これにより、両方のダイアグラムで対応するメッセージを確認できます。

同期オプションを有効または無効にするには、「一般」タブで「同期」ボックスを選択または選択解除します。

オプション設定をファイルへ保存し、後にメッセージ比較のために再ロードできます。

設定を保存するには、以下のようにします。

  1. 「一般」タブの「保存」ボタンをクリックします。
  2. 「名前を付けて保存」ウィンドウが開きます。オプション・ファイルのデフォルト名は、比較する各ダイアグラムのタイトルの最初の 2 ワードを下線で分けた形をしています。
       <SD2>_<SD1>.sdo

    ファイル拡張子 .sdo は Sequence Diagram Options の略です。必要に応じて、オプション・ファイルのパスとデフォルト名を編集します。

  3. 「OK」をクリックします。

オプション設定を再ロードするには、次のようにします。

  1. 「一般」タブで「ロード」をクリックします。「開く」ウィンドウが開きます。
  2. オプション設定を含む .sdo ファイルを選択します。
  3. 「開く」をクリックします。

シーケンス比較オプションは、最後にファイルに保存した設定に戻されます。

メッセージ選択

下図に示す「メッセージ選択」タブでは、比較にどのメッセージを含めるかと、比較に引数を含めるかどうかを指定できます。

「シーケンス図の比較ダイアログ」ウィンドウ、「メッセージ選択」タブ

「メッセージ選択」タブでは、すべてのメッセージの引数欄に「無視」がデフォルト設定されています。つまり、デフォルトでは、引数の比較はしません。

このタブから以下の作業を行います。

メッセージを比較から除外

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

メッセージを比較から除外するには、以下のようにします。

  1. 除外するメッセージを選択します。
  2. 「編集」をクリックします。「メッセージ比較オプションの編集」ウィンドウが開きます。
    「メッセージ比較オプションの編集」ウィンドウ
  3. 比較からメッセージを除外するには「無視」ボックスをクリックします。
  4. 3 つのラジオ・ボタンを使用して、選択したメッセージに関連する引数の取り扱いを指定できます。
  5. 「OK」をクリックします。

引数の比較

メッセージが同一かどうかを判断するオプションは 2 つあります。最初のオプションはメッセージとすべての引数を比較し、2 番目のオプションはメッセージ名だけを比較します。シーケンス図は、以下の 4 種類の引数を示すので後者のオプションの方が便利です。

仕様シーケンス図では、必ずしもメッセージ引数の完全な情報を与えるとは限りません。実行シーケンス図はシステムが実際に行うことを記録するため、常に引数値と名前を示します。したがって、メッセージ比較は理想的には引数を使わず、代わりにメッセージ名に注目する必要があります。

2 つのメッセージの名前が等しいとき、その引数を比較できます。

例えば、evDigitDialed(Digit) というメッセージを見てみましょう。これらは、引数名 (Digit) だけを比較した場合同等です。しかし、その値 (EvDigitDialed(Digit=0)EvDigitDialed(Digit=1)など) を比較するとその引数値は同等ではありません。

引数比較は以下の手順で行われます。

  1. 各引数を探す。
  2. 引数名と値を探す。
  3. 比較に名前、値、または両方を使用するかを決定する。

引数名または値を使用するかどうかを指定するには、次のようにします。

  1. 「メッセージ選択」タブでメッセージを選択し、「編集」をクリックします。「メッセージ比較オプションの編集」ウィンドウが開きます。
  2. 以下のいずれかのオプションを選択します。
    • 名前のみを比較する - 引数名を比較するが値を無視する。
    • 名前と値を比較する - 引数名と値の両方を比較する。

      以下に一般的に使用する設定を示します。

表 1. 「メッセージ比較オプションの編集」ウィンドウで一般的に使用する設定
仕様シーケンス図 実行シーケンス図
Message() Message(Arg = 1) 引数を無視する
Message(Arg) Message(Arg = 1) 名前のみを比較する
Message(1) Message(Arg = 1) 名前と値を比較する
  1. 「OK」をクリックします。

    選択に応じて「メッセージ選択」タブの「引数」欄に以下のラベルが表示されます。
    • 無効化 - そのメッセージに対する引数は無視されます。
    • 名前 - メッセージに対する引数名は比較するが、引数値は比較しません。
    • - メッセージに対する引数名と値の両方が比較されるメッセージです。

インスタンス・グループ

仕様シーケンス図では、必ずしもメッセージ引数の完全な情報を指定しているとは限りません。一方、実行シーケンス図はシステムの実際の動作を記録するため、常に引数値と引数名を指定しています。したがって、メッセージ比較では、引数は考慮せずに、まずメッセージ名に注目して比較を行う必要があります。

一般的に、実行シーケンス図と仕様シーケンス図の間で完全なオブジェクトの一致を求めることは要求が厳しすぎます。これを解決するには、1 つのシーケンス図のオブジェクトを他のシーケンス図のオブジェクトに関連付けます。すると、両シーケンス図でソースとターゲット・オブジェクトが関連しているとメッセージは一致させることができます。

オブジェクトを相互に関連付けるにはオブジェクト・グループを作成します。オブジェクト・グループは、本質的にハイレベル・ユースケースと実際の実装またはブラック・ボックスとホワイト・ボックス・シナリオの間のギャップを埋めるインスタンス抽象化です。グループ・オブジェクトを使用して、同じ名前を持たないオブジェクト同士または 1 つのオブジェクトと複数のオブジェクトを比較できます。

オブジェクト・グループを表示するには、「シーケンス図の比較」オプション・ウィンドウの「インスタンス・グループ」タブを選択します。下図に示す「インスタンス・グループ」タブは、モデル内の既存のオブジェクト・グループのリストを表示します。デフォルトでは、オブジェクトごとに 1 つのオブジェクト・グループがあります。つまり、その独自のグループの唯一のメンバーになっています。

「シーケンス図の比較ダイアログ」ウィンドウ、「インスタンス・グループ」タブ

グループに属するオブジェクトは、ウィンドウの下部の「オブジェクト・グループ」リストに表示されます。つまり、SD1 用に表示されているオブジェクトは、SD2 用に表示されているものと論理的に同じだとみなされます。

「インスタンス・グループ」タブにより、以下の操作を実行できます。

インスタンス・グループを作成するには、次のようにします。

  1. 「インスタンス・グループ」タブで、「追加」をクリックします。「オブジェクト・グループの編集」ウィンドウが開きます。 新規オブジェクト・グループのデフォルト名は、ClassBuffn で、n は 1 から始まる整数です。
  2. 必要に応じて、新規オブジェクト・グループの名前を編集します。
  3. グループにオブジェクトを追加するには、1 つ以上の未使用オブジェクトを右のいずれかのボックスから対応する左のボックスに移動します。
  4. 「OK」をクリックします。

既存のオブジェクト・グループを削除するには、次のようにします。

  1. 「インスタンス・グループ」タブで、削除するオブジェクト・グループを選択します。
  2. 「削除」をクリックします。
  3. 「OK」をクリックします。

削除したグループに属する任意のオブジェクトはこれで未使用となり、別のグループに割り当てることができます。

すべてのインスタンス・グループを削除するには、次のようにします。

  1. 「インスタンス・グループ」タブで、「すべて削除」をクリックします。
  2. 「OK」をクリックします。

これですべてのオブジェクトが未使用となり、新しいオブジェクト・グループに割り当てることができます。

表示されているオブジェクトとは異なるオブジェクトを関連付けるには、1 つ以上のオブジェクトを別のオブジェクト・グループに移動するか、新しいグループを作成します。 いずれの場合も、オブジェクトは一度に 1 つのグループにしか属することができないため、まず移動するオブジェクトを現在属しているグループから取り除く必要があります。

オブジェクトをグループから除去するには、次のようにします。

  1. 「インスタンス・グループ」タブで、オブジェクト・グループを選択します。
  2. 「編集」をクリックします。「オブジェクト・グループの編集」ウィンドウが開きます。

    選択したオブジェクト・グループの名前がウィンドウの上部に表示されます。名前はここでは編集できないため、名前ボックスは使用可能ではありません。

    「オブジェクト・グループの編集」ウィンドウには 4 つのボックスがあります。左の 2 つは、SD1 のどのオブジェクトが SD2 のどのオブジェクトと関連しているかを示しています。右の 2 つは、各ダイアグラムのどのオブジェクトが現在どのグループにも割り当てられておらず、したがって、グループに割り当てられるかを示しています。
  3. 左のいずれかのボックスでオブジェクトを選択し、右矢印ボタンをクリックします。

グループにオブジェクトを追加するには、以下のようにします。

  1. 右のいずれかのボックスでオブジェクトを選択し、左矢印ボタンで移動します。
  2. 「OK」をクリックします。これで 1 つのダイアグラムで選択したオブジェクトを別のグループに追加できます。
  3. 「インスタンス・グループ」タブで、オブジェクトの新しいグループを選択して、 「編集」をクリックします。
  4. 右下隅の「SD<number> の未使用オブジェクト」ボックス内のオブジェクトを選択して、左矢印キーをクリックして、それをグループに追加します。
  5. 右下隅の「SD<number> の宛先オブジェクト」ボックス内のオブジェクトを選択し、右矢印ボタンをクリックして、それをグループから除去します。
  6. 「OK」をクリックします。

すべてのオブジェクト・グループの設定をオブジェクト当たり 1 グループのデフォルトに戻すには、「インスタンス・グループ」タブの「デフォルトに設定」をクリックします。 各オブジェクトに対して SD1 と SD2 の同じオブジェクトがグループに属するオブジェクト・グループが追加されます。

メッセージ・グループ

仕様シーケンス図では、メッセージのシーケンスを決めるためにたびたびメッセージ・キューの動作を想定する必要があります。 仕様シーケンス図でのメッセージの順序が、ステートチャートに指定されている実際のものと異なることは大いに起こり得ます。 間違った順序を仮定すると、多数の不一致が生じます。

この問題を避けるため、比較はメッセージのタイミングを無視できる必要があります。例えば、インスタンス A2 が送信したメッセージ M2 の後にインスタンス A1 が送信したメッセージ M1 が、M2 より前に送信された同じメッセージと一致する場合があります。

メッセージのタイミングを無視する比較の例

また、2 つ以上のメッセージを 同時に送信する必要があるが、その順序は重要でない場合もあります。 メッセージ・グループを使用すると、順序が重要ではないメッセージのグループを指定できます。 グループ内の任意のメッセージが任意の順序で発生すると一致とみなします。

下の例に示すような「メッセージ・グループ」タブで、メッセージ・グループの作成、変更、および削除ができます。

「シーケンス図の比較ダイアログ」ウィンドウ、「メッセージ・グループ」タブ

フィードバック