需求用例分析之异常流

标签: 需求用例 分析 异常 | 发表时间:2014-05-03 22:54 | 作者:zhangmike
出处:http://blog.csdn.net

问题的引出

备选流,又称备选事件流,英文是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,用例的颗粒度将受到基本流篇幅的限制,有助于更精细的管理,有便于在敏捷开发环境下使用。


作者:zhangmike 发表于2014-5-3 14:54:30 原文链接
阅读:106 评论:0 查看评论

相关 [需求用例 分析 异常] 推荐:

需求用例分析之异常流

- - CSDN博客研发管理推荐文章
备选流,又称备选事件流,英文是Alternative Flow. 在RUP和UML中,备选流的解释如下:备选事件流包括与正常行为相关的可选或异常特征的行为,同时也包括正常行为的各种变形. 您可以将备选事件流看作是基本事件流的“绕行道”,有些备选事件流将返回到基本事件流,而有些将结束此用例的执行. 分析RUP对于备选流的定义,可以看到备选流可以分成两类:.

Java异常的性能分析

- - Java译站
在Java中抛异常的性能是非常差的. 通常来说,抛一个异常大概会消耗100到1000个时钟节拍. 通常是出现了意想不到的错误,我们才会往外抛异常. 也就是说,我们肯定不希望一个进程一秒钟就抛出上千个异常. 不过有时候你确实会碰到有些方法把异常当作事件一样往外抛. 我们在 这篇文章中已经看到一个这样的典范):sun.misc.BASE64Decoder之所以性能很差就是因为它通过抛异常来对外请求道,”我还需要更多的数据“:.

Activity生命周期异常分析

- - 移动开发 - ITeye博客
Activity 生命周期异常分析 . 我们知道正常情况下Activity创建的时候会执行 onCreate onStart onResume 方法;当锁屏情况下Activity会执行 onPause onStop方法;当屏幕再次显示的时候会执行onReStart onStart onResume方法.

Istio 常见的 10 个异常分析

- - DockOne.io
本文总结了使用 Istio 常见的 10 个异常. Istio 支持多平台,不过 Istio 和 Kubernetes 的兼容性是最优的,不管是设计理念,核心团队还是社区, 都有一脉相承的意思. 但 Istio 和 Kubernetes 的适配并非完全没有冲突,一个典型问题就是 Istio 需要 Kubernetes Service 按照协议进行端口命名(Port Naming).

一个 redis 异常访问引发 oom 的案例分析

- - mindwind
「推断的前提是以事实为依据. 这两天碰到一个线上系统的偶尔出现突然堆内存暴涨,这倒不是个什么疑难杂症, 只是过程中有些思路觉得可以借鉴参考,故总结下并写下来. 内存情况可以看看下面这张监控图. 一天偶尔出现几次,持续时间一般几分钟不等. 当这种情况出现时,我们检查错误日志,发现有下面两几种 OOM 错误.

记一次 .NET 某教育系统异常崩溃分析

- - IT瘾-dev
这篇文章起源于 搬砖队大佬的精彩文章 WinDBg定位asp.net mvc项目异常崩溃源码位置,写的非常好,不过美中不足的是通览全文之后,总觉得有那么一点不过瘾,就是没有把当时抛异常前的参数给找出来. 为了能够让文章行云流水,我就按照自己的侦察思路吧,首先看一下现状:iis上的应用程序崩溃, catch 不到错误,windows日志中只记录了一个 AccessViolationException异常,如何分析.

数据分析终极一问:指标波动多大才算是异常?

- - IT瘾-dev
先举个例子,体温37.4度vs体温36.5度,只有2.5%的波动,可如果有人在测温点被发现体温37.4度,估计马上就被拉走做核酸. 因为人们不是怕2.5%的波动,而是怕新冠. 所以:指标波动不可怕,指标波动代表的业务场景才可怕. 脱离业务场景谈指标波动就是耍流氓. 在各种业务指标中,数据往往不是静止不变的,尤其是当一些核心的指标发生了变化、波动时,就需要判断这样的波动是否属于异常的情况.

Java异常

- - CSDN博客推荐文章
“好的程序设计语言能够帮助程序员写出好程序,但是无论哪种语言都避免不了程序员写出坏的程序.                                                                                                                          ----《Java编程思想》.

浅谈java异常

- - 移动开发 - ITeye博客
在《java编程思想》中这样定义 异常:阻止当前方法或作用域继续执行的问题. 虽然java中有异常处理机制,但是要明确一点,决不应该用"正常"的态度来看待异常. 绝对一点说异常就是某种意义上的错误,就是问题,它可能会导致程序失败. 之所以java要提出异常处理机制,就是要告诉开发人员,你的程序出现了不正常的情况,请注意.

Oracle 异常处理

- - 编程语言 - ITeye博客
使用RAISE_APPLICATION_ERROR存储过程. ============================================================ */ --演示该存储过程 BEGIN. RAISE_APPLICATION_ERROR(-20000, 'Account past due.');-- explicitly raise exception END; --创建子程序 CREATE OR REPLACE PROCEDURE account_status (.