用例建模指南Word文件下载.docx

上传人:b****6 文档编号:19877970 上传时间:2023-01-11 格式:DOCX 页数:32 大小:88.81KB
下载 相关 举报
用例建模指南Word文件下载.docx_第1页
第1页 / 共32页
用例建模指南Word文件下载.docx_第2页
第2页 / 共32页
用例建模指南Word文件下载.docx_第3页
第3页 / 共32页
用例建模指南Word文件下载.docx_第4页
第4页 / 共32页
用例建模指南Word文件下载.docx_第5页
第5页 / 共32页
点击查看更多>>
下载资源
资源描述

用例建模指南Word文件下载.docx

《用例建模指南Word文件下载.docx》由会员分享,可在线阅读,更多相关《用例建模指南Word文件下载.docx(32页珍藏版)》请在冰豆网上搜索。

用例建模指南Word文件下载.docx

∙参与者(Actor)

参与者是指存在于被定义系统外部并与该系统发生交互的人或其他系统,他们代表的是系统的使用者或使用环境。

∙用例(UseCase)

用例用于表示系统所提供的服务,它定义了系统是如何被参与者所使用的,它描述的是参与者为了使用系统所提供的某一完整功能而与系统之间发生的一段对话。

∙通讯关联(CommunicationAssociation)

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

这大三种模型元素在UML中的表述如下图所示。

以银行自动提款机(ATM)为例,它的主要功能可以由下面的用例图来表示。

ATM的主要使用者是银行客户,客户主要使用自动提款机来进行银行帐户的查询、提款和转帐交易。

通讯关联表示的是参与者和用例之间的关系,箭头表示在这一关系中哪一方是对话的主动发起者,箭头所指方是对话的被动接受者;

如果你不想强调对话中的主动与被动关系,可以使用不带箭头的关联实线。

在参与者和用例之间的信息流不是由通讯关联来表示的,该信息流是缺省存在的(用例本身描述的就是参与者和系统之间的对话),并且信息流向是双向的,它与通讯关联箭头所指的方向亳无关系。

1.2用例的内容

用例图使我们对系统的功能有了一个整体的认知,我们可以知道有哪些参与者会与系统发生交互,每一个参与者需要系统为它提供什么样的服务。

用例描述的是参与者与系统之间的对话,但是这个对话的细节并没有在用例图中表述出来,针对每一个用例我们可以用事件流来描述这一对话的细节内容。

如在ATM系统中的"

提款"

用例可以用事件流表述如下:

提款-基本事件流

1.用户插入信用卡

2.输入密码

3.输入提款金额

4.提取现金

5.退出系统,取回信用卡

但是这只描述了提款用例中最顺利的一种情况,作为一个实用的系统,我们还必须考虑可能发生的各种其他情况,如信用卡无效、输入密码错、用户帐号中的现金余额不够等,所有这些可能发生的各种情况(包括正常的和异常的)被称之为用例的场景(Scenario),场景也被称作是用例的实例(Instance)。

在用例的各种场景中,最常见的场景是用基本流(BasicFlow)来描述的,其他的场景则是用备选流(AlternativeFlow)来描述。

对于ATM系统中的"

用例,我们可以得到如下一些备选流:

提款-备选事件流

备选流一:

用户可以在基本流中的任何一步选择退出,转至基本流步骤5。

备选流二:

在基本流步骤1中,用户插入无效信用卡,系统显示错误并退出信用卡,用例结束。

备选流三:

在基本流步骤2中,用户输入错误密码,系统显示错误并提示用户重新输入密码,重新回到基本流步骤2;

三次输入密码错误后,信用卡被系统没收,用例结束。

通过基本流与备选流的组合,就可以将用例所有可能发生的各种场景全部描述清楚。

我们在描述用例的事件流的时候,就是要尽可能地将所有可能的场景都描述出来,以保证需求的完备性。

1.3用例方法的优点

用例方法完全是站在用户的角度上(从系统的外部)来描述系统的功能的。

在用例方法中,我们把被定义系统看作是一个黑箱,我们并不关心系统内部是如何完成它所提供的功能的。

用例方法首先描述了被定义系统有哪些外部使用者(抽象成为Actor),这些使用者与被定义系统发生交互;

针对每一参与者,用例方法又描述了系统为这些参与者提供了什么样的服务(抽象成为UseCase),或者说系统是如何被这些参与者使用的。

所以从用例图中,我们可以得到对于被定义系统的一个总体印象。

