UseCase(用例)是一个UML中非常重要的概念,在使用UML的整个软件开发过程中,UseCase处于一个中心地位。用例是对一组动作序列的抽象描述,系统执行这些动作序列,产生相应的结果。这些结果要么反馈给参与者,要么作为其他用例的参数。
用例被认为是第二代面向对象技术的标志。
【拼音】:yònglì
袁谁言直【注音】:ㄩㄥˋㄌㄧˋ
释义:(1).援用成例。
【出处】:《宋史·寇准传》:"宰相,所以进贤退不肖也,若用例,一吏职尔。"
释义:(2).动用中的实例。
那么,到底什么是UseCase呢在UML的文档中,UseCase的定义是:在不展现一个系统或子系统内部结构的情况下,对系统或子系统的某个连贯的教曲损左功能单元的定义和描述。有点县慢酒她盾友程拗口,对吧其实UseCase就是对系统功能的描述而已,不过一个UseCase描述的是整个系统功能的一部分,这一部分一定要是在逻辑上相对完整的功能流程。在使用UML的开发过程触号房谈乙中,需求是用UseCase来表达的,界面是在Use只只轮均格极Case的辅助下设计的,很多类是根据UseCase来发现的,测试实例是根据UseCase来生成的,包括整个开发的管理和任务分配,也是依据UseCase来组织的。
对不同的Actor来说,他要使用问种胡述唱系统的某项功能也不同。所以河入滑者陆存,在识别和分析U法日见审论检统稳重秋外seCase时,我们要对每个Actor逐一进行。对于ToDoUser,我们可以轻易的识别出两个UseCase:AddTask和RemoveTask。ToDoUser主动使用这两个UseCase所描述的系统功能,所以在我们的UseCase图上,ToDoUser和这两个UseCase的关系是用从ToDoUser发出的箭来表示的。对于FileSystem,我们识别出的也是同样的两个UseCase,不过这次箭头从UseCase指向FileSystem,表示FileSystem是被动的。
UseCase由以下元素组成:
名称
简单描述
事件流
关系
UseCase图
特殊需求
前条件
后条件
1.用户插入信用卡2.输入密码3.输入提款金额4.提取现金5.退出系统,取回信用卡但是这只描述了提款用例中最顺利的一种情况,作为一个实用的系统,我们还必须考虑可能发生的各种其他情况,如信用卡无效、输入密码错、用户帐号中的现金余额不够等,所有这些可能发生的各种情况(包括正常的和异常的)被称之为用例的场景(Scenario),场景也被称作是用例的实例(Instance)。在用例的各种场景中,最常见的场景是用基本流(B住活穿各术asicFlow)来描述的球怎均式举,其他的场景则是用备选流(AlternativeFlow)来描述。对于ATM系统中的"提款"用例,我们可以得到如下一些备选流:
备选流一:用户可以在角工己基本流中的任何一步选择退出,转至基本流步骤5。
备选流二:在基本流步骤1中,用户插入无效信用卡,系统显示错误星歌游表并退出信用卡,用例结束。
备选流三:在基本流步骤2中,用户输入济列交端错误密码,系统显示错误并提示用户重新输入到们千向越将已义看数室密码,重新回到基本流步骤2;三次输入密码错误后,信用卡被系统没收,用例结束。…通过基本流与备选流的组合,就可以将用例所有可能发生的各种场景全部描述清楚。我们在描述黄句象联某有曾念现用例的事件流的时候,就是要尽可能地将所有可能的场景都描述出来,以保证需求的完备性。
IvarJacobson在1967年定义爱立信AXE系统的构架时开始书写使用场境usagescenarios。
二十世纪八十年代中期Jacobson花了很多精力来思考过去十多年的工作方法。他造了一个术语anvendningsfall,大意是"使用情况"(situationofusage)或用况(usagecase)。但当用英文出版的时候,他发现"useagecase"在英语里说不通,所以写作用例"usecase"
用例是短文
用例可以是一个场景,包括动作和互交。
用例可以是一组场景,描述不同场景下的行为。这种书写格式可以在任何时候描述有变体的行为,例如黑盒需求,业务流程,系统设计说明。
用例里不要有系统设计
用例里不要有界面设计
用例里不要有特性列表
用例里不要有测试
用例应该描述行为需求
用例的主场景不要超过九步。可以在适当的层次上得到子目标和移除设计说明。
用例的最大价值不在于主场景,而是在于备选行为。主场景可能只占用例长度的四分之一到十分之一。
UseCase具有一个基本事件流(可称为"理想路径")、多个例外流,包括:
基本变化
特殊情况
处理错误情况的异常事件流
UseCase说明书应包括以下内容:
功能描述
可用性
可靠性
性能
可支持性
设计约束
试图决定UseCase的大小是一个很有趣的话题,处理这件事的一个方法是将UseCase的大小跟它的意图和范围关联起来,对于一个真正大的范围来说,一个UseCase并不要在一个系统中处理那么多,但这些系统都用于同一商业领域,称为BusinessUseCase,它把整个公司看作一个黑盒和Actor关于公司目标的说明。这些BusinessUseCase的场景不允许假定任何公司内部的结构,一个客户将向公司下一个定单而不是客户服务部门。
对于系统发展而言,UseCase的范围限制一个单一的系统,这是UseCases最通常的形式,我们称之为SystemUseCase,它把整个系统看作是一个黑盒,它不指定任何内部结构并且仅受限于问题域的语言描述。
UseCases的另一范围是设计子系统和系统内部组件的,称为ImplementationUseCases,它把组件看作一个黑盒,并且这些Actors是区分它的成员。例如:可能会用ImplementationUseCases去说明应用系统中email组件的需求。
给出了这些分类,关于UseCase的大小话题变得容易了,设计这些项的范围来调整整个大小。帮助系统设计者,每个UseCase只描述没有大的分支的行为的单个线索。违背这个规定,UseCase看起来通常是不准确的或含糊的,作为测试说明的资源和参考,它也是很难使用的。
UseCases的好处是一些情节能用不同程度的正规化的文字说明。每个情节涉及UseCases中单一的途径,细节是条件组。
不正规的文本描述也能使用,不过当条件较多和可能失败的情况下它们很难跟随下去。开始试图理解需求时,不正规的叙述风格也是非常有用的,然而随着UseCases的进展,使用更加正规的机制去说明UseCases才是有用的。
下面是客户对UseCase"下定单"的粗略概略:
"确定客户,找出需要的并且仓库里还有的物品并检查客户信用额是否够用"
结构化叙述的格式已经被证明是非常有效的。这个格式所做的事是描述每一个情节的行为者:目标语句对顺序的叙述。在这个顺序中,每一个行为者:目标的语句对都假设前一个的目标是成功的,右面是一个简单的范例:
UseCases认为我们正在设计的系统是一个单一的黑盒,根本没有任何内部结构被记录下来,并且它被认为是一个情节产生的目的及对应单一的行为者(Actor)。这些UseCases没有表示任何关于系统内部的东东,只是表示系统将达到什么样的目标及由什么(人或其它系统)操作和负责。
UseCases已经得到越来越广泛的应用,它与其它需求捕获技术相比,它成功的原因在于:
1UseCases把系统当作一个黑盒
2UseCase使在需求中看到实现的决定变得更加容易
为什么这些需求不指定内部结构的原因是,说明的内部结构给设计者带来了额外的约束,没有这些约束设计者们能更自由地建立一个正确实现客观可见行为的系统,并存在出现突破方案的可能性。
是否每个UseCase都包括至少一个actor
是否每个UseCase都独立于其他UseCase
是否每个UseCase都有一个简单的行为或事件流
是否每个UseCase都有一个唯一的、直观的、可扩展的名称,使它不至于在后期被混淆。
用户是否容易理解UseCase的名称和描述。
UseCase模型显示系统中的UseCase与Actor及其相互关系。其评价标准有:
UseCase模型是可理解的吗
通过对UseCase模型的研究是否能对系统功能有一个清晰的概念。
所有的actor都定义了吗所有的功能需求都满足了吗
UseCase模型是否存在多余的行为。
从模型到UseCase包的划分是否是恰当的。
1使用usecase十大误区
1.系统的boundary没有定义或经常改变;
2.从系统观点而不是actor观点来定义UseCase;
3.Actor的名称不一致;
4.UseCase定义过多;
5.UseCase和actor之间的关系象蜘蛛网一样错综复杂;
6.UseCase的说明太长;
7.UseCase的说明不清楚;
8.UseCase没有正确的描述功能需求;
9.用户无法理解UseCase;
10.UseCase无法正常结束。
2如何避免以上问题
清楚的确定系统的boundary.
使用标准模板书写UseCase说明书
面向UseCase的需求与传统的功能性系统需求之间最显著的区别在于actor,以面向UseCase的观点,系统存在是由于actors要通过该系统实现某些目标,actor与系统进行交互来实现其目标,我们将这些交互行为定义为UseCase。
不要将UseCase说明书与用户接口设计相混淆
将用户接口设计置于UseCase说明书还会出现另一个问题,为了在UseCase之间和接口之间建立一对一的通信,我们会选择反映用户接口的UseCase块而不是反映用户目标的UseCase块,这样,为了表达一个完整的用户目标,我们使用交互UseCase关系,将不同的、基于用户接口的UseCase联接起来,结果在UseCase模型中,我们得到了一幅类似蜘蛛网的关系图。实际上,这副图是用户接口说明图,虽然它在系统文档中是很重要的一部分,但他属于用户接口设计文档,而不是UseCase需求文档。
实现用户接口和UseCase交互之间的松散耦合
松散耦合是比较合适的,低逼真度的用户接口图有助于理解UseCase,但要注意不要过度的将基本交互与用户界面机制相连,用户界面很有可能会改变。在功能说明书中,要注意actor做些什么(如"提交请求")而不是交互是怎样完成的(如"双击提交按钮")。
不要在UseCase和用户接口之间建立通信
试图在UseCase和用户接口之间建立通信可能会存在潜在的、不正确的功能操作。UseCase不仅与只能访问某个接口的actor相联,而且与那些能够更新该接口的actors相连(这可能是例外流),结果就造成了不正确的功能操作。我们应该在基于实际用户目标和功能操作的基础上拆分UseCase,而不是在基于用户接口的基础上组合UseCase,只有这样才能得到正确的UseCase模型。
回顾UseCase模型和UseCase说明书,如果你不能防止所有的误区,你应该尽早认识问题并确定问题
这个观点并不是什么新东西,有关代码检查的经典算法已有大约25年历史了,但怎样将其应用于UseCase呢首先,回顾UseCase模型,回顾一下UseCase的简单说明(UseCase名称、目标、简单描述)。这项工作应在绘制草图时尽早执行,并在写详细的UseCase说明书之前完成。接着是回顾UseCase草图,保证图是正确的,并且详细的UseCase说明书是完整的。最后是正式回顾最终的UseCase图和UseCase说明书。
主要行为者(Actor)和UseCase之间没有连结
情节步骤不需要连续
情节中步骤顺序的情况是没问题的,这里有一些机制去突出可能的并行步骤。在UML中活动图是首选的机制,通过非正式地看UseCase的情节你可以注意到可能的平行步骤;可以看UseCase内一些邻近的步骤;也可以有相同的行为者(Actor)对步骤负责。之前我们举过的例子里,确认数量和确认信用额可能是平行的。有时候在UseCase的说明文档中标记这些可能的平行步骤是有用的。
UseCases的大小
当开始做UseCases的时候有个很显然的危险就是它要么有很多步骤要么就很少步骤。如果在UseCase中有超过15个步骤,它可能包含一些实现明细。如果它只有非常少的步骤则检查它的目标是否是达到一个没有很多分支的活动的单一线索。
较少的人类行为者(Actor)
如果UseCase有较少的人类行为者,而大多数行为者是其它系统,通常的做法是修改这个UseCase。寻找系统必须做出反映或公认的事件胜过会见这些行为者。
需求捕获和系统复杂性
总而言之,这些情节捕获到系统复杂度的同时行为者:目标语句对容许大的系统以相对压缩的格式说明。UseCase的格式的作用是用户和开发者能标志出行为者,然后确认这些行为者工作职责对应(或不对应)的目标,代替一个大的很难读的功能规格说明书。
仅仅这样,用户和开发者就有足够的兴趣进而研究那些情节的细节。
系统不仅仅有应得的功能性需求
一些UseCases并没有捕获所有的客观需求,仅仅是捕获了系统怎么用的那些功能性需求。然而还有许多方面的需求需要去捕获的。其中有的非功能性需求使用关联以至于也能隶属于个别的UseCase,如性能需求和系统容量的需求。另外的一些不是关联的而是要单独地去捕获,它们是以下的需求:
·系统范围
·用户界面原型
·一般规则
·约束
·算法
运行时期和建立时期的需求比较
一个重要的因数要记住,就是系统的赞助者是大过用户团体的。系统中有许多的风险承担者,UseCases仅仅捕获其中一些风险承担者的需要,具体说,UseCases仅仅捕获系统运行时期的需求而忽略做为系统开发组织的风险承担者的需求,开发组织最有兴趣的是对建立时期需求的描述。
运行时期需求包括:系统范围、用户组织对产品的期望和目标、UseCases、其它非功能性需求。
建立时期的需求可以部分的由UseCases把握。但许多方面是需要由开发组织的处理的。
·项目范围和目标:项目必须提交什么。(和系统范围的区别是它提交的是所有项目的东西)
·开发负责人的约束:包括标准、习惯、工具、品质度量标准、品质保证原则、及品质保证的习惯。
UseCases首先用于需要响应客观事件的系统。它们能用于提供了一个有很容易理解的目标的清楚的行为者的环境。当结果不可定义或不清晰时不能用UseCases。意思是如果目标成功或目标失败不能有一个明确的定义,那么UseCases不能用来捕获需求。
然而说到这,现在大部分对象方法都使用UseCases。因为UseCases被证明是捕获需求的非常有效的机制。
UseCase是系统提供的功能块,换句话来说UseCase演示了人们如何使用系统。通过UseCase观察系统,能够将系统实现与系统目标分开,有助于了解最重要的部分――满足用户要求和期望,而不会沉浸于实现细节。通过UseCase用户可以看到系统提供的功能,先确定系统范围再深入开展项目工作。