到底什么是用例图!!!!
- 用例图到底是个什么图?
- 用例图由哪些元素构成?
- 用例图中的用例之间有什么关系?
- 如何创建一个用例图?
用例图到底是个什么图?
一个图,由参与者(系统用户)、用例(系统功能)、以及他们之间的关系构成的,用于描述系统功能的动态试图。
如果要在用例图上显示一个参与者,可以绘制一个人形符号。
如果要在用例图上显示某个用例,我们需要画一个椭圆,然后将用例的名称放在椭圆的中心或者椭圆下面的中心位置。
参与者和用例之间的关系使用带箭头或者不带箭头的线段来描述,箭头表示的是:这一关系中哪一方是对话的主动发起者,箭头所指方是对话的被动接受者。
实例如下:
在用例建模中,为了更清楚的描述用例或者参与者,会用到注释。
到目前为止,我们熟悉了什么是用例图,用例图中含有哪些构图的元素,那么我们在分析一下,用例图的作用是什么?
用例图是在需求分析中用到的,主要的作用就是描述参与者和用例之间的关系,并帮助开发者可视化的了解系统的功能,借助用例图,系统用户,系统分析人员,领域专家能够可视化的方式对问题进行探讨,减少了大量交流上的障碍,便于对问题达成共识。
用例图可视化的表达了系统的需求,具有直观、规范等优点,克服了纯文字性说明的不足。
用例方法是完全从外部来定义系统功能,它把需求和设计完全的分离开来,这样我们就不用关系内部是如何实现的,系统对我们来说就是一个黑盒子。
用例图中各个要素所代表的含义
- 参与者
参与者是指存在于系统外部并直接与系统进行交互的人,系统,子系统,或类的外部实体的抽象,每个参与者可以参与一个或多个用例,每个用例也可以有一个或多个参与者。
在用例图中使用一个人形图标来表示参与者,参与者的名字下载人形图标的下面(如下图所示) - 参与者之间的关系
由于参与者实质上也是一个类,所以它拥有与类相同的关系描述,即参与者与参与者之间主要是泛化关系(就是继承关系)
泛化关系的含义就是把某些参与者的共同行为提取出来表示成通用行为,并描述成超类。
泛化关系表示的是参与者之间的一种一般/特殊的关系,在UML图中,使用带空心箭头的实线表示泛化的关系。 - 系统边界
在项目开发过程中,边界就是一个非常重要的概念,这里说的系统边界就是指系统与系统之间的界限。通常我们所说的系统可以认为是由一系列的相互作用的元素形成的具有特定功能的有机整体。
系统同时又是相对的,一个系统本身可以是另一个更大系统的组成部分,因此,系统与系统之间需要使用系统边界进行区分开来,我们把系统边界以外的同系统相关的其他部分,称之为系统环境。
用例的重要元素
1.如何识别用例
任何用例都不能在缺少参与者的情况下独立存在,同样,任何参与者也必须要有与之关联的用例,所以识别用例的最好方法就是从分析系统参与者开始,在这个过程中,往往会发现新的参与者。那么参与者怎么找呢?参与者如何定义呢?我们可以通过以下几个问题进行寻找。
- 参与者希望系统提供什么功能?
- 参与者是否会读取、创建、修改、删除、存储系统的某种信息?如果是的话,参与者又是如何完成这些操作的呢?
- 参与者是否会将外部的某些事件通知给系统?
- 系统中发生的时间是否通知参与者?
- 是否存在影响系统的外部事件?
2.用例的粒度
用例的粒度值的是用例所包含的系统服务或功能单元的多少。
- 用例的粒度越大,用例包含的功能越多、反之则包含的功能越少。
- 用例的粒度越小,用例数就会很多,反之用例数就很少。
- 如果用例数目过多会造成用例模型过大和引入设计困难大大提高。
- 如果用例数目过少会造成用例的粒度太大,不方便进一步的充分分析。
示例:
网站后台管理系统中的会员信息维护用例,管理员需要进行添加会员信息、修改会员信息、删除会员信息等操作。
下面这个图就把对会员信息的操作整合为一体:维护会员信息用例
同样我们也可以根据具体的操作将其抽象成3个用例,它展示的系统需求和单个用例是完全一样的。
3.用例规约
对于每一个用例,我们还需要有详细的描述信息,以便让别人对整个系统有一个更加详细的了解,这些信息包含在用例规约中
每一个用例的用例规约都应该包含一下的内容:
- 简要说明:对用例作用和目的简要描述
- 事件流:事件流包括基本流和被选流,基本流描述的是用例的基本流程,是中用例“正常”运行时的场景。
- 用例场景:同一个用例在实际执行的时候有很多不同的情况发生,称之为用例场景,也可以说用例场景就会用例的实例。
- 特殊需求:特殊需求指的是一个用例的非功能需求和设计约束。特殊需求通常是非功能性需求,包括可靠性、性能、可用性和可扩展性等。例如法律或法规方面的需求,应用程序标准和所构建系统的质量属性等。
- 前置条件:执行用例之前系统必须所处的状态、如:前置条件是要求用户有访问的权限或是要求某个用例必须已经执行完。
- 后置条件:用例执行完毕后系统可能处于一组状态,例如要求在某个用例执行后,必须执行另一个用例。
用例之间的关系
1.包含关系
包含关系指用例可以简单地包含其他用例具有的行为,并把它所包含的用例行为作为自身行为的一部分。在UML中,包含关系是通过带箭头的虚线段加<>字样来表示,箭头由基础用例(Base)指向被包含用例(inclusion)。
在处理包含关系的时候,具体的做法就是把几个用例的公共部分单独的抽象出来成为一个新的用例,主要有两种情况需要用到包含关系
第一:多个用例用到同一段的行为,则可以把这段共同的行为单独抽象成为一个用例,然后让其他用例来包含这一用例。
第二:某一个用例的功能过多,事假流过于复杂时, 我们也可以把某一段事件流抽象成一个被包含的用例,以达到简化描述的目的。
2.扩展
在一定条件下,把新的行为加入到已有的用例中,获得的新用例佳作扩展用例,原有的用例叫做基础用例,从扩展用例到基础用例的关系就是扩展关系。
一个基础用例可以拥有一个或者多个扩展用例,这些扩展用例可以一起使用。
3. 泛化
用例泛化指的是一个父用例可以被特化形成多个子用例,而父用例和子用例之间的关系就是泛化关系。
在用例的泛化中,子用例继承了父用例所有的结构、行为和关系,子用例是父用例的一种特殊的形式。
子用例还可以添加、覆盖、改变继承的行为。在UML中用例的泛化关系通过一个三角箭头从子用例指向父用例来表示。
泛化的示例:
银行存款有两种方式,一种是银行柜台存款,一种是ATM机存款。在这里,银行柜台存款和ATM机存款都是存款的一种特殊的方式,因此存款为父用例,“银行柜台存款”和“ATM机存款”为子用例。
案例分析:
学生信息管理系统:部分功能如下:
- 系统管理员登录后可以对班级的基本信息进行增加、删除、修改、查询等操作。学校领导登录后可以对班级基本信息进行查询操作。
- 教师登录后可以对学生的考试成绩进行录入、修改、查询等操作。学生登录后可以对考试成绩进行查询操作。
- 学生登录后可以了解所有选修课程的具体信息,可以根据自己的需要选择不同的课程,系统管理员登录后可以增加、修改、查询、删除选修课程。
- 系统管理员可以对账号进行创建,设置、查看、删除等操作。
问题分析:
- 识别参与者
【学生】:对于一个学校来说,最重要的就是教育学生,所以首要考虑的就是学生。
【教师】:给学生上课,那必然有老师,老师的负责学生的教育,可以查看学生的基本信息,对学生的考试成绩进行操作。
【领导】:老师的上级就是学校的领导,校领导需要掌握一个学校的所有基本信息,包括老师和学生的,同时还要加强对学校的管理工作。
【管理员】:此外,不论是什么系统,基本都会有比较专业的人来负责管理系统,本系统也不例外,管理员除了负责系统的正常维护外,还要进行录入学校的基本信息(包括老师、学生、课程等) - 构建用例模型
【系统管理员】:登录、找回密码、查看班级的基本信息,删除班级的基本信息、修改班级的基本信息和录入班级的基本信息。
【校领导】:登录、找回密码、查看班级基本信息
如果忘记密码,需要用找回密码的功能来找回密码,但是正常情况下不会用到找回密码这个功能,所以,找回密码是登录的一个扩展。
【教师】:录入成绩、修改成绩、保存成绩、查询成绩、删除成绩和登录。
【学生】:登录、查询成绩。
修改成绩和录入成绩都需要保存成绩,所以将保存成绩抽象出来作为一个单独的用例
录入成绩、修改成绩和保存成绩是包含的关系
找回密码和登录是扩展关系
【学生】:查看课程信息、按课程编号查看、按课程名查看、选择课程、删除已选课程、登录和找回密码。
【系统管理员】:登录、找回密码和“维护课程信息”
查看课程有两种形式:
(1)按照课程名查看
(2)按照课程编号进行查看
所以查看课程信息是父用例,而按照课程名查看和按照课程编号查看是子用例他们之间的关系是泛化关系
找回密码和登录是扩展关系
【系统管理员】:创建新账号、设置账号、设置账号基本信息、设置账号权限、查看账号和删除账号。
在设置账号时,主要分为设置账号的基本信息和设置账号的权限,为了便于修改和维护,将这两个功能抽象为两个用例,所以设置账号基本信息、设置账号权限和设置账号时包含的关系。
本文参考于:https://blog.****.net/mj_ww/article/details/53020080