UML轻松入门——用例(2)

UML轻松入门——用例

  1 用例与用例图

  用例是需求分析中最重要的概念,需求表征了一个系统的设计特性、特征和行为,描述一个系统的需求意味着描述了建立在该系统外部的事物与系统之间的契约,契约上声明了期望系统做什么。

  需求获取(Requirement Elicitation) 是需求工程的主体,其主要工作是建立待开发系统的模型,而用例就是用于建立这种模型的良好方法。用例最初由Ivar Jackboson博士提出,后被综合到UML规范之中,成为需求表述的标准化体系。前文已经提到,整个RUP流程都是"用例驱动"的,各种类型的开发活动包括项目管理、分析、设计、测试、实现等以用例为主要输入工件,用例模型奠定了整个系统软件开发的基础,用例被认作第二代面向对象技术的标志,可见其重要性非同一般。

  我们先来给出一个具体而简单的用例图,即"图书管理系统"用例图,如图1。在用例图中主要涉及到参与者(又称角色、执行者)、用例以及二者之间的通讯关联。


图1 图书管理系统用例图

  参与者

  参与者是与系统、子系统或类发生交互的外部用户、进程或其他系统。参与者可以是人、另一个计算机系统或一些可运行的进程。在图1中,"读者"和"管理员"即为参与者。

  参与者之间可以存在泛化关系,例如,在图1所示图书馆管理系统用例图中,可以认为"读者"是"学生读者"和"教师读者"的泛化,而"学生读者"还可以具体化为"本科生读者"和"研究生读者";同样,"图书管理人员"也是"采购员"、"编目员"及"借阅人员"的泛化。图2表示出了参与者之间的泛化关系。


图2 参与者泛化关系

  用例

  用例是外部可见的一个系统功能,这些功能由系统所提供,并通过与参与者之间消息的交换来表达。用例的用途是在不揭示系统内部构造的情况下定义行为序列,它把系统当作一个黑箱,表达整个系统对外部用户可见的行为。

  鉴于用例的特点,用例一般被命名为一个能够说明目标的动名词组。如图1中的"借书"、"还书"和"管理图书"皆为动名词组。

  用例之间也可以存在包含、扩展和泛化等关系:

  (1)包含关系:用例可以简单地包含其他用例具有的行为,并把它所包含的用例行为做为自身行为的一部分,这被称作包含关系。

  (2)扩展关系:扩展关系是从扩展用例到基本用例的关系,它说明为扩展用例定义的行为如何插入到为基本用例定义的行为中。它是以隐含形式插入的,也就是说,扩展用例并不在基本用例中显示。在以下几种情况下,可使用扩展用例:

  a.表明用例的某一部分是可选的系统行为(这样,您就可以将模型中的可选行为和必选行为分开);

  b.表明只在特定条件(如例外条件)下才执行的分支流;

  c.表明可能有一组行为段,其中的一个或多个段可以在基本用例中的扩展点处插入。所插入的行为段和插入的顺序取决于在执行基本用例时与主角进行的交互。

  图3给出了一个扩展关系的例子,在还书的过程中,只有在例外条件(读者遗失书籍)的情况下,才会执行赔偿遗失书籍的分支流。

图3用例扩展关系

  (3)泛化关系:用例可以被特别列举为一个或多个子用例,这被称做用例泛化。当父用例能够被使用时,任何子用例也可以被使用。如在图4中,管理图书是添加图书和修改图书信息的抽象。


