用
例建模
(
Use Case Modeling
)是使用
用例
的方法来描述系统
的功能
需求
的过程,
用例模型
主要包括以下两部分内容:
用例图
(
Use Case Diagram
)
确定系统中所包含的参与者、用例和两者之间的对应关系,用例图描述的是关于系统功能的一个概述。
用例规约(
Use Case
Specification)
针对每一个用例都应该有一个用例规约文档与之相对应,该文档描述用例的细节内容。
在用例建模的过程中,我们建议的步聚是先找出参与者,再根据参与者确定每个参与者相关的用例,最后再细化每一个用例的用例规约。
用例描述用来详细描述用例图中每个用例,用文本文档来完成。
一. 用例图(Use Case Diagram)
用例图由参与者(Actor)、用例(Use Case)、系统边界、箭头组成,用画图的方法来完成。
参与者不是特指人,是指系统以外的,在使用系统或与系统交互中所扮演的角色。因此参与者可以是人,可以是事物,也可以是时间
或
其他系统等等。还有一点要注意的是,参与者不是指人或事物本身,而是表示人或事物当时所扮演的角色。比如小明是图书馆的管理员,他参与图书馆管理系统的交
互,这时他既可以作为管理员这个角色参与管理,也可以作为借书者向图书馆借书,在这里小明扮演了两个角色,是两个不同的参与者。参与者在画图中用简笔人物
画来表示,人物下面附上参与者的名称。
用例是对包括变量在内的一组动作序列的描述,系统执行这些动作,并产生传递特定参与者的价值的可观察结果。这是
UML
对用例的正式定义,对我们初学者可能有点难懂。我们可以这样去理解,用例是参与者想要系统做的事情。对于对用例的命名,我们可以给用例取一个简单、描述性的名称,一般为带有动作性的词。用例在画图中用椭圆来表示,椭圆下面附上用例的名称。
系统边界是用来表示正在建模系统的边界。边界内表示系统的组成部分,边界外表示系统外部。系统边界在画图中方框来表示,同时附上系统的名称,参与者画在边界的外面,用例画在边界里面。因为系统边界的作用有时候不是很明显,所以我个人理解,在画图时可省略。
箭头用来表示参与者和系统通过相互发送信号或消息
进行交互的关联关系。箭头尾部用来表示启动交互的一方,箭头头部用来表示被启动的一方,其中用例总是要由参与者来启动。
二. 用例规约(Use Case Specification)
用例图只是简单地用图描述了一下系统,但对于每个用例,我们还需要有详细的说明,这样就可以让别人对这个系统有一个更加详细的了解,这时我们就需要写用例描述。
对于用例描述的内容,一般没有硬性规定的格式,但一些必须或者重要的内容还是必须要写进用例描述里面的。用例描述一般包括:简要描述(说明)、前置(前提)条件、基本事件流、其他事件流、异常事件流、后置(事后)条件等等。下面说说各个部分的意思:
简要描述:对用例的角色、目的的简要描述;
前置条件:执行用例之前系统必须要处于的状态,或者要满足的条件;
基本事件流:描述该用例的基本流程,指每个流程都“正常”运作时所发生的事情,没有任何备选流和异常流,而只有最有可能发生的事件流;
其他事件流:表示这个行为或流程是可选的或备选的,并不是总要总要执行它们;
异常事件流:表示发生了某些非正常的事情所要执行的流程;
后置条件:用例一旦执行后系统所处的状态;
三. 用例图和用例描述设计
实例
这里用我开发的一个家教网站
来简单的分析用例图的画法和用例描述的写法。这个网站我用UML完整的分析一下,以下我提取了用例图和用例描述的部分。这个家教网站分为前台客户系统和后台管理系统。
前台客户系统的用例图如下:
后台管理系统用例图如下:
用例
系统边界
对于用例描述,篇幅有限,我在这里只列了后台管理系统中的网站公告发布这个用例的描述。如下:
用例名称:
网站公告发布
|
用例标识号:
202
|
参与者:
负责人
|
简要说明:
负责人用来填写和修改家教网站首页的公告,公告最终显示在家教网站的首页上。
|
前置条件:
负责人已经登陆家教网站管理系统
|
基本事件流:
1. 负责人鼠标点击“修改公告”按钮
2. 系统出现一个文本框,显示着原来的公告内容
3. 负责人可以在文本框上修改公告,也可以完全删除,重新写新的公告
4. 负责人编辑完文本框,按“提交”按钮,首页公告就被修改
5. 用例终止
|
其他事件流
A1:
1.在按“提交”按钮之前,负责人随时可以按“返回”按钮,文本框的任何修改内容都不会影响网站首页的公告
|
异常事件流:
1. 提示错误信息,负责人确认
2. 返回到管理系统主页面
|
后置条件:
1.网站首页的公告信息被修改
|
注释:
无
|
四、用例建模的步聚
在用例建模的过程中,我们建议的步聚是先找出参与者,再根据参与者确定每个参与者相关的用例,最后再细化每一个用例的用例规约。
1、寻找参与者
所谓的参与者是指所有存在于系统外部并与系统进行交互的人或其他系统。通俗地讲,参与者就是我们所要定义系统的使用者。寻找参与者可以从以下问题入手:
系统开发完成之后,有哪些人会使用这个系统?
系统需要从哪些人或其他系统中获得数据?
系统会为哪些人或其他系统提供数据?
系统会与哪些其他系统相关联?
系统是由谁来维护和管理的?
这些问题有助于我们抽象出系统的参与者。对于ATM机的例子,回答这些问题可以使我们找到更多的参与者:操作员负责维护和管理ATM机系统、ATM机也需要与后台服务器进行通讯以获得有关用户帐号的相关信息。
1.1 系统边界决定了参与者
参与者是由系统的边界所决定的,如果我们所要定义的系统边界仅限于ATM机本身,那么后台服务器就是一个外部的系统,可以抽象为一个参与者。
如果我们所要定义的系统边界扩大至整个银行系统,ATM机和后台服务器都是整个银行系统的一部分,这时候后台服务器就不再被抽象成为一个参与者。
值得注意的是,用例建模时不要将一些系统的组成结构作为参与者来进行抽象,如在ATM机系统中,打印机只是系统的一个组成部分,不应将它抽象成一个独立的参与者;在一个
MIS
管理系统中,
数据库系统
往往只作为系统的一个组成部分,一般不将其单独抽象成一个参与者。
1.2 特殊的参与者――系统时钟
有时候我们需要在系统内部定时地执行一些操作,如检测系统资源使用情况、定期地生成统计报表等等。从表面上看,这些操作并不是由外部的人或系统触发的,应该怎样用用例方法来表述这一类
功能需求呢?对于这种情况,我们可以抽象出一个系统时钟或定时器参与者,利用该参与者来触发这一类定时操作。从逻辑上,这一参与者应该被理解成是系统外部的,由它来触发系统所提供的用例对话。
2、确定用例
找到参与者之后,我们就可以根据参与者来确定系统的用例,主要是看各参与者需要系统提供什么样的服务,或者说参与者是如何使用系统的。寻找用例可以从以下问题入手(针对每一个参与者):
参与者为什么要使用该系统?
参与者是否会在系统中创建、修改、删除、访问、存储数据?如果是的话,参与者又是如何来完成这些操作的?
参与者是否会将外部的某些事件通知给该系统?
系统是否会将内部的某些事件通知该参与者?
综合以上所述,ATM系统的用例图可表示如下,
在用例的抽取过程中,必须注意:用例必须是由某一个主角触发而产生的活动,即每个用例至少应该涉及一个主角。如果存在与主角不进行交互的用例,就可以考
虑将其并入其他用例;或者是检查该用例相对应的参与者是否被遗漏,如果是,则补上该参与者。反之,每个参与者也必须至少涉及到一个用例,如果发现有不与任
何用例相关联的参与者存在,就应该考虑该参与者是如何与系统发生对话的,或者由参与者确定一个新的用例,或者该参与者是一个多余的模型元素,应该将其删
除。
可视化建模
的主要目的之一就是要增强
团队
的沟通,用例模型必须是易于理解的。用例建模往往是一个团队开发的过程,系统分析员在建模过程中必须注意参与者和用例的名称应该符合一定的命名约定,这样整个用例模型才能够符合一定的风格。如参与者的名称一般都是名词,用例名称一般都是动宾词组等。
对于同一个系统,不同的人对于
参与者和用例都可能有不同的抽象结果,因而得到不同的用例模型。我们需要在多个用例模型方案中选择一种"最佳"(或"较佳")的结果,一个好的用例模型应
该能够容易被不同的涉众所理解,并且不同的涉众对于同一用例模型的理解应该是一致的。
3、描述用例规约
应该避免这样一种误解――认为由参与者和用例构成的用例图就是用例模型,用例图只是在总体上大致描述了系统所能提供的各种服务,让我们对于系统的功能有
一个总体的认识。除此之外,我们还需要描述每一个有例的详细信息,这些信息包含在用例规约中,用例模型是由用例图和每一个用例的详细描述――用例规约所组
成的。RUP
中提供了用例规约的模板,每一个用例的用例规约都应该包含以下内容:
简要说明 (Brief Description)
简要介绍该用例的作用和目的。
事件流 (Flow of Event)
包括基本流和备选流,事件流应该表示出所有的场景。
用例场景 (Use-Case Scenario)
包括成功场景和失败场景,场景主要是由基本流和备选流组合而成的。
特殊需求 (Special Requirement)
描述与该用例相关的非功能性需求(包括性能、可靠性、可用性和可扩展性等)和设计约束(所使用的
操作系统
、开发工具
等)。
前置条件 (Pre-Condition)
执行用例之前系统必须所处的状态。
后置条件 (Post-Condition)
用例执行完毕后系统可能处于的一组状态。
用例规约基本上是用文本方式来表述的,为了更加清晰地描述事件流,也可以选择使用
状态图
、
活动图
或
序列图
来辅助说明。只要有助于表达的简洁明了,就可以在用例中任意粘贴用户界面和流程的图形化显示方式,或是其他图形。如活动图有助于描述复杂的决策流程,状态转移图有助于描述与状态相关的系统行为,序列图适合于描述基于时间顺序的消息传递。
3.1 基本流
基本流描述的是该用例最正常的一种场景,在基本流中系统执行一系列活动步骤来响应参与者提出的服务请求。我们建议用以下格式来描述基本流:
(1) 每一个步骤都需要用数字编号以清楚地标明步骤的先后顺序。
(2) 用一句简短的标题来概括每一步骤的主要内容,这样阅读者可以通过浏览标题来快速地了解用例的主要步骤。在用例建模的早期,我们也只需要描述到事件流步骤标题这一层,以免过早地陷入到用例描述的细节中去。
(3)
当整个用例模型基本稳定之后,我们再针对每一步骤详细描述参与者和系统之间所发生的交互。建议采用双向(roundtrip)描述法来保证描述的完整性,
即每一步骤都需要从正反两个方面来描述1)参与者向系统提交了什么信息;(2)对此系统有什么样的响应。具体例子请参见附录。
在描述参与者和系统之间的信息交换时,需指出来回传递的具体信息。例如,只表述参与者输入了客户信息就不够明确,最好明确地说参与者输入了客户姓名和地址
。通常可以利用词汇表让用例的复杂性保持在可控范围内,可以在词汇表中定义客户信息等内容,使用例不至于陷入过多的细节。
3.2 备选流
备选流负责描述用例执行过程中异常的或偶尔发生的一些情况,备选流和基本流的组合应该能够覆盖该用例所有可能发生的场景。在描述备选流时,应该包括以下几个要素:
(1) 起点:该备选流从事件流的哪一步开始;
(2) 条件:在什么条件下会触发该备选流;
(3) 动作:系统在该备选流下会采取哪些动作;
(4) 恢复:该备选流结束之后,该用例应如何继续执行。
备选流的描述格式可以与基本流的格式一致,也需要编号并以标题概述其内容,编号前可以加以字母前缀A(Alternative)以示与基本流步骤相区别。
3.3 用例场景
用例在实际执行的时候会有很多的不同情况发生,称之为用例场景;也可以说场景是用例的实例,我们在描述用例的时候要覆盖所有的用例场景,否则就有可能导
致需求的遗漏。在用例规约中,场景的描述可以由基本流和备选流的组合来表示。场景既可以帮助我们防止需求的遗漏,同时也可以对后续的开发工作起到很大的帮
助:开发人员必须实现所有的场景、测试人员可以根据用例场景来设计测试用例
。
3.4 特殊需求
特殊需求通常是非功能性需求,它为一个用例所专有,但不适合在用例的事件流文本中进行说明。特殊需求的例子包括法律或法规方面的需求、应用程序
标准和所构建系统的质量属性(包括可用性、可靠性、性能或支持性需求等)。此外,其他一些设计约束,如操作系统及环境
、兼容性需求等,也可以在此节中记录。
需要注意的是,这里记录的是专属于该用例的特殊需求;对于一些全局的非功能性需求和设计约束,它们并不是该用例所专有的,应把它们记录在《补充规约》中。
3.5 前置和后置条件
前置条件是执行用例之前必须存在的系统状态,后置条件是用例一执行完毕后系统可能处于的一组状态。
4、检查用例模型
用例模型完成之后,可以对用例模型进行检查,看看是否有遗漏或错误之处。主要可以从以下几个方面来进行检查:
功能需求的完备性
现有的用例模型是否完整地描述了系统功能,这也是我们判断用例建模工作是否结束的标志。如果发现还有系统功能没有被记录在现有的用例模型中,那么我们就需要抽象一些新的用例来记录这些需求,或是将他们归纳在一些现有的用例之中。
模型是否易于理解
用例模型最大的优点就在于它应该易于被不同的涉众所理解,因而用例建模最主要的指导原则就是它的可理解性。用例的粒度、个数以及模型元素之间的关系复杂程度都应该由该指导原则决定。
是否存在不一致性
系统的用例模型是由多个系统分析员协同完成的,模型本身也是由多个工件所组成的,所以我们要特别注意不同工件之前是否存在前后矛盾或冲突的地方,避免在模型内部产生不一致性。不一致性会直接影响到需求定义的准确性。
避免二义性语义
好的需求定义应该是无二义性的,即不同的人对于同一需求的理解应该是一致的。在用例规约的描述中,应该避免定义含义模糊的需求,即无二义性。
一般的讲,大型系统采用
UML UserCase
表达客户需求。
UML
建模
除了
UML
图,还需要文档描述,文档描述建议以下格式:
前置条件:开始使用这个用例之前,必须满足的条件。非必需
主事件流:用例的正常流程。必需
其它事件流:用例的非正常流,如:错误流
后置条件:用例执行结果“必须”为真的条件,也称为“附加条件”,非必需
举例:“安全登入”就是一个用例。
Ø
前置条件:无
Ø
主事件流:用户输入正确的用户名和密码,安全登入到
Web
应用中。向用户返回欢迎页,包括可操作的菜单,提示登陆成功。
Ø
其它事件流
1
:未输入用户名或密码,显示出错信息:用户名或密码不可为空
Ø
其它事件流
2
:用户名和密码不匹配,显示出错信息:用户名或口令错误
Ø
后置条件:该用例不是必须为真,无
分享到:
相关推荐
UML用例描述和用例图是系统需求分析的关键工具,它们帮助开发者明确理解系统的功能和用户需求,为后续的设计和实现提供了清晰的蓝图。通过对用例的深入理解和精确描述,可以确保系统的功能符合预期,提高软件质量。
这包括了用例名称、简述、主要参与者、前置条件、后置条件、基本流(Primary Flow)、异常流(Alternative Flow)等部分。这些内容为系统设计提供了详细的场景描述,有助于避免需求模糊不清导致的问题。 在实际操作...
第3部分首先给出了一个概览性的用例图,其中包含了主要的参与者(Actor)以及他们可以执行的主要用例。 ##### 3.2 用例图概览 概览性的用例图展示了系统的主要参与者及其相关的用例。这些参与者包括客户、管理员等...
3. **绘制用例图(Use Case Diagram)**:用例图是UML中的静态视图,展示了参与者与用例之间的关系。它用椭圆表示用例,用箭头表示关联关系,直观地展示系统的主要功能。 4. **细化用例**:通过编写用例规格说明书...
用例文档是详细记录每个用案的文档,包括用例的名称、参与者、前置条件、事件流(正常流程和异常流程)、后置条件等。编写用例文档的目的是确保所有相关方(如开发人员、测试人员和项目管理者)对用例有共同的理解。...
3. **绘制用例图(Use Case Diagram)**:用图形方式表示参与者、用例和它们之间的关系,有助于可视化系统的需求。 4. **细化用例**:编写用例描述,详细阐述每个用例的前置条件、后置条件、基本流和异常流。 5. *...
- **用例描述**:对用例图中每个用例进行详细阐述,包括简要描述、前置条件、基本事件流、其他事件流、异常事件流和后置条件等。这部分内容确保了用例图的深度和细节,是项目团队理解和实现用例的关键。 #### 三、...
**UML用例图(Use Case Diagram)是统一建模语言(Unified Modeling Language)中的一种图形表示形式,用于描述系统或软件的外部行为。它主要关注系统的功能需求,通过图形化方式来展示用户(Actors)与系统(System...
用例通常被表示为椭圆形,在UML用例图中,用例的名字往往采用动宾或主谓结构,如“创建账户”、“查询余额”等。 - **参与者**:参与者是系统之外的实体,它可以是人、其他系统或设备,它们与系统进行交互以实现...
在本节中,我们将深入探讨两个核心用例:“借书还书系统”和“图书信息管理系统”,并分析其用例图、事件流、前置条件、后置条件等关键要素。 ##### 1. “借书还书系统”用例分析 - **主要行为者**:读者 - **前置...
图书管理系统UML用例图设计 一、系统管理员用例 * 用例名称:系统管理员 * 参与执行者:系统管理员 * 前置条件:系统管理员已登录系统 * 事件流: 1. 系统管理员登录系统 2. 系统管理员添加借阅者信息 3. 系统...
produit 需求文档的写作(五)– 用例文档(UML 用例图、流程图).pdf 本文档主要讲解了用例文档的写作,包括用例图和流程图的制作,并详细介绍了用例文档的组成部分和写作格式。以下是本文档的知识点总结: 一、...
用例描述一般包括:简要描述、前置条件、基本事件流、其他事件流、异常事件流、后置条件等等。 画用例图时需要注意的几点是:参与者之间的关系,用例之间的关系,参与者和用例之间的关系。其中参与者之间的关系用的...
在这个初学UML-用例图入门教程中,我们将深入探讨**用例图**这一重要的UML工具。 用例图是UML中的核心概念之一,它主要用来描绘系统与用户之间的交互,即系统外部参与者如何与系统进行交互,完成特定的任务或达到...
用例描述一般包括:简要描述、前置条件、基本事件流、其他事件流、异常事件流、后置条件等。 例如,在车辆购置管理中,我们可以添加一个车辆购置申请用例描述: 用例名称:添加车辆购置申请 用例标识号:1.1.1 ...
UML图书借阅管理系统的用例图是指使用Unified Modeling Language(统一建模语言)对图书借阅管理系统中的用例进行建模和描述。该系统主要涉及读者信息管理、借阅信息管理、图书信息管理等多方面的信息管理,系统的...
### UML 网上购物用例图解析 #### 一、引言 随着电子商务的快速发展,越来越多的人选择在线购物。对于开发此类平台的技术人员来说,理解用户需求并设计出符合用户期望的功能至关重要。本文章将详细介绍一个网上...
此外,用例描述可以包含前置条件、后置条件、事件流等详细信息,帮助理解用例的执行过程和约束。 时序图(序列图)则关注对象间的交互顺序,它展示了消息传递的时间顺序和对象间的协作。在时序图中,对象以生命线的...