时序图比较选项

规范时序图只显示设计者头脑中的一个特定线程。因此,某些实例和消息将不存在。但是,执行(动画)时序图将反映对象之间的完整协作。这就是规范时序图与执行时序图之间的简单比较始终失败的原因。IBM® Rational® Rhapsody® 提供了各种选项,使您能够在执行序列比较时针对这两类图之间的某些必要差别进行补偿。

在“时序图比较”窗口中选择选项以打开“时序图比较选项”窗口。

常规比较选项

使用常规选项卡上的下列字段来指定是对选项设置进行同步、保存还是上载:

有时,消息的到达顺序并不重要。同步选项允许您忽略消息的到达时间,而只考虑它们的发送顺序。

在打开的比较显示内容中,等同的消息将在相邻的窗口窗格中以垂直方式进行同步。这可以帮助您找到两个图中的对应消息。

要启用或禁用同步选项,请选中或清除常规选项卡中的同步框。

您可以将选项设置保存到文件,然后将其重新装入以执行后续消息比较。

要保存设置,请完成下列步骤:

  1. 单击常规选项卡上的保存按钮。
  2. 这将打开“另存为”窗口。选项文件的缺省名称由您所比较的每个图的标题中的第一个词组成并通过下划线进行分隔:
       <SD2>_<SD1>.sdo

    文件扩展名 .sdo 表示“时序图选项”。如果您愿意,可以对选项文件的路径和缺省名称进行编辑。

  3. 单击确定

要重新装入选项设置,请完成下列步骤:

  1. 常规选项卡中,单击装入。这将显示“打开”窗口。
  2. 选择包含选项设置的 .sdo 文件。
  3. 单击打开

序列比较选项将恢复为该文件中上次保存的设置。

消息选择

下图中显示的消息选择选项卡使您能够选择要包括的消息以及进行比较时是否考虑自变量。

“时序图比较对话框”窗口的“消息选择”选项卡

在这个消息选择选项卡上,“忽略”一词是所有消息的“自变量”列的缺省设置。这意味着,在缺省情况下,进行消息比较时将忽略自变量。

通过使用此选项卡,可以完成下列任务:

在比较中排除消息

规范时序图通常包含特定用例或方案的基本信息。在许多情况下,它们将排除初始化阶段的消息,而执行时序图将包括所有消息。因此,可能有必要在执行比较时忽略某些消息,例如构造函数。被忽略的消息在打开的比较窗口中不可访问。

要在比较中排除某条消息,请完成下列任务:

  1. 选择要排除的消息。
  2. 单击编辑。这将打开“编辑消息比较选项”窗口。
    “编辑消息比较选项”窗口
  3. 单击忽略框以便从比较中排除该消息。
  4. 三个单选按钮允许您指定处理所选消息的相关联自变量的方式。
  5. 单击确定

比较自变量

两个选项用于确定消息是否完全相同:第一个选项是比较消息名称和所有自变量,第二个选项是只比较消息名称。由于时序图显示了四种不同类型的自变量,因此后一个选项更有用:

在规范时序图中,您可能并不是始终提供关于消息自变量的全面信息。由于执行时序图记录了系统实际执行的操作,因此它们始终同时显示自变量值和名称。因此,在理想情况下,消息比较不使用自变量,而是将注意力主要集中在消息名称上。

两条消息的名称完全相同时,您可以比较它们的自变量。

例如,请考虑名为 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. 单击确定

    根据选择不同,在消息选择选项卡上的“自变量”列中,将显示下列标签:
    • 禁用表示忽略消息的自变量
    • 名称表示比较消息的自变量名称,但不比较自变量值
    • 表示同时比较消息的自变量名称和自变量值

实例组

在规范时序图中,环境发送的所有消息都来自特定的对象。但是,在执行时序图中,这些消息可能是由于您与动画进行交互而生成。这种差别可能会对比较产生影响。

通常,要求执行时序图与规范时序图之间的对象完全匹配过于严格。解决方案是,使一个时序图中的对象与另一时序图中的其他对象相关联。于是,如果消息的源对象和目标对象在两个时序图中都相关联,那么这些消息可以匹配。