图4用例泛化关系

  通讯关联

  通讯关联用于表示参与者和用例之间的对应关系,它表示参与者使用了系统中的哪些用例(或者说系统所提供的用例被哪些参与者使用)。

  通讯关联以箭头或实线表示。若使用箭头,箭头所指方将是对话的被动接受者;如果不强调对话中的主动与被动关系,则可以使用不带箭头的关联实线。

  2建立用例模型

  知道了用例与用例图的概念,我们还需要懂得怎样建立用例模型,即怎样找出参与者、用例以及定义用例的过程。一般来说,建立用例模型的步骤为:

  (1)确定谁会直接使用该系统,即参与者(Actor),为了发现参与者,我们可以尝试问如下问题:

  a. 谁/什么使用系统?

  b. 谁/什么从系统获得信息?

  c. 谁/什么向系统提供信息?

  d. 谁/什么支持、维护系统?

  e. 哪些其它系统使用此系统?

  f. 公司的哪个部门使用系统?

  …

  (2)选取其中一个参与者;

  (3)定义该参与者希望系统做什么,参与者希望系统做的每件事成为一个用例,为了发现用例,我们可以尝试问如下问题:

  a. 为什么该参与者想要使用此系统?

  b. 该参与者是否要创建、保存、更改、移动或读取系统的数据?如果是,为什么?

  c. 该参与者是否要通知系统外部事件或变化?

  d. 该参与者是否需要知道系统内部的特定事件?

  …

  (4)对每件事来说,何时参与者会使用系统,通常会发生什么,这就是用例的基本过程;

  (5)描述该用例的基本过程;

  (6)考虑一些可变情况,把他们创建为扩展用例;

  (7)复审不同用例的描述,找出其中的相同点,抽出相同点作为共同的用例;

  (8)重复步骤2-7找出每一个用例。

  参与者检查的参考标准如下:

  (1)是否您已找到所有的参与者?也就是说,是否您已经对系统环境中的所有参与者都进行了说明和建模?

  (2)每个参与者是否至少涉及到一个用例?

  (3)您能否列出至少两名可以作为特定参与者的人员?

  (4)是否有参与者担任与系统相关的相似参与者?如果有,您应该将他们合并到一个参与者中。

  用例检查的参考标准如下:

  (1)用例模型的简介部分简明清晰地概述此系统的目的和功能;

  (2)所有的用例已确定,这些用例共同说明所有的必要行为;

  (3)所有的功能性需求都至少映射到一个用例;

  (4)该用例模型不包含多余的行为,所有的用例都可回溯到某个功能性需求来证明其合理性。

  用例图从总体上大致描述了系统所能提供的各种服务,让我们对于系统的功能有一个总体的认识,仅此还是不够的,我们还需要描述每一个用例的详细信息,即用例规约。用例模型正是由用例图和每一个用例的详细描述――用例规约所组成的。RUP中提供了用例规约的模板,包含以下内容:

  (1)简要说明 (Brief Description):简要介绍该用例的作用和目的;

  (2)事件流 (Flow of Event):包括基本流和备选流,事件流应该表示出所有的场景;

  (3)用例场景 (Use-Case Scenario) :包括成功场景和失败场景,场景主要是由基本流和备选流组合而成的;

  (4)特殊需求 (Special Requirement):描述与该用例相关的非功能性需求(包括性能、可靠性、可用性和可扩展性等)和设计约束(所使用的操作系统、开发工具等);

  (5)前置条件 (Pre-Condition):执行用例之前系统必须所处的状态;

  (6)后置条件 (Post-Condition):用例执行完毕后系统可能处于的一组状态。

  用例规约基本上是用文本方式来表述的,为了更加清晰地描述事件流,也可以选择使用状态图、活动图或序列图来辅助说明(状态图有助于描述与状态相关的系统行为,活动图有助于描述复杂的决策流程,序列图适合于描述基于时间顺序的消息传递)。另外,只要对简洁明了地表达用例有帮助,我们就可以在用例中任意粘贴用户界面、流程的图形化显示方式及其他图形。

