- 向下移动层次结构会回答“如何?”展示如何实现某个目标。
- 上移层次结构会回答“为什么?”并提供了为什么存在某个目标的理由。
这些目标由组织内部和外部的不同角色参与者(人员),组织(人员组)和系统(自动资源)追求。
用例目标
当具有总体目标的人(或系统)需要与支持系统进行交互以实现一个小型目标时,就会出现用例,这是实现总体目标的一步。 用例代表了支持系统实现用户最小目标的能力,这就是用例的总体目标。 通过在该目标之后命名用例,无法更清楚地反映出这一点。 用例的规范详细说明了如何将用例的总体目标分解为自己的微型目标,以步骤和步骤组的形式表示。
因此,用户的总体目标,用户的小型目标/用例的总体目标以及用例的小型目标被无缝地集成到组织的目标层次结构中。
这种观点的优点在于:
- 系统用例源自并追溯到系统用户的目标,而不是用例建模者的想象力。
- 目标层次结构的思想将人群的目标与人们的目标,人类的目标与支持系统的目标相集成,以及将系统的目标与内部步骤的目标相集成,为如何提供一个单一的范式提供了范式组织以手动和自动方式在其所有级别上运作。
用例场景
用例场景是代表单个用例执行的一系列步骤(场景是通过用例规范的可能路径)。
Cockburn展示了一个图表([1]中的图2.2),其有效性仅超出了其独创性和古怪性。他称它为用例及其场景的“条纹裤子”视图。在里面:
- 腰带代表“将所有场景结合在一起的[用例]目标”。
- 一条腿“是指成功完成的方案。”
- 另一条腿“是针对以失败而告终的方案。”
- “每个条纹对应一个场景。”
- “成功之路的第一条线是主要的成功场景。”
- “腿部剩余的条纹是[所有]其他最终以成功结束的场景-有些是通过替代成功路径,有些则是从中间失败中恢复过来。”
- 故障分支上的条纹是指遇到一个或多个中间故障,可能从某些故障中恢复,但最终总是失败的情况。
正如Cockburn所说,该模型“有助于记住每个用例都有两个出口,[发起者]的目标绑定了所有方案,并且每个方案都是[用例]成功或失败的简单描述。 。”
这使我成为用例建模的最大贡献之一。
用例流程
Cockburn指出:“实际上,我们不会从上到下分别编写每个方案。 这是一个糟糕的策略,因为它乏味,多余且难以维护。”
取而代之的是,用例可以非冗余地编写,从无条件的主流程开始,随后用不同种类的有条件的附加流程进行增强,其中流程是一系列步骤。 主要流程等同于“主要成功方案”,每个其他流程代表其余一个或多个方案中的一部分。
UML不处理流程。 Cockburn仅指“主要成功方案”(主要流程)和“扩展”(其他流程)。 为了完善该视图,以下各节通过提供每种定义,图表和简化示例,介绍了五种不同的流程。 这些示例的目的是说明一种清晰,一致,可扩展的书写约定,以表示用例的结构(它们并不代表完整的用例规范)。
主要流程
定义:一组无条件的步骤,描述了如何实现用例目标以及如何满足所有相关的涉众利益。 每个步骤对于实现用例目标都是必不可少的(不能跳过任何步骤),并且每个步骤都成功。
Cockburn将此称为“主要成功方案”,而其他人则使用术语“幸福的道路”,“基本流程”和“正常事件过程”。 我的首选是“主流”,因为它简短且与其他流的名称紧密相关。
接下来的四个部分概述了可以统称为附加流程的内容。
替代流程
定义:有条件的一组步骤,它们可以替代另一个流程中的一个或多个步骤(执行替代流程而不是其他一个或多个步骤),此后,用例将继续追求其目标。
恢复流程
定义:有条件的一组步骤,这些步骤是对另一个流程中某个步骤的失败的响应(恢复流程在另一个步骤之后执行),此后,用例将继续追求其目标。
异常流程
定义:有条件的一组步骤,它们是对另一个流程中某个步骤的失败的响应(在另一个步骤之后执行异常流程),此后,用例放弃追求其目标。
期权流程
定义:有条件的一组步骤,表示另一个流程中两个步骤之间可用的非必要选项(选项流程在两个步骤之间执行),此后,用例将继续执行其中的第二个步骤。
选项流程的主要目的是表示对于实现用例目标而言无关紧要的行为(可以跳过该行为),但仍以某种方式对该目标有所贡献(该行为仅在该目标的上下文中有意义)。
“选项”就像新车中的可选功能(例如,天窗)。 选择选项有助于实现目标(订购汽车),但是您可以订购具有或不具有该选项的汽车(天窗不是必不可少的)。 继续用本文中的另一个术语进行比喻,超出标准尺寸的汽车可能的发动机尺寸是标准尺寸的“替代品”(但必不可少的发动机尺寸)。
点标记
在仔细研究选项流程之前,这里有一些关于分支点标记和重新连接点标记的注释。
优点。
- 无需参考实际的步骤编号([1]中使用的约定)。这些步骤在添加,删除或重新排序步骤时会发生变化,并且如果我们忘记更新它们的引用,那么用例就会损坏。
- 从流本身的描述中,流的分支点和重新连接点将立即显而易见,而不仅仅是从该流分支出来的其他流的描述中(在[1]中使用的约定)。
分支点标记的位置。
- 如示例所示,将替代,恢复或异常流的分支点标记附加到主流步骤,而不是放置在该步骤之前或之后;这样可以防止标记在视觉上主导主流。
- 这不适用于选项流程,从本质上讲,它发生在两个步骤之间。
关于期权流程的更多信息
什么不是期权流程
选项流程不是:
- 主流的一部分,因为选项流是有条件的,对于实现用例目标不是必需的,这与主流非常相反。
- 替代流程,因为选项流程不能替代一个或多个步骤。
- 恢复流程,因为选项流程不是对失败步骤的响应。
- 异常流程,因为选项流程不是对失败步骤的响应,并不表示用例失败。
改用扩展用例?
考虑到[2]中UML的扩展用例说明,您可能想知道是否可以将与非目标相关的行为表示为扩展用例。 为了帮助回答这个问题,下表列出了有关扩展用例及其对选项流程的适用性的关键UML语句。
乍一看,上述内容,尤其是前两个陈述,建议将非目标相关行为作为扩展用例来表示是合理的。 但是,对于最终的答案,我们转向[3]中概述的扩展用例解释。
何时使用选项流程以及何时使用扩展用例
基于[3],当可以将行为建模为扩展用例时,将重复下表,并为较早的Coupon选项流的行为提供了答案。
关于优惠券选项流程行为的错误答案:
- 第三个答案很软:可以将订单声明为公共数据,这会将答案更改为True。
- 第一个答案很难:事实是,Coupon选项流行为对用例目标有贡献,因此答案始终是False。
这得出以下结论:
- 在某种程度上有助于用例目标的非必要行为,必须始终建模为选项流,而绝不能建模为扩展用例。
- 不会以任何方式对用例目标无贡献的非必要行为可以建模为扩展用例(当所有三个问题都回答为True时)或选项流程(当第三个问题用False回答时)。
选项流程和扩展用例之间的其他区别
得出上述结论的关键是非必要行为是否以某种方式有助于用例的目标。 当这样做时,即使考虑使用扩展用例,使用选项流也具有不可否认的优势。 下表[3]中未考虑这些因素,但确实加强了基于[3]的上述结论,如下表所示。
因此,扩展用例对于建模与目标无关的无关行为是不合适的选择。相反,选择流程对此非常理想。
使用期权流程的好处
易于生成用例模型:
- 对于给定的目标,只需为一个用例建模,而无需为两个或更多模型建模(防止“用例膨胀”)。
- 无需使用特殊的扩展用例结构,其涉及的UML图表约定和自定义编写约定;相反,编写选项流及其分支点和重新连接点遵循所有其他流所使用的约定。
易于使用的用例模型:
- 对于一个既定目标而言,使用一个用例要比两个或两个以上要容易(大多数消费者都同意)。
- 用例的后置条件和场景都集中在一个地方(对所有消费者来说都非常好,但对于测试人员来说尤其如此)。
结论
我希望本文能够为清晰,清晰和一致的用例模型(包括图表和规范)做出贡献,并使他们的生产者和消费者以及雇主的组织受益。
参考文献
[1] Alistair Cockburn,《编写有效的用例》,第12版,2004年11月。
[2]对象管理组(OMG),OMG统一建模语言TM(OMG UML),上层结构,版本2.4.1,第16.3.3节,说明。
[3] 威廉·范·加伦,《挖掘扩展用例》,2012年7月10日, (第1部分) 和 24 July 2012, (Part 2).
不要忘记在下面留下您的评论。