第3章用例和用例图.ppt

上传人:本田雅阁 文档编号:2254903 上传时间:2019-03-11 格式:PPT 页数:66 大小:585.01KB
返回 下载 相关 举报
第3章用例和用例图.ppt_第1页
第1页 / 共66页
第3章用例和用例图.ppt_第2页
第2页 / 共66页
第3章用例和用例图.ppt_第3页
第3页 / 共66页
亲,该文档总共66页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《第3章用例和用例图.ppt》由会员分享,可在线阅读,更多相关《第3章用例和用例图.ppt(66页珍藏版)》请在三一文库上搜索。

1、第3章 用例和用例图,3.1 用例, 用例(use case) Ivar Jacobson于20世纪60-70年代在爱立信公司开发AKE、AXE系列系统时发明的。 定义1:对一个活动者(actor)使用系统的一项功能时所进行的交互过程的一个文字描述序列。 定义2:用例是系统、子系统或类和外部的参与者(actor)交互的动作序列的说明,包括可选的动作序列和会出现异常的动作序列。,3.1 用例, 在UML中,用例是用一个椭圆表示,用例名往往用动宾结构或主谓结构命名(如果是英文命名,则往往是动宾结构)。 【例3.1】,3.1 用例,【例3.2】在一个银行业务系统中,可能会有以下一些用例: 浏览账户余

2、额 列出交易内容 划拨资金 支付账款 登录 退出系统 编辑配置文件 买进证券 卖出证券,3.1 用例, 使用用例进行需求分析的特点: 从使用者的角度描述系统中的信息 站在系统外部看系统 描述了用户提出的一些可见需求 对应一个具体的用户目标 对系统行为的动态描述 属于UML的动态建模部分,3.1 用例,UML建模: 静态建模 动态建模 静态建模:类图、对象图、构件图和部署图 动态建模:用例图、顺序图、协作图、状态图和活动图。,3.1 用例, 理论上可以把一个软件系统的所有用例都画出来,但实际开发过程中,进行用例分析时只需把那些重要的、交互过程复杂的用例找出来。 用例描述的是系统的功能性需求,3.

3、1 用例, 用例的需求大纲 系统的目的和范围 系统中的术语表 用例 系统采用的技术 开发过程中的参加人员、业务规则、系统运行所依赖的条件、安全要求、文档要求等各种其它需求 法律、政治、组织机构等方面的问题,3.1 用例, 用例这种技术很容易使用,但也很容易误用。正确使用用例分析来做好领域建模(domain modeling),以确保定义正确的需求(right requirements),然后开发出正确的系统(right system),是保证OO软件开发成功的基础。对于初学者来说,掌握用例的概念并不难,但要在具体的项目中灵活地使用用例来捕获用户的需求,并不是一件容易的事情,往往需要用户的经验、

4、沟通能力、丰富的领域知识等。,3.1 用例, 本质上,用例分析是一种功能分解(functional decomposition)的技术,并未使用到面向对象思想。因而有人认为用例分析只是面向对象分析与设计(Object-Oriented Analysis/Object-Oriented Design,OOA/OOD)的先导性工作,并非OOA/OOD过程的一部分,但也有人视其为OOA/OOD的一环。,3.1 用例, 用例是与实现无关(implementation independent)的关于系统功能的描述。在UML中,可以用协作(collaboration)来说明对用例的实现。,图3.3 用例及

5、其实现,3.1 用例, 在UML中,协作用虚线椭圆表示。在图3.3中,对用例Login共有两个实现,一个是简单的实现,另一个是带有安全验证功能的实现,这里没有显示协作的内容结构和行为方面的内容。协作的内部由两部分组成:一是结构部分,如类、接口及其他一些建模元素等;另一部分是说明类、接口以及其他建模元素如何协同工作的行为部分,如协作图(collaboration diagram)、顺序图(sequence diagram)、类图(class diagram)等。,3.2 参与者, 参与者(actor)是指系统以外的,需要使用系统或与系统交互的东西,包括人、设备、外部系统等。,3.2 参与者,【例

6、3.3】在一个银行业务系统中,可能会有以下参与者: 客户:从系统获取信息并执行金融交易。 管理人员:开办系统的用户。获取并更新信息。 厂商:接受作为转帐支付结果的资金。 mail系统。,3.2 参与者, 参与者的3种表示形式,3.2 参与者, 参与者之间可以存在泛化关系,3.3 脚本, 脚本(scenario)也被翻译为情景、场景、情节、剧本等。在UML中,脚本指贯穿用例的一条单一路径,用来显示用例中的某种特殊情况。 脚本是用例的实例(instance),如果与类和对象之间的关系作比较,则脚本与用例的关系相当于对象与类的关系。,3.3 脚本,【例3.4】:在“订货”这个用例中,包含着几个相关的

