首页 > 其他分享 >《软件测试的艺术》原书第三版 - 第四章 - 测试用例的设计

《软件测试的艺术》原书第三版 - 第四章 - 测试用例的设计

时间:2023-08-05 16:34:39浏览次数:54  
标签:覆盖 等价 测试用例 测试 条件 原书 输入 软件测试

第四章 测试用例的设计

白盒测试

白盒测试关注的是测试用例执行的程度或覆盖程序逻辑结构(源代码)的程度。完全的白盒测试是将程序中每条路径都执行到,然而对一个带有循环的程序来说,完全的路径测试并不切合实际。

逻辑覆盖测试

判定覆盖或分支覆盖是较强一些的逻辑覆盖准则。该准则要求必须编写足够的测试用例,使得每一个判断都至少有一个为真和为假的输出结果。换句话说,也就是每条分支路径都必须至少遍历一次。分支或判定语句的例子包括switch、do-while和if-else语句。

总的来说,对于包含每个判断只存在一种条件的程序,最简单的测试准则就是设计出足够数量的测试用例,实现:(1)将每个判断的所有结果都至少执行一次;(2)将所有的程序入口(例如入口点或ON单元)都至少调用一次,以确保全部的语句都至少执行一次。而对于包含多重条件判断的程序,最简单的测试准则是设计出足够数量的测试用例,将每个判断的所有可能的条件结果的组合,以及所有的入口点都至少执行一次(加入“可能”二字,是因为有些组合情况难以生成)。

黑盒测试

等价划分

确定等价类是选取每一个输入条件(通常是规格说明中的一个句子或短语)并将其划分为两个或更多的组。可以使用图4-3中的表格来进行划分。注意,我们确定了两类等价类:有效等价类代表对程序的有效输入,而无效等价类代表的则是其他任何可能的输入条件(即不正确的输入值)。

img

下面给出了一些指导原则:

  1. 如果输入条件规定了一个取值范围(例如,“数量可以是从1到999”),那么就应确定出一个有效等价类(1<数量<999),以及两个无效等价类(数量<1,数量>999)。
  2. 如果输入条件规定了取值的个数(例如,“汽车可登记一至六名车主”),那么就应确定出一个有效等价类和两个无效等价类(没有车主,或车主多于六个)。
  3. 如果输入条件规定了一个输入值的集合,而且有理由认为程序会对每个值进行不同处理(例如,“交通工具的类型必须是公共汽车、卡车、出租车、火车或摩托车”),那么就应为每个输入值确定一个有效等价类和一个无效等价类(例如,“拖车”)。
  4. 如果存在输入条件规定了“必须是”的情况,例如“标识符的第一个字符必须是字母”,那么就应确定一个有效等价类(首字符是字母)和一个无效等价类(首字符不是字母)。

如果有任何理由可以认为程序并未等同地处理等价类中的元素,那么应该将这个等价类再划分为小一些的等价类。稍后我们将给出这个过程的例子。

生成测试用例

  1. 为每个等价类设置一个不同的编号。
  2. 编写新的测试用例,尽可能多地覆盖那些尚未被涵盖的有效等价类,直到所有的有效等价类都被测试用例所覆盖(包含进去)。
  3. 编写新的用例,覆盖一个且仅一个尚未被涵盖的无效等价类,直到所有的无效等价类都被测试用例所覆盖。

用单个测试用例覆盖无效等价类,是因为某些特定的输入错误检查可能会屏蔽或取代其他输入错误检查。

边界值

经验证明,考虑了边界条件的测试用例与其他没有考虑边界条件的测试用例相比,具有更高的测试回报率。所谓边界条件,是指输入和输出等价类中那些恰好处于边界、或超过边界、或在边界以下的状态。边界值分析方法与等价划分方法存在两方面的不同:

  1. 与从等价类中挑选出任意一个元素作为代表不同,边界值分析需要选择一个或多个元素,以便等价类的每个边界都经过一次测试。
  2. 与仅仅关注输入条件(输入空间)不同,还需要考虑从结果空间(输出等价类)设计测试用例。

然而,我们还是给读者提供一些通用指南:

  1. 如果输入条件规定了一个输入值范围,那么应针对范围的边界设计测试用例,针对刚刚越界的情况设计无效输入测试用例。举例来说,如果输入值的有效范围是-1.0至+1.0,那么应针对-1.0、1.0、-1.001和1.001的情况设计测试用例。
  2. 如果输入条件规定了输入值的数量,那么应针对最小数量输入值、最大数量输入值,以及比最小数量少一个、比最大数量多一个的情况设计测试用例。举例来说,如果某个输入文件可容纳1~255条记录,那么应根据0、1、255和256条记录的情况设计测试用例。
  3. 对每个输出条件应用指南1。举例来说,如果某个程序按月计算FICA[1]的扣除额,且最小金额是$0.00,最大金额为$1165.25,那么应该设计测试用例来测试扣除$0.00和$1165.25的情况。此外,还应观察是否可能设计出导致扣除金额为负数或超过$1165.25的测试用例。注意,检查结果空间的边界很重要,因为输入范围的边界并不总是能代表输出范围的边界情况(例如,三角正弦函数sin的情况就如此)。同样,总是产生超过输出范围的结果也是不大可能的,但无论如何,应该考虑这种可能性。
  4. 对每个输出条件应用指南2。如果某个信息检索系统根据输入请求显示关联程度最高的信息摘要,而摘要的数量从未超过4条,则应编写测试用例,使程序显示0条、1条和4条摘要,还应设计测试用例,导致程序错误地显示5条摘要。
  5. 如果程序的输入或输出是一个有序序列(例如顺序的文件、线性列表或表格),则应特别注意该序列的第一个和最后一个元素。
  6. 此外,发挥聪明才智找出其他的边界条件。

