什么是白盒测试

news2024/12/28 21:38:48

一、什么是白盒测试

白盒测试又称结构测试逻辑驱动测试基于代码的测试

白盒测试是一种测试用例设计方法,盒子指的是被测试的软件,白盒指的是盒子是可视的,即清楚盒子内部的东西以及里面是如何运作的。

"白盒"法需要测试者了解程序内部逻辑结构,对所有逻辑路径进行测试,也就是说,"白盒"法是“穷举路径测试”。

二、白盒测试的分类

总体上分为静态分析动态分析两大类。

静态分析:不需要执行程序,就可以进行的测试,例如:代码审查、代码扫描

动态分析:需要执行程序,才可以进行的测试,例如:单元测试覆盖测试

三、白盒测试的设计方法

四、白盒测试静态方法

静态方法关注代码是否符合已制定的编码规范、发现潜在的bug或漏洞,更强调开发人员的参与。或者直接交给自动化代码检查工具去做,如SonarQube等

如何开展静态方法,可参考:

白盒测试_静态白盒测试测试方法-CSDN博客

五、白盒测试动态方法

动态方法是白盒测试人员主要参与的环节。

1、逻辑覆盖法

原则:以程序内部的逻辑结构为基础设计测试用例。

逻辑覆盖包括语句覆盖判定覆盖条件覆盖、判定/条件覆盖条件组合覆盖路径覆盖。

以上六种覆盖标准发现错误的能力呈由弱到强变化:

  1. 语句覆盖每条语句至少执行一次。
  2. 判定覆盖每个判定的每个分支至少执行一次。
  3. 条件覆盖每个判定的每个条件应取到各种可能的值。
  4. 判定条件覆盖同时满足判定覆盖条件覆盖。
  5. 条件组合覆盖每个判定中各条件的每一种组合至少出现一次。
  6. 路径覆盖使程序中每一条可能的路径至少执行一次。

之所以六种覆盖标准发现错误的能力有差异,是因为使用每种覆盖标准所设计的测试用例对程序内部逻辑的覆盖率不同。

覆盖率是什么?

覆盖率是用来度量测试完整性的一个指标。

以下图的示例代码为例,分别说明每种覆盖标准的测试覆盖率。

1.1、语句覆盖(SC)

语句覆盖:设计足够多的测试用例,使得运行这些测试用例时,被测程序的每一个语句至少执行一次,其覆盖标准无法发现运算中的逻辑关系错误

示例代码中共有4条可执行语句

设计测试用例执行了3条,语句覆盖率为3/4=75%

1.2、判定覆盖(DC)

判定覆盖:设计足够多的测试用例,使得程序中的每一个判断至少获得一次“真”和一次“假”,即使得程序流程图中的每一个真假分支至少被执行一次

但若程序中的判定是有几个条件联合构成时,未必能发现每个条件的错误。

示例代码中有判定2个,判定结果4个

设计测试用例执行了3个分支,分支覆盖率为3/4=75%

1.3、条件覆盖(CC)

条件覆盖:设计足够多的测试用例,使得运行这些测试用例时,使得判定中的每个条件至少有一次取真值,有一次取假值

但未必能覆盖全部分支。

案例代码中有判定2个,条件3个,条件结果6个

设计测试用例执行了5个条件结果,条件覆盖率为5/6=83%

1.4、判定/条件覆盖(DCC)

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

即同时满足100%判定覆盖100%条件覆盖的标准。

示例代码中有判定2个,条件3个,判定结果4个,条件结果6个

设计测试用例执行了3个判定结果,5个条件结果,判定条件覆盖率为:(3+5)/(4+6)=80%

1.5、条件组合覆盖(BCCC)

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

显然,满足“条件组合覆盖”的测试用例是一定满足“判定覆盖”、“条件覆盖”和“判定/条件覆盖”的。

示例代码中有判定2个,条件3个(判定1有2个条件,判定2有1个条件),判定1的条件组合为4个,判定2的条件组合为2个

设计测试用例执行了5个条件组合,条件组合覆盖率为:5/(4+2)=83%

1.6、路径覆盖

