二、用例设计

 
(1)基础
  • 必要性
    • 便于团队交流;
    • 便于重复【回归】测试;
    • 便于跟踪统计;
    • 便于用户自测。
  • 原则
    • 可执行,包含明确断言,没有歧义。
    • 不能包含不确定的语句,如是否,有没有之类。
  • 设计测试用例时的一些通常考虑“点”是:
    • 根据产品规格测试基本功能;
    • 设计普通用户的使用方案;
    • 设计稀有或特殊的使用方案;
    • 与系统其他组成部分的配合(如FAX和上网可能都要用到调制解调器,测试中要考虑对设备的共享);
    • 考虑特殊情况(比如内存和硬件的冲突等);
    • 设计极端情况(比如内存泄漏、破坏性测试等)。
(2)手工用例和自动化用例对比
  • 手工用例
    • 特点
      • 较好的异常处理能力,通过认为逻辑判断功能正确与否;
      • 手工执行用例具有跳跃性;
      • 能细致定位问题;
      • 主要发现功能缺陷。
  • 自动化用例
    • 特点
      • 执行脚本,所有判断都需要编码定义;
      • 用例步骤之间关联性强;
      • 主要保证主体功能正确完整;
      • 主要用于冒烟和回归测试。
    • 选型注意
      • 不是所有手工用例都要转化为自动化用例;
      • 考虑开发成本;
      • 选择的用例最好可构建成场景;
      • 选择的用例可以带有目的性。
      • 选取重复执行的用例;
      • 选取主流程。
    • 编写原则
      • 一个用例一个完整场景,从登录到退出并关闭浏览器;
      • 一个用例只验证一个功能点;
      • 尽量少编写逆向逻辑用例;
      • 用例之间避免依赖;
      • 每个用例完成后要恢复环境,场景。
 (3)用例设计方法
 