7、脚本。 一个是订货进行顺利的脚本;一个是相关货源不足的脚本;一个是涉及购物者的信用卡被拒的脚本,等等。这些脚本的组合构成了一个用例。 一个脚本使用具体的文字描述来表示。,3.4 用例间的关系, 用例之间的关系包括: 泛化关系(generalization) 包含关系(include) 扩展关系(extend),3.4.1 泛化关系, 泛化(generalization)代表一般与特殊的关系。 在泛化关系中,子用例继承了父用例的行为和含义,子用例也可以增加新的行为和含义或父用例中的行为和含义。,3.4.2 包含关系,包含(include)关系指的是两个用例之间的关系,其中一个用例(称作基本用例,

8、base use case)的行为包含了另一个用例(称作包含用例,inclusion case)的行为。,3.4.3 扩展关系, 扩展(extend)关系的基本含义与泛化关系类似。但在扩展关系中,对于扩展用例(extension use case)有更多的规则限制, 即基本用例必须声明若干“扩展点”(extension point),而扩展用例只能在这些扩展点上增加新的行为和含义。,3.4.3 扩展关系, 包含用例和扩展用例,3.4.4 用例的泛化、包含、扩展关系, 泛化关系和扩展关系 表示的是用例之间的“is a”关系 泛化关系 扩展关系 比泛化关系多了扩展点 包含关系 表示的是用例之间的“

9、has a”关系,3.4.4 用例的泛化、包含、扩展关系, 在扩展关系中,基本用例一定是一个well formed的用例,即是可以独立存在的用例。一个基本用例执行时,可以执行,也可以不执行扩展部分。 在包含关系中,基本用例可能是、也可能不是well formed。在执行基本用例时,一定会执行包含用例(inclusion use case)部分。, 使用条件, 如果需要重复处理两个或多个用例时,可以考虑使用包含关系,实现一个基本用例对另一个用例的引用。 当处理正常行为的变型而且只是偶尔描述时,可以考虑只用泛化关系。 当描述正常行为的变型而且希望采用更多的控制方式时,可以在基本用例中设置扩展点,使

10、用扩展关系。,参与者、用例间的关系类型, 下表是参与者、用例之间关系(relationship)的总结,3.4 用例间的关系, 关系 模型元素之间的语义联系 关联 两个或多个类元之间的关系 描述了类元的实例之间的联系 泛化关系 两个类元之间的关系 特殊和一般的关系 依赖关系 两个元素或元素集之间的一种关系 目标元素: 被依赖的元素 改变 源 元素: 依赖元素 相应的改变,3.5 用例图, 用例图:是显示一组用例、参与者以及他们之间关系的图。在UML中,一个用例模型由若干个用例图描述。,3.5 用例图,3.6 用例的描述, UML初学者 缺少用例的描述或用例的描述不完整 用例是一个“文字描述序列

11、” 用例是“动作序列的说明” 用例的描述才是用例的主要部分 是后续的交互图分析和类图分析必不可少的部分。,3.6 用例的描述, 用例的描述应该包含哪些内容,并没有一个统一的标准,不同的开发机构可能会有不同的要求,但一般应包括以下内容: 用例的目标 用例是怎么启动的 参与者和用例之间的消息是如何传送的 用例中除了主路径外,其他路径是什么 用例结束后的系统状态 其他需要描述的内容,3.6 用例的描述, 描述用例的原则是尽可能写得“充分”,而不是追求写得形式化、完整或漂亮。 作为OOA文档的一个组成部分,用例的描述应该有一定的规范格式,但目前并没有一个统一的标准。在统一的标准出现之前,人们可以采纳适

