当前位置: 首页 > news >正文

白盒测试重点复习内容

白盒测试

    • 白盒测试之逻辑覆盖法
      • 逻辑覆盖用例设计方法
        • 1.语句覆盖
        • 2.判定覆盖(分支覆盖)
        • 3.条件覆盖
        • 4.判定条件覆盖
        • 5.条件组合覆盖
        • 6.路径覆盖
    • 白盒测试之基本路径测试法
      • 基本路径测试方法的步骤
        • 1.根据程序流程图画控制流图
        • 2.计算圈复杂度
        • 3.导出测试用例
        • 4.准备测试用例
        • 5.例题
    • 白盒测试总结

按照测试方法,测试可以分为白盒测试黑盒测试两种。

白盒测试也称结构测试或逻辑驱动测试,是把测试对象看作一个透明白色的盒子,测试人员依据程序内部逻辑结构相关信息,设计或选择测试用例,对程序所有逻辑路径进行测试。
所以白盒测试是一种基于代码的测试,测试者必须检查程序的内部结构,从检查程序的逻辑着手,得出测试数据。
白盒测试一般是开发做单元测试用,但是也有是测试自己做的,那么对测试能力要求比较高。

白盒测试之逻辑覆盖法

逻辑覆盖用例设计方法

白盒测试的逻辑覆盖基本方法主要有以下6种,接下来我们就来分析一下每种方法的原理,以及他们之间的区别:

  • 语句覆盖
  • 分支覆盖
  • 条件覆盖
  • 判定条件覆盖
  • 路径覆盖
  • 组合覆盖

强度由低到高:语句覆盖、分支覆盖、条件覆盖、判定条件覆盖、条件组合覆盖、路径覆盖。

接来下的学习我们使用如下案例

if A and B then Action1;
if C or D then Action2;

1.语句覆盖

语句覆盖,顾明思意就是针对代码语句,我们设计出来的测试用例要保证程序中的每一个语句至少被执行一次。

通常语句覆盖被认为是“最弱的覆盖”,因为它仅仅考虑对代码中的执行语句进行覆盖而没有考虑各种条件和分支,比较难以发现代码中的问题。

案例

if A and B then Action1;
if C or D then Action2;

语句覆盖需使得每个语句(本案例中有两个判断语句)都被执行一次,即 A and B = true, C or D = true

上例中,设计一条测试用例即可:A=true B=true C=true

2.判定覆盖(分支覆盖)

判定覆盖(分支覆盖)︰使得程序中每个判断的取真和取假至少经历一次,即判断的真假均被满足。

案例

if A and B then Action1;
if C or D then Action2;

分支覆盖需使得程序中的每个判断(本案例中有两个判断)的取真和取假至少经历一次
A and B == True , Flase
C or D == True , Flase

A and B == True : A = true B = true
A and B == Flase :A = true B = flase
C or D == True : C = true D= flase
C or D == Flase : C = flase D= flase

上例中,两条测试用例即可:
testcase1: A=true,B=true,C= true,D=false
testcase2: A=true,B=false,C = false,D=false.

3.条件覆盖

条件覆盖:条件覆盖要求所设计的测试用例能使每个判定中的每一个条件都获得可能的取值,即每个条件至少有一次真值和假值。(不考虑组合情况)

第一个判断应考虑到 A=true,A=false,B=true,B=false
第二个判断应考虑到 C= true,C= false,D=true,D=false,

所以上例中可以设计测试用例满足下列条件,两条用例:
testcase1 : A=true,B=true,C= true, D=true
testcase2 : A=false,B=false,,C= false,D=false

4.判定条件覆盖

判定条件覆盖,就是我们设计的测试用例可以使得判断中每个条件所有的可能取值至少执行一次(条件覆盖)。同时每个判断本身所有的结果也要至少执行一次(判定覆盖)。
不难发现判定条件覆盖同时满足判定覆盖和条件覆盖,弥补了两者各自的不足,但是判定条件覆盖并未考虑条件的组合情况。
条件覆盖:
A=true,A=false,B=true,B=false
C=true,C = false,D=true,D=false,
判断覆盖:
A and B =True, A and B =False
C or D =True , C or D =False
所以满足条件覆盖和判断覆盖。我们可以设计两条用例:
TestCase1 : A=true,B=true,C=true,D=true(条件都为True,A and B=True,C or D =True)
TestCase2: A=false,B=false,C=false,D=false (条件都为False,A and B=False,C or D =False)

