共区结构
图1中,控制器首先接收来自阀的状态关闭(status_close)消息,然后接收来自压力计的高压状态(status_high_pressure)消息。有时我们并不希望在这两个事件间出现这样的顺序。消息序列图注释允许通过应用一个叫做共区(coregion)的结构,从而避免对于一个处理过程而言,各个事件的某个子集出现任何特定的顺序。
共区用表示处理过程的垂直线内虚线段来表示,这些虚线段内的事件是无序的。图3对图1进行了修改,它应用一个共区使事件e2和e4变得无序,它也表明了相关的优先顺序图。现在事件e2和e4是不可比较的,两者先于e5发生。
定时器结构
许多交互作用假设要用时序约束条件来限定消息流。通过应用三种专用事件:定时器设置、定时器复位和时间结束,你会很容易地在消息序列图注释中确定特定的交互作用假设。定时器设置通过将计时标记(hourglass)符号连接到一个单实体的时基上来表示;定时器复位通过将某个X连接到时基上来表示;时间结束用一根弯线将定时器的计时标记符号连接到实体时基来表示。
每一个定时器均有其特定的名字。对于每一个定时器而言,定时器复位和时间结束事件必定先于定时器设置事件。此外,时间结束事件是最后发生的事件。在图4中,在开始等待从阀和压力计实体发出消息前,控制器要启动定时器t1。控制器同时接收到来自阀和压力计的两个消息并将定时器复位,事件e7和e8表明定时器设置和定时器复位事件。图5显示了一个简明的消息序列图,图中控制器设定定时器t1(事件e7)并且在定时器t1(事件e9)时间结束前仅接受到来自阀的状态关闭(status_close)消息。
事件发生条件
条件是一种非正式描述机制,用以显示一个或一组实体达到的某个状态或情形。条件写为一个六边形框内的文本标签,可放置于某一实体或一组实体当中。如果条件C被置于实体E当中,那么除非条件得到满足,否则E不会进入到下一个事件。也就是说,条件C是实体中下一个事件发生的先决条件。如果将条件C被放置于一组实体E1,...,Ek之中,那么所有k个实体必须达到符合条件C的局部状态。只有在那个状态达到时,任何k实体才能在其相应的局部顺序中完成进一步处理。在这样的情况下,条件C可以被认为是完成进一步处理前确保实体E1,...,Ek达到相同状态的同步作用机制。
图6显示了图1中的消息序列图(稍作重新排序),并增加了一些条件,实体阀和压力计共享一个称为可用正确状态(correct_status_available)的条件。只有当这两个实体均达到满足该条件的某一状态时,它们才能按照其局部顺序进一步处理下去。该实体控制器必须达到某一状态,这个状态下实体控制器在接收状态信息前要满足准备接收状态(ready_to_receive_status)条件。这些条件的确切定义在此省略。
在线算子表达式
在线算子表达式(Inline operator expressions)是一种允许终端用户在消息序列图内确定补充控制流的机制,而且还可组合或合成多个消息序列图组。在线算子表达式当中,可以采用五种操作类型来确定控制流,分别是:
*可选择组合
*平行组合
*循环*可选区域
*例外
从图解的意义来讲,在线算子表达式用一条由虚线水平分割的矩形来描述;算子关键字(operator keyword)标准在右上角。
图7利用具有可选算子的在线表达式合并了图4和图5中的消息序列图组。矩形内的虚线分割两个交替的路径,在一次执行过程中,消息序列图仅处理其中一条路径。
补充工具
消息序列图注释为描述嵌入式系统内部的交互作用提供了更为丰富的工具。消息的收发并不限于任何特定的实体,还包括外部环境。发向外部环境的消息,箭头止于消息序列图框上;从外部环境接收消息,箭尾止于消息序列图框上。VSPACE=12 HSPACE=12 ALT="图7: 具有可选算子的在线表达式的一个消息序列图。">
消息可包括附加信息。例如,通过阀处理所发送的开启状态(status_open)和闭合状态(status_close),消息可以合并成单个命名状态消息,上述两个状态的消息则以“status(open)”和“status(closed)”表示,其中的变量包含了消息值。
消息序列图的动作用矩形表示,矩形内包含了将要被执行的某项任务的文字描述。与某种“条件”类似,动作矩形被置于某一实体垂直线上。然而,与某种“条件”不同的是,一个动作是局部的;它只可相连于单个实体而不可跨越多个实体。将此动作作为特殊事件加以处理,我们可将它们包括进与消息序列图相关的优先顺序图当中。与各种“条件”类似,动作通常按非正式的描述加以处理。
消息序列图组中尚存在许多其它的工具,如消息门(gates for messages)。用户也可以一种标准化的、以事件为导向的文字句法对消息序列图加以描述,而不是以这里所给出的可视注释加以描述。
高层消息序列图
基本消息序列图注释描述了微小而特殊的基本交互作用,但复杂系统又怎样处理呢?一个复杂系统通常描述为各种子系统的分级组合,其交互作用描述为子交互作用的分级组合。
高层消息序列图(HMSC)增强了基本消息序列图注释以便描述子交互作用的组合。HMSC注释也支持自上而下的分级注释,其意义在于可在不同层的提取上确定各种交互作用,即通过基础消息序列图组描述从最高层开始到最底层的交互作用。
HMSC是一组由有方向的边相互连接起来的节点集合。每一个节点既是开始符号-,也是终止符号D,圆长方形包含某一个到另一个低层或高层消息序列图的参考,六边形包含一个条件,空心圆表示一个连接点或含有两个或更多平行的高层消息序列图组(HMSCs)的平行框。就组合的方面而言,实体不在HMSC中出现。连接点仅供方便布局之用,它们没有语义。HSMC中的各种条件具有整体性,其意义在于适用于所有实体并表示某一整体系统状态。VSPACE=12 HSPACE=12 ALT="图8:一个高层消息序列图例。">
图8所示为控制器行为的HMSC。该行为由几个通过其它HMSC和MSC来说明的低层行为组成。通过这种方式,HMSC注释就可以自顶向下分层对行为进行分解。低层的HMSC可含有更深一层的HMSC或MSC。在此要强调的是,因HMSC是循环的,所以它不含终止符。我们已强调过:一个基本MSC总是有限的;但HMSC却不是这样,因为某个HMSC可能包含多个循环(表明是周期性的或循环的行为)。
复审和确认
项目要求的复审和确认,包含在那些应用消息序列图组确定的要求,是质理管理的重要组成部分。对于已用消息序列图确定的项目要求,还可用两种方法来复审和确认,一个是运行仿真,也称之为原型或模拟,可就特殊情形测试消息序列图组;另一个是确保消息序列图组满足特定的系统特征(原理)。
后者可采用工具自动检查HMSC,你可运用与临时逻辑有关的注释来表述特性并使用诸如模型检查和满意度来验证所给特性。此外,一些专用算法和工具可用来分析给定的HMSC,以自动检测若干意外的情况,如死锁、竞争条件和非局部选择。
购买指南
消息序列图为设计实时安全和重大任务系统的工程师提供有价值的服务。类似于在UML中的序列图和应用实例注释,消息序列图组有几点优于UML的性能。
例如,消息序列图简化了在早期设计阶段的概念化系统要求。消息序列图将系统及其外部与该系统相互作用的所有实体描述为一个黑盒子,图表仅包含了一个有关系统与其外部环境间交互作用的简洁而非正式的描述。黑盒子和其外部实体作为消息序列图组中的单个实体,意即你无需知道或明确有关系统的内部结构或行为,当然我们己知的交互作用除外。这样的高层黑盒子交互作用导向的系统要求在UML中就说明得不够充分。
消息序列图组也可用作测试过程的规范(综合测试)。由于你可以运用消息序列图仿真、正式验证或完善规范,你可在实时嵌入系统的生命周期内广泛运用消息序列图组。此外,消息序列图注释也正因其特殊的应用价值而在几个领域广泛运用。例如,在计时消息序列图组中,上部和下部时限可用每一个消息加以规定,使其更适用于协议和实时系统。此外,由一套消息序列图组还可制作各种文件。
作者:Girish Keshav Palshikar
Tata研究开发与设计中心
Email: girishp@pune.tcs.co.in