12、合于自己的用例描述格式,但不管怎样,在一个开发机构内部应该采用统一的格式。,3.6 用例的描述,3.6 用例的描述,3.6 用例的描述,3.6 用例的描述, 表3.3 是对“处理订单”这个用例的描述。 具体内容见书P31.,3.6 用例的描述, UML初学者易犯的错误 只描述系统的行为,没有描述参与者的行为 只描述参与者的行为,没有描述系统的行为 在用例描述中就设定对用户界面的设计的要求 描述过于冗长,3.6 用例的描述,ACockburn在Coc00中给出了很多错误的用例描述的例子。下面给出几个典型的例子。(为了说明问题,在给出描述时并没有完全按照表3.2中用例描述模板的格式,只给出了操作流

13、程的描述。),3.6 用例的描述,【例3.5】下面是一个用例描述的片断: Use Case:Withdraw Cash 参与者:Customer 主事件流: 储户插入ATM卡,并键入密码。 储户按Withdraw按钮,并键入取款数目。 储户取走现金,ATM卡并拿走收据。 储户离开。,3.6 用例的描述,【例3.6】下面是一个用例描述的片断: Use Case:Withdraw Cash 参与者:Customer 主事件流: (1) ATM系统获得ATM卡和密码。 (2) 设置事务类型为Withdrawal。 (3) ATM系统获取要提取的现金数目。 (4) 验证账户上是否有足够储蓄金额。 (5

14、) 输出现金、数据和ATM卡。 (6) 系统复位。,正确的用例描述,主事件流: (1) 通过读卡机,储户插入ATM卡。 (2) ATM系统从卡上读取银行ID、账号、加密密码、并用主银行密码验证银行ID和账号。 (3) 储户键入密码,ATM系统根据上面读出的卡上加密密码,对密码进行验证。 (4) 储户按FASTCASH按钮,并键入取款数量,取款数量应该是5美元的倍数。 (5) ATM系统通知主银行系统,传递储户账号和取款数量,并接收返回的确认信息和储户账户余额。 (6) ATM系统输出现金、ATM卡和显示账户余额的收据。 (7) ATM系统记录事务到日志文件。,3.6 用例的描述,【例3.7】下

15、面是一个用例描述的片断: Use Case:Buy Something 参与者:Customer 主事件流: (1) 系统显示ID and Password窗口。 (2) 顾客键入ID和密码,然后按OK按钮。 (3) 系统验证顾客ID和密码,并显示Personal Information窗口。,3.6 用例的描述,(4) 顾客键入姓名、街道地址、城市、邮政编码、电话号码,然后按OK按钮。 (5) 系统验证用户是否为老顾客。 (6) 系统显示可以卖的商品列表。 (7) 顾客在准备购买的商品图片上单击,并在图片旁边输入要购买的数量。选购商品完毕后按Done按钮。 (8) 系统通知库存系统验证要购买

16、的商品是否有足够的库存。 (后续描述省略),3.6 用例的描述, 上述描述中存在的问题是对用户界面的描述过于详细。对于需求文档来说,详细地用户描述对捕获需求并无帮助。改进的描述如下所示: Use Case:Buy Something 参与者:Customer 主事件流:,3.6 用例的描述,(1) 顾客使用ID和密码进入系统。 (2) 系统验证顾客身份。 (3) 顾客提供姓名、地址、电话号码。 (4) 系统验证顾客是否为老顾客。 (5) 顾客选择要购买的商品和数量。 (6) 系统通过库存系统验证要购买的商品是否具有足够库存。 (后续描述省略),3.6 用例的描述,【例3.8】下面是一个用例描述

17、的片断: Use Case:Buy Something 参与者:Customer 主事件流: (1) 顾客使用ID和密码进入系统。 (2) 系统验证顾客身份。 (3) 顾客提供姓名。 (4) 顾客提供地址。,3.6 用例的描述,(5) 顾客提供电话号码。 (6) 顾客选取商品。 (7) 顾客确定商品的数量。 (8) 系统验证顾客是否为老顾客。 (9) 系统打开到库存系统的连接。 (10) 系统通过库存系统请求当前库存量。 (11) 库存系统返回当前库存量。 (12) 系统验证购买商品的数量是否少于库存量。 (后续描述省略),3.6 用例的描述, 上述描述中存在的问题是对于用例的描述过于冗长。可