5.条件组合覆盖

组合覆盖也叫做条件组合覆盖,意思是说我们设计的测试用例应该使得每个判定中的各个条件的各种可能组合都至少出现一次。显然,满足条件组合覆盖的测试用例一定是满足判定覆盖、条件覆盖和判定条件覆盖的。

每个判定中的各个条件的各种可能组合都至少出现一次,即:
A - true,flase B - true,flase
C - true,flase D - true,flase

针对这个案例,做条件组合覆盖时我们可以设计如下用例:

TestCase1: A=True,B=True,C=True,D=True
TestCase2: A=True,B=False, C=True,D=False
TestCase3: A=False,B=True,C=False,D=True
TestCase4: A=False,B=False,C=False,D=False

条件组合覆盖能够同时满足判定、条件和判定条件覆盖,覆盖度较高,但是组合覆盖的测试用例数量相对来说也是比较多的。

6.路径覆盖

路径覆盖:要求覆盖程序中所有可能的路径。意思是说我们设计的测试用例可以覆盖程序中所有可能的执行路径。可以对程序进行彻底的测试用例覆盖,但是用例数量会增多很多。所以路径覆盖是最彻底的测试用例覆盖,但实际上可操作性不强。

所以可以设计测试用例满足下列条件:

  1. A=true,B=true,C= true,D=true,
  1. A=false,B=false,C= false。D=false
  2. A=true,B=true,C= false,D=false
  3. A=false,B=false,C= true。D=true
  4. A=true,B=true,C = false,D=false

白盒测试之基本路径测试法

基本路径法:基本路径法是在程序控制流图的基础上,通过分析控制构造的环路复杂性,导出基本可执行路径的集合,从而设计测试用例的方法 。是白盒测试中运用最广泛的方法。

基本路径测试方法的步骤

第一步:画出控制流图

第二步:计算圈复杂度

第三步:导出测试用例

第四步:准备测试用例

1.根据程序流程图画控制流图

image-20230216004600484

根据程序流程图画控制流图的步骤

  • 开始结束不要,先把每一 个节点画成圆圈
  • 将节点上的出入关系补全
image-20230216004622458 image-20230216004856158

2.计算圈复杂度

圈的复杂度:流图中区域的数量对应于环型的复杂度;有以下两种方式计算圈复杂度:

  • 给定流图G的圈复杂度V(G),定义为V(G) = E - N + 2,E是流图中边的数量,N是流图中结点的数量。
  • 给定流图G的圈复杂度V(G),定义为V(G) = P + 1,P是流图G中判定结点的数量。

圈的复杂度就是设计测试用例的个数

3.导出测试用例

4.准备测试用例

5.例题

img

5.1 画控制流图

img

5.2 计算圈复杂度

img

5.3 导出测试用例

根据上面的计算方法,可得出四个独立的路径。(一条独立路径是指,和其他的独立路径相比,至少引入一个新处理语句或一个新判断的程序通路。V(G)值正好等于该程序的独立路径的条数。)

路径1:4-14

路径2:4-6-7-14

路径3:4-6-8-10-13-4-14

路径4:4-6-8-11-13-4-14

根据上面的独立路径,去设计输入数据,使程序分别执行到上面四条路径。

5.4 准备测试用例

为了确保基本路径集中的每一条路径的执行,根据判断结点给出的条件,选择适当的数据以保证某一条路径可以被测试到,满足上面例子基本路径集的测试用例是:

img

白盒测试总结

以上简单描述了几种不用的白盒测试方法的原则和优劣。在实际的操作中,要正确使用白盒测试的代码覆盖方法,就要从代码分析和代码调研入手,根据调研的结果,可以选择上述方法中的某一种,或者好几种方法的结合,设计出高效的测试用例,尽可能全面地覆盖到代码中的每一个逻辑路径,只有适当的测试方法,才能帮助我们从代码的角度对产品做到最好的测试。
白盒测试的优点:

  • 迫使测试人员去仔细思考软件的实现。
  • 帮助软件测试人员增大代码的覆盖率,提高代码的质量,发现代码中隐藏的问题。

