用例模型的那些事儿:用例图

——对用例模型及其应用的一次有益的探讨

前言:这是一次对用例模型的探讨。怎样建立用例模型,怎样编写用例说明,它与需求规格说明书有什么区别,它能替代需求规格说明书吗?也许在这里可以找到你要的答案。

进入软件业稍微久一点儿的人恐怕都不会陌生,软件开发的最初阶段都是谈需求、写需求规格说明书。需求规格说明书是与客户最终确认到纸上的,非常正式的公文。软件开发应当做什么,做成什么样子,什么东西不做,项目范围有多宽,需求规格说明书都是白纸黑字写得清清楚楚,谁都无法抵赖。所以,需求规格说明书一直都是软件项目开发合同的重要附件,地位相当重要。

但是,随着RUP的引入,人们开始困惑了。在RUP中没有需求规格说明书,而是为用例模型所替代。现在,一些信息化走在比较前列的公司,都纷纷要求按照RUP统一过程进行开发,我们也开始尝试使用用例模型来替代需求规格说明书。然而,相信一些关于用例模型的几个重要问题一直困惑着不少人(当然也包括我):用例模型与需求规格说明书的区别在哪里?用例模型的优势在哪里?用例模型能替代需求规格说明书吗?围绕着这几个问题我们进行一次用例模型的探讨之旅吧。

在开始我的探讨之旅之前,我们最好能带上一个问题去探讨:

用例模型与需求规格说明书的区别在哪里?

看到这个问题,你也许会非常不屑一顾,认为这个问题不值一提。确实,在编写格式上,用例模型与需求规格说明书的差别显而易见。但是,从更深层次来讨论,你会发现,这个问题并不是那么简单。有些人由于对用例模型的肤浅认识,将用例模型当成需求规格说明书来写,格式虽说是用例模型的格式,内容却不是用例模型的内容,换汤不换药,反倒弄巧成拙,让人困惑。需求规格说明书是面向过程时代的产物,因此它的核心就是按照面向过程的设计思想编写需求;用例模型是面向对象分析/设计的产物,因此它的核心思想就是OOA/D(面向对象分析/设计)。我认为,把握这一点实在太重要了。明白了它,才能明白用例模型应当怎样设计,才能明白它与需求规格说明书的区别,才能明白其作用和优势在何处。下面,我们看看用例模型应当怎么设计。

如何建立用例模型

一些初学者认为,用例模型就是画张用例图。其实这是错误的,用例模型包括用例图、用例说明,有时还要辅之一些简单的行动图、状态图和序列图。用例图采用图形的方式,形象生动地展现了用例、参与者和系统边界之间的关系。而用例说明,是对用例、参与者和系统边界进行的详细描述。在描述过程中,还可以对一些关键的流程,以及这些流程中关键类的状态变化,使用行动图、状态图和序列图进行图形化地展现。

一.用例图

用例图是建立用例模型的开始。用例模型的建立过程通常都是:先画用例图,然后对用例图编写用例说明。在编写用例说明的时候,对一些复杂的、认为有必要的地方,绘制行动图、状态图和序列图,方便阅读者理解。用例图关注的是三部分内容:用例、参与者和系统边界。

1.用例

用例就是一个用来描述参与者如何使用系统来实现其目标的一组场景的集合。这句话听起来比较抽象,但我通常都把它暂时理解为功能中的模块(虽然这并不严密,但更加实用)。用例强调的是一组场景,在这组场景不多但相互之间存在功能上的共性,就像一个大功能模块下的多个子模块。这组场景中的每一个,又分别形成一个个子用例。子用例再细分,又可以再形成各自的子用例。用例分析就是这样由粗到细的逐步细分,从而形成一系统的用例图。用例图分析到多细,应当由业务需求的情况决定。分得过粗,就不足以说清楚业务的相关细节,或者使一张用例图信息过多,影响人们的理解;分得过细,不仅会增加工作量,还会丢失许多用例间的相互关系,得不偿失。总之,较为复杂的部分细一些,简单的部分粗一些,保证每个用例图都保持强烈的相关性,指导日后的功能划分。

