问题的引出

备选流,又称备选事件流,英文是Alternative Flow。在RUP和UML中,备选流的解释如下:备选事件流包括与正常行为相关的可选或异常特征的行为,同时也包括正常行为的各种变形。您可以将备选事件流看作是基本事件流的“绕行道”,有些备选事件流将返回到基本事件流,而有些将结束此用例的执行。

分析RUP对于备选流的定义,可以看到备选流可以分成两类:

1,不同做法但仍然达成用例目标;

2,异常情况,无法达成用例目标。

在实际用例分析中,由于备选流可能存在两种情况,导致备选流存在2种主要写法:

1.在备选流中说明基本流以外的异常情况的处理,可能仍然回到基本流,也可能导致用例结束。

在备选流中说明基本流以外的其它正常和异常情况的处理,覆盖了其它功能。

第1种写法的例子比较常见,下文将出现,这里不再赘述。

第2种写法的例子如下:

用例名称:填写请购单

简要说明

  员工在线填写图书请购单,内容包括:图书名称、出版社、作者、价格、订购人(系统自动识别)、订购部门、订购日期等,填好后提交给图书管理员审核。

  填写请购单的主角是员工。

事件流

  员工选择“填写请购单”,用例开始。

基本流

员工选择“填写请购单”,提交“填写请购单”请求;

显示“填写请购单”窗口并列表显示请购单信息(已填写未提交、已提交审核未通过), 两种状态的请购单信息通过选择分别列出,审核未通过的原因只能查看不能修改;

请购单信息包括:请购单编码(系统自动生成)、订购部门、订购人、订购日期、订购原因、备注,和图书明细包括:图书名称、出版社、作者、单价、数量等,图书明细包括:新增,修改,删除;

请购单信息输入操作见备选流;

新增:系统具体执行见“备选流 新增”

修改:系统具体执行见“备选流 修改”

删除:系统具体执行见“备选流 删除”

选择“提交”,系统把选中的请购单提交给图书管理员审核,此用例结束。

备选流

  填写请购单基本流中抽取出三个备选流:

    请购单信息:新增、修改、删除;

新增

(一)员工在“填写请购单”信息区选择“新增”,提交“新增”请求;

(二)系统弹出“新增请购单”空白模式窗口;

(三)请购单信息包括:图书名称、出版社、作者、单价、数量等;

(四)请购单信息输入完毕后,选择“保存”提交,系统验证数据有效性,如验证不成功,针对所提示错误信息修正输入数据,验证成功关闭“新增请购单”窗口;

若继续新增请购单,则重复㈠㈡㈢㈣步骤。

修改

(一)员工在“填写请购单”信息区列表选中要修改的请购单,提交“修改”请求;

(二)系统弹出“修改请购单”模式窗口,并显示当前请购单信息;

(三)修改相应数据后,选择“保存”提交,系统验证数据有效性,如验证不成功则根据错误提示重新输入,验证成功后保存数据并关闭“修改请购单”模式窗口同时刷新请购单信息列表;

若继续修改,则重复㈠㈡㈢步骤。

删除

(一)员工在“填写请购单”信息区列表选中要删除的请购单,提交“删除”请求;

(二)若选中的请购单属于审核未通过,系统提示“不能删除审核未通过的请购单”;

(三)删除后刷新请购单列表信息同时系统提示“编号为XXX的请购单已删除!”;

若继续删除,则重复㈠㈡㈢步骤。

特殊需求

  无

前置条件

  员工登录系统。

后置条件

  无

---例子结束----

第2种写法中,在备选流中说明了基本功能,用例篇幅已经变长,如果备选流中出现异常,备选流将显得更加臃肿。因此第2种写法比较少见。

为了解决备选流的不同情况,人们识别率异常流来解决上述问题。

异常流是什么?

Bernd Lohmeyer提出来如下分类规则