单一输入用等价类划分和边界值分析;多个输入组合用判定表、因果图、正交实验法。
  • 等价类划分

  (1)等价类是指某个输入域的子集合。在该子集合中,各个输入数据用来揭示软件中的错误都是等效的;

    • 有效等价类:对于系统的规格说明来说,由合理的、有意义的输入数据构成的集合。利用有效等价类可检验程序是否实现了规格说明中所规定的功能和性能。
    • 无效等价类:对于系统的规格说明来说,由不合理的、无意义的输入数据构成的集合。

  (2)使用步骤

    • 划分等价类
      • ① 在输入条件规定了取值范围或值的个数的情况下,可以确立一个有效等价类和两个无效等价类。例如,在1<x<5中,一个有效等价类为1<x<5,两个无效等价类为x≥5和x≤1。
      • ② 在输入条件规定了输入值的集合或者规定了必须如何操作的情况下,可以确立一个有效等价类和一个无效等价类。例如,周内有效等价类输入值输入周一到周日的集合,一个无效等价类是输入的值不输入周一到周日的集合。
      • ③ 在输入条件是一个布尔量的情况下,可以确定一个有效等价类和一个无效等价类。例如,性别,如果“男”为有效等价类,则“女”为无效等价类。
      • ④ 在规定了输入数据的一组值(假定有n个)并且程序要对每一个输入值分别进行处理的情况下,可以确立n个有效等价类和一个无效等价类。
      • ⑤ 在规定了输入数据必须遵守的规则的情况下,可确立一个有效等价类符合规则和若干个无效等价类从不同角度违反的规则。例如,用户名规则长度及组成方式,有效等价类为符合规则的字符,无效等价类可以从多个角度设计。
      • ⑥ 在已划分的等价类中,若各元素的处理方式不同,则应再将该等价类进一步划分为更小的等价类。例如,100分制60分及格,有效等价类为大于等于60,那低于60的为无效等价类。

        

    •  确定测试用例
      从划分出的等价类中,按以下3条原则设计测试用例。
      ① 为每一个等价类规定一个唯一的编号。
      ② 设计一个新的测试用例,使其尽可能多地覆盖尚未覆盖的有效等价类,重复这一步,直到所有的有效等价类都被覆盖为止。
      ③ 设计一个新的测试用例,使其仅覆盖一个尚未覆盖的无效等价类,重复这一步,直到所有的无效等价类都被覆盖为止。

     

  • 边界值

  (1)边界值分析法的理论基础是假定大多数的缺陷发生在各种输入条件的边界上,如果在边界附近的取值不会导致程序出错,那么其他取值导致程序出错的可能性也很小。

  (2)边界值分析法的使用条件如下。

    • 输入条件明确了一个值的取值范围,或者规定了值的个数。例如:输入条件为整数,取值范围为[1,100]。
    • 输入条件明确了一个有序集合。例如:输入条件为月份,取值范围是月份的集合(1月到12月)。

  (3)边界值点定义如下。

    • 上点:边界上的点,如果域的边界是封闭的(例如,闭区间[1, 5]),上点就在域范围内;如果域的边界是开放的(例如,开区间(1, 5)),上点就在域范围外。
    • 离点:离上点最近的一个点,如果域的边界是封闭的,离点就在域范围外;如果域的边界是开放的,离点就在域范围内。
    • 内点:顾名思义,就是在域范围内的任意一个点

    

 

   (4)使用步骤

    • 划分等价类(可选)。
    • 分析样点:针对每个等价类区域分析其上点、离点和内点,并将分析的上点、离点和内点填写到表中。

    

    • 确定测试用例。从划分出的等价类中按以下3个原则设计测试用例。
      • 每一个等价类的上点、离点和内点确定唯一的编号。
      • 设计新的测试用例,使它尽可能多地覆盖尚未被覆盖的有效等价类中的上点、离点和内点,重复这一步,直到所有的有效等价类点都被覆盖为止。说明:当等价类划分法和边界值分析法结合使用时,边界值分析法的内点如果已经在等价类中被测试用例覆盖,则不用重复设计用例。
      • 设计新的测试用例,使它仅覆盖一个尚未被覆盖的无效等价类的上点、离点和内点,重复这一步,直到所有的无效等价类中的上点、离点和内点都被覆盖为止。

         

 

  • 判定表

  (1)判定表是指在分析和表达多种输入的条件下系统执行不同动作的工具。判定表由4部分组成:条件桩、条件项、动作桩、动作项。

   

 

 

   例如,手机在未欠费、有信号、开机的情况下,可以正常通话。根据分析得出条件桩、条件项、动作桩、动作项

   

   (2)使用步骤

    • 标识输入和输出。

      

    分析需求规格说明书的子项,找出其中的条件桩、对应的条件项和动作桩、对应的动作项,并标识出来,其中要注意以下几点。
      ① 输入需要包括外部消息输入、内部预置的用户状态、数据配置等所有对系统输出有影响的因素。
      ② 如果输入项和输出项只涉及两种取值,在两种取值中可以只把一个标识出来。如果输入项涉及多种取值,每个取值都需要作为一个输入标识出来。
      ③ 标识符可以自己确定,但输入与输出需要独立标识。
    •  构造判定表
      • 将标识的输入填入条件桩部分,将标识的输出填入动作桩部分。条件项部分的列数为2的n次方列,n为输入数。从最右列到最左列逐列从“N N … N”到“Y Y … Y”填入条件项的所有组合。
      • 逐列分析条件项组合,并填入其动作项。分析每列的条件项取值情况,根据输入和输出逻辑关系,得到该列的输出值—“Y”或“N”,填入该列动作项,得到一条规则。如果该列条件项的取值组合不合法,则在动作项中填入“X”。
    •  简化判定表(可选)

     简化的过程为:找到判定表中输出完全相同的两列,观察它们的输入是否相似,例如,如果只有一个输入不同,说明不管该输入取何值,输出都是一样的,也就是说,该输入对输出的结果没有影响,因此可以将这两列合并为一列。

    

 

    •  生成用例,每一列为一条规则

    

  • 因果图
   (1)因果图用于描述系统的输入和输出之间的因果关系、输入和输入之间的约束关系。因果图的绘制过程是对被测试系统外部特征的建模过程。根据系统输入和输出之间的因果图可以得到判定表,从而规划出测试用例。因果图法和判定表法在实际中往往同时使用,此时可以把因果图法视为判定表法的前置过程。
  
