描述,UML中一个单一的“Stick-Man”符号标示行为者(Actor),用椭圆标示Use Cases,如图一所示。这些图对于你想看到Use Cases之间如何关联的“大图”和获得系统上下文的大体描述来说是非常重要的。
Use Cases图没有显示不同的情节,它们的意图是显示行为者和Use Cases之间的关系。所以Use Cases图需求用结构化叙述文本来补充。UML提供一些可供选择的图来显示不同的情节,这些常规的图形有交互图、活动图、顺序图、状态图等。使用这些图的主要缺点是它们不象文本一样是紧密的,但它们能用于给出Use Case的整体感觉。对于这些图的协定的参考请见《UML Distilled》,作者Martin Fowler。
需求重用取得
按行为者:目标(Actor:Goal)的格式来描述Use Case的作用是它容许公共的功能性分解出来做为独立的Use Case。当执行公共部分的时候是指用于主要Use Case的。比如:Use Case下定单中的“确定客户”这一步骤可以用于其他Use Cases。
Use Cases之间的另一关系是“延伸部分”,如果Use Case有一个失败恢复的步骤是复杂的,通常有三、四步,说是一个Use Case去扩展另一个Use Case。比如:当没有可用库存时,“Issue Raincheck”可能扩展Use Case“下定单”。
Use Cases应用当中的复杂性和危险
主要行为者(Actor)和Use Case之间没有连结
一些情况下,从Use Case中取值的行为者(Actor)和积极参与这个Use Case的行为者(Actor)之间没有清晰的连结。如:财务主管能成为“发票确认”的行为者(Actor),但他未必是创建发票的人。这不是什么问题,这个Use Case仍然是正确的,它正说明行为者取值和设计的系统的范围外的Use Case发生的初始化之间的关系。主要行为者是有用的,因为这个人扮演的角色是当你说明Use Case时需要跟他说的人。
情节步骤不需要连续
情节中步骤顺序的情况是没问题的,这里有一些机制去突出可能的并行步骤。在UML中活动图是首选的机制,通过非正式地看Use Case的情节你可以注意到可能的平行步骤;可以看Use Case内一些邻近的步骤;也可以有相同的行为者(Actor)对步骤负责。之前我们举过的例子里,确认数量和确认信用额可能是平行的。有时候在Use Case的说明文档中标记这些可能的平行步骤是有用的。
Use Cases的大小
当开始做Use Cases的时候有个很显然的危险就是它要么有很多步骤要么就很少步骤。如果在Use Case中有超过15个步骤,它可能包含一些实现明细。如果它只有非常少的步骤则检查它的目标是否是达到一个没有很多分支的活动的单一线索。
较少的人类行为者(Actor)
如果Use Case有较少的人类行为者,而大多数行为者是其它系统,通常的做法是修改这个Use Case。寻找系统必须做出反映或公认的事件胜过会见这些行为者。
需求捕获和系统复杂性
总而言之,这些情节捕获到系统复杂度的同时行为者:目标语句对容许大的系统以相对压缩的格式说明。Use Case的格式的作用是用户和开发者能标志出行为者,然后确认这些行为者工作职责对应(或不对应)的目标,代替一个大的很难读的功能规格说明书。
仅仅这样,用户和开发者就有足够的兴趣进而研究那些情节的细节。
系统不仅仅有应得的功能性需求
一些Use Cases并没有捕获所有的客观需求,仅仅是捕获了系统怎么用的那些功能性需求。然而还有许多方面的需求需要去捕获的。其中有的非功能性需求使用关联以至于也能隶属于个别的Use Case,如性能需求和系统容量的需求。另外的一些不是关联的而是要单独地去捕获,它们是以下的需求:
l 系统范围
l 系统用户的目标
l 用户界面原型
l 一般规则
l 约束
l 算法
运行时期和建立时期的需求比较
一个重要的因数要记住,就是系统的赞助者是大过用户团体的。系统中有许多的风险承担者,Use Cases仅仅捕获其中一些风险承担者的需要,具体说,Use Cases仅仅捕获系统运行时期的需求而忽略做为系统开发组织的风险承担者的需求,开发组织最有兴趣的是对建立时期需求的描述。
运行时期需求包括:系统范围、用户组织对产品的期望和目标、Use Cases、其它非功能性需求。
建立时期需求包括:减少开发成本、较少的变更处理、现存组件的重用。
建立时期的需求可以部分的由Use Cases把握。但许多方面是需要由开发组织的处理的。
l 项目范围和目标:项目必须提交什么。(和系统范围的区别是它提交的是所有项目的东西)
l 增长性和变更请求:这些可以在捕获为常规Use Cases格式中的“Change Cases”
l 开发负责人的约束:包括标准、习惯、工具、品质度量标准、品质保证原则、及品质保证的习惯。
Use Cases的适用性
Use Cases首先用于需要响应客观事件的系统。它们能用于提供了一个有很容易理解的目标的清楚的行为者的环境。当结果不可定义或不清晰时不能用Use Cases。意思是如果目标成功或目标失败不能有一个明确的定义,那么Use Cases不能用来捕获需求。
然而说到这,现在大部分对象方法都使用Use Cases。因为Use Cases被证明是捕获需求的非常有效的机制。
总结
Use Cases以一种可读的、可驳倒的格式捕获需求。Use Cases是系统客观必需机能的可驳倒的描述。
可驳倒的意思是当你说明Use Cases时期望从用户和开发者处获得关于Use Cases品质的反馈。
Use Cases并没有从一开始就就明确的定义,它主要的开发顺序如下:
1、 指出行为者(Actor)
2、 指出行为者的目标
3、 指出每一行为者:目标语句对的成功或失败的意思
4、 指出每一Use Case的主要的成功的情节
5、 在细化阶段,指出失败的条件及可恢复/不可恢复的情节
只有做到了第四步才能决定哪一些的东西在Use Case中逐步开发出来。
总而言之,Use Cases是非常有效的需求捕获技术,它能使需求变得容易回顾,并且避免在需求中有实现细节的偏好出现。