再学UML-UML用例建模解析(三)
2. 编写用例文档
绘制用例图只是完成了用例建模最基本也是最简单的一步,用例建模的核心在于编写用例文档,用例文档又称为用例规约或用例描述。顾名思义,用例文档是用于描述用例的文档,每一个用例对应于一个用例文档,在用例文档中需要用文字的方式描述用例的执行过程,即执行者与系统的交互过程。
用例文档需要通俗易懂,不仅项目的开发人员能够理解,系统的用户以及客户也能够看懂用例文档。一个完整的用例文档包括用例编号、用例名、执行者、前置条件、后置条件、涉众利益、基本路径、扩展路径、字段列表、业务规则、非功能需求和设计约束等组成部分。
一般在系统中需要给所有的用例一个统一规范的编号,如库存管理系统,可以使用StockUC001、StockUC002等来对用例进行编号。每一个用例都需要提供一个清晰易懂的用例名,一般使用“动词+名词”的形式,如“查看库存报表”、“增加员工信息”、“增加商品信息”等,对于一些俗语可以使用简写,如“登录”、“注册”、“入库”、“出库”等。
前置条件是用例执行之前系统所处的状态,它必须是软件系统可以识别到的状态,如用例“入库”的前置条件是“仓库管理员已成功登录”,而不能是“仓库管理员已打开电脑”,因为是否“打开电脑”库存管理系统不能识别到;后置条件是用例执行之后系统应该具备的状态,它也必须是系统能够识别到的,如用例“入库”的后置条件是“系统保存入库信息,更新相关商品的库存量”,而不能是“用户退出系统”,因为“用户退出系统”不是“入库”操作所达到的系统状态。
涉众利益是对用例执行过程和结果很关心但不直接操作用例的人,如仓库管理员在入库和出库时,虽然经理不直接入库,但是他们对这个过程和结果很关心;如在火车站买票时,直接使用售票系统的是售票员,但是乘客很关心用例的执行结果,担心是否会弄错时间和车次,因此乘客是涉众。执行者是直接执行用例的人,他们通过用例来直接执行系统提供的功能;涉众是执行者操作用例时的观众,他们对用例的执行过程和结果很关心,因为涉及到他们的利益。
路径又称为“流程”,是指执行者和系统交互的过程。用例文档中最关键的部分是基本路径,基本路径又称为“正常路径”或者“开心路径”,它是用户最想看到、也最关心的路径,是用例建模核心中的核心。在路径中包含若干步骤,这些步骤构成了一个完整的交互过程,在描述基本路径时,每一个步骤一般以执行者或者系统作为主语,如“仓库管理员输入待入库商品信息”,“系统验证该商品库存是否达到上限”等。在编写路径时需要注意以下几个问题:
(1) 需要对步骤进行编号,一般用阿拉伯数字1、2、3、…进行编号,表示步骤的先后次序。
(2) 不能出现专业术语,因为用例文档需要系统的客户和用户都能够看懂,因此不能出现诸如“JDBC”、“SQL”这样的专业术语。
(3) 尽量使用主动语句,每一个步骤均以执行者或系统作为主语。
(4) 不要涉及到界面细节,如不能出现“仓库管理员在文本框中输入帐号”、“仓库管理员在密码框中输入密码”等句子,应该使用“仓库管理员输入帐号和密码”来代替。
(5) 如果出现大量数据输入或处理,需要将数据放入“字段列表”中,如系统管理员在增加员工信息时,需要增加员工帐号、员工密码、员工所在部门、员工电话、员工邮箱等信息,可以在用例文档中使用“系统管理员输入员工信息”来代替,而对于“员工信息”的详细描述可以放在用例文档的“字段列表”中进行详细说明。
(6) 注意分支和循环的处理,在用例文档中,分支可放在接下来要介绍的扩展流程中;而循环可以直接放在步骤描述中,如在入库时可以一次入库多个商品的资料,中间某些步骤如下:“2. 仓库管理员输入待入库商品信息;3. 系统验证该商品库存是否达到上限;4. 系统提示该商品入库信息增加成功;”,如果需要重复这几步,可以在基本路径中用如下语句描述:“如果还有商品需要入库,重复第2-4步”。
基本路径是用例文档的核心,通过路径可以清楚了解执行者如何通过用例来实现相应的功能,因此,在编写用例文档时,需要认真细致编写基本路径,确保非专业人员都能够在读完基本路径后理解执行者和系统的交互过程。
除了基本路径之外,很多用例都存在一些替换路径和异常路径,通常可以将替换路径和异常路径统称为扩展路径。识别出一个用例的基本路径并不难,但是要找到所有的扩展路径是件很辛苦的工作。一个优秀的系统分析人员应该认真分析业务流程,试图寻找出在基本路径中每一个步骤可能存在的扩展方式,寻找出所有可能的扩展路径。如仓库管理员在入库时可能会发生一些异常情况,如“供应商不存在”、“待入库商品不存在”、“入库时商品超过库存上限”等,需要使用扩展路径对这些情况进行清晰的描述,如“供应商不存在”,则需要设置一个扩展点,先执行“增加供应商信息”用例,再选择供应商编号,在扩展流程中可以这样表示:“1a. 供应商不存在 1. 扩展点1:执行用例——StockUC003增加供应商信息;2. 仓库管理员选择供应商编号。”。在这里需要注意扩展路径的编号,如果是基本路径中步骤1的扩展路径,可以使用1a、1b、1c等方式表示,然后对于扩展出来的子路径再用1、2、3、…进行编号,其中在该子路径的第1步指明这是一个扩展点,该扩展点名为“扩展点1”,在此时需要执行另一个用例StockUC003“增加供应商信息”,则用例“入库”和用例“增加供应商信息”之间是扩展关系,“增加供应商信息”是对“入库”操作的扩展。如果没有扩展点则直接书写步骤,与基本路径步骤写法一致。
字段列表、业务规则、非功能需求和设计约束是对用例的补充描述,字段列表中包含某些步骤所涉及到的一些数据字段,如在“增加商品信息”用例中可以在其“字段列表”中详细列出商品信息的内容,如“商品信息包括:商品编号,商品名称,商品型号,商品类别,商品单价,商品数量,库存上限,库存下限”,“字段列表”为后续的数据库设计工作提供了极大的帮助;业务规则用于描述在步骤中执行者或系统在执行某些操作时需要满足的条件,如在“增加商品信息”用例中,其“业务规则”包括“商品编号不能为空,商品数量必须是大于等于0的整数,库存下限必须低于库存上限”等;非功能需求用于描述用例在可靠性、安全性、可用性、移植性等方面的一些要求,如“系统响应时间不能超过30秒”、“可以支持同时100个用户在线访问”等;设计约束是指设计过程中存在的一些待解决的问题,如“商品编号的编码问题”、“如何快速输入商品编号”等。
在实际软件开发过程中,用例编号、用例名、执行者、前置条件、后置条件和基本路径是一个用例必不可少的组成部分,其他部分可根据实际情况确定,可有可无。下面提供库存管理系统中“入库”用例的用例文档,以供参考:
用例名称 |
入库 |
用例编号 |
StockUC006 |
执行者 |
仓库管理员 |
涉众利益 |
经理:了解各种商品的库存信息和每次入库信息。 系统管理员:了解入库操作是否能够正常执行,系统是否正确记录入库信息并更新商品库存。 |
前置条件 |
仓库管理员已成功登录。 |
后置条件 |
系统保存入库信息,更新相关商品的库存量。 |
基本路径 |
1. 仓库管理员选择供应商编号; 2. 仓库管理员输入入库商品信息; 3. 系统验证该商品库存是否达到上限; 4. 系统提示该商品入库信息增加成功; 如果还有商品需要入库,重复第2-4步 5. 仓库管理员提交入库信息; 6. 系统提示入库成功。 |
扩展路径 |
1a. 供应商不存在 1. 扩展点1:执行用例——StockUC003增加供应商信息; 2. 仓库管理员选择供应商编号。 2a. 待入库商品不存在 1. 扩展点2:执行用例——StockUC005增加商品信息; 2. 仓库管理员输入入库商品信息。 4a. 增加失败 1. 系统提示商品增加失败,超过库存上限; 2. 仓库管理员重新输入商品数量; 3. 系统再次验证该商品库存是否达到上限,直至该商品入库信息增加成功。 |
字段列表 |
入库商品信息包括:商品编号、入库数量、商品折扣。 |
业务规则 |
供应商编号不能为空; 商品编号不能为空; 入库数量必须为正整数,且不能为空; 商品折扣为0-1之间的小数(可包含0和1),且不能为空。 |
非功能需求 |
系统响应时间不能超过30秒。 |
设计约束 |
如何快速输入商品编号? |
总之,用例建模包括用例图的绘制和用例文档的编写,其核心在于编写用例文档。用例建模是软件需求分析到最终实现的第一步,它从用户的角度来描述软件系统的功能,描述人们如何使用软件系统。构造意义明确、格式规范的用例模型是软件成功的第一步,希望大家在每个软件项目的开发过程中都能够认真、细致地进行用例建模,为顺利完成项目开发任务奠定坚实的基础。
文章出处:http://blog.csdn.net/lovelion/article/details/6226377
再学UML-UML用例建模解析(三)的更多相关文章
- 再学UML-UML用例建模解析(一)
UML(统一建模语言)是当前软件开发中使用最为广泛的建模技术之一,通过使用UML可以构造软件系统的需求模型(用例模型).静态模型.动态模型和架构模型.UML通过图形和文字符号来描述一个系统,它是绘制软 ...
- UML用例建模解析(一)----------用例概述
UML(统一建模语言): 1. 绘制用例图 用例图是UML中比较简单的一种图形,它包含两个主要组成元素,分别是执行者(Actor)和用例(Use Case).执行者又称为参与者或角色,用例又称为用况或 ...
- Uml学习-用例建模简介
用例建模简介 用例建模是UML建模的一部分,它也是UML里最基础的部分.用例建模的最主要功能就是用来表达系统的功能性需求或行为.用例图重点描述用户需求. 它描述需求.用户和主要组件之间的关系. 它不 ...
- 再学UML-Bug管理系统UML2.0建模实例(一)
1.项目概述 随着软件项目规模和复杂性的增大,有效跟踪和管理项目中存在的缺陷Bug变得越来越重要.每一个软件企业都需要妥善处理软件中的缺陷,这将直接关系到软件过程质量与软件产品质量,但并非 ...
- 再学UML-UML用例建模解析(二)
(1) 关联关系 关联关系是指执行者与用例之间的关系,又称为通信关系,如果某个执行者可以对某个用例进行操作,它们之间就具有关联关系,如下图所示,“经理”有一个功能为“查看库存报表”,因此可以在执行者“ ...
- UML用例建模解析(二)---------用例执行者之间关系
(1) 关联关系 关联关系是指执行者与用例之间的关系,又称为通信关系,如果某个执行者可以对某个用例进行操作,它们之间就具有关联关系,如下图所示,“经理”有一个功能为“查看库存报表”,因此可以在执行者“ ...
- 再学UML-Bug管理系统UML2.0建模实例(二)
2.3 BMS顺序图(需求模型) 在UML中,我们将顺序图分为两类,一类用于描述系统需求,构造系统的需求模型(分析模型):另一类用于指导设计与实现,构造系统的实现模型(设计模型). ...
- 再学UML-Bug管理系统UML2.0建模实例(三)
3.系统设计 在对系统进行全面分析后,我们开始使用UML对系统进行设计,构造BMS系统的设计模型,包括类图.包图.顺序图(实现模型).组件图和部署图等的绘制,回答了“怎么做”的问题.具体设计工作如下: ...
- 再学UML-Bug管理系统UML2.0建模实例(四)
3.3 顺序图(实现模型) 在系统设计与实现阶段我们也可以使用顺序图进行建模,此时通过顺序图可以明确表示系统设计中对象之间的交互,考虑到具体系统实现,对象之间通过方法调用传递消息.在BMS系统中,对每 ...
随机推荐
- 执行npm install 时会报 operation not permitted,unlink......错
问题现象:在我这项目目录中执行这命令就会报这个错. 问题原因: 后来查了查,说是 npm 5.4.0版本确实会有这个问题. https://github.com/npm/npm/issues/1828 ...
- BZOJ - 4066 KD树 范围计数 暴力重构
题意:单点更新,大矩阵(\(n*n,n≤10^5\))求和 二维的KD树能使最坏情况不高于\(O(N\sqrt{N})\) 核心在于query时判断当前子树维护的区间是否有交集/当前子节点是否在块中, ...
- pip安装时的异常,找不到lib2to3\\Grammar.txt
[From] http://jahu.iteye.com/blog/2353325 异常 : [Errno 2] No such file or directory: 'd:\\python\\pyt ...
- Selenium => Debugging “Element is not clickable at point” error
[From] http://stackoverflow.com/questions/11908249/debugging-element-is-not-clickable-at-point-error ...
- SQL异常捕获
直接上代码: GO BEGIN TRY DECLARE @res INT SET @res=1/0 PRINT 'no error' END TRY BEGIN CATCH PRINT 'Error ...
- docker jenkins安装(一)
https://hub.docker.com/r/jenkins/jenkins jenkins的docker官方镜像地址 https://jenkins.io/ jenkins官方网站 环境: ...
- 实现类似tail -f file功能
python版本py3 tail -f file是打印最后10行,然后跟踪文件追加的内容打印出来. python3 以为本方式打开的话,不能回退(f.seek(-1,1)),所有以'rb'方式打开文件 ...
- rabbitmq 命令&& rabbitmq教程(一)
先来个官方教程 http://www.rabbitmq.com 在windows 下 命名 去掉sudo 我是在windows下测试 用net调用 常用命令 控制台命令:sudo rabbitmqct ...
- HashTable 元素的查找
Hashtable 特点:键与值成对存在,键是唯一的,不能重复.在查找元素的时候,我们往往是依据键区查找值的 三种方法 contains 包含 containsKey containsValue ...
- 远程SQL Server连接不上
运行 cmd -> 输入 netsh winsock reset重启后 应该可以连接sql了