因果图需要描述下面的关系。
  (1)输入与输出之间的因果关系。因果图的表示中,输入与输出间的因果关系有以下4种。
  恒等关系:当出现输入项时,会产生对应输出项;当不出现输入项时,不会产生对应输出项。
  非关系:与恒等关系相反。
  或关系:多个输入条件中,只要有一个出现,就会产生对应输出。
  与关系:多个输入条件中,只有所有输入项出现时,才会产生对应输出项。
  输入与输出的因果关系分别如图所示。
  (2)输入与输入之间的约束关系。因果图的表示中,输入与输入之间的约束关系有以下4种。
  异关系:所有输入中至多一个输入条件出现。

 

  或关系:所有输入中至少一个输入条件出现。
  唯一关系:所有输入中有且只有一个输入条件出现。
  要求关系:所有输入中只要有一个输入条件出现,其他输入也会出现。
   

 

   (2)使用步骤

    • 标识输入和输出。
    逐项分析测试子项的测试规格,找出其中的输入和输出并标识出来,其中要注意以下几点。
    ① 输入需要包括外部消息输入、内部预置的用户状态、数据配置等所有对系统输出有影响的因素。
    ② 如果输入和输出项只涉及两种取值(真和假;是和否),在两种取值中可以只把一个标识出来。如果输入项涉及多种取值,则每个取值需要作为一个输入标识出来。
    ③ 标识符可以自己确定,但输入与输出需要独立标识。
    • 画出因果图。
    ① 分析测试需求和SRS等参考文档,针对每个测试子项的测试规格,分析输入与输出之间、输入与输入之间的关系,根据这些关系,画出因果图。
    ② 由于语法或环境限制,有些输入与输入之间、输入与输出之间的组合情况不可能出现。为表明这些特殊情况,在因果图上用一些记号表示约束条件或限制条件。
    • 将因果图转换为判定表。
      ① 将输入和输出分别填入条件桩与动作桩,并在条件项中填满输入的所有组合,若输入有n项,则组合的列数应该为2n。
      ② 根据因果图中的输入条件约束关系,对不可能出现的输入组合,在动作项上做出删除标记。
      ③ 根据因果图中的输入与输出的因果关系,在动作项上标出对应动作的结果。
    • 简化判定表(可选)。
      可参照判定表法的简化步骤。
    • 生成测试用例。
      简化后的判定表的每一列可以规划为一个测试用例,它的输入和输出都已经非常明确。
 

  (3)案例

  假设有一台自动售卖5角钱的饮料的机器(假设只接受5角钱和1元钱),其规格说明如下。
  若塞入5角钱或1元钱,按下“橙汁”或“啤酒”按钮,相应的饮料就出来了。若售货机没有零钱了,则一个显示“零钱找完”的红灯亮,这时再塞入1元钱并按下按钮,饮料就不会出来但1元钱会退回;若有零钱找,则显示“零钱找完”的红灯灭,在出来饮料的同时退还5角钱。”
  • 分析原因和结果,原因如下:
  ① 售货机有零钱。
  ② 塞入1元硬币。
  ③ 塞入5角钱。
  ④ 按下“橙汁”按钮。
  ⑤ 按下“啤酒”按钮。
  
  结果如下:
 
  u售货机中“零钱找完”的红灯亮。
  v退还1元硬币。
  w找5角硬币。
  x出来橙汁饮料。
  y出来啤酒饮料。
 
  • 分析输入和输出之间的关系以及输入与输入之间的约束关系,如图所示。
 通过画因果图能更好地让测试人员了解需求、理解需求,高效地生成判定表,因此因果图法通常作为一种辅助的方法。当能很快得到判定表的时候,就不需要画因果图了。只有当处理过程过于复杂,导致不太容易理解的需求时,才会使用因果图法。
 
  •  正交试验法

定义:从大量的(实验)数据(测试例)中挑选适量的,有代表性的点(例),从而合理地安排实验(测试)的一种科学实验设计方法.类似的方法有:聚类分析方法,因子方法方法等.

 

利用正交实验设计测试用例的步骤:

(1) 提取功能说明,构造因子--状态表

把影响实验指标的条件称为因子.而影响实验因子的条件叫因子的状态.利用正交实验设计方法来设计测试用例时,首先要根据被测试软件的规格说明书找出影响其功能实现的操作对象和外部因素,把他们当作因子,而把各个因子的取值当作状态.对软件需求规格说明中的功能要求进行划分,把整体的概要性的功能要求进行层层分解与展开,分解成具体的有相对独立性的基本的功能要求.这样就可以把被测试软件中所有的因子都确定下来,并为确定个因子的权值提供参考的依据.确定因子与状态是设计测试用例的关键.因此要求尽可能全面的正确的确定取值,以确保测试用例的设计作到完整与有效。

(2) 加权筛选,生成因素分析表

对因子与状态的选择可按其重要程度分别加权.可根据各个因子及状态的作用大小,出现频率的大小以及测试的需要,确定权值的大小。

(3)利用正交表构造测试数据集