路径覆盖:设计足够多的测试用例,覆盖被测试程序中的所有可能路径,是最强的覆盖准则。

案例代码中共有4条路径

设计测试用例执行了3条路径,路径覆盖率为3/4=75%

2、基本路径测试法

理想情况下,路径覆盖需要覆盖程序中所有可能的路径。但在路径数目很大时,真正做到完全覆盖是很困难的,

必须把覆盖路径数目压缩到一定限度。例如程序中的循环体只执行一次

所以,基本路径测试法可以理解为压缩后的路径覆盖。

基本路径测试法如何操作?

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

程序的控制流图:描述程序控制流的一种图示方法

程序环路复杂度:McCabe复杂性度量。从程序的环路复杂性可导出程序基本路径集合中的独立路径条数。

导出测试用例:根据圈复杂度和程序结构设计用例数据输入和预期结果。

准备测试用例:确保基本路径集中的每一条路径的执行。

步骤:

六、白盒测试的特点

展开:

1. 优点

  • 可以检测代码中的每条分支和路径
  • 揭示隐藏在代码中的错误
  • 对代码的测试比较彻底
  • 让软件最优化

2. 缺点

  • 投入成本高昂
  • 覆盖所有代码路径难度大
  • 不能替代集成测试 

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

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

相关文章

图形 2.6 伽马校正

伽马校正 B站视频:图形 2.6 伽马校正 文章目录 伽马校正颜色空间传递函数 Gamma校正校正过程为什么需要校正?CRT与转换函数 为什么sRGB在Gamma 0.45空间? 人对亮度的敏感韦伯定律中灰值 线性工作流不在线性空间下进行渲染的问题统一到线性空…

Android setContentView执行流程(一)-生成DecorView

Android setContentView执行流程(一)-生成DecorView Android setContentView执行流程(二)-将布局添加到mContentParent setContentView的流程主要就是讲在Activity的onCreate方法中调用setContentView方法之后,我们自定义的xml文件加载的过程,学习它可以…

【计算机网络】【网络层】【习题】

计算机网络-网络层-习题 文章目录 13. 图 4-69 给出了距离-向量协议工作过程,表(a)是路由表 R1 初始的路由表,表(b)是相邻路由器 R2 传送来的路由表。请写出 R1 更新后的路由表(c)。…

图像处理实验四(Adaptive Filter)

一、Adaptive Filter简介 自适应滤波器(Adaptive Filter)是一种能够根据输入信号的统计特性自动调整自身参数以达到最佳滤波效果的滤波器。它广泛应用于信号处理领域,如信道均衡、系统识别、声学回波抵消、生物医学、雷达、波束形成等模块。 …

typedef 与 extern 的结合:一场误解的澄清

typedef 与 extern 的结合:一场误解的澄清 一、typedef 的基本用法二、extern 的基本用法三、typedef 与 extern 的结合:一场误解的澄清示例二:使用 extern 声明外部变量示例三:错误的用法:尝试在 typedef 中使用 extern四、总结在C语言编程的世界里,typedef和extern是两…

Qt_day5_常用类

常用类 目录 1. QString 字符串类(掌握) 2. 容器类(掌握) 2.1 顺序容器QList 2.2 关联容器QMap 3. 几种Qt数据类型(熟悉) 3.1 跨平台数据类型 3.2 QVariant 统一数据类型 3.3 QStringList 字符串列表 4. QD…

HashMap的put流程知道吗

HashMap 的 put 方法算是 HashMap 中比较核心的功能了,复杂程度高但是算法巧妙,同时在上一版本的基础之上优化了存储结构,从链表逐步进化成了红黑树,以满足存取性能上的需要。本文逐行分析了 put 方法的执行流程,重点放…

鸿蒙UI开发——实现环形文字

1、背 景 有朋友提问:您好关于鸿蒙UI想咨询一个问题 如果我想实现展示环形文字是需要通过在Text组件中设置transition来实现么,还是需要通过其他方式来实现。 针对这位粉丝朋友的提问,我们做一下解答。 2、实现环形文字效果 ❓ 什么是环形…

保存pytest的执行日志;在日志中显示当前是第几次执行

