用例是什么?其原始英文是usecase,直译过来就成了用例。这也是一个比较贴切的叫法了,从字面的直接理解就是使用的例子。另一种比较流行的定义是用例就是与使用者(actor)交互的,并且给使用者提供可观测的有意义的结果的一系列活动的集合。
这个定义还是比较费解的,笔者在众多应聘者中发现很多使用用例来做需求的系统分析员,有的已经使用了两年以上,但仍不能把握用例的本质,虽然他们号称精通UML。
最具普遍意义的理解错误是认为用例就是功能的划分和描述,认为一个用例就是一个功能点。在这种理解下,用例变成了仅仅是较早前需求中功能框图的翻版,很多人用用例来划分子系统,功能模块和功能点。如果这样,用例根本没有存在的必要。有意思的是,造成这种理解错误的相当一部分原因却是因为对OO思想的理解不够深入,本质上说,把用例当成功能点的系统分析员脑子里还是面向过程的那一套思想,虽然他们在使用OO的工具,OO的语言,号称在做面向对象的开发,但过程的影子还没有从他们脑子里彻底抹去。
如果用例不是功能的话,它是什么呢?从定义上说,能给使用者提供一个执行结果的活动,不就是功能吗?我的回答是:错!功能是计算机术语,它是用来描述计算机的,而非定义需求的术语。功能实际描述的是输入-->计算-->输出。这让你想到了什么?DFD图?这可是典型的面向过程分析模式。因此我说把用例当做功能点的分析员实际在做面向过程的分析。
而用例则不是计算机术语,UML除了在计算机行业中应用,它也经常被应用在其它行业中。用例是一种需求方法学,虽然软件危机和OO的发展促成了它的诞生并被完美的融合进了OO体系,形成了UML,但它实际上并不是软件行业的专用品。如果非要从功能的角度解释,那么用例可以解释为一系列完成一个特定目标的“功能”的组合,针对不同的应用场景,这些“功能”体现不同的组合方式。实际上,把用例解释为某个参与者(actor)要做的一件事可能更为合适。这样的一件事有以下几个特征:
一、这件事是相对独立的。这意味着它不需要与其它用例交互而独自完成参与者的目的。也就是说这件事从“功能”上说是完备的。读者可能会想到,用例之间不是也有关联关系吗?比如扩展,比如实现,比如继承,它看上去并不是独立的嘛。关于这个问题,笔者会在后续的文章里详细说明。这里稍微解释一下,用例之间的关系是分析过程的产物,而且这种关系一般的产生在概念层用例阶段和系统层用例阶段。对于业务用例,这个特征是很明显的。
二、这件事的执行结果对参与者来说是可观测的和有意义的。例如,系统会监控参与者在系统里的操作,并在参与者删除数据之前备份。虽然它是系统的一个必需组成部分,但它在需求阶段却不应该作为用例出现。因为这是一个后台进程,对参与者来说是不可观测的,它应该在系统用例分析阶段定义。又比如说,登录系统是一个有效的用例,但输入密码却不是。这是因为登录系统对参与者是有意义的,这样他可以获得身份认证和授权,但输入密码却是没有意义的,输入完了呢?有什么结果吗?
三、这件事必须由一个参与者发起。不存在没有参与者的用例,用例不应该自动启动,也不应该主动启动另一个用例。用例总是由一个参与者发起,并且满足特征二。例如从ATM取钱是一个有效的用例,ATM吐钞却不是。因为ATM是不会无缘无故吐钞的,否则,我从此天天守在ATM旁,生活无忧矣。
四、这件事必然是以动宾短语形式出现的。即,这件事必须有一个动作和动作的受体。例如,喝水是一个有效的用例,而“喝”和“水”却不是。虽然生活常识告诉我们,在没有水的情况下人是不会做出喝这个动作的,水也必然是喝进去的,而不是滑进去的,但是笔者所见的很多用例中类似“计算”,“统计”,“报表”,“输出”,“录入”之类的并不在少数。
除去以上的特征,笔者觉得用例的含义还要更深些。首先,用例的背后是一种需求方法论。其核心是以参与者为中心(区别于以计算机系统为中心),从参与者的角度来描述他要做的日常工作(区别于以业务流程描述的方式),并分析这些日常工作之间是如何交互的(区别于数据流的描述方式)。换句话说,用例分析的首要目标不是要弄清楚某项业务是如何一步一步完成的,而是要弄清楚有多少参与者?每个参与者都做什么?业务流程分析则是后续的工作了。其次,用例简直就是为OO而生的,其思想完美的符合OO。用例分析方法试图找到问题领域内所有相对独立的参与者和事件,并把业务流程当成是这些参与者和事件之间的交互结果(在UML用活动图或序列图来描述)。因此,用例方法被吸纳到OO之后,UML得以以完备的形式出现,用例成为了真正的OO核心。在RUP里,这种核心作用被发挥到极致,产生了用例驱动(usecase driven)的软件过程方法,在RUP里,软件生产的所有过程和产物都是围绕着用例形成的。
可以说,用例分析是OO的第一步。如果用例分析本身出了问题,对业务架构,软件架构的影响是很大的,将大大削弱OO的优势--复用、扩展。笔者认为软件复用可以分为三个层次,最低层次的复用是代码级复用,这是由OO语言特性提供支持的,例如继承,聚合,多态;较高层次的复用是组件级复用,这是由设计模式提供支持的,例如Factory模式,Builder模式;最高层次的复用则是服务级复用,这在很大程度上是由应用服务器和通讯协议来提供支持的,例如最近炒得火热的SOA(面向服务的应用)架构。用例分析的好坏也许对代码级和组件级的复用影响不太大,但对服务级的复用影响却是巨大的。笔者认为服务级复用是OO的最高境界,而结构良好的用例分析则是达到这一境界的基础。
闲话:
今天你OO了吗?
如果你的分析习惯是在调研需求时最先弄清楚有多少业务流程,先画出业务流程图,然后顺藤摸瓜,找出业务流程中每一步骤的参与部门或岗位,弄清楚在这一步参与者所做的事情和填写表单的结果,并关心用户是如何把这份表单传给到下一个环节的。那么很不幸,你还在做面向过程的事情。
如果你的分析习惯是在调研需求时最先弄清楚有多少部门,多少岗位,然后找到每一个岗位的业务代表,问他们类似的问题:你平时都做什么?这件事是谁交办的?做完了你需要通知或传达给谁吗?做这件事情你都需要填写些什么表格吗?....那么恭喜你,你已经OO啦!
分享到:
相关推荐
【OO系统分析员之路--用例分析系列】是一组关于用例分析的教程,适合初学者和有一定经验的系统分析员。本系列共八篇文章,旨在深入解析面向对象(OO)系统分析中的用例分析技术,帮助读者理解和掌握用例在需求分析中...
(5)--用户、业务用例和业务场景写点什么呢?按照原先的设想,应该开始动手写如何从业务用例转化到概念用例和系统用例,不过老实说这一步需要的是经验居多,而很难找出一个普适的步骤来。先暂时放一放吧,以后一定...
### 实战OO鲁棒分析:深入理解与应用 在软件工程领域,“鲁棒性”(Robustness)指的是系统在异常或压力环境下仍能保持稳定运行的能力。在面向对象(Object-Oriented,简称OO)设计中,鲁棒分析是一种评估和增强...
### 销售管理系统的UML分析与设计 #### 引言 随着信息技术的快速发展和社会对信息系统需求的增长,软件开发技术面临着前所未有的挑战。为应对快速变化的市场需求,软件开发技术的发展趋势逐渐转向提升开发效率。...
招聘管理系统是一个功能齐全的系统,包含个人信息维护、招聘信息公布、招聘信息查询、应聘简历投递、交流区、信用度评价、管理员管理等几个模块。其中,个人信息维护模块允许浏览者在线填写简历,建立一个人才库;...
"软件工程-招聘管理系统UML分析报告" 软件工程是现代社会中一个非常重要的部分,它涉及到信息系统的需求和变化,需求变化也越来越快。软件开发技术的发展方向已经从“提高被开发系统的执行效率”转变为“提高开发...
以“新增书籍信息”用例为例,该用例涉及到图书管理员与系统的交互,目标是录入新书籍的信息并进行存储建档。在交互模型中,图书管理员作为参与者,系统则包含多个实体对象,如“书籍”、“图书管理员”、“书籍列表...
34. **识别关键外部事件**:分析员确实需要首先识别所有可能需要从系统获取信息的外部实体。 35. **需求模型**:需求模型是一个逻辑模型,展示了系统需要执行的功能,不依赖特定技术实现。 36. **类的属性**:类中...
用例图是UML(统一建模语言)中的一种图形化表示方式,主要用于描述系统的行为特征,特别是系统的功能需求。它由参与者(Actor)、用例(Use Case)和它们之间的关系组成。用例图能够清晰地展示出系统的主要功能和...
**系统扩展功能需求用例分析** 除了基本功能之外,还需要考虑到系统的扩展性。例如,可能需要支持多仓库管理、自动补货等功能。这些扩展功能的用例分析同样重要,可以确保系统能够满足未来的业务需求。 **系统整体...
建模的参与者包括领域专家、需求分析人员、系统分析员、架构师和开发人员,他们在不同阶段和不同模型中扮演不同角色。 UML适用于多种建模领域,如业务建模、需求建模、设计建模和实现建模。这些模型由不同的专业...
系统涉及多个角色,如销售员、销售经理、仓库管理员、审计员、销售主管和系统管理员,他们通过网络连接到系统,使用统一界面执行日常销售任务。在UML的指导下,可以进行如下步骤: 1. **业务建模与需求分析**:通过...
- **解析**: 在总体设计阶段,主要确定的是系统的具体实现方案,包括系统的结构、模块划分等,而非逻辑模型、程序处理细节或数据需求。因此,正确答案为A:系统的具体实现方案。 **3. 问题定义阶段后的下一个阶段**...
- **业务用例**:例如预订子系统、财务子系统等,它们代表了系统提供的主要服务。 2. **需求分析**:根据业务模型进一步细化系统需求,明确系统需要解决的具体问题。例如,针对不同类型的客户(代理公司和个人用户...
- 顶层数据流图(0层): 显示整个系统的外部实体(如食堂管理员和员工)、主要处理过程(如订餐管理)以及数据存储(如菜单信息数据库)。 - 0层数据流图: 对顶层数据流图中的处理过程进行进一步分解,展示更具体...
1、一个设计得好的OO系统具有( )的特征。 A.低内聚、低耦合 B.高内聚、低耦合 C.高内聚、高耦合 D.低内聚、高耦合 2、在UML中,( )把活动图中的活动划分为若干组,并将划分的组指定给对象,这些对象必须...