正交表的推导依据Galois理论(这里省略,需要时可查数理统计方面的教材)。

利用正交实验设计方法设计测试用例,比使用等价类划分,边界值分析,因果图等方法有以下优点:节省测试工作工时;可控制生成的测试用例数量;测试用例具有一定的覆盖率。

  • 功能图法

定义:功能图由状态迁移图和布尔函数组成.状态迁移图用状态和迁移来描述.一个状态指出数据输入的位置(或时间),而迁移则指明状态的改变.同时要依靠判定表或因果图表示的逻辑功能.例,一个简化的自动出纳机ATM的功能图。

应用:

(1)功能图介绍

一个程序的功能说明通常由动态说明和静态说明组成.动态说明描述了输入数据的次序或转移的次序.

静态说明描述了输入条件与输出条件之间的对应关系.对于较复杂的程序,由于存在大量的组合情况,因此,仅用静态说明组成的规格说明对于测试来说往往是不够的.必须用动态说明来补充功能说明.功能图方法是用功能图FD形式化地表示程序的功能说明,并机械地生成功能图的测试用例.

功能图模型由状态迁移图和逻辑功能模型构成.状态迁移图用于表示输入数据序列以及相应的输出数据.在状态迁移图中,由输入数据和当前状态决定输出数据和后续状态.逻辑功能模型用于表示在状态中输入条件和输出条件之间的对应关系.逻辑功能模型只适合于描述静态说明,输出数据仅由输入数据决定.测试用例则是由测试中经过的一系列状态和在每个状态中必须依靠输入/输出数据满足的一对条件组成.功能图方法其实是是一种黑盒白盒混合用例设计方法。

(功能图方法中,要用到逻辑覆盖和路径测试的概念和方法,其属白盒测试方法中 的内容.逻辑覆盖是以程序内部的逻辑结构为基础的测试用例设计方法.该方法要求测试人员对程序的逻辑结构有清楚的了解.由于覆盖测试的目标不同,逻辑覆盖可分为:语句覆盖,判定覆盖,判定-条件覆盖,条件组合覆盖及路径覆盖.下面我们指的逻辑覆盖和路径是功能或系统水平上的,以区别与白盒测试中的程序内部的.)

(2)测试用例生成方法

从功能图生成测试用例,得到的测试用例数是可接受的. 问题的关键的是如何从状态迁移图中选取测试用例. 若用节点代替状态,用弧线代替迁移,则状态迁移图就可转化成一个程序的控制流程图形式.问题就转化为程序的路径测试问题(如白盒测试)问题了.

(3)测试用例生成规则

为了把状态迁移(测试路径)的测试用例与逻辑模型(局部测试用例)的测试用例组合起来,从功能图生成实用的测试用例,须定义下面的规则.在一个结构化的状态迁移(SST)中,定义三种形式的循环:顺序,选择和重复.但分辨一个状态迁移中的所有循环是有困难的.(其表示图形省略)。

(4)从功能图生成测试用例的过程

1)    生成局部测试用例:在每个状态中,从因果图生成局部测试用例.局部测试用例由原因值(输入数据)组合与对应的结果值(输出数据或状态)构成。

2)    测试路径生成:利用上面的规则(三种)生成从初始状态到最后状态的测试路径。

3)    测试用例合成:合成测试路径与功能图中每个状态中的局部测试用例.结果是初始状态到最后状态的一个状态序列,以及每个状态中输入数据与对应输出数据的组合。

5.    测试用例的合成算法:采用条件构造树.

 

  • 场景图法

定义:现在的软件几乎都是用事件触发来控制流程的,事件触发时的情景便形成了场景,而同一事件不同的触发顺序和处理结果就形成事件流。这种在软件设计方面的思想也可以引入到软件测试中,可以比较生动地描绘出事件触发时的情景,有利于测试设计者设计测试用例,同时使测试用例更容易理解和执行。

应用:

基本流和备选流:如下图所示,图中经过用例的每条路径都用基本流和备选流来表示,直黑线表示基本流,是经过用例的最简单的路径。备选流用不同的色彩表示,一个备选流可能从基本流开始,在某个特定条件下执行,然后重新加入基本流中(如备选流1和3);也可能起源于另一个备选流(如备选流2),或者终止用例而不再重新加入到某个流(如备选流2和4)。

 
 
 
 
 
posted @ 2020-03-03 20:30  晨尛  阅读(466)  评论(0)    收藏  举报