软件测试——白盒测试

news2024/11/27 5:23:55

目录

1.什么是白盒测试

 1.1 白盒测试优缺点

2.白盒测试方法

2.1 静态

2.2 动态

2.2.1 语句覆盖

2.2.2 判断覆盖

2.2.3 条件覆盖

2.2.4 判定条件覆盖

2.2.5 条件组合覆盖

2.2.6 路径覆盖

2.2.7 基本路径测试法(最常使用)


1.什么是白盒测试

白盒测试也称结构测试,透明盒测试。主要用于单元测试阶段,代码和逻辑的测试,重点复杂的测试,是一种测试用例设计方法,不同于黑盒测试,白盒测试是可以看到内部代码如何运作的,可通过测试来检测产品内部是否符合规定正常运行。

 1.1 白盒测试优缺点

优点:代码覆盖率高

缺点:覆盖所有代码路径难度大

           业务功能可能覆盖不全

           测试开销大

2.白盒测试方法

2.1 (先)静态

桌面检查、代码审查、代码走查、代码扫描工具

2.2 动态

逻辑覆盖法:通过对程序逻辑结构的遍历实现程序的覆盖

下方都以这个案例为练习

首先:要画出流程图,比较好理解

2.2.1 语句覆盖

语句覆盖:设计测试用例,使得程序中每条语句至少被执行一次

语句覆盖率 = 被执行过的语句数量/可执行的语句总数

举个案例:

这个案例语句覆盖率是百分百的。

但是当把判断条件从if(x>0 && y>0)变成if(x>0 || y>0)时,

会发现这个数据同样适合逻辑覆盖标准,但显然,这样是不正确的。

2.2.2 判断覆盖

判断覆盖:也叫分支覆盖,设计测试用例,使得程序中的每个判断的”真“和”假“都至少被执行一次

判断覆盖率 = 每个判定的真假值至少出现一次/判断结果的总数

举个案例:

将两个判定 if(x>0 && y>0)和if(magic<0) 分别定义为P1、P2

这个案例判断覆盖率是百分百的。

但是当把判断条件从if(x>0 && y>0)变成if(x>0 || y>0)时,

也会发现这个数据同样适合逻辑覆盖标准,但显然,这样也是不正确的。

2.2.3 条件覆盖

条件覆盖:设计测试用例,使得判定中的每个条件至少有一次取真值,有一次取假值

条件覆盖率 = 每个条件的真价值至少出现一次/条件结果的总数(条件结果 = 判断数 * 条件数)

举个案例:

将if(x>0 && y>0)和if(magic<0) 分别定义为P1、P2

将x>0、y>0、magic<0 分别定义为C1、C2、C3

这个案例条件覆盖率是百分百的。

但是会发现,P1都是F、F,P1为真是没有被覆盖到的

所以条件覆盖不能保证判定覆盖

2.2.4 判定条件覆盖

判定条件覆盖:设计测试用例,使得被测程序中的每个判断本身的判定结果(真假)至少满足一次,每个逻辑条件的可能值也至少被满足一次。就是既满足判断覆盖,也满足条件覆盖。

判断条件覆盖率 =每个判断真假值和条件真假值至少出现一次/(判断结果的总数 + 条件结果的总数)

举个案例:

将if(x>0 && y>0)和if(magic<0) 分别定义为P1、P2

将x>0、y>0、magic<0 分别定义为C1、C2、C3

这个案例判断条件覆盖率是百分百的。

但是当把判断条件从if(x>0 && y>0)变成if(x>0 || y>0)时,

也会发现这个数据同样适合逻辑覆盖标准,但显然,这样是不正确的。

2.2.5 条件组合覆盖

条件组合覆盖:设计测试用例,使得被测程序中的每个判定中条件结果的所有可能组合至少执行一次

条件组合覆盖率 = 条件组合至少出现一次的数量/条件组合的总数

举个案例:

将if(x>0 && y>0)和if(magic<0) 分别定义为P1、P2

将x>0、y>0、magic<0 分别定义为C1、C2、C3

条件组合覆盖能够满足语句覆盖、判定覆盖、条件覆盖、判定条件覆盖