与传统的功能分解方式相比,用例方法完全是从外部来定义系统的功能,它把需求与设计完全分离开来。

在面向对象的分析设计方法中,用例模型主要用于表述系统的功能性需求,系统的设计主要由对象模型来记录表述。

另外,用例定义了系统功能的使用环境与上下文,每一个用例描述的是一个完整的系统服务。

用例方法比传统的SRS更易于被用户所理解,它可以作为开发人员和用户之间针对系统需求进行沟通的一个有效手段。

在RUP中,用例被作为整个软件开发流程的基础,很多类型的开发活动都把用例作为一个主要的输入工件(Artifact),如项目管理、分析设计、测试等。

根据用例来对目标系统进行测试,可以根据用例中所描述的环境和上下文来完整地测试一个系统服务,可以根据用例的各个场景(Scenario)来设计测试用例,完全地测试用例的各种场景可以保证测试的完备性。

回页首

2.建立用例模型

使用用例的方法来描述系统的功能需求的过程就是用例建模,用例模型主要包括以下两部分内容:

∙用例图(UseCaseDiagram)

确定系统中所包含的参与者、用例和两者之间的对应关系,用例图描述的是关于系统功能的一个概述。

∙用例规约(UseCaseSpecification)

针对每一个用例都应该有一个用例规约文档与之相对应,该文档描述用例的细节内容。

在用例建模的过程中,我们建议的步聚是先找出参与者,再根据参与者确定每个参与者相关的用例,最后再细化每一个用例的用例规约。

2.1寻找参与者

所谓的参与者是指所有存在于系统外部并与系统进行交互的人或其他系统。

通俗地讲,参与者就是我们所要定义系统的使用者。

寻找参与者可以从以下问题入手:

∙系统开发完成之后,有哪些人会使用这个系统?

∙系统需要从哪些人或其他系统中获得数据?

∙系统会为哪些人或其他系统提供数据?

∙系统会与哪些其他系统相关联?

∙系统是由谁来维护和管理的?

这些问题有助于我们抽象出系统的参与者。

对于ATM机的例子,回答这些问题可以使我们找到更多的参与者:

操作员负责维护和管理ATM机系统、ATM机也需要与后台服务器进行通讯以获得有关用户帐号的相关信息。

2.1.1系统边界决定了参与者

参与者是由系统的边界所决定的,如果我们所要定义的系统边界仅限于ATM机本身,那么后台服务器就是一个外部的系统,可以抽象为一个参与者。

如果我们所要定义的系统边界扩大至整个银行系统,ATM机和后台服务器都是整个银行系统的一部分,这时候后台服务器就不再被抽象成为一个参与者。

值得注意的是,用例建模时不要将一些系统的组成结构作为参与者来进行抽象,如在ATM机系统中,打印机只是系统的一个组成部分,不应将它抽象成一个独立的参与者;

在一个MIS管理系统中,数据库系统往往只作为系统的一个组成部分,一般不将其单独抽象成一个参与者。

2.1.2特殊的参与者――系统时钟

有时候我们需要在系统内部定时地执行一些操作,如检测系统资源使用情况、定期地生成统计报表等等。

从表面上看,这些操作并不是由外部的人或系统触发的,应该怎样用用例方法来表述这一类功能需求呢?

对于这种情况,我们可以抽象出一个系统时钟或定时器参与者,利用该参与者来触发这一类定时操作。

从逻辑上,这一参与者应该被理解成是系统外部的,由它来触发系统所提供的用例对话。

2.2确定用例

找到参与者之后,我们就可以根据参与者来确定系统的用例,主要是看各参与者需要系统提供什么样的服务,或者说参与者是如何使用系统的。

寻找用例可以从以下问题入手(针对每一个参与者):

∙参与者为什么要使用该系统?

∙参与者是否会在系统中创建、修改、删除、访问、存储数据?

如果是的话,参与者又是如何来完成这些操作的?

∙参与者是否会将外部的某些事件通知给该系统?

∙系统是否会将内部的某些事件通知该参与者?

综合以上所述,ATM系统的用例图可表示如下,

在用例的抽取过程中,必须注意:

用例必须是由某一个主角触发而产生的活动,即每个用例至少应该涉及一个主角。

如果存在与主角不进行交互的用例,就可以考虑将其并入其他用例;

或者是检查该用例相对应的参与者是否被遗漏,如果是,则补上该参与者。

