测试用例--等价类划分、边界值法


一、测试用例/案例(test case/test instance)
  1、定义:是在测试执行之前,由测试人员编写的指导测试过程的重要文档,主要包括:用例编号、测试目的、测试步骤(用例描述),预期结果
  2、介绍编写测试用例的7种方法:
    1)等价类划分法(*****)
    2)边界值法(*****)
    3)因果图法
    4)判定表法
    5)正交排列法
    6)测试大纲法
    7)场景法(*****)
  至少要掌握每种方法的适用场合(用在哪)和使用步骤(怎么用)
  编写测试用例可以参考什么?
    (1)需求文档
    (2)被测系统(已开发出来的被测系统)
      一边对照程序,一边编写用例。很多企业都是这样测试,如果只对照需求文档可能只能完成测试设计的30-40%。
    (3)开发(设计)文档(有可能拿不到,比如测试和开发不是同一家公司,就不一定提供设计文档)
    (4)与开发、产品、客户等进行沟通


二、等价类划分法
  1、应用场合
    有数据输入的地方,可以使用等价类划分法。
    从大量数据中挑选少量代表数据进行测试
  2、测试思想
    穷举测试:把所有可能的数据全部测试一遍叫穷举测试。
    穷举测试是最全面的测试,但是在实际工作中不能采用,因为测试效率太低(数据量巨大,根本测不过来)
    理想的测试思想:使用最少的测试数据,达到最好的测试质量(最高性价比)
      因为毕竟没有做穷举测试,所以会有遗漏缺陷的风险,如果时间允许,尽可能的做补充测试(不用纠结,觉得有风险的有问题的补充测就好)
    等价类划分法的测试思想:
      从大量数据里划分范围(每个范围内的数据测试效果是等价的所以每个范围是一个等价类),然后从每个范围中挑选代表数据,这些代表数据能反应这个范围内数据的测试结果。
    基本概念
      有效等价类:对程序来说,有意义的、合理的输入数据集合—用来测试功能是否正确实现
      无效等价类:对程序来说,无意义的、不合理的输入数据集合—用来测试程序是否有强大的异常处理能力(健壮性)


三、等价类划分法的实现步骤:
  案例
    被测程序:加法器
    被测对象:
      第一个数文本框
      第二个数文本框
    适合初学者的测试思路:
      先测第一个数,此时第二个数填写正确数据配合
      第一个数测试完成后,测第二个数,此时第一个数填写正确数据配合
    步骤1:分析需求,根据需求划分等价类(初步划分,后续再细化)
      需求:要求-99—99之间的整数,不能为空(必填)       
        有效等价类:
          -99—99之间的整数
        无效等价类:
          <-99的整数
          >99的整数
          非整数(需要细化)
          为空(不填)
    步骤2:细化等价类
      细化等价类依据的不再是字面上的需求而是根据数据在内存或数据库中存储的类型。
        1)有效等价类:
          -99—99之间的整数
          整数的存储在计算机底层中会使用不同的算法:正整数和负整数算法不同,所以测试时正整数和负整数应该分开来测。(一般对有效等价类数据应用,无效等价类数据一般不需要正、负分别测)
          所以将有效等价类细分为:
            -99--(-1)负整数
            0—99 正整数
        2)无效等价类:非整数
          非整数:小数、字符(汉字、字母、特殊字符)
          最终细分成:小数、字母、汉字、特殊字符
          将等价类划分结果填入《等价类表》

 

          

 

    步骤3:编写测试用例
      从每个等价类范围中挑选至少一个代表数据进行测试
      测试用例最简单的标准:让其他测试人员按照你写的测试步骤执行,如果能够执行出来才可以。
      测试用例是要评审的:互评互审,测试组开评审会、有用户参加的评审会

 

      

 


   案例中的问题:
     1、在测试有效等价类时,当测试对象为多个控件时,会出现测试用例冗余(重复)的问题--优化用例可以解决
     2、当测试无效等价类时,没有考虑多个控件都为无效的情况--强化用例解决


四、边界值法
  说明:因为开发中数据范围的边界是最容易产生bug的地方,所以为了保证测试质量,就需要重点测试边界,就有了边界值这样的测试方法
  1、应用场合:有数据输入的地方,一般可以使用边界值法。边界值法往往跟等价类划分法一起使用,从而形成一套较为完善的测试方案。
    个别情况下,等价类和边界值也不需要一起用。例如:性别—
    有效等价类:男、女
    无效等价类:男、女以外的其他字符
    此时就不需要使用边界值法
  2、如何使用?
    边界值点:有效等价类和无效等价类之间的分界点。(最大值、最小值)
    次边界值点:边界值左右两边相邻的点是次边界值点。(4个次边界)
      有效最小次边界
      无效最小次边界
      有效最大次边界
      无效最大次边界


  常见问题
    边界值法应用时,如果测试时间紧张,应该优先测试哪些点?
      优先测试最大值和最小值
    需求文档中是否边界值都是需求明确的?
      有时候需求文档中并没有对所有边界都能明确说明,可能会在后期逐步明确
    针对边界值法的解释说明:
      边界值数据本质上是属于某个等价类的范围,测试时确实是一种冗余(重复),但是为了更好的测试质量(边界值特别容易出bug),边界值必须要单独测,适当必要的冗余是可以接受的。(边界值法是等价类划分法的重要补充,配合使用测试质量才能得到保证)


  练习:
    年龄: 18-60岁之间的整数 ,分析边界值
    工资:1000.00—30000.00,小数点后最多两位,分析边界值
      小数的边界值法测试时要考虑两个部分:1)小数的数据范围的边界值要分析2)小数的位数的边界值也要分析
      例如当前案例:除了1000-30000 的边界值要分析外,小数位数最多两位:那么:
        小数点后2位(最大值)
        小数点后1位(有效最大次边界值)
        小数点后3位(无效最大次边界值)


