【IT168 技术文章】
什么是用例模型?
一个用例模型由一张图表和一组阐明该用例的描述组成。一个用例是在一个系统中的一组可能的交互,它的参与者朝着同一个被定义的目标进行。这些描述描述了系统中该用例的功能性;这张图表提供了这些描述的可视化路标。UML 规定了建立用例图表的标准,但并不是为了编写用例描述的。结果产生了许多编写用例描述的方法,这些方法有时是互相竞争的。
最流行的编写用例描述的方法体现着 Ivar Jacobson (用例建模的发明者)的思想。Jacobson 的方法涉及一系列进入和退出的准则,分别被称作 前置条件和 后置条件,和一个称为 事件流的核心准则。这个事件流描述了一系列参与者(用户或外部系统)和被制定的系统之间的交互。这个事件流代表一个经过系统的通向成功输出的单一路径。这是用例描述的核心部分,但不是全部。
事件流的交替和例外
除描述中心事件流之外,用例描述必须说明那些发生在普通事件流之外的交互。例如录像带租用用例的主要事件流(在简单情况下)可以如下表示:
录像带租赁店店员扫描顾客的会员卡。
系统取得会员名和他目前的租赁状况。一个“允许租赁”状态表示这个顾客可以租用录像带。
录像带租赁店店员扫描每盘被租借的录像带。
系统通过扫描每盘录像带,将可出租的录像带加入到用户可见的列表中,并显示当前的可出租的录像带列表。
录像带租赁店店员输入应收取的钱的数量(如果是现金)或者扫描信用卡。
系统标记这盘录像带为已在某段时间被出租并且打印这笔交易的收据。
但是如果顾客在上次租借中欠了逾期费怎么办?在她能再次租借她所选的录像带之前,她需付清所欠的逾期费。逾期费的交互表现为一个 交替流或 例外流。事件流的交替和例外是很正常的。在某些情况下,他们可以被纠正以重新开始正常的事件流,在其他情况下,他们则达不到目标。在我们的示例中,如果顾客付了逾期费和这次的租金,那她就达到了继续租借录像带的目的了。
用例建模中的事务处理
伴随着它的交替和例外,事件流是由一系列的事务处理组成。 事务处理是由参与者发起,并且当系统等候来自参与者的触发信号时完成的交互(注意完成事务处理的参与者不一定就是发起该事务处理的参与者)。事务处理允许我们把用例分割成更小的元素,并在每个决定点上将逻辑分组。 决定点是在描述中参与者必须作出决定或者提供额外信息的那个点。
所有的事务处理是由一个参与者和一个系统交互组成。您将极少需要计划一个没有启动的系统,即使这个启动仅仅以时间为基础。当建立用例模型的时候,您必须确保每个启动被某种类型的系统响应访问到。这个调用和响应对于用例来说是完整的。
序列图中的事务处理
事务处理在序列图中是很容易识别的。在我的第一个专栏中,我介绍了只有两个事务处理的方案。当申请者请求新的贷款申请时,第一个事务处理被启动。这个事务处理以系统等待申请者填写请求和提交请求为结束。当申请者在线提交了贷款申请时,第二个事务处理被启动。它以系统请求商业资信咨询机构的信用报告为结束。
图 1 让我们再看一下建立用来描述这个方案的序列图 -- 提交贷款请求和它的两个事务处理。这个图表建立了从开始到结束的两个事务处理的模型。您将会想起,这是一个一般的序列图,它允许我们在以后添加更多的方案(从而加入更多的事务处理)。至少就这个开发循环的分析阶段而言,当我们添加方案时,我们将完成这个用例。然而,当我们转向设计的时候,我们可能发现我们需要添加更多的事务处理。例如,如果我们选择作屏幕到屏幕的确认(代替当前在提交时的单一确认),我们必须在每一步确认时添加一个事务处理。
现在看一下图 1,仔细注意事务处理的描述。以识别信息的方向从参与者到出现在最接近顶部的一个类或者实例为开始。正如您在下面的图表中看到,第一个事务处理通常是从左边开始。沿着箭头的顺序直到您到达了另外一个参与者或者顺序结束。当顺序结束时,它返回到最初的参与者。这就是一个事务处理。在图 1 中您应该能看到两个完整的事务处理。
图 1. 一个提交贷款请求用例的部分序列图
象其他大多数用例那样,提交贷款请求用例使用多重的事务处理。迄今为止,我们只列出了其中的两个图表,但是一个普通的用例使用大约 3 到 15 个事务处理。
为了理解透视图和事务处理的关系,我们可以看一下当两个系统通讯时事务处理是如何表现的。一些软件系统实际上是一系列互连的较小系统。这些较小系统相互合作提供整个系统的功能性。每个较小系统只提供整个系统功能的一个子集。他们通过一组协议和机器接口进行通讯,这将把我们的用例模型提高一个全新的复杂程度。
互连系统的系统建模
当考虑到互连系统时,这对建立由较小互连系统组成的大系统有意义。您可以交换一个系统并且用其它的系统替换它。您也可以独立地建立每一个系统。并且您可以用许多站点或厂商来完成整个系统。
这样一个系统的最好示例是典型的电话网络。电话网络的一部分提供拨入通道,另一部分传送声音或数据,还有另一部分提供帐单服务,以及有许多其它部分开展象呼叫转移和语音邮件这样的服务。电话网络也许是由互连系统组成的系统的一个最大的示例,并且它的连续工作也证明了这种系统的有效性。同样的,懂得如何构思和建立这样的系统模型是十分重要的。