规范时序图只显示设计者头脑中的一个特定线程。因此,某些实例和消息将不存在。但是,执行(动画)时序图将反映对象之间的完整协作。这就是规范时序图与执行时序图之间的简单比较始终失败的原因。IBM® Rational® Rhapsody® 提供了各种选项,使您能够在执行序列比较时针对这两类图之间的某些必要差别进行补偿。
在“时序图比较”窗口中选择选项以打开“时序图比较选项”窗口。
使用常规选项卡上的下列字段来指定是对选项设置进行同步、保存还是上载:
有时,消息的到达顺序并不重要。同步选项允许您忽略消息的到达时间,而只考虑它们的发送顺序。
在打开的比较显示内容中,等同的消息将在相邻的窗口窗格中以垂直方式进行同步。这可以帮助您找到两个图中的对应消息。
要启用或禁用同步选项,请选中或清除常规选项卡中的同步框。
您可以将选项设置保存到文件,然后将其重新装入以执行后续消息比较。
要保存设置,请完成下列步骤:
<SD2>_<SD1>.sdo
文件扩展名 .sdo 表示“时序图选项”。如果您愿意,可以对选项文件的路径和缺省名称进行编辑。
要重新装入选项设置,请完成下列步骤:
序列比较选项将恢复为该文件中上次保存的设置。
下图中显示的消息选择选项卡使您能够选择要包括的消息以及进行比较时是否考虑自变量。

在这个消息选择选项卡上,“忽略”一词是所有消息的“自变量”列的缺省设置。这意味着,在缺省情况下,进行消息比较时将忽略自变量。
通过使用此选项卡,可以完成下列任务:
规范时序图通常包含特定用例或方案的基本信息。在许多情况下,它们将排除初始化阶段的消息,而执行时序图将包括所有消息。因此,可能有必要在执行比较时忽略某些消息,例如构造函数。被忽略的消息在打开的比较窗口中不可访问。
要在比较中排除某条消息,请完成下列任务:

两个选项用于确定消息是否完全相同:第一个选项是比较消息名称和所有自变量,第二个选项是只比较消息名称。由于时序图显示了四种不同类型的自变量,因此后一个选项更有用:
在规范时序图中,您可能并不是始终提供关于消息自变量的全面信息。由于执行时序图记录了系统实际执行的操作,因此它们始终同时显示自变量值和名称。因此,在理想情况下,消息比较不使用自变量,而是将注意力主要集中在消息名称上。
两条消息的名称完全相同时,您可以比较它们的自变量。
例如,请考虑名为 evDigitDialed(Digit) 的消息。如果只比较自变量名称 (Digit),那么这些消息将完全相同。但是,如果比较它们的值(EvDigitDialed(Digit=0) 和 EvDigitDialed(Digit=1) 等等),那么它们的自变量值将不相同。
自变量比较按下列步骤进行:
要指定是使用自变量名称还是值,请完成下列步骤:
常用设置如下所示:
| 规范时序图 | 执行时序图 | 值 |
|---|---|---|
| Message() | Message(Arg = 1) | 忽略自变量 |
| Message(Arg) | Message(Arg = 1) | 只比较名称 |
| Message(1) | Message(Arg = 1) | 同时比较名称和值 |
在规范时序图中,环境发送的所有消息都来自特定的对象。但是,在执行时序图中,这些消息可能是由于您与动画进行交互而生成。这种差别可能会对比较产生影响。
通常,要求执行时序图与规范时序图之间的对象完全匹配过于严格。解决方案是,使一个时序图中的对象与另一时序图中的其他对象相关联。于是,如果消息的源对象和目标对象在两个时序图中都相关联,那么这些消息可以匹配。
要使对象相互关联,请创建对象组。对象组在本质上是实例抽象,用于对高级别用例与实际实现之间或者在黑匣方案与白匣方案之间进行桥接。通过使用对象组,可以对名称不同的对象进行比较,也可以将一个对象与多个其他对象进行比较。
要查看对象组,请在“时序图比较选项”窗口中选择实例组选项卡。下图中显示的实例组选项卡显示了模型中现有对象组的列表。每个对象都有一个对象组,在缺省情况下,此对象是它自己的组的唯一成员。

属于该组的对象将显示在窗口底部的对象组列表中。这意味着,SD1 中列示的对象被视为在逻辑上与 SD2 中列示的对象相同。
实例组选项卡允许您执行下列操作:
要创建实例组,请完成下列步骤:
要删除现有的对象组,请完成下列步骤:
任何属于您所删除的组的对象现在都处于未使用状态,并可供分配给另一个对象组。
要删除所有实例组,请完成下列步骤:
所有对象现在都处于未使用状态,并可供分配给新对象组。
如果您想关联除显示的对象以外的对象,请将一个或多个对象移至另一对象组,也可以创建组。无论在哪一种情况下,由于一个对象每次只能属于一个组,因此必须先从所移动对象当前所在的组中除去此对象。
要从组中除去对象,请完成下列步骤:
要将对象添加到组中,请完成下列步骤:
要将所有对象组恢复为缺省情况,即每个对象一个组,请单击实例组选项卡上的设置为缺省。这将为每个对象添加一个对象组,并且,SD1 和 SD2 中的同一对象属于该组。
在规范时序图中,通常必须假定消息队列的工作方式以确定消息的顺序。在规范时序图中,消息的顺序很有可能与状态图中指定的实际顺序不同。不正确的顺序假定会导致大量的不匹配情况。
要避免此问题,比较操作必须能够忽略消息的计时。例如,实例 A1 在实例 A2 发送消息 M2 之后发送的消息 M1 可能与 M2 之前发送的同一消息匹配:

在另外一些情况下,要同时发送两条或两条以上的消息,但顺序不重要。消息组使您能够指定顺序无关紧要的一组消息。任何该组中的任何消息以任何顺序出现,都将发生匹配。
以下示例中显示的消息组选项卡使您能够创建、修改和删除消息组。