但是条件组合覆盖不能保证所有路径被执行。

2.2.6 路径覆盖

路径覆盖:设计测试用例,覆盖程序中所有可能的路径

路径覆盖率 = 至少被执行过一次的路径数/总的路径数

举个案例:

将if(x>0 && y>0)和if(magic<0) 分别定义为P1、P2

将x>0、y>0、magic<0 分别定义为C1、C2、C3

仔细看出C2为假是没有被覆盖的

路径覆盖可以对程序进行彻底的测试,比前面五种覆盖更广。

但是满足路径覆盖,并不一定能满足条件覆盖,也就不能满足条件组合覆盖

2.2.7 基本路径测试法(最常使用)

基本路径测试法:在程序控制流图的基础上,通过分析程序的环路复杂性,导出基本可执行路径集合,从而设计测试用例

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/781912.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

解决Vue报错unable to resolve dependency tree

目录 一、问题 1.1 问题描述 二、解决 2.1 解决 一、问题 1.1 问题描述 今天在新创建一个项目&#xff0c;也就是在空文件夹里执行Vue脚手架的创建代码&#xff0c;如下 vue create 项目名称 没想到创建报错了&#xff1a;ERESOLVE unable to resolve dependency tree&…

现实生活中机器学习的具体示例(Machine Learning 研习之二)

笔者站点&#xff1a;秋码记录 机器学习在现实中的示例 通过上一篇的讲解&#xff0c;我们多多少少对机器学习&#xff08;Machine Learning&#xff09;有了些许了解&#xff0c;同时也对机器学习&#xff08;Machine Learning&#xff09;一词不再那么抗拒了。 那么&#…

图像处理之傅里叶变换

1、傅里叶变换的定义 傅里叶变换是在以时间为自变量的“信号”与频率为自变量的“频谱”函数之间的某域研究中较复杂的问题在频域中变得简单起来&#xff0c;从而简化其分析过程&#xff1b;另一方面使信号与系统的物理本质在频域中能更好地被揭示出来。当自变量“时间”或“频…

crypto1_中秋月

0x00 前言 CTF 加解密合集&#xff1a;CTF 加解密合集 0x01 题目 自动钥匙⊕明文全大写&#xff0c;得到后转小写&#xff0c;并以_连接单词。fsskryenvkm~jl{ejs}jwflzsnpgmifq{{j{|suhzrjppnx|qvixt~whu0x02 Write Up 首先提示需要异或&#xff0c;进行异或的爆破 s fs…

AJAX-day02-AJAX原理