同时,用例强调的是参与者与系统功能的交互,用例就是系统的功能,而参与者可以暂时理解为使用系统的人。因此,大多数用例都对应着一个或数个参与者(但部分从用例中包含着的子用例,或扩展出来的扩展用例没有参与者)。

用例与用例之间通常有两种关系:包含与扩展。包含关系表示一种从属关系,即子用例是主用例中相对独立的、必须调用的一部分功能。在用例分析中,我们应当将多个用例都共有的、相对独立的功能提取出来形成一个子用例,为日后代码复用提供有力保障。扩展关系表示一个功能是对另一个功能的扩展,即被扩展功能不一定调用扩展功能,但扩展功能是对被扩展功能的加强与延伸。在绘制用例关系时,包含关系应绘制成从主用例指向子用例的虚线箭头,并标注为“include”,表示主用例包含子用例;扩展关系应绘制成从扩展用例指向被扩展用例的虚线箭头,并标注为“extend”,表示扩展用例是对被扩展用例的扩展。虚线箭头在UML中代表的是一种依赖关系,即客户元素了解供应者,并且供应者的变化会影响到客户元素(依赖是从客户元素指向供应者的)。

封装性是面向对象设计的重要思想之一。而实现封装的前提之一,就是要对需求进行整理的基础上加以功能划分,使具有强烈相关性的功能划分在一起,只有少量接口与外界交互。用例分析,从一开始就对原始需求进行了功能划分,将相关功能划分到一起,将共有功能提取出来,标志出功能间的依赖与非依赖关系(包含表示的是一种依赖关系,而扩展表示的是一种非依赖关系)。这是一种OOA/D,它为日后的OO设计提供了强有力地支持。而这些都是需求规格说明书所不具有,或者不完全具体的功能。

时间: 2024-08-31 06:46:04

用例模型的那些事儿:用例图的相关文章

用例模型的那些事儿:注意什么

前面我们讲了如何建立用例模型,那么建立用例模型应当注意什么呢? 建立用例模型应当注意的问题 给大家几个建立用例模型中常出现的问题和应对遵循的原则: 一.如何发现用例 经过以上的讲解,相信大家对建立用例模型有了一个整体的概念,然后开始着手练习绘制用例模型.这时候,一个非常严峻的问题出现了:如何发现用例.大师曾经给出了答案,大致意思就是:首先选择系统边界,然后确定主要参与者,定义满足用户目标的用例,为其命名.然而,我在实践中证明,这套方法过于理论,并不实用.也许,我们换一种思路会更加符合实际. 当我

软件工程之系统建模篇:设计用例模型

本文主要介绍用例模型的设计过程,首先从系统层设计用例模型,然后分别细 化系统层识别的各用例,设计更为详细的用例模型.用例模型是开发过程的起点 ,并驱动建模全过程.以下以办公自动化(OA)中的办理发文用例模型为例,来 讲解用例模型的设计过程.用例模型包括办理公文用例图及用例描述. 办理发文用例模型 1.办理公文用例图 在设计办理发文用例模型之前,先要识别活动者和用例,活动者和用例识别以 后,才能建立用例模型. 1.1 活动者识别 活动者是系统分析员与用户交流的起点,也是项目获得后续产品的关键.活动

让技术人员看得懂的流程(2)——用例模型

                    让技术人员看得懂的流程(2)                          --用例模型 一般的管理流程都将软件项目划分为"需求->分析->设计->实现->维护",对应的技术流程中首先也肯定是要将需求明确,而"用例模型"就是用于获得和分析需求的. 简单来说,用例模型就是要将客户的需求写下来."需求"不是很好理解,更加通俗的讲法是"故事(story)".我觉得&

软件开发的那些事儿:解决之道