本文感谢Trufun提供免费Trufun Plato 2006标准版uml2.0建模工具,文中用图全为用Trufun Plato 2006所绘

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
第1章 基础知识 1.1 软件开发方法概述 1.1.1 软件生命周期法 1.1.2 原型法 1.1.3 面向对象技术 1.1.4 面向对象的软件开发语言与工具 1.2 面向对象的系统分析与设计 1.2.1 面向对象的主要概念 1.2.2 面向对象的系统分析与设计方法 1.3 UML概述 1.3.1 UML简史 1.3.2 UML概貌 1.3.3 UML的特点和用途 第2章 面向对象的软件开发过程 2.1 Rational统一过程 2.1.1 项目开发阶段 2.1.2 过程成分 2.1.3 螺旋上升式开发 2.1.4 RUP过程产物 2.1.5 RUP的特点 . 2. 2 项目开端阶段 2.3 精化阶段 2.3.1 问题领域分析 2. 3.2 建立系统架构 2.3.3 开发风险处理 2.3.4 构建规划 2. 4 系统构建 2. 5 系统提交 2. 6 循环节的生命周期活动 第3章 UML语言 3. 1 UML语言结构 3. 2 无模型 3.3 符号与图形 3.3.1 图形符号 3.3.2 语义规则 3.4 图与模型组织 3.4.1 模型组织 3.4.2 图 3.4.3 视图 3.5 公共机制 3.6 扩展机制 3.6.1 构造型 3.6.2 标记值 3.6.3 约束 第4章 Use Case图 4.1 概述 4. 2 活动者 4.2.1 系统范围与系统边界 4.2.2 活动者 4.2.3 活动者的确定 4.3 Use Case 4.3.1 Use Case概念 4.3.2 业务Use Case与系统Use Case 4.3.3 Use Case图 4.4 Use Case的联系 4.4.1 泛化关联 4.4.2 使用关联 4.4.3 包含关联 4.4.4 扩展关联 4.5 Use Case图的应用 4.5.1 Use Case的确定 4.5.2 建立Use Case模型 第5章 对象类图与对象图 5.1 对象类图 5.1.1 对象类 5.1.2 属性 5.1.3 操作 5.2 对象类的关联 5.2.1 对象类的关联 5.2.2 自返关联、二元关联与N元关联 5.2.3 关联的约束 5.3 聚合与组合 5.3.1 聚合 5.3.2 组合 5.4 泛化 5.4.1 泛化/特化 5.4.2 继承 5. 3 重载与多态性 5.5 依赖 5.6 对象图 5.6.1 对象 5.6.2 对象图 5. 7 接口 5.8 对象类的高级概念 5.8.1 抽象类 5.8.2 参数对象类 5.8.3 型与实现对象类 5.8.4 导出属性与导出关联 5. 9 对象类图的应用 5.9.1 对象类图的建立 5.9.2 模型景象与粒度控制 5.9.3 数据库建模 5.9.4 例外情况建模 第6章 交互图 6. 1 顺序图 6.1.1 顺序图的组成 6.1.2 对象的创建与销毁 6.1.3 同步消息与异步消息 6.1.4 分支 6.1.5 循环 6.1.6 自调用与回调 6. 2 协同图 6. 2. 1 协同图的组成 6. 2.2 说明层与实例层 6. 3. 3 对象的创建与销毁 6. 2. 4 同步消息与异步消息 6. 2. 5 多对象 6.2.6 自调用与回调 6.3 协同 6.3.1 概述 6.3.2 Use Case与协同 6.3.3 参数化协同 6.4 交互图的应用 第7章 状态图 7.1 状态机 7.2 状态图 7.3 状态 7.3.1 概述 7.3.2 组合状态 7.3.3 顺序状态 7.3.4 历史状态 7.4 转移 7. 4. 1 事件 7. 4. 2 条件 7.4.3 动作 7.4.4 转移的类型 7.5 并发状态图 7.5.1 并发子状态 7.5.2 同步 7.6 状态图的应用 第8章 活动图 8.1 概述 8. 2 活动图的基本元素 8.2.1 动作状态与活动状态 8.2.2 动作流 8.2.3 泳道 8.2.4 对象流 8. 3 活动分解 8.4 并发 8.4.1 并发与同步 8.4.2 条件线程 8.4.3 同步状态 8.4.4 动态并发 8. 5 活动图的应用 8. 5. 1 用途 8. 5. 2 工作流建模 第9章 包图 9. 1 包的语义和表示 9. 2 包的嵌套 9.3 标准构造型 9. 2 包的联系 9. 2. 1 依赖与输入依赖 9.2.2 泛化 9. 3 包图 9.4 包图的应用 9.4.1 包图的建立 9.4.2 系统建模 9.4.3 开发跟踪 第10章 物理图与对象约束语言(OCL) 10.1 组件图 10.1.1 组件 10.1.2 组件的种类 10.1.3 组件的联系 10.1.4 组件图的应用 10.2 配置图 10.2.1 节点 10.2.2 节点的联系 10.2.3 配置图的应用 10.3 对象约束语言(OCL) 10.3.1 标准型 10.3.2 表达式 10.3.3 对象性质的约束 第11章 软件开发工具Rational Rose 11.1 Rational Rose的主要功能 11.1.1 对面向对象模型的支持 11.1.2 对螺旋上升式开发过程的支持 11.1.3 对往返工程的支持 11.1.4 对团队开发的支持 11.1.5 对工具的支持 11.2 Rational Rose的使用 11.2.1 系统主菜单窗口 11.2.2 模型与工作方式的组织 11.2.3 Use Case视图 11.2.4 逻辑视图 11.2.5 组件视图 11.2.6 配置视图 第12章 简易教学管理系统的分析与设计 12.1 系统需求 12.2 分析问题领域 12.2.1 确定系统范围和系统边界 12.2.2 定义活动者 12.2.3 定义Use Case 12.2.4 绘制Use Case图 12.2.5 绘制主要交互图 12.3 静态结构模型 12.3.1 建立对象类图 12.3.2 建立数据库模型 12.3.3 建立包图 12.4 动态行为模型 12.4.1 建立顺序图 12.4.2 建立协同图 12.4.3 建立状态图 12.4.4 建立活动图 12.5 物理模型 12.5.1 建立组件图 12.5.2 建立配置图
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值