反之,每个参与者也必须至少涉及到一个用例,如果发现有不与任何用例相关联的参与者存在,就应该考虑该参与者是如何与系统发生对话的,或者由参与者确定一个新的用例,或者该参与者是一个多余的模型元素,应该将其删除。

可视化建模的主要目的之一就是要增强团队的沟通,用例模型必须是易于理解的。

用例建模往往是一个团队开发的过程,系统分析员在建模过程中必须注意参与者和用例的名称应该符合一定的命名约定,这样整个用例模型才能够符合一定的风格。

如参与者的名称一般都是名词,用例名称一般都是动宾词组等。

对于同一个系统,不同的人对于参与者和用例都可能有不同的抽象结果,因而得到不同的用例模型。

我们需要在多个用例模型方案中选择一种"

最佳"

(或"

较佳"

)的结果,一个好的用例模型应该能够容易被不同的涉众所理解,并且不同的涉众对于同一用例模型的理解应该是一致的。

2.3描述用例规约

应该避免这样一种误解――认为由参与者和用例构成的用例图就是用例模型,用例图只是在总体上大致描述了系统所能提供的各种服务,让我们对于系统的功能有一个总体的认识。

除此之外,我们还需要描述每一个有例的详细信息,这些信息包含在用例规约中,用例模型是由用例图和每一个用例的详细描述――用例规约所组成的。

RUP中提供了用例规约的模板,每一个用例的用例规约都应该包含以下内容:

∙简要说明(BriefDescription)

简要介绍该用例的作用和目的。

∙事件流(FlowofEvent)

包括基本流和备选流,事件流应该表示出所有的场景。

∙用例场景(Use-CaseScenario)

包括成功场景和失败场景,场景主要是由基本流和备选流组合而成的。

∙特殊需求(SpecialRequirement)

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

∙前置条件(Pre-Condition)

执行用例之前系统必须所处的状态。

∙后置条件(Post-Condition)

用例执行完毕后系统可能处于的一组状态。

用例规约基本上是用文本方式来表述的,为了更加清晰地描述事件流,也可以选择使用状态图、活动图或序列图来辅助说明。

只要有助于表达的简洁明了,就可以在用例中任意粘贴用户界面和流程的图形化显示方式,或是其他图形。

如活动图有助于描述复杂的决策流程,状态转移图有助于描述与状态相关的系统行为,序列图适合于描述基于时间顺序的消息传递。

2.3.1基本流

基本流描述的是该用例最正常的一种场景,在基本流中系统执行一系列活动步骤来响应参与者提出的服务请求。

我们建议用以下格式来描述基本流:

1)每一个步骤都需要用数字编号以清楚地标明步骤的先后顺序。

2)用一句简短的标题来概括每一步骤的主要内容,这样阅读者可以通过浏览标题来快速地了解用例的主要步骤。

在用例建模的早期,我们也只需要描述到事件流步骤标题这一层,以免过早地陷入到用例描述的细节中去。

3)当整个用例模型基本稳定之后,我们再针对每一步骤详细描述参与者和系统之间所发生的交互。

建议采用双向(roundtrip)描述法来保证描述的完整性,即每一步骤都需要从正反两个方面来描述:

(1)参与者向系统提交了什么信息;

(2)对此系统有什么样的响应。

具体例子请参见附录。

在描述参与者和系统之间的信息交换时,需指出来回传递的具体信息。

例如,只表述参与者输入了客户信息就不够明确,最好明确地说参与者输入了客户姓名和地址。

通常可以利用词汇表让用例的复杂性保持在可控范围内,可以在词汇表中定义客户信息等内容,使用例不至于陷入过多的细节。

2.3.2备选流

备选流负责描述用例执行过程中异常的或偶尔发生的一些情况,备选流和基本流的组合应该能够覆盖该用例所有可能发生的场景。

在描述备选流时,应该包括以下几个要素:

1)起点:

该备选流从事件流的哪一步开始;

2)条件:

在什么条件下会触发该备选流;

3)动作:

系统在该备选流下会采取哪些动作;

4)恢复:

该备选流结束之后,该用例应如何继续执行。

备选流的描述格式可以与基本流的格式一致,也需要编号并以标题概述其内容,编号前可以加以字母前缀A(Alternative)以示与基本流步骤相区别。

2.3.3用例场景

用例在实际执行的时候会有很多的不同情况发生,称之为用例场景;