因果图

img
img

约束E表示其必须总为真,而a和b最多只有一个为1(a与b不能同时为1)。

约束I表示其为真时,a、b、c中至少有一个应为1(a、b、c不能同时为0)。

约束O表示a、b中有且仅有一个必须为1。

约束R表示如果a为1,b也必须为1(例如,a为1而b为0的情况是不可能的)。

错误猜测

...略

测试策略

  1. 如果规格说明中包含输入条件组合的情况,应首先使用因果图分析方法。
  2. 在任何情况下都应使用边界值分析方法。应记住,这是对输入和输出边界进行的分析。边界值分析可以产生一系列补充的测试条件,但是,也正如“因果图分析”一节所述,多数甚至全部条件都可以被整合到因果图分析中。
  3. 应为输入和输出确定有效和无效等价类,在必要情况下对上面确认的测试用例进行补充。
  4. 使用错误猜测技术增加更多的测试用例。
  5. 针对上述测试用例集检查程序的逻辑结构。应使用判定覆盖、条件覆盖、判定/条件覆盖或多重条件覆盖准则(最后的一个最为完整)。如果覆盖准则未能被前四个步骤中确定的测试用例所满足,并且满足准则也并非不可能(由于程序的性质限制,某些条件的组合也许是不可能实现的),那么增加足够数量的测试用例,以使覆盖准则得到满足。

标签:覆盖,等价,测试用例,测试,条件,原书,输入,软件测试
From: https://www.cnblogs.com/xor-eq/p/17608126.html

相关文章

  • 软件测试用例设计—场景法解析
    ......
  • 读excel测试用例;登录;做pytest 请求
    1.从excel中读数据 返回【{字典}{字典}】;当传参数时,可以获得对应单元格内容importxlrdimportjsonfromconfigs.configsimportHOSTfromutils.md5importget_md5#在创建excel时,将登录接口的返回结果粘贴到excel时需要“只粘贴文本”#将excel实例化defget_exce......
  • 《软件测试的艺术》原书第三版 - 第三章 - 代码检查、走查与评审
    第三章代码检查、走查与评审发现了一句有趣的话:从内部产生的压力似乎会急剧增长,并产生一个趋势,要“尽可能快地修正这个缺陷”。由于这些压力的存在,程序员在改正某个由基于计算机测试发现的错误时所犯的失误,要比改正早期发现的问题时所犯的失误更多一些。太紧张了?代码检查......
  • 《软件测试的艺术》原书第三版 - 第二章
    第二章软件测试的心理学和经济学即使一个看起来非常简单的程序,其可能的输入与输出组合可达到数百种甚至数千种,对所有的可能情况都设计测试用例是不切合实际的。软件测试的心理学“软件测试就是证明软件不存在错误的过程。”“软件测试的目的在于证明软件能够正确完成其预......
  • 软件测试流程
    引言 在实际的测试工作中,不同的公司有不同的流程,但一般来说,必要的流程都会经历:需求阶段、开发阶段、测试阶段和发布上线几个阶段。各阶段流程图如下:一、需求阶段1.需求文档需求文档的形式要落实到文字上,避免口头描述,方便产品、开发、测试对需求有统一的理解和依据。2.需求评审开......
  • 软件测试|一篇文章带你深入理解SQL约束
    深入理解SQL约束:保障数据完整性和一致性的重要工具SQL约束是在关系型数据库中用于保障数据完整性和一致性的重要工具。本文将深入探讨SQL约束的概念、类型以及应用,以帮助读者更好地理解和使用SQL约束来确保数据库中的数据质量。SQL约束约束(Constraint)是指表的数据列必须强行遵守的......
  • 软件测试 | 数据类型的转换
    Java的数据类型在定义时就已经确定了,因此不能随意转换成其他的数据类型,但Java允许用户有限度地做类型转换处理。数据类型的转换方式可以为“自动类型转换”及“强制类型转换”两种。数据类型的自动转换在程序中已经定义好了数据类型的变量,若要用另一种数据类型表示时,Java会在下列的......
  • 软件测试 | Java中的关键字
    Java中也有许多关键字(也叫保留字),如public、static等,这些关键字不能当做标识符使用。表2-1列出了Java中的关键字,这些关键字并不需要去硬背,因为在程序开发中一旦使用了这些关键字做标识符时,编辑器会自动提示错误。对于以上的关键字,要特别注意的有如下3点:(1)虽然goto、const在Java中并没......
  • 软件测试|SQL中的null值,该如何理解?
    深入理解SQL中的Null值:处理缺失数据的重要概念简介Null值在SQL中是用于表示缺失或未知数据的特殊值。本文将深入探讨Null值的概念、处理方法和注意事项,以帮助读者更好地理解和处理SQL中的缺失数据。在SQL数据库中,Null值是一种特殊的值,用于表示缺失或未知的数据。它与其他具体的数值......
  • 软件测试 | Java程序的注释
    在任何编程语言之中,都存在注释,注释的主要功能是让其他用户可以方便地阅读每段程序,提高程序的可读性,还可以通过注释屏蔽掉一些暂时不用的语句,等需要时直接取消此语句的注释即可,在Java中根据功能的不同,注释主要分为单行注释、多行注释、文档注释3种,下面分别进行介绍。单行注释,就是在......