1. 概述
在测试用例的设计方法中,等价类、边界值及判定表等测试用例设计方法只能够解决针对单点功能的测试用例设计,而无法针对涉及业务流程的软件系统进行测试。这时候就要用到场景法来设计测试用例,也就是说场景法主要是针对业务流程来设计测试用例的。
现在的软件几乎都是通过事件触发来控制流程的,事件触发时的场景便形成了场景,而同一事件不同的触发顺序和处理结果就形成了事件流。 这原本是一种软件设计的思想,不过依然可以用来指导软件测试用例的设计,可以生动的描述事件触发时的情景,有利于测试用例的设计和对测试用例的理解和执行。
这种设计思想是由Rational公司提出的,并且在RUP2000中文版中有详细的描述。
2. 事件流的分类
- 基本流:表示输入经过每一个正确的流程运转,最终到达预期结果。
- 备选流:表示输入经过某些流程时产生了异常情况,但经过纠正后依然到达了预期结果。
- 异常流:表示输入经过某些流程时产生了异常情况,导致了异常终止的情况,无法到达预期结果。
3. 场景分析设计法的基本框架图
4. 正面测试用例和负面测试用例
- 正面测试用例:可以沿着指定路径执行的测试用例被称为正面测试用例。例如,对于基本流来讲,如果一个用例可以沿着基本流一直往下执行,中途不发生任何偏差,那么该用例就被称为基本流的正面测试用例。
- 负面测试用例:不能沿着指定路径执行的测试用例被称为负面测试用例。例如,对于基本流来讲,如果一个测试用例不能沿着基本流执行,或者虽然沿着基本流完成了执行过程,但途中发生的偏差,那么这个测试用例就被称为基本流的负面测试用例。
总结:由上面的叙述可以得到,正面测试用例和负面测试用例时相对而言的。
5. 使用场景法设计测试用例的步骤和注意事项
>步骤
-
分析需求规格说明中的业务流程、事件,然后绘制成类似于第3部分的场景流程图。
-
分析场景流程图,找出其中所有的事件流的组合。 以第3部分的场景流程图来说,其可以组成的事件流的组合有以下几种:
-
设计测试用例,最终覆盖2中每个事件流的组合,即覆盖每个场景。
>注意事项
确定场景时需关注流程的入口,重复的节点不可以作为新的场景,比如基本流->备选流1->备选流2->基本流
与基本流->备选流2->备选流1->基本流
实际上是同一个流程,则不可算作新的场景流程。
上述的步骤描述中,确定了8个场景,至少构成了8条测试用例,不过是实际使用时,还需要针对每个场景或者说每个节点的成立条件设计测试用例,这时又会用到等价类划分和边界值分析的设计方法进一步细化测试规则及路径,从而提取测试用例。与状态迁移图(功能图)测试用例设计方法类似,场景分析法无法验证单个功能的正确性。
6. 实例
在某嵌入式系统中,将待发送的数据打包成符合CAN协议的帧格式后,便可写入发送缓冲区,并自动发送。该程序的流程如下:
- 进入发送子程序。
- 系统判断是否有空闲发送缓冲区,如果没有则返回,启动发送失败消息。
- 如果有缓冲区,则将数据包写入空闲发送缓冲区。
- 系统判断是否写入成功,如果不成功则返回,启动发送失败消息。
- 如果写入成功,则启动发送命令。
- 返回启动发送成功消息。
分析上述的描述,可以得到该程序共有…6个流程节点,据此结合描述可以绘制出如下的场景流程图:
根据上面的场景流程图可以确定出以下测试场景:
最后,根据上面表中的场景,可以设计测试用例来覆盖所有的场景,也就是说,使用场景法,本例可以生成3条测试用例,分别用于覆盖场景1到3,具体如下:
针对本问题,使用场景法设计出的测试用例最终如上图所示,不过在本例中由于并未给出具体的相关数据(比如缓冲区的大小等),所以关于数据部分均以文字描述代替。
在此之后,可以在用等价类等方法再在此基础之上补充一些用例。
7. 测试用例的综合选择策略
测试用例的设计方法不是单独存在的,具体到每个测试项目中都会用到很多的测试用例设计方法,每种类型的软件都有各自的特点,每种测试用例设计方法也有各自的特点,针对不同的软件,如何去组合使用这些测试用例设计方法是非常重要的。在实际项目中,都是要综合使用各种测试用例的设计方法来设计测试用例才可以有效地提高测试效率和测试覆盖度。
各种测试用例设计方法的组合的策略参考如下:
- 首先进行等价类划分,包括输入条件和输出条件的等价划分,将无限的测试变成有限测试,以减少测试工作量提高测试效率。
- 然后使用边界值分析法针对每个等价类的边界设计测试用例。
- 在使用边界值和等价类划分后,可以再按照经验使用错误推测法补充一些测试用例。
- 对照程序逻辑,检查已设计出的测试用例的逻辑覆盖程度,如果没有达到标准,则再补充一定的测试用例以达到覆盖要求。
- 如果程序的功能说明中含有输入条件的组合情况,则一开始就可选用因果图和判定表驱动法设计相关的测试用例。
- 对于参数配置类的软件,要用正交实验法选择较少的组合方式达到最佳的效果。
- 除了上面这些以外,还可以通过不同时期条件的有效性设计不同的测试数据,即选用功能图来补充设计测试用例。
- 对于业务流程清晰的系统,可以利用场景法贯穿整个测试案例过程,在案例中综合使用各种测试方法。