用例/场景测试

用例的相关概念

随着面向对象软件开发方法应用的增多,统一建模语言UML的使用越来越频繁(UML定义了可以在软件开发过程中使用的十多种图形符号)。其中用例是UML规范中标准化的需求表述体系,用例方法最早是由Iva Jackboson博士提出的。

用例是描述系统需求的一种方法,使用这种方法来描述系统需求的过程即用例建模。用例方法可以解决传统的需求描述方式(如需求规格说明)的一些缺点,如传统的需求规格说明非常容易混淆需求和设计的界限,导致不知道系统需求应该详细到何种程度;另一个缺点是需求分割了各个系统功能的应用环境,使开发人员很难了解这些功能如何相互关联来实现一个完整的系统服务。

用户并不想了解系统的内部结构和具体设计,而关心的是系统所能够提供的服务。即开发成功的系统将如何使用,这就是用例方法的核心思想。用例模型主要由以下模型元素组成。

  • 参与者(Actor):存在于被定义系统外部,并与该系统发生交互的人或者其他系统,代表系统的使用者或者使用环境。
  • 用例(Use Case):用于表示系统所提供的服务,定义了系统如何被参与者所用,描述的是参与者为了使用系统所提供的某个功能而与系统之间发生的一段“对话”。
  • 通信关联(Communication Association):用于表示参与者和用例之间的对应关系,表示参与者使用了系统中的哪些服务(用例),或者说系统所提供的服务(用例)是被哪些参与者所使用。
    这3种元素在UML中的表述如下图所示。
    用例/场景测试

以银行的自动取款机ATM为例,其主要功能可以由下图所示的用例模型来表示。
用例/场景测试

ATM的主要使用者是银行客户,银行客户主要用其通过银行账号实现查询、提款和转账交易等。
通信关联表示参与者和用例之间的关系,箭头表示在这个关系中哪一方是对话的主动发起者,箭头所指的方向是对话的被动接受者。如果不需要强调对话中的主动与被动关系,可以使用不带箭头的关联实线。通信关联并不代表参与者和用例之间的信息流,信息流是默认存在的。并且是双向的,它与通信关联箭头所指的方向没有关系。

用例规格说明

用例图有助于整体了解系统的功能,可以知道参与者和系统发生的交互,以及每个参与者需要的系统服务。用例图描述的是参与者和系统之间的对话,但对话的细节并没有在其中表述出来,因此需要用例规格说明来完成这个任务。用例规格说明主要包括以下内容。
(1)简要说明:概述该用例的作用和目的。
(2)事件流:包括基本流和备选流,所有的场景都需要通过事件流表示。
(3)用例场景:包括成功场景和失败场景,场景主要是由基本流和备选流组合而成的。
(4)特殊需求:描述与该用例相关的非功能性需求(包括性能、可靠性、可用性和可扩展性等)和设计约束(所使用的操作系统及开发工具等)。
(5)前置条件:执行用例之前系统必须所处的状态。
(6)后置条件:用例执行完毕后系统可能处于的一组状态。
用例规格说明一般通过文本方式表述,为了更加清晰地描述事件流,也可以选择使用状态图、活动图或序列图来辅助说明。因此针对每个用例可以用事件流描述对话的细节内容,如ATM系统中“提款”的用例可以用下面的基本事件流表示。
(1)用户插入银行卡。
(2)输入密码。
(3)输入提款金额。
(4)提出现金。
(5)退出系统并取回银行卡。
但是这个事件流仅仅描述了成功提款的用例,作为一个实用的系统,开发人员还需要考虑可能发生的各种其他情况,如银行卡无效、输入密码错误,以及用户账户或ATM中的现金余额不足等。所有这些可能发生的情况(包括正常和异常的)称为“用例的场景”,在用例的各种场景中最常见的是通过基本流描述,其他场景则是用备选流描述。例如,对于ATM系统的“取款”用例,可以得到如下备选流。
(1)备选流1:用户可以在基本流中的任何一个步骤选择退出,并返回至基本流步骤(5)。
(2)备选流2:在基本流(1)中,如果用户插入的银行卡无效,系统显示错误并退出银行卡,用例结束。
(3)备选流3:在基本流(2)中,用户输入的密码错误,系统显示密码输入错误并提示用户重新输入密码,重新回到基本流的(2)。
(4)备选流4:如果3次密码输入错误,ATM吞掉银行卡,用例结束。
通过基本流和备选流的组合就可以描述清楚用例所有可能发生的各种场景(用例场景),因此在描述用例的事件流过程中需要尽可能地描述出所有可能的场景,以保证需求的完备性。用例场景既可以防止需求的遗漏,也是测试人员生成测试用例的重要输入。如图所示为用例场景的基本流和备选流的例子。
用例/场景测试

用例完全是从用户的角度(从系统的外部)描述系统的功能,用例方法将系统看做是一个黑盒,并不关心系统内部是如何完成它所提供的功能。该方法首先定义了被测系统的外部使用者(抽象为参与者)及其与系统之间的交互;同时描述了系统为参与者提供的服务(抽象为用例)。由于用例定义了系统功能的使用环境和上下文,每个用例的描述都是一个完整的系统服务,因此可以方便地生成相关的事件流并以此为基础创建合适的测试用例。

酷客教程相关文章:

赞(0)

评论 抢沙发

评论前必须登录!