18、以采用更为简洁的描述方式。如合并类似的数据项(步骤(3)至步骤(5),提供抽象的高层描述(步骤(9)至步骤(12)等。改进的描述可以如下所示: Use Case:Buy Something 参与者:Customer 主事件流:,3.6 用例的描述,(1) 顾客使用ID和密码进入系统。 (2) 系统验证顾客身份。 (3) 顾客提供个人信息(包括姓名、地址、电话号码),选择要购买的商品及数量。 (4) 系统验证顾客是否为老顾客。 (5) 系统使用库存系统验证要购买的商品数量是否少于库存量。 (后续描述省略),3.7 寻找用例的方法, 用例分析的步骤可以按下面的顺序进行: (1) 找出系统外部的参与

19、者和外部系统,确定系统的边界和范围。 (2) 确定每一个参与者所期望的系统行为。 (3) 把这些系统行为命名为用例。 (4) 使用泛化、包含、扩展等关系处理系统行为的公共或变更部分。,3.7 寻找用例的方法,(5) 编制每一个用例的脚本。 (6) 绘制用例图。 (7) 区分主事件流和异常情况的事件流,如果需要,可以把表示异常情况的事件流作为单独的用例处理。 (8) 细化用例图,解决用例间的重复与冲突问题。 当然上述这个顺序并不是固定的,可以根据需要进行一些调整。,3.7 寻找用例的方法, 采用用例分析法捕获用户的需求,其中一个比较困难的工作是确定系统应该包含哪些用例,以及如何有效地发现这些用例

20、。事实上,在做用例分析时,并没有一个固定的方式或方法来发现用例,而且对于同一个系统,往往会有很多种解决方案,但其中某些方案会比另一些方案好。,3.7 寻找用例的方法, 与设计和实现阶段相比,需求分析阶段更多的还是依赖于分析人员的个人经验和领域知识。例如,如果某分析人员以前做过类似的系统分析和开发工作,那么以后再做类似的工作时就比较容易,但如果是针对一个全新的领域,往往会觉得很难入手,这时就需要领域专家的帮助。,3.7 寻找用例的方法, 下面的这些启发性原则可以帮助分析人员发现用例: 和用户交互。 把自己当作参与者 确定用例和确定参与者不能截然分开。,3.7 寻找用例的方法, Jacobson作

21、为用例方法的提出者,也提出了一些原则来帮助发现用例,如通过回答下列问题来帮助发现用例: 参与者的主要任务是什么? 参与者需要了解系统的什么信息?需要修改系统的什么信息? 参与者是否需要把系统外部的变化通知系统? 参与者是否希望系统把异常情况的变化通知自己?,3.8 常见问题分析,(1) 用例的粒度问题。对于一个系统来说,不同的人进行用例分析后得到的用例数目有多有少。如果用例粒度(granularity)很大,那么得到的用例数就会很少,如果用例粒度很小,那么得到的用例数就会很多。那么用例数目多少比较合适? 答:这是很多人争论的问题。例如:Ivar Jacobson认为,对于一个10人年的项目,他

22、需要大约20个用例,而在一个相同规模的项目中,Martin Fowler则用了100多个用例。(Martin Fowler是流行的UML入门书“UML distilled”的作者之一FS99,该书在UML领域的影响很大。),3.8 常见问题分析,(2) 在一个系统中,有几个相似的功能,那么是将他们放在同一个用例中,还是分成几个用例?假设有这样的需求,在学生档案管理中,管理员经常需要做3件事:增加一条学生记录、修改一条学生记录、删除一条学生记录。如果要画出用例图,则以下两种方法哪种更合适?,3.8 常见问题分析,方法1:用例图如图3.10所示,并分成3个脚本,分别画3个交互图。脚本1为增加学生记

23、录,脚本2为修改学生记录,脚本3为删除学生记录。,3.8 常见问题分析,方法2:用例图如图3.11所示,以后每个用例画一个交互图。,3.8 常见问题分析,(3) 三层结构如何采用用例表示? 答:这也是一个非常典型的问题。一般初学者在进行用例分析时,往往很容易会考虑到实现的问题。事实上,用例是用来描述系统需求的,一般不在用例分析阶段考虑系统的实现问题。如果需要描述系统的三层结构,则在类图、部署图等中表示。,3.8 常见问题分析,(4) 如图3.12所示的用例图和如图3.13所示的用例图有何区别,在表示用例的包含关系方面是否正确?,图3.12 用例图1,图3.13 用例图2,3.8 常见问题分析,

24、答:用例间的包含关系是依赖关系的版型,因此图3.12是正确的表示方法。对于图3.13,C和D之间存在泛化关系,而表示为泛化关系上的版型。当然根据版型的定义,可以在泛化关系上加版型,但这只是在语法上成立,而在语义上,泛化关系上的版型并没有特殊的用处。所以图3.13这样的表示方法是不恰当的。,3.9 小结,1用例是Ivar Jacobson发明的概念,用例驱动的软件开发方法已得到广泛的认同。 2用例是系统、子系统或类与外部的参与者交互的动作序列的说明,包括可选的动作序列和会出现的异常的动作序列。 3用例命名往往采用动宾结构或主谓结构。 4系统需求一般分为功能性需求和非功能性需求两部分,用例只涉及功能性方面的需求。,3.9 小结,5用例之间可以有泛化关系、包含关系、扩展关系等。 6脚本是用例的实例。 7参与者是指系统以外的、需要使用系统或与系统交互的东西,包括人、设备、外部系统等。 8参与者之间可以有泛化关系。,3.9 小结,9用例的描述是用例的主要部分。 10用例的描述格式没有一个统一的标准,不同的开发机构可以采用自认为合适的格式。 11用例分析结构的好坏与分析人员的个人经验和领域知识有很大的关系。,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1