• 测试理论与方法----测试流程第三个环节:设计测试用例


    测试流程第三个环节:设计测试用例:怎么测<——>测试需求的提取:测什么
    ### 5、测试用例
    1. 描述:测试用例(TestCase):是一份关于【具体测试步骤】的文档,是为了达到最佳的测试效果或高效揭露软件中潜藏的bug,精心设计少量且具有代表性的测试场景和测试数据

    2. 测试用例=测试场景=测试步骤+测试数据+预期结果

    3. 分析:测试用例就是设计一种情况,软件在该情况下是可以正常运行,且能够达到预期结果的。如果软件在该情况下不能正常运行,或未达到预期结果,就证明发现了bug,需要提交给开发进行确认和修复。修复完成后,再用同一条用例进行验证,确保已修复完成。

    4. 测试用例的编写

      测试用例编号测试项依赖用例测试步骤测试数据预期结果测试结果测试人备注
      • 测试用例编号:给设计好的每一个测试用例生成唯一的序列号 0001-9999

        参考写法:TestCase_项目名称 _模块名称 _子模块名称 _功能名称 _测试类型 _0001

        注意:名称可以简写,比如汉语拼音的首字母;当换了新的功能或新的模块,编号要重新生成;

        测试类型:功能测试 Function,性能测试 Performance,界面测试 UI

      • 测试项/测试用例标题

        思路:关联本条测试用例设计的目的,一句话做概述,描述这一条用例是做什么的

        写法:具体的角度+验证功能

        ​ 例:测试需求:密码:6-18位——>设计用例:验证6位长度密码的注册操作

        ​ 密码:小于6位——>设计用例:验证5位长度密码的注册操作

        ​ 密码:大小写字母,数字—–>设计用例:验证纯大写字母注册操作 验证纯小写字母注册操作 验证纯数字注册操作 验证字母+数字组合注册操作….

        参考话术:验证XXXX的操作 XXXX情况下的验证 XXXX操作的验证

      • 依赖用例:可选可写的

        概述:指的是当前用例的设计,需要用到其它用例的支持,就把关联的用例编号写到该位置

        例:针对信贷系统后台:用户管理模块设计用例——>依赖于前台成功注册用户用例

      • 测试步骤:最核心的部分

        概述:根据测试项,整理出详细的操作步骤(测试过程),简单清晰明了

        ​ 例:验证直角三角形判定

        ​ 测试步骤:

        ​ ①输入第一条边:3

        ​ ②输入第二条边:4

        ​ ③输入第三条边:5

        ​ ④点击提交按钮

        备注:好的测试步骤,任何一个人都是可以执行的,也不会有任何的歧义

      • 测试数据/输入数据

        概述:指的是测试步骤中用到的数据

      • 预期结果

        概述:指的是按照测试步骤和测试数据操作完成后,应该会出现的结果

        例:预期结果:提示“直角三角形”

      • 测试结果

        概述:写的是实际结果和预期结果对比后产生的结果值:

        通过(成功):实际结果和预期结果一致

        不通过(失败):实际结果和预期结果不一致

        阻塞:因为一些其它的原因(不是本公司所能解决的),导致当前用例无法执行

      • 测试人:写的是执行测试用例人员名字

        注意:测试结果和测试人一定是执行测试后,才来进行填写的内容!!!

      • 备注:可选可写的

        概述:做一些额外的补充说明,比如执行用例时,所需要的硬件,软件,网络环境… 谷歌浏览器10.0

    5. 测试用例的作用

      ① 有效性:执行测试重要参考

      ②可复用性:良好的测试用例可以重复使用

      ①易组织性:再小的项目也会有大量的用例,用例也是随着版本的更新不断完善

      ④可评估性:用例通过率是检查代码质量的参考标准

      ⑤可管理性:测试用例的设计也是检查测试工作效率的标准

      ⑥测试用例的设计对于测试需求的覆盖率:一定是100%

    6、黑盒测试用例设计方法

    1. 提供方法的选择:

      • 测试数据:等价类划分法,边界值分析法
      • 测试步骤:因果图法,判定表法,正交实验法,场景法,功能图法
    2. 测试数据的选择:

      • 等价类划分法:划分数据区间

        思想:依据【需求】,将程序的输入域,划分成若干个部分,从每个部分中再选取【少量且具有代表性】的数据,作为测试用例(测试数据),选取的数据就代表了该整体。

      • 等价类划分法分类:

        有效等价类:依据需求,划分出来【有意义,合理的数据】构成的集合区间

        ​ 例:163邮箱:手机号快速注册:密码:8-16位长度构成的密码数据都是有效的—–>有效等价类 数据类型:大小写字母,数字构成的数据—–>有效

        无效等价类:依据需求,划分出来【无意义,不合理的数据】构成的集合区间

        ​ 例:163邮箱:手机号快速注册:密码:长度:两个无效等价类:小于8位的数据 大于16位的数据 数据类型:特殊符号构成的数据—–>无效

      • 等价类划分原则(了解)

        ①按照【区间】来划分:如果输入项中规定了【取值范围】或【值的个数】,划分出:一个有效等价类和两个无效等价类

        ​ 例:成绩输入框:规则:[0,100]分数—–>有效:0<=成绩<=100 无效:成绩<0 成绩>100 身份证号码输入框:规则:18位——>有效:18位 无效:大于18位 小于18位

        ②按照【数值】来划分:如果输入项中规定了n个值,每个值都必须测试,划分出:n个有效,一个无效

        ​ 例:某一所大学的福利:如果学校中教师的身份:教授,副教授,院长,系主任,都可以得到一套房子

        ​ 四个有效:教授身份的人构成的集合区间,副教授身份的人构成的集合区间,院长身份的人构成的集合区间,系主任身份的人构成的集合区间

        ​ 一个无效:除了上述四个身份以外的人构成的集合区间

        ③按照【数据集合】来划分:如果输入项中规定了输入值的集合,划分出:一个有效,一个无效

        ​ 例:名字需求:首个字符必须是字母

        ​ 一个有效:以字母开头的数据构成的集合区间

        ​ 一个无效:不以字母开头的数据构成的集合区间

        ④按照【规则】来划分:如果输入项中规定了必须要遵守规则的情况下,划分出:一个有效(满足规则的所有数据),若干个无效(从不同角度违反规则)

        ​ 例:需求:校内电话拨打外线号码以9开头

        ​ 有效:9开头+外线号码

        ​ 无效:非9+外线号码 9+非外线号码 非9+非外线号码

        ⑤其它情况:

        ​ (1)如果输入项是一个布尔量,划分出:一个有效,一个无效

        ​ (2)在已知划分好的等价类基础上,有些情况还可以继续进一步划分出更小的等价类

        ​ 例:名字需求:一个无效:不以字母开头—–>以数字开头的所有数据 无效,以特殊符号开头的所有数据 无效……

      • 等价类划分法设计测试用例(分析思路)

        ①建立等价类表:梳理思路,划分出每一个输入项的有效等价类,无效等价类

        输入条件有效等价类无效等价类

        ②给划分出来的每一个等价类生成一个唯一的编号

        ③==设计一条用例,尽可能多的覆盖有效等价类(能用一条用例完成的,就不考虑第二条),直到把所有的有效等价类全部覆盖完成。==

        ④==设计一条用例,只覆盖一个无效等价类==

        注意:当以某一个输入项进行违反规则设计测试用例时,其他的输入项均看成是满足/符合规则


    回顾
    1. 测试需求:“测什么”

    2. 测试用例:“怎么测”

    3. 黑盒测试:

      测试数据选择:等价类边界值法

      测试步骤设计:因果图判定表法 场景法 正交实验法 功能图法

      等价类划分法:思想:输入项—–>划分集合区间:有效等价类:有意义,合理 无效等价类:无意义,不合理


    1. 边界值分析法

      • 前提:成绩判定 :[90,100] 优秀,[70,90) 良好,[60,70) 及格,[0,60) 不及格

        if(grade>=90 && grade<=100){

        ​ alert(“优秀”)

        }

      • 概述:大量的测试工作经验告诉我们,大部分的错误往往发生在边界(并不是程序的内部),针对边界设计用例,能够发现更多的缺陷。边界值法是对等价类法的补充:通过等价类划分区间,结合边界值选取测试数据(边界数据)

      • 边界:指的是输入或输出范围中,恰好处于边界,刚刚超越边界,边界以下的

      • 边界值法设计用例(分析思路):

        ①确定好边界的情况:输入项或输出的边界

        ②选取边界数据作为测试数据刚刚等于,刚刚大于,刚刚小于的边界值

      • 边界值分析法原则(了解)

        ①如果输入项规定了【取值范围】:则取刚达到的,刚超越(大于+小于)

        ​ 例:成绩输入项:需求:0<=成绩<=100 测试数据:0 100 101 -1

        ​ 价格输入项:[1.0,10.0] 测试数据:1.0 10.0 10.1 0.9

        ​ 价格输入项:[1.00,10.00] 测试数据:1.00 10.00 0.99 10.01

        ②如果输入项规定了【值的个数】,则取最大个数值,最小个数值,比最大值大一,比最小值小一

        ​ 例:一个文件(数据表)能够接收1-255条记录:测试数据:1 255 256 0

        ③1和2中的原则,也可以用于输出结果的判定

        ​ 例:软件查询功能:至少每次会显示1条查询结果,最多不超过20条查询结果,测试数据:1 20 0 21

        ④如果是输入或输出是一个有序序列,测试数据:序列中的第一个元素,序列中最后一个元素

        ​ 例:三部电梯:一部:1-4楼,二部:1-9楼,三部:1,4,6楼,怎么测?

        ⑤分析需求规格说明书,找出其它可能存在的边界条件:次边界值:隐藏的边界值

        ​ 例:月份输入框:1-12 MySQL:数据类型:字段名 tinyint -128到127

      小总结:等价类划分法用于测试数据的区间划分,划分完成后就可以借助于边界值分析法,选取具体的测试数据:测试数据=等价类+边界值

    2. 测试用例评审

      1. 目的:可以让用例的结构更加清楚,覆盖用户场景更加全面(设计不合理,遗漏的找出来),也是提高用例设计水平方式之一
      2. 参与人员:测试部门相关人员,公司其它人员,客户(第三方)

    7、黑盒测试用例设计方法(二)

    针对测试步骤的设计方法

    1、因果图法
    1. 思想:适用于【多种输入条件的组合】,设计测试用例,根据输入项的组合情况,以及约束关系,输出条件的因果关系,分析出可能会产生的组合场景,进行用例设计。

    2. 因果图法分析过程

      ①根据需求说明书,找出原因(条件)和结果之间的关系,画出因果图

      ​ 原因和结果关系:

      ​ 恒等:只要有条件a,一定会有结果b

      ​ 非:只要有条件a,一定不会有结果b

      ​ 或:abc三个条件只要满足其中一个,就会有结果d

      ​ 与:abc三个条件必须同时满足,才会有结果d

      ②根据需求说明书,给因果图加上约束条件

      ​ (1)原因和原因之间的约束条件:

      ​ 互斥E:abc三个条件,最多成立一个

      ​ 包含I:abc三个条件,至少成立一个

      ​ 唯一O:abc三个条件,有且只能成立一个

      ​ 要求R:a条件的操作,要求b条件必须保持一致

      ​ (2)结果和结果之间的约束条件

      ​ 屏蔽M:只要有结果a,就会屏蔽结果b

      ③根据因果图,转换出判定表(在表中整理出因果关系)

      ④判定表中每一个列,都是一条测试用例

    小总结:因果图判定表法套路:根据需求说明—–>分析因果关系—–>画出因果图—–>生成判定表—–>根据表中的每一个列设计测试用例

    2、判定表法
    1. 概述:“判定表驱动法”,用来分析多个条件下,执行不同的组合操作情况——>分析工具:找出原因和结果(因为有些需求是比较明确,我们可以直接跳过因果图,利用判定表分析)

    2. 判定表组成

      image-20230811145128645

      条件桩:指的是所有的输入条件(原因)

      条件项:指的是每一个输入条件的取值

      动作桩:指的是所有的输出结果

      动作项:指的是所有输出结果的取值

      规则:表中的每一个列,一个规则就是一条测试用例

    3. 判定表法设计用例:

      ①假如有n个条件,且每一个条件只有两个取值(0或1),那么故有2n个规则

      ②确定条件桩和动作桩:列出所有的输入条件和输出结果(问题和结果)

      ③分别填写条件项和动作项,生成初始化的判定表

      ④简化、合并、去重相似的规则相同的动作(简化后的判定表是大家至少要设计的测试场景,不能再少了)

    小总结:不管是因果图,还是判定表,最终的目的:实现不同条件之间的组合,产生不同结果的验证操作(因果图判定表法)


    回顾

    测试数据:等价类边界值法

    测试步骤:因果图判定表法:功能:多条件组合情况


    3、场景法(功能+业务)
    1. 概述:模拟用户使用软件时的操作场景(在不同的场景下来测试系统软件),主要测试系统的业务流程(毕竟一个软件的功能相当于是一个业务流程的体现)

    2. 场景法分析过程

      1. 场景法一般是由基本流和备选流组成:软件功能操作时,对应的各种{正确+错误}场景

        基本流:指的是从执行程序开始,到程序执行结束,整个过程是【没有任何错误的场景】,将软件运行的流程正确的分析和表达出来

        备选流:指的是在基本流的基础上,会发生的【各种错误情况】所生成的场景。

        例:ATM取款机:取钱功能:

        ​ 基本流:正确的操作流程:插卡—––输入密码——选择取钱功能——输入取款金额—–确认出钱——退卡

        ​ 备选流:各种错误情况:备选流一:密码输错三次,锁卡,备选流二:卡里余额不足,备选流三:取款机器没钱……

      2. 场景法在设计测试用例时,都是来源于【基本流和备选流之间组成的不同组合】生成的测试场景,一个场景就是一条测试用例

        注意:一个完整的软件,基本流是固定的,因为基本流是功能业务最明确的体现,所以基本流是一个正确的操作流程或业务流程,没有任何其他错误的情况。备选流是在基本流的操作过程中出现的其他流程和分支(错误)

      3. 场景法用例设计:

        1. 确定基本流和备选流

          image-20230814101450514

          例:根据案例描述,能够确定一个基本流和四个备选流

        2. 根据基本流和备选流的组合生成场景

          例:根据上述案例,生成的场景有:

          ​ 场景一:基本流

          ​ 场景二:基本流+备选流1

          ​ 场景三:基本流+备选流1+备选流2

          ​ 场景四:基本流+备选流3

          ​ 场景五:基本流+备选流3+备选流1

          ​ 场景六:基本流+备选流3+备选流1+备选流2

          ​ 场景七:基本流+备选流3+备选流4

          ​ 场景八:基本流+备选流4

        3. 针对每一个场景设计测试用例(一个场景是一条用例)

        4. 如果有相似的场景,记得去重

          案例分析2:

          用户进入一个在线购物网站进行购物,选购物品后,进行在线购买,这是需要使用账号登录,登录成功后,进行付钱交易,交易成功后,生成订购单,完成整个购物过程。

          根据上述需求,结合场景法设计测试用例(购物功能)

          (1)确定基本流和备选流

          ​ 基本流:进入购物网站—–选择物品——登录账号——付钱——生成订购单

          ​ 备选流:

          ​ 备选流一:账号不存在

          ​ 备选流二:账号密码错误

          ​ 备选流三:卡里余额不足

          ​ 备选流四:卡里没钱

          (2)根据基本流和备选流生成场景

          ​ 场景一(购物成功):基本流

          ​ 场景二(账号不存在):基本流+备选流1

          ​ 场景三(账号密码错误):基本流+备选流2

          ​ 场景四(卡里余额不足):基本流+备选流3

          ​ 场景五(卡里没钱):基本流+备选流4

          (3)根据每一个场景设计测试用例

          image-20230814153742055

    3. 错误推测法

    ​ 思想:是一种【基于经验和直觉】的测试方法,来推测程序中所有可能存在错误的地方,从而更有针对性的设计测试用例:列出程序中所有会存在或出现错误的特殊情况

    ​ 例:针对计算器的除法功能:设计用例:关注一下:除数为0的情况验证

    1. 探索性测试

    image-20230814114736736

    思想:测试人员一边学习和了解软件系统的特性,一边进行测试工作的开展,学习和测试是同步进行,从而了解软件更多的相关信息,从而设计测试用例。

    4、正交实验法
    1. 概述:利用【正交表】对实验进行整体分析,设计、综合比较,实现通过【最少的实验次数找到较好的生产条件】,以达到最优的效果。从大量的实验中,选取具有代表性的实验点,放入到正交表,进行数据分析和实验的实施。

    2. 思想(设计测试用例分析):

      1. 在实验中,把影响实验结果的量称为实验因素/因子,简称“因素/因子”

        解析:在测试中,把影响测试结果的量称为“因素”—–>输入项/输入条件

      2. 在实验中,每个因素所处的不同状态或状况,被称为因素的水平,简称“水平”—–>因素的取值

        解析:在测试中,水平相当于是每个输入项的取值

      3. 利用正交设计助手,生成正交表

        备注:根据因素和水平的个数,选择合适的正交表:L4_2_3:会创建一个3因素2水平的正交表,生成4次实验:L实验次数_水平个数 _因素个数;如果没有合适的正交表,就选择稍大一点的

      4. 正交表中生成的每一个实验,就是一条测试用例

        例:做实验:Word内容进行排版操作,请根据正交实验法,设计测试用例

        第一步:找出影响word内容排版的因素有哪些?

        ​ 字体大小 字体颜色 字体样式

        第二步:确定每个因素的取值(选取一下每个因素的不同状态)

        ​ 字体大小:水平:12 18 36

        ​ 字体颜色:黑色 绿色 紫色

        ​ 字体样式:水平:宋体 黑体 楷体

        补充:3因素3水平:有3个因素点,每个因素点是有3个取值; 4因素5水平:有4个因素点,每个因素点是有5个取值

    3. 正交表特性:

      1. 表中每个列的值出现的次数是一样的,保证每个因素的水平值参与实验几率是一致的

      2. 表中任意两列横向组成的数据对,出现的次数是一样的,保证因素和水平的组合参与实验的概率也是一致的

    4. 典型的应用场景:软件中【设置模块】的测试用例

    练习:利用正交实验助手,完成下列需求的实验生成

    image-20230818154834010

    image-20230830173601546

    image-20230814154252657

    image-20230814154305237

    5、测试大纲法和Monkey测试
    1. 测试大纲法

      思想:主要用于多个窗口,以及每个窗口之间包含的多种操作,这些窗口操作之间又存在一定的联系,为了更清楚窗口与窗口之间的关系,可以借助于测试大纲法。为了列清楚各种测试条件之间的关系,把过程转化成大纲的形式来进行描述。(弄清楚上一步操作和下一步之间的联系,上一个窗口和下一个窗口之间的关系

      应用场景:测试安装、卸载的功能操作;测试窗口之间的跳转关系;它也是着眼于需求的一种测试方法:梳理清楚需求之间的关系

    2. Monkey测试:它是一种没有书面测试用例的测试方法,需要通过一系列的Monkey命令来完成测试,整个测试过程充满随机性。它更偏向于测试程序的稳定性,进行压力测试的一种手段。

      缺点:测试过程往往不真实,会有较多的冗余(重复)的操作,测试的覆盖率很难达标。

    6、测试用例设计方法综合选择策略(重点掌握)
    1. 针对任何有输入项数据的选择操作,必须等价类边界值法。
    2. 如果程序的功能说明中含有输入条件的组合情况,则一开始就要考虑因果图判定表法。
    3. 对于业务流程清晰的系统软件,可以利用场景法贯穿整个测试流程。
    4. 对于参数配置类的软件功能,可以利用正交实验法选择较少的参数组合达到最佳的测试效果。
    5. 利用错误推测法,再追加一些测试用例
    6. 如果用例的设计没有达到测试需求的全面覆盖,需要再补充足够多的测试用例

    回顾

    场景法:基本流(正确,没有任何错误场景)+备选流(各种错误的场景)

    正交实验法:因素+水平

    错误推测法:经验+直觉

    探索性测试:学习和了解软件特性+测试工作

    测试大纲法:安装,卸载功能测试,窗口与窗口之间跳转

    Monkey测试:自动化测试

    重点:测试用例设计方法综合选择策略

  • 相关阅读:
    在c++11 的unordered_set和unordered_map中插入pair或tuple作为键值
    【Linux】权限管理
    优维低代码实践:打包发布
    只分享这一次!阿里软件架构师深入底层手写JDK源码
    1310. 数三角形
    Spring的创建和使用
    蓝桥杯动态规划拿金币
    RT-Thread 组件学习
    现代 React Web 开发实战——kanban实现卡片拖拽
    OpenGL之纹理过滤(Texture Filtering)、MipMap方法、纹理坐标
  • 原文地址:https://blog.csdn.net/qq_44985444/article/details/132587291