(见 http://www.lohmy.de/2013/03/06/writing-use-cases-exception-or-alternate-flow/  )

l Result negative: An Exception is anything that leads to NOT achieving the use case’s goal. 负面结果:异常,任何导致不能达成用例目标的事情

l Result positive: An Alternate Flow is a step or a sequence of steps that achieves the use case’s goal following different steps than described in the main success scenario. But the goal is achieved finally. 正面结果:备选流,一步或多个步骤序列达成了用例目标,但与主成功场景不一样的步骤。最终目标是达成的。

见如下例子:

简单说:异常流是基本流的异常情况,不能达成用例目标。

用异常流替代备选流

苍狼敏捷需求用例分析方法对于备选流的做法是采用第1种做法,但用异常流替代备选流,从名称上排除第2种做法,满足用例目的的可选流程在基本流中表达,如果导致基本流篇幅过长,那么就分拆用例。

对照到上述“填写请购单”的例子,苍狼敏捷需求用例分析方法至少分拆成如下多个用例:

1,新增请购单

2,修改请购单

3,删除请购单

其中新增请购单的用例规约

用例属性

说明

名称

新增请购单

简要说明

员工在线填写图书请购单,内容包括:图书名称、出版社、作者、单价等,填好后提交给图书管理员审核。

前置条件

员工已经登录

启动点

员工在“填写请购单”信息区选择“新增”,提交“新增”请求,系统弹出“新增请购单”空白模式窗口

基本流

1. 员工填写各项请购单信息,包括图书名称、出版社、作者、单价、数量、订购原因、备注,员工请购单信息输入完毕后,选择“保存”提交

2. 系统验证数据有效性,有效性规则见X.Y

3. 系统验证如果通过,记录此请购单

4. 系统返回“保存”成功信息

异常流

3b如果验证不成功,给出具体字段的错误提示信息,让用户修正输入数据

后置条件

提交给图书管理员审核

特殊需求

请购单输入信息界面在一个屏幕内

扩展点

异常流的好处

根据以上分析,可以看到,异常流实质上是一种备选流,对照原RUP备选流说明的话,定义如下:异常流是与基本流正常行为相关的异常行为。
异常流不是基本流的“绕行道”,有些异常流将返回到基本流,有些将结束用例的执行。
异常流替代备选流主要的好处:
1,基本功能全部在基本流中表达
2,异常流从名称上清晰的明确了其定位:基本流的异常情况
3,基本流+异常流的组合可以覆盖所有事件流场景
4,用例的颗粒度将受到基本流篇幅的限制,有助于更精细的管理,有便于在敏捷开发环境下使用。

需求用例分析之一:异常流相关推荐

  1. 需求用例分析之备选流

    #用例分析#之备选流 alternative flow-这是用例方法中最混淆之处,无论中文还是英文,都出现许多不同的理解和不同的做法.问题在于备选流字面意思模糊,可以是可选的不同做法,也可以说异常,也 ...

  2. 需求用例分析之九:序列图

    作者:张克强    作者微博:张克强-敏捷307 序列图,也称时序图.顺序图,英文名Sequence Diagram.在雅各布森用例分析方法中鼓励使用各类图形来表达,但恰恰没有明确提到序列图.而科伯恩 ...

  3. 苍狼敏捷需求用例分析方法简介并讲义下载

    作者:张克强    作者微博:张克强-敏捷307 用例分析方法已经有不短的历史,发展出了多种用例分析方法.笔者花费了大量时间,对用例分析的各个方面进行实践和分析,得到如下系列文章: 需求用例分析之一: ...

  4. 需求用例分析之七:业务用例之小结

    作者:张克强    作者微博:张克强-敏捷307 RUP虽然对于业务对象建模进行了详细的说明,但其本身并没有把业务对象建模(领域模型).业务用例作为必须的工件.Rational系方法把业务用例作为需求 ...

  5. 需求用例分析之八:用例颗粒度

    作者:张克强    作者微博:张克强-敏捷307 RUP系的考虑 在RUP中,没有对用例的颗粒度给出清晰的指导.2004年Rational 中国区技术销售经理 傅纯一发表一文<用例建模指南> ...

  6. 需求用例分析之四:业务规则

    作者:张克强 作者微博:张克强-敏捷307 在雅各布森用例分析方法和科伯恩用例分析方法中用例本身其实都没有"业务规则"的属性.但是业界使用中常常会给用例加上这个属性,这是为什么呢? ...

  7. 需求用例分析之三:补充规约

    补充规约在RUP中是记录那些在用例模型的用例中不容易体现出来的系统需求.这些需求包括: § 法律法规方面的需求和应用标准. § 要建立的系统质量属性,包括可用性需求.可靠性需求.性能需求和可支持性需求 ...

  8. 需求用例分析之二:级别设置

    在<编写有效用例>(阿莱斯特-科伯恩著,以下用科伯恩用例来指代)一书中,赋予了用例不同的级别,科伯恩形象的设定了如下级别:海平面.云朵.风筝.蛤等等. 科伯恩建议用例级别分为多个个目标层次 ...

  9. 需求用例分析之六:业务用例之科伯恩系

    作者:张克强    作者微博:张克强-敏捷307 来自于科伯恩<编写有效用例>对业务用例的说明 在<使用 UML 进行业务建模:理解业务用例与系统用例的相似和不同之处>中分析科 ...

最新文章

  1. java源码 - ReentrantReadWriteLock介绍
  2. python修改字典某一项的函数_python – 更改字典作为函数的全局范围
  3. IO 模拟 1/2 Bias、1/4 Duty的 LCD 驱动
  4. PMCAFF | 产品经理十宗罪(冷静反思篇)
  5. python实现Linux命令wget
  6. 中国移动问答 赢取幸运卡标准答案
  7. FilterDispatcher is deprecated!
  8. tde数据库加密_启用了基于透明数据加密(TDE)的地理复制的Azure SQL数据库
  9. 图论--tarjan求lca
  10. python工具包: pandas
  11. 安装debian 9.1后,中文环境下将home目录下文件夹改为对应的英文
  12. 产品配件类目税目分类_汽车用品税收分类编码
  13. css基础 CSS 布局 – Overflow、Float 浮动、CSS 布局 – 水平 垂直居中对齐
  14. ffmpeg批量合并ts文件为一个视频
  15. CentOS 7安装ELK(三):安装logstash
  16. Android相机拍照后,对照片模糊的处理;对照片旋转90度的处理
  17. java实现置顶功能
  18. HTC官解后刷机步骤
  19. acer台式电脑怎么重装系统_宏基台式机装系统 手把手教你宏基台式机装系统方法...
  20. 计算机辅助产品设计表达,计算机辅助工业设计综合表达方法与实例

热门文章

  1. assert 闪退 android,AEX部分软件闪退问题,求解!
  2. python消息推送_Python阿里云消息推送调用API
  3. java学生背景知识要求,好好学习Java并发 一、背景知识
  4. springboot 异步mysql_spring boot 使用@Async实现异步调用方法
  5. 安装es怎么在后台运行_ES备份索引数据到阿里云OSS
  6. created写法_在vue中created、mounted等方法使用小结
  7. mysql time_limit_mysql ---- limit使用方式
  8. classes是什么意思怎么读_KY啥意思?托马仕空品教你怎么读空气
  9. python常用编译器和解释器的区别_Python常用编译器原理及特点解析
  10. proteus虚拟终端窗口不显示_Linux终端美化工具(ohmyzsh)