(创作不易&#xff0c;感谢有你&#xff0c;你的支持&#xff0c;就是我前行的最大动力&#xff0c;如果看完对你有帮助&#xff0c;请留下您的足迹&#xff09; 目录 XMLHttpRequest 了解XMLHttpRequest 使用 XMLHttpRequest XMLHttpRequest - 查询参数 XMLHttpRequest…

linux学成之路(基础篇)(二十二)iscsi服务

目录 前言 一、概述 二、构架iscsi服务 三、targencli 四、实现步骤 一、服务端 配置基础环境 安装 yum install - y targetcli 进入到/backstores/block目录中添加设备到块设备列表 进入到iscsi目录中生成iqn标签 进入到/iscsi/iqn.20...909/tpg1/luns>目录下创…

win10 安装 langchain-chatglm 遇到的问题

win10 安装 langchain-chatglm 避坑指南&#xff08;2023年6月21日最新版本&#xff09;_憶的博客-CSDN博客官网看起来安装很简单&#xff0c;网上教程也是&#xff0c;但实际上我耗费了两天时间&#xff0c;查阅了当前网络上所有可查阅的资料&#xff0c;重复「安装-配置-卸载…

idea中修改Git提交名称【简单快捷】

1、打开idea下面的Terminal框&#xff1b; 输入“git config user.name”&#xff1b; 查看当前名称是否是你想要的&#xff08;既然要修改肯定不是想要的.&#xff09;&#xff1b; 2、修改新名称 再输入“git config --global user.name "新名称"”修改为新值&…

【Java并发编程】线程池ThreadPoolExecutor实战及其原理分析

4 Executor线程池 4.1 概述 线程发生异常&#xff0c;会被移除线程池&#xff0c;但是如果是核心线程&#xff0c;会创建一个新核心线程&#xff1b; 4.1.1 线程池的好处 降低资源消耗 降低了频繁创建线程和销毁线程开销&#xff0c;线程可重复利用&#xff1b; 提高响应…

UE5、CesiumForUnreal实现选中区域地形压平效果

文章目录 1.实现目标2.实现过程2.1 Demo说明2.2 实现过程3.参考资料声明:本篇文章是为某位读者朋友定制开发的功能需求,所以放在了特定的专栏里,其他的朋友可以忽略这篇文章哈! 1.实现目标 基于CesiumForUnreal插件的CesiumPolygonRasterOverlay组件实现选中区域地形压平的…

WPF快速开发(1):静态计算器知识点补充

文章目录 前言WPF介绍 WPF知识点补充&#xff1a;如何开始一个简单的WPF程序新建WPF项目 页面布局Grid:货架布局DockPanel&#xff1a;停靠布局StackPanel/WrapPanel:排列布局UniformGrid&#xff1a;均分宫格布局 控件元素控件通用属性窗口元素 前言 本篇章主要介绍如何使用布…

分布式消息中间件介绍

什么是分布式消息中间件&#xff1f; 对于分布式消息中间件&#xff0c;首先要了解两个基础的概念&#xff0c;即什么是分布式系统&#xff0c;什么又是中间件。 分布式系统 “A distributed system is one in which components located at networked computers communicate an…

Maven的Web项目创建

1.创建动态Web项目 2.把项目转为Maven项目 然后就可在pom.xml中加入自己的依赖

Lua gc 机制版本迭代过程简述

文章目录 内存自动化管理的概念Lua 中的 gc 对象Lua 中内存分配和释放的底层接口Lua 5.0 gc 算法Lua 5.1 gc 算法Lua 5.2 - Lua 5.4 gc 算法参考内容 内存自动化管理的概念 内存自动化管理是指在指定内存不再被需要时可以自动被释放。通常有两种方案来实现内存的自动化管理&am…

FFmpeg时间戳

1. I帧/P帧/B帧 I帧&#xff1a;I帧(Intra-coded picture, 帧内编码帧&#xff0c;常称为关键帧)包含一幅完整的图像信息&#xff0c;属于帧内编码图像&#xff0c;不含运动矢量&#xff0c;在解码时不需要参考其他帧图像。因此在I帧图像处可以切换频道&#xff0c;而不会导致…

康托展开逆康托展开详解(原理+Java实现)

康托展开&逆康托展开详解 康托展开康托展开公式康托展开代码 逆康托展开逆康托展开具体过程尼康托展开代码逆康托的应用 使用场景 康托展开 康托展开是一个全排列到一个自然数的双射&#xff0c;常用于构建哈希表时的空间压缩。 康托展开的实质是计算当前排列在所有由小到大…

【ADS】ADS复制原理图或版图到另一个工程

直接Ctrl CCtrl V无法粘贴 可以先导入要复制的工程 加入工程&#xff0c;复制完后在勾掉工程

RuoYi-VUE : make sure to provide the “name“ option

前言 略 错误 错误原因 theme-picker 组件未被注册。 解决 src/App.vue代码恢复成若依的代码即可。&#xff08;PS&#xff1a;不知道代码被谁修改了&#xff09; 缺少这一段&#xff1a; <script> import ThemePicker from "/components/ThemePicker";…

基础IO与文件系统

全文目录 C语言的文件操作函数系统调用接口openwritereadclose Linux中一切皆文件文件描述符重定向 缓冲区为什么fflush能直接找到缓冲区进行刷新 文件系统 C语言的文件操作函数 参考文章&#xff1a; C语言文件操作【基础知识 顺序读写 文件版通讯录】C语言文件操作收尾【…

FPGA工程中eclipse软件常见的错误

错误一&#xff1a; Unresolved inclusion: "altera_avalon_uart_regs.h" Unresolved inclusion: "system.h"Description Resource Path Location Type Type alt_u8 could not be resolved hello_world.c /UART line 37 Semantic Error描述&#xff1a;这个…