白盒测试的缺点:

  • 昂贵:系统庞大时,测试开销会非常大; 测试人员要求比较高,人才昂贵。
  • 测试基于代码,只能测试开发人员做的对不对,而不能知道设计是否正确,可能会漏掉一些功能需求。

适当的测试方法,才能帮助我们从代码的角度对产品做到最好的测试。
白盒测试的优点:

  • 迫使测试人员去仔细思考软件的实现。
  • 帮助软件测试人员增大代码的覆盖率,提高代码的质量,发现代码中隐藏的问题。

白盒测试的缺点:

  • 昂贵:系统庞大时,测试开销会非常大; 测试人员要求比较高,人才昂贵。
  • 测试基于代码,只能测试开发人员做的对不对,而不能知道设计是否正确,可能会漏掉一些功能需求。

相关文章:

白盒测试重点复习内容

白盒测试白盒测试之逻辑覆盖法逻辑覆盖用例设计方法1.语句覆盖2.判定覆盖(分支覆盖)3.条件覆盖4.判定条件覆盖5.条件组合覆盖6.路径覆盖白盒测试之基本路径测试法基本路径测试方法的步骤1.根据程序流程图画控制流图2.计算圈复杂度3.导出测试用例4.准备测试用例5.例题白盒测试总…...

【13】linux命令每日分享——groupadd建立组

大家好,这里是sdust-vrlab,Linux是一种免费使用和自由传播的类UNIX操作系统,Linux的基本思想有两点:一切都是文件;每个文件都有确定的用途;linux涉及到IT行业的方方面面,在我们日常的学习中&…...

《第一行代码》 第十章:服务

一&#xff0c;在子线程中更新UI 1&#xff0c;新建项目&#xff0c;修改布局代码 <RelativeLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"match_parent"android:layout_height"match_parent"&g…...

简单介绍编程进制

十进制 十进制的位权为 10&#xff0c;比如十进制的 123&#xff0c;123 1 * 10 ^ 2 2 * 10 ^ 1 3 * 10 ^ 0。 二进制 二进制的位权为 2&#xff0c;比如十进制的 4&#xff0c;二进制为 100&#xff0c;4 1 * 2 ^ 2 0 * 2 ^ 1 0 *2 ^ 0。 Java7 之前&#xff0c;不支…...

windows忘记开机密码怎么办

windows忘记开机密码怎么办 清除windows登录密码 清除windows登录密码简单方法 开机到欢迎界面时&#xff0c;按CtrlAltDelete两次&#xff0c;跳出帐号窗口&#xff0c;输入用户名&#xff1a;administrator&#xff0c;回车&#xff0c; 或者启动时按F8 选“带命令行的安全…...

SpringCloud:Eureka

目录 一、eureka的作用 二、搭建Eureka服务端 三、添加客户端 四、服务发现 提供者与消费者 服务提供者&#xff1a;一次业务中&#xff0c;被其它微服务调用的服务。&#xff08;提供接口给其它微服务) 服务消费者&#xff1a;一次业务中&#xff0c;调用其它微服务的服…...

如何获取或设置CANoe以太网网卡信息(SET篇)

CAPL提供了一系列函数用来操作CANoe网卡。但是,但是,首先需要明确一点,不管是获取网卡信息,还是设置网卡信息,只能访问CAPL程序所在的节点下的网卡,而不是节点所在的以太网通道下的所有网卡 关于第一张图中,Class节点下,有三个网卡:Ethernet1、VLAN 1.100、VLAN 1.200…...

【软件测试面试题】项目经验?资深测试 (分析+回答) 我不信你还拿不到offer......

目录&#xff1a;导读前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09;前言 在面试过程中&#…...

tensorflow lite简介-移动设备端机器学习

