现代软件工程
上QQ阅读APP看书,第一时间看更新

3.8 生成行为模型

建模表示方法只是表达了需求模型中的静态元素,现在要把它转换成系统或产品的动态行为。为此,可以把系统行为表示成一个特定的事件和时间的函数。行为模型显示了软件如何对外部事件或激励做出响应。要生成模型,分析师必须按如下步骤进行。

1)评估所有的用例,以保证完全理解系统内的交互顺序。

2)识别驱动交互顺序的事件,并理解这些事件如何与特定的对象相互关联。

3)为每个用例生成序列。

4)创建系统状态图。

5)评审行为模型以验证准确性和一致性。

用例表现了涉及参与者和系统的活动顺序。一般而言,只要系统和参与者之间交换了信息就发生事件。这里,事件不是被交换的信息,而是已交换信息的事实。

在行为建模的场合下,必须考虑两种不同的状态描述:①系统执行其功能时每个类的状态;②系统执行其功能时从外部观察到的系统状态。

类状态具有被动和主动两种特征。被动状态只是某个对象所有属性的当前状态。一个对象的主动状态指的是对象进行持续变换或处理时的当前状态。必然发生事件(有时被称为触发器)才能迫使对象做出从一个主动状态到另一个主动状态的转移。

有两种不同的行为表现形式。第一种显示一个类如何改变基于外部事件的状态,第二种以时间函数的形式显示软件的行为。

1)分析类的状态图。UML状态图是一种行为模型,该图为每个类呈现了主动状态和导致这些主动状态变化的事件(触发器)。图3-20举例说明了SafeHome安全功能中ControlPanel类的状态图。

图3-20中显示的每个箭头表示某个对象从一个主动状态转移到另一个主动状态。每个箭头上的标注都体现了触发状态转移的事件。尽管主动状态模型在提供对象的“生命历史”信息方面非常有用,但也能提供另外一些信息以便加深理解对象的行为。除了说明导致转移发生的事件外,分析师还可以说明守卫Guard和动作。守卫是为了保证转移发生而必须满足的一个布尔条件。例如,图3-20中从“读取”状态转移到“比较”状态的守卫可以由检查用例来确定。

978-7-111-52634-6-Chapter03-21.jpg

图3-20 ControlPanel类的状态图

if(password input=4 digits)then compare to stored password

一般而言,转移的守卫通常依赖于某个对象的一个或多个属性值。换句话说,守卫依赖于对象的被动状态。

动作是与状态转移同时发生的或者它作为状态转移的结果,而且通常动作包含对象的一个或多个操作(职责)。

2)顺序图。第二种表现行为的方式在UML中称为顺序图,它表明事件如何引发从一个对象到另一个对象的转移。一旦通过检查用例确认了事件,建模人员就创建了一个顺序图,即用时间函数表现如何引发事件从一个对象流到另一个对象。事实上,顺序图是用例的速记版本。它表现了导致行为从一个类流到另一个类的关键类和事件。

图3-21给出了SafeHome安全功能的部分顺序图。每个箭头代表了一个事件(源自一个用例),并说明了事件如何引导SafeHome对象之间的行为。时间纵向(向下)度量,窄的纵向矩形表示处理某个活动所用的时间。沿着纵向的时间线可以展示出对象的状态。

第一个事件“系统就绪”来自外部环境并把行为引导到对象Homeowner。房主输入一个密码,“查找请求”事件发送到System,在一个简单的数据库中查找密码并向ControlPanel(现在处在比较状态)返回(找到或没有找到)结果。有效的密码将促使系统产生“密码正确”事件,该事件通过“激活请求”事件激活传感器。最终,通过控制把“成功激活事件”返回到房主。

一旦完成了完整的顺序图,把所有导致系统对象之间转移的事件整理为输入事件集合和输出事件集合(来自一个对象)。对于将要构建的系统而言,这些信息对于创建系统的有效设计非常有用。

978-7-111-52634-6-Chapter03-22.jpg

图3-21 SafeHome安全功能的顺序图(部分)