要使对象相互关联,请创建对象组。对象组在本质上是实例抽象,用于对高级别用例与实际实现之间或者在黑匣方案与白匣方案之间进行桥接。通过使用对象组,可以对名称不同的对象进行比较,也可以将一个对象与多个其他对象进行比较。

要查看对象组,请在“时序图比较选项”窗口中选择实例组选项卡。下图中显示的实例组选项卡显示了模型中现有对象组的列表。每个对象都有一个对象组,在缺省情况下,此对象是它自己的组的唯一成员。

“时序图比较对话框”窗口,“实例组”选项卡

属于该组的对象将显示在窗口底部的对象组列表中。这意味着,SD1 中列示的对象被视为在逻辑上与 SD2 中列示的对象相同。

实例组选项卡允许您执行下列操作:

要创建实例组,请完成下列步骤:

  1. 实例组选项卡上,单击添加。这将打开“编辑对象组”窗口。新对象组的缺省名称是 ClassBuffn,其中 n 是起始于 1 的整数。
  2. 如果您愿意,可以编辑新对象组的名称。
  3. 要将对象添加到组中,请将一个或多个未使用的对象从右边的任何一个框移至左边相应的框。
  4. 单击确定

要删除现有的对象组,请完成下列步骤:

  1. 实例组选项卡上,选择要删除的对象组。
  2. 单击删除
  3. 单击确定

任何属于您所删除的组的对象现在都处于未使用状态,并可供分配给另一个对象组。

要删除所有实例组,请完成下列步骤:

  1. 实例组选项卡上,单击全部删除
  2. 单击确定

所有对象现在都处于未使用状态,并可供分配给新对象组。

如果您想关联除显示的对象以外的对象,请将一个或多个对象移至另一对象组,也可以创建组。无论在哪一种情况下,由于一个对象每次只能属于一个组,因此必须先从所移动对象当前所在的组中除去此对象。

要从组中除去对象,请完成下列步骤:

  1. 实例组选项卡上,选择对象组。
  2. 单击编辑。这将打开“编辑对象组”窗口。

    所选对象组的名称将显示在窗口顶部。名称框不可用;这是因为,您无法在此处编辑名称。

    “编辑对象组”窗口包含 4 个框。左边的两个框显示 SD1 中的哪些对象将与 SD2 中的哪些对象相关联。右边的两个框显示每个图中的哪些对象当前未分配到任何组,并因此可供分配到某个组。
  3. 请在左侧的其中一个框中选择对象,然后单击右方向按钮。

要将对象添加到组中,请完成下列步骤:

  1. 从右边的其中一个框中选择对象,并使用左方向按钮来移动该对象。
  2. 单击确定。一个图中的所选对象现在可供添加到另一个组。
  3. 实例组选项卡上,选择该对象的新组,然后单击编辑
  4. 从右下角的 SD<编号> 中未使用的对象框中选择对象,然后单击左方向按钮将其添加到组中。
  5. 从右下角的 SD<编号> 中的目标对象框中选择对象,然后单击右方向按钮将其从组中除去。
  6. 单击确定

要将所有对象组恢复为缺省情况,即每个对象一个组,请单击实例组选项卡上的设置为缺省。这将为每个对象添加一个对象组,并且,SD1 和 SD2 中的同一对象属于该组。

消息组

在规范时序图中,通常必须假定消息队列的工作方式以确定消息的顺序。在规范时序图中,消息的顺序很有可能与状态图中指定的实际顺序不同。不正确的顺序假定会导致大量的不匹配情况。

要避免此问题,比较操作必须能够忽略消息的计时。例如,实例 A1 在实例 A2 发送消息 M2 之后发送的消息 M1 可能与 M2 之前发送的同一消息匹配:

忽略消息计时的比较的示例

在另外一些情况下,要同时发送两条或两条以上的消息,但顺序不重要。消息组使您能够指定顺序无关紧要的一组消息。任何该组中的任何消息以任何顺序出现,都将发生匹配。

以下示例中显示的消息组选项卡使您能够创建、修改和删除消息组。

“时序图比较对话框”窗口,“消息组”选项卡

反馈