TensorFlow Lite 是一组工具&#xff0c;可帮助开发者在移动设备、嵌入式设备和 loT 设备上运行模型&#xff0c;以便实现设备端机器学习。 支持多平台 支持多种平台&#xff0c;涵盖 Android 和 iOS 设备、嵌入式 Linux 和微控制器。 原理/流程 工作原理或者使用流程就是上面…...

Node.js常用知识

1、什么是 Node.js 【】Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。浏览器是 js 的前端运行环境&#xff0c;node.js 是 js 的后端运行环境。他们都有 V8 引擎&#xff0c;有各自的内置 API 2、fs 文件系统模块 【】fs 模块是 Node.js 官方提供的、用来操作文件…...

踩坑:maven打包失败的解决方式总结

Maven打包失败原因总结如下&#xff1a; 失败原因1&#xff1a;无法使用spring-boot-maven-plugin插件 使用spring-boot-maven-plugin插件可以创建一个可执行的JAR应用程序&#xff0c;前提是应用程序的parent为spring-boot-starter-parent。 需要添加parent的包spring-boot…...

【C++】位图

文章目录位图概念位图操作位图代码位图应用位图概念 boss直接登场&#xff1a; 给40亿个不重复的无符号整数&#xff0c;没排过序。给一个无符号整数&#xff0c;如何快速判断一个数是否在这40亿个数中❓ 40亿个整数&#xff0c;大概就是16GB。40亿个字节大概就是4GB。 1Byt…...

蓝桥杯-考勤刷卡

蓝桥杯-考勤刷卡1、问题描述2、解题思路3、代码实现1、问题描述 小蓝负责一个公司的考勤系统, 他每天都需要根据员工刷卡的情况来确定 每个员工是否到岗。 当员工刷卡时, 会在后台留下一条记录, 包括刷卡的时间和员工编号, 只 要在一天中员工刷过一次卡, 就认为他到岗了。 现在…...

如何利用站内推广和站外推广提高转化率?

在如今的网络时代&#xff0c;拥有一个好的网站是非常重要的。但是&#xff0c;光有一个好的网站是不够的&#xff0c;为了达到我们的目标&#xff0c;需要不断地提高网站的转化率。而在实现这个目标的过程中&#xff0c;站内推广和站外推广是两个非常关键的因素。 站内推广是…...

Java多线程(三)——线程池及定时器

线程池就是一个可以复用线程的技术。前面三种多线程方法就是在用户发起一个线程请求就创建一个新线程来处理&#xff0c;下次新任务来了又要创建新线程&#xff0c;而创建新线程的开销是很大的&#xff0c;这样会严重影响系统的性能。线程池就相当于预先创建好几个线程&#xf…...

Linux命令行安装Oracle19c教程和踩坑经验

安装 下载 从 Oracle官方下载地址 需要的版本&#xff0c;本次安装是在Linux上使用yum安装&#xff0c;因此下载的是RPM。另外&#xff0c;需要说明的是&#xff0c;Oracle加了锁的下载需要登录用户才能安装&#xff0c;而用户是可以免费注册的&#xff0c;这里不做过多说明。 …...

Linux常用命令等

目录 1.Linux常用命令 (1)系统命令 (2)文件操作命令 2.vim编辑器 3.linux系统中,软件安装 (1) rpm 安装,RedHat Package Manager (2)yum 安装 (3)源代码编译安装 1.Linux常用命令 Linux命令是非常多的,对于像嵌入式开发工程师,运维工程师需要掌握的命令是非常多的.对于…...

