我发现,在OO和UML几乎一统天下的今天,仍有很多系统分析员对OO和UML一知半解,甚至包括很多已经使用了很久UML的系统分析员。
于是打算写一个系列文章,将多年来的工作经验做一个总结。对初学者起个启蒙作用,也希望抛砖引喻,与各路大虾共同探讨,共同提高。
这个系列文章将以我对OO和系统分析的理解为主,从UML基础开始,阐述面向对象的需求分析方法,过程,并以RUP为例,阐述如何将OO过程与软件过程有机结合在一起,做一个真正OO应用。
好了,今天是第一篇。想得很远,真希望我能坚持下去,呵呵
用例是什么?其原始英文是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)--用户、业务用例和业务场景写点什么呢?按照原先的设想,应该开始动手写如何从业务用例转化到概念用例和系统用例,不过老实说这一步需要的是经验居多,而很难找出一个普适的步骤来。先暂时放一放吧,以后一定...
在面向对象(Object-Oriented,简称OO)设计中,鲁棒分析是一种评估和增强系统鲁棒性的方法。它帮助设计师识别系统的组成部分,即实体对象、控制对象和边界对象,并通过构建这些对象间的逻辑关系,确保系统设计的...
1. **业务建模与需求分析**:这一阶段的目标是评估系统、采集和分析系统需求,并理解系统需要解决的问题。可以使用一个业务用例(Business Use Case)框图来表达这些需求。根据销售管理系统的基本特征和功能模块,...
用例通过系统与一个或多个活动者之间的一系列消息描述了与活动者的交互。 在静态建模部分,概念模型(包括对象、类)可以被定义,类图可以被绘制,显示出类间的关系。招聘管理系统可以被分割成两个独立的包:硬件...
用例通过系统与一种或多种活动者之间的一系列消息描述了与活动者的事务。 在招聘管理系统中,定义相应的概念模型(涉及对象、类),绘制相应类图,显示出类间的关系。招聘管理系统分为硬件和逻辑两部分——子系统,...
1. **业务建模**:首先需要对系统的业务背景进行深入分析,明确系统的目标用户、主要功能和服务范围。通过绘制业务用例框图,可以清晰地展示系统与外部实体之间的交互关系。 - **活动者**:在广告管理系统中,活动...
以“新增书籍信息”用例为例,该用例涉及到图书管理员与系统的交互,目标是录入新书籍的信息并进行存储建档。在交互模型中,图书管理员作为参与者,系统则包含多个实体对象,如“书籍”、“图书管理员”、“书籍列表...
34. **识别关键外部事件**:分析员确实需要首先识别所有可能需要从系统获取信息的外部实体。 35. **需求模型**:需求模型是一个逻辑模型,展示了系统需要执行的功能,不依赖特定技术实现。 36. **类的属性**:类中...
系统涉及多个角色,如销售员、销售经理、仓库管理员、审计员、销售主管和系统管理员,他们通过网络连接到系统,使用统一界面执行日常销售任务。在UML的指导下,可以进行如下步骤: 1. **业务建模与需求分析**:通过...
**系统扩展功能需求用例分析** 除了基本功能之外,还需要考虑到系统的扩展性。例如,可能需要支持多仓库管理、自动补货等功能。这些扩展功能的用例分析同样重要,可以确保系统能够满足未来的业务需求。 **系统整体...
建模的参与者包括领域专家、需求分析人员、系统分析员、架构师和开发人员,他们在不同阶段和不同模型中扮演不同角色。 UML适用于多种建模领域,如业务建模、需求建模、设计建模和实现建模。这些模型由不同的专业...
### 学生成绩记录系统用例图解析 #### 一、引言 随着教育信息化的发展,学校越来越多地采用数字化管理工具来提升教学质量和管理效率。学生成绩记录系统作为其中重要的一部分,对于教师准确记录学生学业表现、及时...
需求分析的重要任务之一就是明确系统的数据需求。 **6. 工程网络中关键路径上的作业有一定程度的机动余地** - **解析**: 错误。关键路径上的作业是没有机动余地的,一旦延误将直接影响整个项目的完成时间。 **7. ...
- 顶层数据流图(0层): 显示整个系统的外部实体(如食堂管理员和员工)、主要处理过程(如订餐管理)以及数据存储(如菜单信息数据库)。 - 0层数据流图: 对顶层数据流图中的处理过程进行进一步分解,展示更具体...
通过与领域专家交流,分析员定义业务规则和用例,形成对象模型。OOA强调的是理解系统的静态结构和动态行为,这通常通过类图、用例图和活动图来表达。 **面向对象设计(OOD)**: OOD是在OOA基础上进一步细化的过程...