UseCase事件描述叙事流规范
文化/fasiondog
整理的用例需求编写规范。分享部分UseCase事件描述叙事流规范。其中。标准5~10、12来自哪里《编写有效用例》([美国] Alistair Cockburn 该)一本书,自身实践和要求。
事件流包括正常事件流、可选事件流、异常事件流程,前述三者合在一起的本质就是用文字描写叙述的流程。
事件流由文字描写叙述的步骤组成,写作过程中应遵循下面准则,这些准则是对用例写作过程中的常见问题和最佳实践的总结。下述规范中如没有特殊说明,事件流同一时候指正常事件流、可选事件流、异常事件流。
准则1:文字描写叙述与流程图保持一致
事件流的本质其实就是文本描写叙述的流程。
因此,对用例辅以说明的流程图应与文字表述的事件流保持一致。其实,用例是以文字描写叙述为主,流程图为辅。编写用例应该养成“先写文字后绘图”的习惯。保持一致意味着:
- 流程图中的动作(含推断)的数量与事件流中的步骤数量一致(因为不同的图形表示方法的限制。最低程度应保证和正常事件流中的步骤数量一致)
- 流程图中的动作(含推断)与事件流中的步骤描写叙述一致
准则2:步骤描写叙述遵循“主+谓+宾”结构
句子的结构应简单明了:“主语+谓语动词+直接宾语”。辅以必要的修饰词。
准则3:一个步骤描写叙述中仅包括一个主语
在一个步骤中仅包括一个主语。这意味着一个步骤描写叙述中能够是一个运行者运行一个动作。也能够是一个运行者运行多个连贯的动作,但不能出现多个运行者运行多个不同的任务。
比如:
错误的描写叙述形式:
1.【用户】输入订购号码,【系统】发现这个号码与本月中奖号码匹配。将用户和订购号码注冊为当月的中奖者,发电子邮件给销售经理,祝贺客户,并告诉他们怎样领取奖金
正确的描写叙述形式1:
1.【用户】输入订购号码。
2.【系统】发现这个号码与本月中奖号码匹配。将用户和订购号码注冊为当月的中奖者,发电子邮件给销售经理,祝贺客户,并告诉他们怎样领取奖金。 正确的描写叙述形式2:
1.【用户】输入订购号码。
2.【系统】发现这个号码与本月的中奖号码匹配。
3.【系统】将用户和订购号码注冊为当月的中奖者。
4.【系统】发电子邮件给销售经理。
5.【系统】祝贺客户,并告诉他们怎样领取奖金。
在编写用例时,能够依据此准则。对较冗长的多个步骤进行合理的合并。所谓合理,是指合并后的步骤。应不影响可选事件流、异常事件流的插入点。
准则4:在步骤中明白标识參与人
通过在步骤中使用“【參与人】”的方式明白标识“參与人(Actor)”,防止因遗漏主语(以及部分宾语),而使读者不知道谁是活动的运行者。演示样例:
“【用户】插入ATM卡并输入PIN。”
准则5:从系统外部的角度来编写用例
缺少经验的用例编写者(尤其是对系统内部实现有所了解的开发者)在描写叙述用例场景时。常常有意或无意实现系统内部结构并试图从系统内部动作来描写叙述系统。他们可能写出这种句子“读取ATM卡和PIN号码。并从账户剩余金额中扣除一定数量。”
而从系统外部来编写用例,则是:
1.【用户】插入ATM卡并输入PIN号码;
2.【系统】从账户剩余金额中扣除一定数量。
准则6:显示过程向前推移
选择过小的步骤将导致用例过长。假设一个用例有13~17个步骤。说明每个步骤完毕的工作过少。假设将一些小的步骤合并。能够使用例的可读性更好、更清晰。而且保持原有的基本信息。一般,一个用例的步骤数量应控制在7个以内。
为了有效合并用例步骤,应找到具有较高层次目标的步骤。能够提出这种问题“为什么參与人须要做这件事?”。可能。须要多次询问此问题才干得到惬意的答案,而这个问题的答案就是步骤实现的目标。
下面是一个通过问“为什么”来提高目标层次的样例。
“用户按下Tab键”
为什么用户要按下Tab键?是为了将焦点移到地址框中。
为什么她要将焦点移到地址框中呢?由于在系统開始工作前。她要输入username和地址。她想让系统完毕一些工作,为了使系统工作,她必须输入她的username和地址。
因此,一个清晰描写叙述过程向前移动的主动语态句子是:
“【用户】输入名字和地址”
准则7:显示參与人的意图而不是动作
通过操纵用户界面来描写叙述用户的动作,这是编写用例时常见的一种严重错误,它使得编写的目标处于一个非常低的层次。界面细节描写叙述使得需求文档质量变差,主要体如今:
- 文档冗长拖沓使阅读困难、维护费用高昂。
- 不论什么用户界面的变化都将导致用例文档失效
通常情况下。当一些连续步骤的数据在同一方向上运动时。能够将这些步骤合并成一个步骤(视情况而定。合理合并)。如以下的演示样例及对它的改动:
改动前:
1.【系统】要求用户输入姓名
2.【用户】输入姓名
3.【系统】要求用户输入地址
4.【用户】输入地址
5.【用户】点击“确定”
6.【系统】显示用户的简单介绍 改动后:
1.【用户】输入姓名与地址
2.【系统】显示用户的简单介绍
准则8:“确认”而不是“检查是否”
大家常常会遇到描写叙述系统检查某个条件的步骤。而在步骤描写叙述中,使用“检查”这个动词并不好,这样说并没有让过程明显的向前发展,它并非真正的目的,同一时候它使得检查的结果是不确定的。那么为什么系统要检查条件?答案是为了确认、验证或确保某些事情。
这些都是非常好的能够表示目标的动词。比如。能够将“系统检查password是否正确”替换为:
“【系统】验证password正确”
准则9:习惯用语:“用户让系统A与系统B交互”
在编写用例时。可能会遇到例如以下情况,正在设计的系统A须要从系统B中获取信息。或者与系统B有一个交互过程。
通常能够使用两个步骤来描写叙述:
1.【用户】通知【系统A】从【系统B】获取数据
2.【系统A】从【系统B】获取后台数据。
上述写法尽管能够接受。但在某些情况下显得笨拙和冗余,尤其是用例比較复杂时。更好的写法例如以下:
1.【用户】命令【系统A】从【系统B】获取后台数据
准则10:习惯用语:“循环运行步骤X到Y,直到条件满足”
有时候,我们会遇到须要反复的步骤。
对于仅仅有一个步骤须要反复。能够直接在步骤中描写叙述,如:“【用户】在各种各样的产品文件夹中寻找、直到发现所须要的产品。”
对于多个步骤须要反复的情况,能够把表达反复运行的语句放在这些反复步骤的前面或后面。比如:
1.【客户】提供账号或名字和地址
2.【系统】查出客户的爱好信息
3.【客户】选择一个商品,并做上购买的标记
4.【系统】将该商品增加客户的“购物车”中
客户反复步骤3、4,直到客户指明自己完毕了选购
5.【客户】购买全部在“购物车”中的商品 还有一种形式:
1.【客户】提供账号或名字和地址
2.【系统】查出客户的爱好信息
步骤3、4可反复运行
3.【客户】选择一个商品,并做上购买的标记
4.【系统】将该商品增加客户的“购物车”中
5.【客户】购买全部在“购物车”中的商品
注意:在表达反复语句前面不须要加上序号。
准则11:命名可选与异常事件流分支
为可选事件流、异常事件流中的分支进行适当的命名。有助于測试和理解。通过简单的命名,有利于检视分支的覆盖情况,保证全部的分支情况都得到了处理。
比如某系统登录时的异常事件流:
5a.(录入password方式认证失败)假设password方式认证失败,返回步骤3
5b.(连续输入password错误限制)假设连续3次输出password错误,则锁定登录。用例结束。 5c.(录入指纹方式认证失败)假设指纹认证方式失败,返回步骤3a
准则12:条件处理的缩排方式
缩进那些指明条件怎样处理的运行步骤,并在字母后又一次从编号1開始。运行步骤遵循前面的准则。
演示样例:
5a.假设输入password错误:
5a1.(password错误)假设password错误。系统提示错误信息,返回步骤4。
5a2.(连续password错误限制)假设连续3次输入password错误。账户锁死。用例结束。
5a3.(累计password错误限制)假设当日password错误达到10次,账户锁死,用例结束。
准则13:同一条件处理的分支应在一起
提出此准则的原因是在某些条件处理的分支中,被分别放置在可选事件流和异常事件流中,影响阅读和理解,也不利于检视发现错误。
错误的示比例如以下:
正常事件流:
……
3.柜面通过核心系统检验账户支取方式为预留password;
……
可选事件流:
3a.柜面通过核心系统检验账户支取方式为印鉴——
3a1.柜面提示“请检查密封”
3a2.柜员后检查凭证,单击提交随机密钥,回报6 修改后,它是统一的事件的替代流:
可选的事件流:
3a.(印章的方式平局)账户取款设定方式斩:
3a1.【系统】提示客户检查凭证;
3a2.【出纳员】检查签名后,。确认提交系统,运行步骤6。
3b.(税票秘密,画画等有效证件)假设占非印度秘密的方式绘制,画画等有效证件,【系统】提示“税票秘密帐户不支持的金融账户开放”,用例结束。
UseCase事件描述叙事流规范的更多相关文章
- JVM平台上的响应式流(Reactive Streams)规范
// Reactive Streams // 响应式流是一个倡议,用来为具有非阻塞后压的异步流处理提供一个标准.大家努力的目标集中在运行时环境(JVM和JavaScript)和网络协议上. 注:响应式 ...
- JVM上的响应式流 — Reactor简介
强烈建议先阅读下JVM平台上的响应式流(Reactive Streams)规范,如果没读过的话. 官方文档:https://projectreactor.io/. 响应式编程 作为响应式编程方向上的第 ...
- 探索Java9 模块系统和反应流
Java9 新特性 ,Java 模块化,Java 反应流 Reactive,Jigsaw 模块系统 Java平台模块系统(JPMS)是Java9中的特性,它是Jigsaw项目的产物.简而言之,它以更简 ...
- Reactive(2) 响应式流与制奶厂业务
目录 再谈响应式 为什么Web后端开发的,对 Reactive 没有感觉 Java 9 支持的 Reactive Stream 范例 小结 扩展阅读 再谈响应式 在前一篇文章从Reactive编程到& ...
- Unix编程艺术札记版本
这本书是一位面试官告诉我,.非常感谢他的忠告.面试的说明.我写后认为,足.一方面是面试的技巧.另一方面就是学习的方法. 阅读这本书非常享受,加上之前的积累,一些疑惑,另一些基础的不足,在这本书里找 ...
- Spring Framework 5 中的新特性
https://www.ibm.com/developerworks/cn/java/j-whats-new-in-spring-framework-5-theedom/index.html Spri ...
- Java 面试知识点解析(四)——版本特性篇
前言: 在遨游了一番 Java Web 的世界之后,发现了自己的一些缺失,所以就着一篇深度好文:知名互联网公司校招 Java 开发岗面试知识点解析 ,来好好的对 Java 知识点进行复习和学习一番,大 ...
- Reactor
Flux和Mono Flux和Mono是Reactor中的两个基本概念.Flux表示的是包含0到N个元素的异步序列.在该序列中可以包含三种不同类型的消息通知:正常的包含元素的消息,序列结束的消息和序列 ...
- Java 9的14个新特性总结
Java 9 包含了丰富的特性集.虽然Java 9没有新的语言概念,但是有开发者感兴趣的新的API和诊断命令. 我们将快速的,着重的浏览其中的几个新特性: 模块化系统–Jigsaw 项目 模块化是一 ...
随机推荐
- QT断点续传(原理:需要在HTTP请求的header中添加Rang节,告诉服务器从文件的那个位置开始传输.格式为bytes 开始传输的位置)
//功能: 根据一个URL地址将数据保存到指定路径下,支持断点续传//参数: url --需要访问的URL地址// SavePath -- ...
- 【Android】读取sdcard卡上的全部图片而且显示,读取的过程有进度条显示
尽管以下的app还没有做到快图浏览.ES文件浏览器的水平,遇到大sdcard还是会存在读取过久.内存溢出等问题,可是基本思想是这种. 例如以下图.在sdcard卡上有4张图片, 打开app,则会吧sd ...
- 连载:面向对象葵花宝典:思想、技巧与实践(28) - 设计原则:内聚&耦合
前面通过实例解说了一个一环扣一环的面向对象的开发流程:用例模型 -> 领域模型 -> 设计模型(类模型 + 动态模型),解答了面向对象怎样做的问题.接下来我们就要讲"怎样做好面向 ...
- Linux命令之rz - 批量上传文件,简单易用(转载)
用途说明 rz命令能够批量上传文件,当然也可上传单个文件啦.使用的协议是古老的ZMODEM协议,尽管协议古老,但毫不影响的简单易用的特性.一般情 况我们要上传文件到Linux系统,要么使用ftp(还得 ...
- git digest
.gitignore文件示例: .classpath .project .idea/ .settings/ target/ *~ *.iml *.log *.tmp https://zhuanlan. ...
- PHP SPL他们留下的宝石
Rafael Dohms 上面的篇文章 让我为之惊艳,忍不住就翻译了下来,同一时候补充了部分内容. SPL,PHP 标准库(Standard PHP Library) ,此从 PHP 5.0 起内置的 ...
- 【ArcGIS 10.2新特性】ArcGIS 10.2 for Server常见问题
1.ArcGIS 10.2有无测试版程序? 10.2没有正式的测试版程序,但是我们计划发布两个早期cuts软件给国际经销商.选中的用户和合作伙伴. 2.微软Azure云的ArcGIS forServe ...
- 苹果iOS手机系统诊断功能是后门吗?
7月20日,美国知名苹果iOS手机系统侦破专家扎德尔斯基在2014年世界黑客大会(HOPE/X)用幻灯片讲演揭露了苹果手机存在系统级"后门". 为此,7月23日.苹果公司马上做出回 ...
- Android 检測网络是否连接
权限: <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> <u ...
- 对付"反盗链"
对付"反盗链" 某些站点有所谓的反盗链设置,其实说穿了很简单, 就是检查你发送请求的header里面,referer站点是不是他自己, 所以我们只需要像把headers的refer ...