CEC2014:鱼鹰优化算法(Osprey optimization algorithm,OOA)求解CEC2014(提供MATLAB代码

一、鱼鹰优化算法简介 鱼鹰优化算法&#xff08;Osprey optimization algorithm&#xff0c;OOA&#xff09;由Mohammad Dehghani 和 Pavel Trojovsk于2023年提出&#xff0c;其模拟鱼鹰的捕食行为。 鱼鹰是鹰形目、鹗科、鹗属的仅有的一种中型猛禽。雌雄相似。体长51-64厘米…...

MyBatis底层原理【源码运行时序图】

MyBatis初始化流程&#x1f6f7; 以下代码为例&#x1f389; &#x1f387;可对应源码阅读 MyBatis初始化流程✨ #mermaid-svg-yoG1e8Dnp3UIAOUW {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-yoG1e8Dnp3UIAOU…...

k8s 系列之 CoreDNS 解读

k8s 系列之 CoreDNS CoreDNS工作原理 kuberntes 中的 pod 基于 service 域名解析后&#xff0c;再负载均衡分发到 service 后端的各个 pod 服务中&#xff0c;如果没有 DNS 解析&#xff0c;则无法查到各个服务对应的 service 服务 在 Kubernetes 中&#xff0c;服务发现有几…...

谷歌浏览器插件

项目中有时候会用到插件 sync-cookie-extension1.0.0&#xff1a;开发环境同步测试 cookie 至 localhost&#xff0c;便于本地请求服务携带 cookie 参考地址&#xff1a;https://juejin.cn/post/7139354571712757767 里面有源码下载下来&#xff0c;加在到扩展即可使用FeHelp…...

DockerHub与私有镜像仓库在容器化中的应用与管理

哈喽&#xff0c;大家好&#xff0c;我是左手python&#xff01; Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库&#xff0c;用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...

安宝特方案丨XRSOP人员作业标准化管理平台:AR智慧点检验收套件

在选煤厂、化工厂、钢铁厂等过程生产型企业&#xff0c;其生产设备的运行效率和非计划停机对工业制造效益有较大影响。 随着企业自动化和智能化建设的推进&#xff0c;需提前预防假检、错检、漏检&#xff0c;推动智慧生产运维系统数据的流动和现场赋能应用。同时&#xff0c;…...

java 实现excel文件转pdf | 无水印 | 无限制

文章目录 目录 文章目录 前言 1.项目远程仓库配置 2.pom文件引入相关依赖 3.代码破解 二、Excel转PDF 1.代码实现 2.Aspose.License.xml 授权文件 总结 前言 java处理excel转pdf一直没找到什么好用的免费jar包工具,自己手写的难度,恐怕高级程序员花费一年的事件,也…...

dedecms 织梦自定义表单留言增加ajax验证码功能

增加ajax功能模块&#xff0c;用户不点击提交按钮&#xff0c;只要输入框失去焦点&#xff0c;就会提前提示验证码是否正确。 一&#xff0c;模板上增加验证码 <input name"vdcode"id"vdcode" placeholder"请输入验证码" type"text&quo…...

ios苹果系统,js 滑动屏幕、锚定无效

现象&#xff1a;window.addEventListener监听touch无效&#xff0c;划不动屏幕&#xff0c;但是代码逻辑都有执行到。 scrollIntoView也无效。 原因&#xff1a;这是因为 iOS 的触摸事件处理机制和 touch-action: none 的设置有关。ios有太多得交互动作&#xff0c;从而会影响…...

全志A40i android7.1 调试信息打印串口由uart0改为uart3

一&#xff0c;概述 1. 目的 将调试信息打印串口由uart0改为uart3。 2. 版本信息 Uboot版本&#xff1a;2014.07&#xff1b; Kernel版本&#xff1a;Linux-3.10&#xff1b; 二&#xff0c;Uboot 1. sys_config.fex改动 使能uart3(TX:PH00 RX:PH01)&#xff0c;并让boo…...

Docker 本地安装 mysql 数据库

Docker: Accelerated Container Application Development 下载对应操作系统版本的 docker &#xff1b;并安装。 基础操作不再赘述。 打开 macOS 终端&#xff0c;开始 docker 安装mysql之旅 第一步 docker search mysql 》〉docker search mysql NAME DE…...

Java数值运算常见陷阱与规避方法

整数除法中的舍入问题 问题现象 当开发者预期进行浮点除法却误用整数除法时,会出现小数部分被截断的情况。典型错误模式如下: void process(int value) {double half = value / 2; // 整数除法导致截断// 使用half变量 }此时...

MySQL:分区的基本使用

目录 一、什么是分区二、有什么作用三、分类四、创建分区五、删除分区 一、什么是分区 MySQL 分区&#xff08;Partitioning&#xff09;是一种将单张表的数据逻辑上拆分成多个物理部分的技术。这些物理部分&#xff08;分区&#xff09;可以独立存储、管理和优化&#xff0c;…...