《软件测试的艺术》第4章:测试用例的设计-白盒测试

article/2025/9/30 2:43:34

写在前面:原书中包含白盒测试、黑盒测试、错误猜测、测试策略四个小节,涵盖内容较多,因此按章节拆分叙述。

《软件测试的艺术》:

  • 白盒测试--语句覆盖

    语句覆盖的用例设计原则:将程序中的每条语句至少执行一次。

  • 白盒测试--判定覆盖

    判定覆盖的用例设计原则:使得每一个判断都至少有一个为真和为假的输出结果。换句话说,也就是每条分支路径都必须至少遍历一次。

  • 白盒测试--条件覆盖

    条件覆盖的用例设计原则:确保将一个判断中的每个条件的所有可能的结果至少执行一次。

  • 白盒测试--判定/条件覆盖

    判定/条件覆盖的用例设计原则:将一个判断中的每个条件的所有可能的结果至少执行一次,将每个判断的所有可能的结果至少执行一次,将每个入口点都至少调用一次。

  • 白盒测试--多重条件覆盖

    多重条件覆盖的用例设计原则:将每个判定中的所有可能的条件结果的组合,以及所有的入口点都至少执行一次。

  • 覆盖准则的强度

    语句覆盖<判定覆盖<条件覆盖<判定/条件覆盖<多重条件覆盖

为了理解上述不同覆盖原则的区别,使用下面的例子加以说明。

对于上述的例子,不同覆盖原则的用例设计可以描述为:

语句覆盖:

节点1~5都需要至少执行一次;

判定覆盖:

节点3的if()语句Yes和No的结果都需要至少执行一次;

条件覆盖:

节点3的if条件中,b>a和b<=a,a==3和a!=3都需要至少执行一次;

判定/条件覆盖:

节点3的if条件中,b>a和b<=a,a==3和a!=3都需要至少执行一次;节点4和5至少执行一次;

多重条件覆盖:

把节点3的if条件中的每个判断和整个if语句Yes/No结果进行组合:

(1) b>a,a==3,执行节点4;

(2) b<=a,a==3,执行节点5;

(3) b<=a,a!=3,执行节点5;

(4) b>a,a!=3,执行节点5;

总的来说,判定覆盖需要保证每个分支都要执行一次,条件覆盖需要把判断条件中的每个逻辑判断条件为真和假执行一次。

《验证芯发现》:

  • 芯片验证中的随机测试

    《软件测试的艺术》本章节之初,提出如下的观点:一般而言,在所有的方法中效率最低的是随机输入测试,即在所有可能的输入值中随机选取某个子集来对程序进行测试的过程。就发现最多错误的可能性而言,随机选取而产生的测试用例集很少有可能是理想的或接近理想的子集。

    对于上述的观点,笔者很是赞同。首先不能否认芯片随机用例验证的重要性,随机测试能够通过大量的随机,发现很多RTL的代码问题,包括一些极限边界的corner。一些边界corner通过正向的分析很难预见。而且通过随机验证,可以较快达到验证覆盖率收敛,这也正是芯片验证中CDV的魅力所在。

来自:《SystemVerilog验证  测试平台编写指南》

    但不能仅仅依靠随机用例验证,会有"偷懒"的嫌疑。随机验证在解决一些非边界corner的组合覆盖场景,具有较大的优势。在应对某些边界场景的覆盖时,依靠不受约束的完全随机则需要大量的随机用例数量,此时则需要验证人员构造一些定向随机用例,可以加快场景的覆盖,节省验证成本。

  • 芯片验证中的白盒测试

    芯片验证也会存在所谓的白盒验证,但芯片里的"白盒"级别验证,一般来说,并不会通过分析RTL代码的逻辑路径来正向构造用例,至少在验证前中期不会。RTL代码的白盒路径,对验证人员的作用是通过灰盒式的CDV流程体现出来,可以参见下图。

    一般我们会根据模块的业务功能和约束构造黑盒用例,通过随机回归验证,进行覆盖率收集。其中在覆盖率收集和确认时,会体现RTL代码的“白盒逻辑路径”,比如芯片验证的代码覆盖率有:代码行覆盖率(line coverage);条件覆盖率(condition coverage);跳转覆盖率(toggle coverage);分支/路径覆盖率(branch coverage);状态机覆盖率(FSM coverage)。其中代码行覆盖率、条件覆盖率以及分支覆盖率则可以认为和软件测试中的判定覆盖和条件覆盖类似。比如synopsis工具的分支覆盖率如下所示:

参考:https://zhuanlan.zhihu.com/p/240126362

    覆盖率分析中,如果发现某些条件分支没有被覆盖,则需要进行用例增补。在实际的芯片模块中,其中的一条分支或条件,往往并不是直接映射到模块的输入。此时则需要设计验证人员一起(代码覆盖率应该由设计人员确认,还是验证人员,后续可以单独介绍讨论),分析当前未覆盖的逻辑路径对应的业务或者时序场景,进而构造对应的定向随机用例。

    

    如果上述的这种白盒逻辑路径和业务时序场景的映射非常复杂时,增补一条“白盒”用例,准确的说应该是增补一类“白盒用例”后,并不能保证一定能够覆盖当前的逻辑路径,但可以提高覆盖的概率,再对该条定向随机用例,加以大量随机回归测试,可以大大提高验证覆盖率。需要注意的是本节提到的覆盖率是指代码覆盖率,而不是验证中的功能覆盖率,二者有比较大的差别,后续可以单独介绍。


http://chatgpt.dhexx.cn/article/ppMAKp8o.shtml

相关文章

《软件测试的艺术》读后感 Or 读书笔记

《软件测试的艺术》读后感 Or 读书笔记 第一章 一次自评价测试第二章 软件测试的心理学和经济学第三章 代码检查、走查与评审第四章 测试用例的设计第五章 模块&#xff08;单元&#xff09;测试第六章 更高级别的测试第七章 可用性&#xff08;或用户体验&#xff09;测试第八…

软件测试的艺术 学习笔记

