其中一个案例需求:异常流量

引出的问题

备选流,也被称为另类事件流,英语是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. 正面结果:备选流,一步或多个步骤序列达成了用例目标,但与主成功场景不一样的步骤。

终于目标是达成的。

见例如以下样例:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvemhhbmdtaWtl/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" >

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

用异常流替代备选流

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

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

1,新增请购单

2,改动请购单

3,删除请购单

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


用例属性


说明


名称


新增请购单


简要说明


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


前置条件


员工已经登录


启动点


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


基本流


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

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

3. 系统验证假设通过,记录此请购单

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


异常流


3b假设验证不成功。给出详细字段的错误提示信息,让用户修正输入数据


后置条件


提交给图书管理员审核


特殊需求


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


扩展点


异常流的优点

依据以上分析,能够看到。异常流实质上是一种备选流,对比原RUP备选流说明的话,定义例如以下:异常流是与基本流正常行为相关的异常行为。

异常流不是基本流的“绕行道”,有些异常流将返回到基本流。有些将结束用例的运行。

异常流替代备选流基本的优点:

1,基本功能所有在基本流中表达

2,异常流从名称上清晰的明白了其定位:基本流的异常情况

3,基本流+异常流的组合能够覆盖全部事件流场景

4。用例的颗粒度将受到基本流篇幅的限制。有助于更精细的管理,有便于在敏捷开发环境下使用。

版权声明:本文博主原创文章,博客,未经同意不得转载。

时间: 2024-10-15 09:23:19

其中一个案例需求:异常流量的相关文章

异常检测 | 使用孤立森林 sklearn.ensemble.IsolationForest 分析异常流量

孤立森林 Isolation Forest(sklearn.ensemble.IsolationForest):一种适用于 连续数据 的 无监督 异常检测方法.与随机森林类似,都是高效的集成算法,相较于LOF,K-means等传统算法,该算法鲁棒性高且对数据集的分布无假设. Isolation Forest算法做非监督式的异常点检测分析,对数据特征的要求宽松: 该算法对特征的要求低,不需要做离散化,不需要数值标准化 不需要考虑特征间的关系(例如共线性)等,不需要额外做特征过滤和筛选 附:SKle

zabbix企业应用之如何快速查看异常流量

最近机房总流量总是异常,然后我是不断的接到短信与电话报警,收到后通过cacti查看还是十分的麻烦与浪费时间,为了解决这个问题,我自己写了一个脚本,从数据库里获取所有主机监控数据,然后打印出流量超过10m的主机信息,这样能快速帮我判断异常流量主机. 脚本是使用python编写,使用MySQLdb从zabbix数据库里获取流量数据,经过流量判断后在把数据写入到excel里. 使用前需要安装MySQLdb.xlwt模块,可以使用easy_install安装. 下面是脚本内容 #!/usr/bin/en

一个渲染需求

用unity3d做游戏也有一段时间了,这周有一个渲染的需求,用到的技术不算很深,但确实也比较繁琐,值得记录一下. 需求大概是这样的,有四层图,我们称为A,B,C,D四层.他们的Blend顺序是A->B->C->D,其中C对D的Blend算法使用的是PS中的叠加算法,B->C,D是替换,A->B,C,D也是PS的叠加.这个问题的难点在于两部分:第一,有部分层的Blend算法是使用的PS的叠加,而叠加公式为(B < 128) ? (2 * A * B / 255):(255

#研发解决方案#基于Apriori算法的Nginx+Lua+ELK异常流量拦截方案

郑昀 基于杨海波的设计文档 创建于2015/8/13 最后更新于2015/8/25 关键词:异常流量.rate limiting.Nginx.Apriori.频繁项集.先验算法.Lua.ELK 本文档适用人员:技术人员 提纲: 所谓异常流量 如何识别异常流量 Apriori如何工作 如何让 Nginx 拦截可疑 IP 0x00,所谓异常流量 有害的异常流量大概分为以下几种: 僵尸网络中的节点对主站发起无目的的密集访问: 黑客.白帽子或某些安全公司为了做漏洞扫描,对主站各个 Web 工程发起字典式

springCloud分布式事务实战(一)案例需求及实现步骤

本文不对分布式事务原理进行探索,而是通过一个案例来说明如何使用分布式事务 案例需求:创建2个基于springCloud的微服务,分别访问不同的数据库:然后创建一个整合服务,调用微服务实现数据的保存到2个不同的数据库,要求采用分布式事务,要么都成功,要么都失败.案例拓扑图: 实现步骤:1 分布式事务处理器的编译和安装Redis 安装 注册中心编写分布式事务服务器安装 测试2 数据库准备及2个微服务的编写与测试.准备数据库编写微服务1和2注册到注册中心 测试 3 整合分布式处理服务整合:在微服务1

微服务开发实战(spring-cloud/spring-cloud-alibaba/dubbo),一个案例,手把手带你入门

平日里,都是看别人的文章,虽开公众号写了不少,但像样的不多.年末了,年终总结也没来得及写,为了输出点像样的东西,立刻就着手这个系列.一个键一个字母的敲,边敲边写,文章还在持续更新中,直至完整.相信通过这个系列的系统练习,能有一个大跨步的提升. 专栏简介(是什么?) 结合SpringCloud.SpringCloudAlibaba.Dubbo等开源套件,基于某商场停车业务需求,进行微服务开发实战,力争通过一个案例的实操,掌握微服务架构中常用的技能点,轻松入门. 为什么要写这个专栏(为什么?) 微服

条款25:考虑写出一个不抛异常的swap函数

条款25:考虑写出一个不抛异常的swap函数 swap函数在C++中是一个非常重要的函数,但实现也非常复杂. 看一个缺省的std::swap函数的实现 namespace std { template<typename T> void swap( T& a , T& b) { T temp(a); a = b; b = temp } } ①内置类型的调用 int a = 2; int b =3; std::swap(a, b); cout<<"a:&quo

类的继承与super()的意义以即如何写一个正确的异常类

这些东西都是我看了许多名师课程和自己研究的成果,严禁转载,这里指出了如何正确的自己定义一个异常类并看一看sun写的java的源代码话题一:子类的构造器执行是否一定会伴随着父类的构造执行? 1.this()与super()不能共存2.如果不显示地调用this()和super();子类对象的创建是否一定执行父类的构造3.既然super()和this()不能共存,又说子类的构造执行一定会执行父类的构造,那么我让子类的构造执行this()是不是就不能在执行父类的构造? 4.如果我非不让父类的构造执行,我

Effective C++ Item 25 考虑写出一个不抛异常的swap函数

本文为senlie原创,转载请保留此地址:http://blog.csdn.net/zhengsenlie 经验:当std::swap对你的类型效率不高时,提供一个swap成员函数,并确定这个函数不抛出异常 示例: stl里的swap算法 namespace std{ template<typename T> void swap(T &a, T &b){ T temp(a); a = b; b = temp; } } //"pimpl手法"(pointer