也可以说场景是用例的实例,我们在描述用例的时候要覆盖所有的用例场景,否则就有可能导致需求的遗漏。

在用例规约中,场景的描述可以由基本流和备选流的组合来表示。

场景既可以帮助我们防止需求的遗漏,同时也可以对后续的开发工作起到很大的帮助:

开发人员必须实现所有的场景、测试人员可以根据用例场景来设计测试用例。

2.3.4特殊需求

特殊需求通常是非功能性需求,它为一个用例所专有,但不适合在用例的事件流文本中进行说明。

特殊需求的例子包括法律或法规方面的需求、应用程序标准和所构建系统的质量属性(包括可用性、可靠性、性能或支持性需求等)。

此外,其他一些设计约束,如操作系统及环境、兼容性需求等,也可以在此节中记录。

需要注意的是,这里记录的是专属于该用例的特殊需求;

对于一些全局的非功能性需求和设计约束,它们并不是该用例所专有的,应把它们记录在《补充规约》中。

2.3.5前置和后置条件

前置条件是执行用例之前必须存在的系统状态,后置条件是用例一执行完毕后系统可能处于的一组状态。

2.4检查用例模型

用例模型完成之后,可以对用例模型进行检查,看看是否有遗漏或错误之处。

主要可以从以下几个方面来进行检查:

∙功能需求的完备性

现有的用例模型是否完整地描述了系统功能,这也是我们判断用例建模工作是否结束的标志。

如果发现还有系统功能没有被记录在现有的用例模型中,那么我们就需要抽象一些新的用例来记录这些需求,或是将他们归纳在一些现有的用例之中。

∙模型是否易于理解

用例模型最大的优点就在于它应该易于被不同的涉众所理解,因而用例建模最主要的指导原则就是它的可理解性。

用例的粒度、个数以及模型元素之间的关系复杂程度都应该由该指导原则决定。

∙是否存在不一致性

系统的用例模型是由多个系统分析员协同完成的,模型本身也是由多个工件所组成的,所以我们要特别注意不同工件之前是否存在前后矛盾或冲突的地方,避免在模型内部产生不一致性。

不一致性会直接影响到需求定义的准确性。

∙避免二义性语义

好的需求定义应该是无二义性的,即不同的人对于同一需求的理解应该是一致的。

在用例规约的描述中,应该避免定义含义模糊的需求,即无二义性。

3.系统需求

RUP中根据FURPS+模型将系统需求分为以下几类:

∙功能(Functionality)

∙可用性(Usability)

∙可靠性(Reliability)

∙性能(Performance)

∙可支持性(Supportability)

∙设计约束等

除了第一项功能性需求之外的其他需求都归之为非功能性需求。

3.1需求工件集

用例模型主要用于描述系统的功能性需求,对于其他的非功能性需要用其他文档来记录。

RUP中定义了如下的需求工件集合。

∙用例模型:

记录功能性需求

o用例图:

描述参与者和用例之间的关系

o用例规约:

描述每一个用例的细节信息

∙补充规约:

记录一些全局性的功能需求、非功能性需求和设计约束等

∙词汇表:

记录一些系统需求相关的术语

在实际应用中,除了这些工件之外,我们还可以根据实际需求灵活选用其他形式的文档来补充说明需求。

并不是所有的系统需求都适保合用用例模型来描述的,如编译器,我们很难用用例方法来表述它所处理的语言的方法规则,在这种情况下,采用传统的BNF范式来表述更加合适一些。

在电信软件行业中,很多电信标准都是采用SDL语言来描述的,我们也不必用UML来改写这些标准(UML对SDL存在着这样的兼容性),只需将SDL形式的电信标准作为需求工件之一,在其他工件中对其加以引用就可以了。

总之,万万不可拘泥于用例建模的形式,应灵活运用各种方式的长处。

3.2补充规约

补充规约记录那些在用例模型中不易表述的系统需求,主要包括以下内容。

∙功能性

功能性需求主要在用例模型中刻画,但是也有部分需求不适合在用例中表述。

有些功能性需求是全局性的,适用于所有的用例,如出错处理、I18N支持等,我们不需要在所有的用例中描述这些功能性需求,只需要在补充规约中统一描述就可以了。

∙可用性

记录所有可用性相关的需求,如系统的使用者所需要的培训时间、是否应附合一些常见的可用性标准如Windows界面风格等。

∙可靠性

定义系统可靠性相关的各种指标,包括:

o可用性:

指出可用时间百分比(xx.xx%),系统处于使用、维护、降级模式等操作的小时数;

o平均故障间隔时间(MTBF):

通常表示为小时数,但也可表示为天数、月数或年数;

o平均修复时间(MTTR):

系统在发生故障后可以暂停运行的时间;

o精确度:

指出系统输出要求具备的精密度(分辨率)和精确度(按照某一已知的标准);

o最高错误或缺陷率:

通常表示为bugs/KLOC(每千行代码的错误数目)或bugs/function-point(每个功能点的错误数目)。

∙性能

记录系统性能相关的各种指标,包括:

o对事务的响应时间(平均、最长);

o吞吐量(例如每秒处理的事务数);

o容量(例如系统可以容纳的客户或事务数);

o降级模式(当系统以某种形式降级时可接受的运行模式);

o资源利用情况:

内存、磁盘、通信等。

∙可支持性

定义所有与系统的可支持性或可维护性相关的需求,其中包括编码标准、命名约定、类库、如何来对系统进行维护操作和相应的维护实用工具等。

∙设计约束

设计约束代表已经批准并必须遵循的设计决定,其中包括软件开发流程、开发工具、系统构架、编程语言、第三方构件类库、运行平台和数据库系统等等。

3.3词汇表

词汇表主要用于定义项目特定的术语,它有助于开发人员对项目中所用的术语有统一的理解和使用,它也是后续阶段中进行对象抽象的基础。

4.调整用例模型

在一般的用例图中,我们只表述参与者和用例之间的关系,即它们之间的通讯关联。

除此之外,我们还可以描述参与者与参与者之间的泛化(generalization)、用例和用例之间的包含(include)、扩展(extend)和泛化(generalization)关系。

我们利用这些关系来调整已有的用例模型,把一些公共的信息抽取出来重用,使得用例模型更易于维护。

但是在应用中要小心选用这些关系,一般来说这些关系都会增加用例和关系的个数,从而增加用例模型的复杂度。

而且一般都是在用例模型完成之后才对用例模型进行调整,所以在用例建模的初期不必要急于抽象用例之间的关系。

4.1参与者之间的关系

参与者之间可以有泛化(Generalization)关系(或称为"

继承"

关系)。

例如在需求分析中常见的权限控制问题(如下图所示),一般的用户只可以使用一些常规的操作,而管理员除了常规操作之外还需要进行一些系统管理工作,操作员既可以进行常规操作又可以进行一些配置操作。

在这个例子中我们会发现管理员和操作员都是一种特殊的用户,他们拥有普通用户所拥有的全部权限,此外他们还有自己独有的权限。

这里我们可进一步把普通用户和管理员、操作员之间的关系抽象成泛化(Generalization)关系,管理员和操作员可以继承普通用户的全部特性(包括权限),他们又可以有自己独有的特性(如操作、权限等)。

这样可以显著减速少用例图中通讯关联的个数,简化用例模型,使之更易于理解。

4.2用例之间的关系

用例描述的是系统外部可见的行为,是系统为某一个或几个参与者提供的一段完整的服务。

从原则上来讲,用例之间都是并列的,它们之间并不存在着包含从属关系。

但是从保证用例模型的可维护性和一致性角度来看,我们可以在用例之间抽象出包含(include)、扩展(extend)和泛化(generalization)这几种关系。

这几种关系都是从现有的用例中抽取出公共的那部分信息,然后通后过不同的方法来重用这部公共信息,以减少模型维护的工作量。

4.2.1包含(include)

包含关系是通过在关联关系上应用<

<

include>

>

构造型来表示的,如下图所示。

它所表示的语义是指基础用例(Base)会用到被包含用例(Inclusion),具体地讲,就是将被包含用例的事件流插入到基础用例的事件流中。

包含关系是UML1.3中的表述,在UML1.1中,同等语义的关系被表述为使用(uses),如下图。

在ATM机中,如果查询、取现、转帐这三个用例都需要打印一个回执给客户,我们就可以把打印回执这一部分内容提取出来,抽象成为一个单独的用例"

打印回执"

,而原有的查询、取现、转帐三个例都会包含这个用例。

每当以后要对打印回执部分的需求进行修改时,就只需要改动一个用例,而不用在每一个用例都作相应修改,这样就提高了用例模型的可维护性。

在基础用例的事件流中,我们只需要引用被包含用例即可。

查询-基本事件流

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

当前位置:首页 > 总结汇报

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1