文章目录 4.2黑盒测试4.2.1 等价划分4.2.2 边界值分析4.2.3 因果图 4.3 错误猜测4.4 测试策略 5. 模块(单元&#xff09;测试5.1 测试用例设计5.2 增量测试5.3 自顶向下测试与自底向上测试5.3.1 自顶向下的测试5.3.2 自底向上的测试5.3.3 比较 5.4 执行测试 6 更高级别的测试6.…

《软件测试的艺术》第六章 更高级别的测试

《软件测试的艺术》第六章 更高级别的测试 6.0 前言软件开发过程模型 6.1 功能测试6.2 系统测试6.2.1 能力测试6.2.2 容量测试6.2.3 强度测试6.2.4 可用性测试6.2.5 安全性测试6.2.6 性能测试6.2.7 存储测试6.2.8 配置设置6.2.9 兼容性/转换测试6.2.10 安装测试6.2.11 可靠性测…

模块测试(单元测试)——软件测试的艺术

是大型程序测试的第一个步骤【大型程序即超过500条语句的程序】 了解 模块测试是对程序中的单个程序、子程序/过程进行测试的过程【并非对整个程序】&#xff1a; 关注点在较小单元&#xff0c;是一种管理组合的测试元素的手段减轻调试的难度&#xff0c;把错误定位到一个小…

《软件测试的艺术》第1章:一次自评价测试

写在前面&#xff1a; 相比于芯片验证&#xff0c;软件测试有着悠久的历史沉淀和更为完整的生态&#xff0c;和芯片验证在某些方面上几乎有着相同的思路和方法。因此从软件测试的视角出发&#xff0c;重新思考芯片验证的方方面面。第一个系列为《软件测试的艺术》学习。 第一…

9年测试老鸟:Glenford J编写《软件测试的艺术》PDF,高清中文版

内容简介 本书以一次自评价测试开篇&#xff0c;从软件测试的心理学和经济学人手&#xff0c;探讨了代码检查、走查与评审、测试用例的设计、模块(单元)测试、系统测试、调试等主题&#xff0c;以及极限测试、因特网应用系统测试等高级主题&#xff0c;全面展现了作者的软件测…

系统测试——软件测试的艺术

系统测试有着特定的目的&#xff1a;将系统或程序与其初始目标进行比较&#xff0c;给定目标后有两含义&#xff1a; 系统测试不局限于系统&#xff0c;若产品是一个程序&#xff1a;系统测试就是试图说明程序作为一个整体是如何不满足其目标的过程根据定义&#xff0c;若产品…

《软件测试的艺术》重点记录

----定义---- 测试是为发现错误而执行程序的过程。 测试提高了程序的可靠性或质量。 ----测试方法---- 黑盒测试&#xff1a;又称之为数据驱动的测试或输入/输出驱动的测试。 白盒测试&#xff1a;对程序的逻辑结构进行检查&#xff0c;从中获取测试数据。 ----测试的原则…

软件测试的艺术(测试工程师必备基本知识与概念)

目录&#xff1a; 一、黑盒测试与白盒测试&#xff1a; 等价类划分&#xff1a; 一、确定等价类 确定等价类是选取每一个输入条件&#xff08;通常是规格说明中的一个句子或短语&#xff09;并 将其划分为两个或更多的组。可以使用图 4-3 中的表格来进行划分。注意&#xff0…

《软件测试的艺术》第五章 模块(单元)测试

目录 5.0 前言 5.1 测试用例设计 5.2 增量测试 5.3 自顶向下测试和自底向上测试 5.4 执行测试 5.5 小结 5.0 前言 大型的软件程序需要特别的测试对策。在本章中我们会探讨构建大型程序测试的第一个步骤&#xff1a;模块测试&#xff08;单元测试&#xff09;&#xff0c…

软件测试的艺术_读书笔记(一)

软件测试的艺术是测试人员必看书&#xff0c;两年前看这本书给我很多理论和指导&#xff0c;现在重新看&#xff0c;按照个人的理解&#xff0c;整理一些学习笔记。 第一章 软件测试的心理学和经济学 最重要的一句话 &#xff1a; 测试人员的态度比实际测试过程本身更重要 1.…

【读书笔记】-《软件测试的艺术》

2018年10月13日23:24:26 自诩&#xff1a; 因为上一东家工作的原因而接触测试。原本本职是嵌入式软件&#xff0c;因为公司正在风口浪尖的阶段&#xff0c;就是一种小公司要发展成为大公司而经历的那种痛&#xff0c;全公司上下都忙得焦头烂额的这样的背景下&#xff0c;我从软…

《软件测试的艺术》第2章:软件测试的心理学和经济学

软件测试的心理学 书中此部分首先辨析了两个概念&#xff1a;软件测试的定义、成功的测试和不成功的测试。 软件测试的定义&#xff1a; 测试是为发现错误而执行程序的过程&#xff0c;我们应当假设程序是存在bug的&#xff1b;由于证明程序不存在错误的过程是一项看起来不…

《软件测试的艺术》读书笔记

1 一次自评价测试 所谓软件测试&#xff0c;就是一个过程或一系列过程&#xff0c;用来确认计算机代码完成了其应该完成的功能&#xff0c;不执行其不该执行的功能。 2 软件测试的心理学和经济学 2.1 软件测试的心理学 软件测试是为发现错误而执行程序的过程。 2.2 软…

精读-软件测试的艺术之模块测试及更高级别的测试

本文是关于精读书籍《软件测试的艺术》的一些学习笔记和分享 本书共有九章包括测试思想&#xff08;心理&#xff0c;经济&#xff09;&#xff0c;代码检查&#xff0c;测试用例设计&#xff0c;模块测试&#xff0c;更高级别的测试&#xff0c;调试&#xff0c;极限测试和因…

软件测试,浅析这项黑色艺术的难与易

今天给各位同行们带来一本技术好书《软件测试的艺术》&#xff08;原书第3版&#xff09;&#xff0c;让我们一起来赏析这本经典著作吧&#xff01; 本书是国内很多软件测试书籍的首要参考书目&#xff0c;短小精悍的篇幅、深入浅出的内容很适合初学者作为入门首选。同时&…

软件测试执行的艺术

测试执行 测试执行过程 主要任务 确定测试用例的优先级开发测试规程并确定优先级&#xff0c;创建测试数据&#xff0c;同时也可以准备测试用例和设计自动化测试脚本根据测试规程创建测试套件&#xff0c;以提高测试执行的效率确认已经正确搭建的测试环境根据计划的执行顺序&…

《软件测试的艺术》万字笔记

软件测试的心理学和经济学 软件测试人员在测试过程中要有正确的态度&#xff08;愿景&#xff09; 心理学 软件测试的定义需要明确&#xff1a;软件测试的根本应该聚焦到为程序增加价值&#xff0c;让程序变得更加可靠&#xff0c;是找出问题并让问题得到解决的过程 测试是…

《软件测试的艺术》第3章:代码检查、走查与评审

《软件测试的艺术》&#xff1a; 软件开发人员通常不会考虑到的一种测试形式&#xff1a;人工测试。大多数人认为&#xff0c;因为程序是为了供机器执行而编写的&#xff0c;那么也应由机器来对程序进行测试。这种想法是有问题的。人工测试方法在暴露错误方面是很有成效的。实际…

Hash与HashCode

1.hash和hash表 首先看一张来自百度百科的解释 hash是一个函数&#xff0c;该函数中的实现就是一种算法&#xff0c;就是通过一系列的算法来得到一个hash值&#xff0c;hash表就是所有的hash值组成的&#xff0c;有很多种hash函数&#xff0c;也就代表着有很多种算法得到hash值…