五、等价类划分法+边界值法的综合使用
  案例:信息注册
    步骤1:分析需求,分别将姓名和年龄控件的等价类和边界值进行分析,填入《数据分析表》

 

    

 


    步骤2:根据数据分析结果,形成测试方案,编写测试用例。

 

    

 


  1、有效数据(有效等价类+有效边界值)
    问题产生:如果单个控件的有效数据单独测试,会产生用例冗余(重复)的问题
    如何解决—优化用例
      就是一条用例中尽可能多的将多个控件的1个有效数据组合起来测试(简单来说:就是多个控件的有效数据组合起来测)
      效果:用例数减少,测试质量不变,测试效率提高
   2、无效数据(无效等价类+无效边界)
    首先:要每个控件的无效数据单独测试(1条用例只测1个控件的1个无效数据),不能开始就无效数据组合,为了避免“屏蔽现象”
    “屏蔽现象”—前面控件的错误提示出现后,后面控件的错误提示就不弹出了
    最后:适当的做强化测试
      1)多个控件的无效数据组合测试(就是多个控件都是错误数据的情况,例如:姓名,年龄都为空)
      2)1个控件将多个无效数据组合起来测试(例如:年龄既超范围又是小数又有汉字又有符号 ,95.5(岁))
        无效数据的组合强化测试,适当去做即可(可以根据时间调整),不需要所有无效数据组合都测。常常测试:1)经常使用的组合(例如:都为空)2)在使用中容易出错的组合(例如:54.5岁)
          小数类型,等价类+边界值测试时的注意事项:
          有效等价类:除了有效的小数外,有效的整数也需要测(小数中默认包含了整数,除非需求中明确的说:小数中不包含整数)
        无效等价类:
          A)小数类型—非小数(非数):字母、汉字、特殊字符
          B)小数位数—超出小数的有效位数(例如:最多两位,那么>2位就是无效等价类)
      3)边界值
        A)小数的次边界与边界之间的相差单位是与精确度相关的,例如:精确到小数点后2位,那么相差单位就是0.01
            例如:最小值是:1.00那么次边界就是 0.99 和1.01
        B)要考虑小数位数的边界问题。例如:小数位数最大值:小数点后2位
          那么次边界是:小数点后1位和小数点后3位

 

        

 

 

  案例:
    填写身份证号
      需求:18位的身份证号(字符串 string),前17位就是数字,最后1位数字和X(看需求),必填
      有效:
        18位的身份证,每位都是数字(0-9)
        18位的身份证,前17位都是数字(0-9),最后一位X(x是否有效看需求)
      无效:
        >18位
        <18位
        最后1位是特殊字符\汉字\X以外的其他字母
        前17位是特殊字符\汉字\字母
        为空
      规则:
        前6位 数字地址码
          正确: 100001--899999
          错误:不在范围里的
        中8位:出生日期
          年份:1900-当前年份
          月份:01-12
          日:01-31
          大月:正确31天
          小月:30天
          二月:平年 28天 闰年:29天
        后3位:顺序码000—999
        最后1位:0-9或者X

 

六、总结
  有效等价类:比较容易找,一般在需求中可以直接找到。数量较少。所以有效等价类测试也称为正向测试或者通过测试
  无效等价类:一般数量较多,也被称为“反向测试”或“失败测试”
  无效等价类的考虑因素:
    说明:
      不能为空:为空
      不能重复:重复
      不能包含**:包含**
    类型
      整数:非整数(小数,字母,汉字,特殊字符)
      小数:非小数(非数:字母,汉字,特殊字符)
      字符:如果没有特殊说明不需要细分。字符包含(字母,数字0-9,特殊字符,汉字)
    范围
      --超出范围的情况
      数字范围:比最小值小,比最大值大
      字符串长度:不在正确的长度范围的就是无效的


  测试用例
    测试用例的用途:
      (1)版本的重复测试会很方便,可以快速正确的进行
      (2)防止遗漏
      (3)提高测试效率
      (4)监督测试过程
      (5)评估结果
      (6)缩短测试周期:
        版本更新或者升级时,只需修改少部分的测试用例,可以资源复用


  编写用例的注意事项:
    (1)在编写用例之前应该先确认好用例编号的命名规则,文档、附件的命名规则以及存储,提交的位置。
    (2)测试用例编写完成是有评审过程的。
      互评互审、测试组评审、甲方的参加的评审会
    (3)基本要求:
        1条用例先写好(标准:别人按照你写的测试步骤能够顺利执行)
      高标准的要求:
        能够分析,形成完善的测试思路(方案),实现更好的测试覆盖率和更少的缺陷遗漏