前面提出了软件开发的轮回:期望--破灭--崩溃--新的轮回,我们的解决之道在哪里呢? 我的反思--不在沉默中爆发,就在沉默中灭亡 反思,我在反思-- 对于来自客户的变更,我永远忘不了的是大学时老师的谆谆教导.上软件工程课的时候,老师总是一再地反复强调,一定要将需求变更消灭在需求分析阶段.按照过去的瀑布式开发理论的描述,总是要求我们在需求分析阶段了解清楚客户的所有需求,并编写成<软件需求说明书>,交给客户签字.客户一旦在<软件需求说明书>上签字,那么需求就不能再更改了,软件就照这个开

内容模型系统开发总结二(内容模型系统用例设计)

内容模型用例设计 用例图用于描述角色和用例或用例与用例之间的关系,着重展示系统必须实现的功能,用于在需求分析阶段分析客户需求. 用例设计主要包括功能描述,用例图,用例规约,用例实现等信息. 3.1 表单管理 3.1.1功能描述 (1)管理员可以自由添加表单,表单信息包括[标题],[英文名称](用于数据库字段或查询时使用),[表单备注]. (2)管理员可以修改表单信息,但是不可以修改[英文名称]. (3)管理员可以删除表单信息,删除时应该显示[提示信息]. (4)可以根据指定条件进行表单信息查询,

《软件建模与设计: UML、用例、模式和软件体系结构》一一3.1 软件生存周期模型

3.1 软件生存周期模型 瀑布模型(waterfall model)是最早被广泛使用的软件生存周期模型.本节首先回顾瀑布模型,然后概述其他可选择的软件生存周期模型,这些模型用来克服瀑布模型的部分局限性,它们是:抛弃型原型生存周期模型(throwaway prototyping life cycle model),增量开发生存周期模型(incremental development life cycle model,也称为演化式原型evolutionary prototyping),螺旋模型(sp

应用Rational 工具简化基于J2EE的项目 (三)转换到系统模型

j2ee|项目|转换 第 3 部分 :转换到系统模型 Steven Franklin软件设计师和过程专家2004 年 3 月 本文将继续通过这个全面的应用 RUP 和 其他 Rational 工具的样例项目来介绍创建项目的 Rational Rose 模型,本文中我们将开始创建代表"目前"业务情况的系统模型,并将此业务模型转换成为"将来"的系统模型. 这个第 3 部分文章重点的介绍了在 Rational Rose 中完成的早期建模活动.首先我们来对 ASDI 现有的

分析模型的那些事儿:开始分析

--对分析模型的一点儿见解 当需求分析结束.需求确认完成.需求讨论告一段落的时候,我们的需求分析员拿出了厚厚的一打用例分析模型.领域设计模型,需求分析阶段结束,开始进入开发阶段.但是,这时候虽然需求分析阶段结束了,却千万不要以为需求分析就结束了,如果你还这样认为,说明你还没有摆脱瀑布式开发的思维.瀑布式开发的思维的关键点就是认为,需求分析阶段应当完成所有的需求分析和确认的工作,否认需求分析阶段以后还会变更需求.拥抱变化是现代软件开发思想的核心之一,什么敏捷开发.迭代开发.极限编程,都是围绕这个主

OO系统分析员之路--用例分析系列(4)--业务建模一般步骤和方法

本篇开始之前先扯点闲话,商业应用系统开发经历了三个阶段: 第一个阶段以计算为中心,分析设计围绕程序的运行效率,算法优劣,存贮优化来进行.90年代的大学课程讲的都是这些. 第二阶段以数据为中心,分析设计围绕数据流进行,以数据流程来模拟业务流程.这也就是所谓的面向过程的分析模式. 第三阶段以人为中心,分析设计围绕人的业务需求,使用要求,感受要求进行.这也就是现在的面象对象分析模式. 使用OO方法建立商业模型必须先定义涉众.商业系统无论多复杂,无论什么行业,其本质无非是人,事,物,规则.人是一切的中心