1、在本地保存执行日志: 在终端中执行时因为指定了-s参数,所以会打印相关信息,可以帮助我们后续定位问题: 但是显示在终端时后面无法查看,所以需要把执行日志保存在本地,使用tee 或 重定向符号>&#x…

2024年8个最佳在线websocket调试工具选择

精选了 8 款功能强大且易于使用的 WebSocket 测试工具: 工具名称支持的系统是否免费ApifoxWindows, Mac, Linux是WebSocket KingWindows, Mac, Linux是PostmanWindows, Mac, Linux是Socket.IO Test ClientWindows, Mac, Linux是InsomniaWindows, Mac, Linux是Wires…

H5流媒体播放器EasyPlayer.js播放器wasm编译打包之后报uncaught referenceErro的原因排查

EasyPlayer.js H5播放器,是一款能够同时支持HTTP、HTTP-FLV、HLS(m3u8)、WS、WEBRTC、FMP4视频直播与视频点播等多种协议,支持H.264、H.265、AAC、G711A、Mp3等多种音视频编码格式,支持MSE、WASM、WebCodec等多种解码方…

初识算法 · 位运算(2)

目录 前言: 判定字符是否唯一 丢失的数字 比特位计数 只出现一次的数字III 前言: ​本文的主题是位运算,通过四道题目讲解,一道是判断字符是否唯一,一道是只出现一次的数字III,一道是比特位计数&…

丹摩征文活动 | 丹摩智算平台:服务器虚拟化的璀璨明珠与实战秘籍

丹摩DAMODEL|让AI开发更简单!算力租赁上丹摩! 目录 一、引言 二、丹摩智算平台概述 (一)平台架构 (二)平台特点 三、服务器虚拟化基础 (一)虚拟化的概念 &#xf…

[Docker#6] 镜像 | 常用命令 | 迁移镜像 | 压缩与共享

目录 Docker 镜像是什么 生活案例 为什么需要镜像 镜像命令详解 实验 1.一些操作 1. 遍历查看镜像 2. 查看镜像仓库在本地的存储信息 进入镜像存储目录 查看 repositories.json 文件 3. 镜像过滤 4. 下载镜像时的分层 实战一:离线迁移镜像 实战二&…

信用租赁系统的灵活配置与智能化管理助力租赁市场发展

内容概要 在现代租赁市场中,信用租赁系统就像一把金钥匙,打开了灵活配置与智能化管理的大门。首先,让我们看看它是如何运作的。这个系统允许用户根据自身需求自定义设备类型和信用分比例,不同租赁形式的选择使得整个过程更加个性…

Java基于SpringBoot+Vue框架的宠物寄养系统(V2.0),附源码,文档

博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇…

游戏引擎学习第四天

视频参考:https://www.bilibili.com/video/BV1aDmqYnEnc/ BitBlt 是 Windows GDI(图形设备接口)中的一个函数,用于在设备上下文(device context, DC)之间复制位图数据。BitBlt 的主要用途是将一个图像区域从一个地方复…

OpenGL ES 文字渲染进阶--渲染中文字体

旧文 OpenGL ES 文字渲染方式有几种? 一文中分别介绍了 OpenGL 利用 Canvas 和 FreeType 绘制文字的方法。 无论采用哪种方式进行渲染,本质上原理都是纹理贴图:将带有文字的图像上传到纹理,然后进行贴图。 渲染中文字体 利用 Canvas 绘制中文字体和绘制其他字体在操作方式上…

T265相机双目鱼眼+imu联合标定(全记录)

最近工作用到t265,记录一遍标定过程 1.安装驱动 首先安装realsense驱动,因为笔者之前使用过d435i,装的librealsense版本为2.55.1,直接使用t265会出现找不到设备的问题,经查阅发现是因为realsense在2.53.1后就不再支持…

python数据分析|二 IPython和JupyterNotebooks

一 python 解释器 Python解释器同一时间只能运行一个程序的一条语句。 如何适用: win r cmd 要退出Python解释器返回终端,可以输入 exit() 或 Ctrl-D。 假设创建了一个 hello_world.py 文件,它的内容是: 可以用下面的命令运…