软件测试基础知识 —— 白盒测试

news2025/2/5 0:03:24

白盒测试

白盒测试(White Box Testing)又称结构测试、透明盒测试、逻辑驱动测试或基于代码的测试。白盒测试只测试软件产品的内部结构和处理过程,而不测试软件产品的功能,用于纠正软件系统在描述、表示和规格上的错误,是进一步测试的前提。

白盒测试遵循的四大原则:

  1. 保证一个模块中所有路径至少被测试一次;
  2. 所有逻辑值都要测试真(true)和假(false)两种情况
  3. 检查程序的内部数据结构是否有效;
  4. 检查上、下边界及可操作范围内运行所有循环

静态白盒测试

白盒测试分静态和动态两种,静态测试是指不运行程序,通过人工对程序和文档进行分析与检查。下面是静态白盒测试检查的故障模式。

  1. 内存泄漏的故障(Memory Leak Fault, MLF)
  2. 数组越界故障的故障(Out of Bounds Array Access Fault OBAF)
  3. 使用未初始化变量故障(Uninitialized Variable Fault,UVF)
  4. 空指针使用故障(NULL Pointer Dereference Fault NPDF)
  5. 非法计算类故障(Illegal Computing Fault ILCF)
  6. 死循环结构(Dead Loop Fault DLF)
  7. 资源泄漏(RLF)
  8. 并发故障 (Concurrency Fault)
  9. 安全漏洞故障
  10. 疑问代码故障

简单来说,静态白盒测试就是看代码找bug

动态白盒测试

白盒测试分静态和动态两种,动态测试是指通过运行被测程序,检查运行结果与预期结果的差异,并分析运行效率和健壮性等性能。

动态白盒测试流程:

  1. 选取定义域有效值,或定义域外无效值;(等价类划分思想)
  2. 已选取值决定预期的结果;
  3. 用选取值执行程序;
  4. 执行结果与对已选取值决定预期的结果对比,不吻合程序有错

逻辑覆盖测试

为了满足白盒测试的四大原则,需要使用逻辑覆盖测试法来设计测试用例。逻辑覆盖测试是以程序内部的逻辑结构为基础设计测试用例的方法,首先需要就行代码的结构分析,绘制流程图。

代码如图所示:

对应结构图如下:

注意:圆圈中的数字代表代码的行数

之后进行逻辑覆盖,由于覆盖测试的目标不同,逻辑覆盖又可分为:语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、条件组合覆盖和路径覆盖。

覆盖方法介绍
语句覆盖选择足够多的测试用例,使得程序中的每个可执行语句至少执行一次
判定覆盖通过执行足够的测试用例,使得程序中的每个判定至少都获得一次“真”值和“假”值, 也就是使程序中的每个取“真”分支和取“假”分支至少均经历一次,也称为“分支覆盖”。
条件覆盖设计足够多的测试用例,使得程序中每个判定包含的每个条件的可能取值(真/假)都至少满足一次
判定/条件覆盖设计足够多的测试用例,使得程序中每个判定包含的每个条件的所有情况(真/假)至少出现一次,并且每个判定本身的判定结果(真/假)也至少出现一次。满足判定/条件覆盖的测试用例一定同时满足判定覆盖和条件覆盖
条件组合覆盖通过执行足够的测试用例,使得程序中每个判定的所有可能的条件取值组合都至少出现一次。满足组合覆盖的测试用例一定满足判定覆盖、条件覆盖和判定/条件覆盖
路径覆盖设计足够多的测试用例,要求覆盖程序中所有可能的路径

从表中的介绍可知,从上到下,该方法覆盖的路径越多。其他方法覆盖的路径不全面,那为什么不直接使用路径覆盖?这是由于如果程序中出现了多个判断和多个循环,可能的路径数目将会急剧增长,以至实现路径覆盖不可能。

为了解决上面的问题,出现了基本路径覆盖,它在程序控制流图的基础上,通过分析程序控制流图的环路复杂性,导出基本可执行路径(独立路径)的集合,然后据此设计测试用例。

各个覆盖方法的优缺点:

在实际测试中,即使对于路径数很有限的程序已经做到路径覆盖,仍然不能保证被测试程序的正确性,还需要采用其他测试方法进行补充。

数据流测试

数据流测试分析常常集中于定义/引用异常的缺陷,用于如下三方面测试。

  1. 变量被定义,但是从来没有使用(引用)
  2. 所使用的变量没有被定义
  3. 变量在使用之前被定义两次

早期的数据流测试主要用于检测程序编写时出现的一些警告信息,如“所定义的变量未被使用等”问题,这些问题光靠简单的语法分析器或者是语义分析器是无法检测出来的。

程序插桩

在程序的特定部位插入记录动态特性的语句,最终是为了把程序执行过程中发生的一些重要的历史事件记录下来。例如,记录在程序执行过程中某些变量值的变化情况,变化的范围等。这些插入的语句常常被称为“探测器”或者“探测点”。

总结

  • 白盒测试方法基于被测程序的源代码开发测试用例。常见的白盒测试方法有逻辑覆盖、数据流测试、路径分析以及程序插装等。
  • 逻辑覆盖以程序内部的逻辑结构为基础设计测试用例,要求对被测程序的结构作到一定程度的覆盖,如语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、条件组合覆盖及路径覆盖。路径覆盖是最强的逻辑覆盖准则,实际上我们只能有选择地测试程序中某些有代表的性路径。

如果文章对你有帮助,记得点赞,收藏,加关注。会不定期分享一些干货哦......

END配套学习资源分享

最后: 为了回馈铁杆粉丝们,我给大家整理了完整的软件测试视频学习教程,朋友们如果需要可以自行免费领取 【保证100%免费】

加入我的软件测试交流qq群:110685036免费获取~(同行大佬一起学术交流,每晚都有大佬直播分享技术知识点)

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

在这里插入图片描述

全套资料获取方式:

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

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

相关文章

基于诺亚无人船ROS与Dronekit之间的通信浅析

阿木实验室的诺亚无人船上市已经有一段时间,经过对开发者们的多次调研,我们发现不少开发者都对诺亚无人船的通信实现方式感兴趣,为了帮助大家更好地理解并使用该产品,本期我们将针对诺亚无人船中所使用的linux编程技术以及ROS系统…

2023最新互联网工程师 Java 面试题及答案整理(7 天就能吃透)

现在 Java 面试都只是背答案吗? 不背就通过不了面试,但是现在面试都问原理、问场景!Java 面试题就像我们高考时的文言文,包括古诗词,不背是不可能答出来的!当然了,除了背,还得理解&…

某球中如何驾驶西锐SR-22小飞机在美国大峡谷中穿行

某球中如何驾驶西锐SR-22小飞机在美国大峡谷中穿行 我已经厌烦了无聊的围绕机场的五边飞行了,想飞一趟跨越乡野的转场飞行了。在我常用的飞软SimplePlanes里面,我已经完成取胜了所有的竞速赛道,我想自己创建一个航路想定,最终选择…

帆软Finereport数据分页,分页查询

目标: 在数据集中一次性获取所有数据后,分页查看,导出时导出的所有数据 如图: 实现步骤: 一、在表格中点击第一列数据集的单元格,添加条件属性, 条件属性内容:&A3 % 5 0 公式解…

【Spring框架学习】了解什么是Spring框架?Spring框架有什么用?创建第一个SpringBoot项目

前言: 💞💞今天我们开始学习Spring,这里我们会了解什么是Spring,知道什么是框架,为什么要学Spring框架,框架有什么作用等等。 💟💟前路漫漫,希望大家坚持下去…

pikachu靶场-../../(目录遍历)

目录遍历, 也叫路径遍历, 由于web服务器或者web应用程序对用户输入的文件名称的安全性验证不足而导致的一种安全漏洞,使得攻击者通过利用一些特殊字符就可以绕过服务器的安全限制,访问任意的文件 (可以是web根目录以外的文件),甚至…

客户案例:CACTER邮件安全网关解决餐饮企业邮件安全痛点,有效提升防护!

客户背景 某大型餐饮企业是一家在全国范围内拥有多家连锁店的知名品牌,以优秀的产品和服务质量,严格的质量控制和管理体系,以及开创性的营销策略,赢得了广泛的客户认可和信任。 然而,正因为该企业具有良好的口碑和声誉…

sonar scanner配置

sonar scanner配置 这里记录如何配置sonar scanner扫描C/C项目代码。话不多说,先上官网链接。 文章目录 sonar scanner配置1. 环境1.1 SonarSource Build Wrapper1.2 sonar-scanner 2. 使用2.1 Compilation Database2.2 执行sonar-scanner 3. 注意 1. 环境 对于C…

记录一下CSDN的markdown新功能

新功能目录 CSDN Markdown更新了欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants 创建一个自定义列表如…

什么是原型设计?入门最全讲解指南

原型设计在产品开发和用户体验领域扮演着至关重要的角色,产品经理通过画产品原型图,可以让需求可视化,进而快速测试和验证产品可行性,为后续推动产品研发提供坚实可靠的依据。 本文将深入探讨什么是原型设计,原型设计…

【深度学习】0-1 深度学习相关数学概念的简单总结-线性代数

线性代数 标量(scalar) 标量就是一个单独的数,只具有数值大小,而没有方向,部分有正负之分。一般用小写的变量名称表示,如a、x等。 向量(vector) 一个向量就是一列数,这…

Kubernetes集群添加新集群节点

Kubernetes集群添加新集群节点 添加worker节点 参考文档https://gitee.com/open-hand/kubeadm-ha/blob/release-1.21/docs/02/%E6%B7%BB%E5%8A%A0%20worker%20%E8%8A%82%E7%82%B9.md 添加工作节点与集群安装时初始化工作节点一样,可以在主节点上执行,也可以在要加…

【ArcGIS Pro二次开发】(39):选择面要素并统计面积(含椭球面积)

写在最前面的话: 这个工具的原型是博主学学GIS做的一个工具 ,用于统计当前所选择的面要素的面积,主要是为了解决“亩”的转换,确实是一个很方便好用的工具。大家可移步原贴参观: ArcGIS Pro 加载项(5&…

上线新装ap

1.查找ap型号 1.1视频完整版 1.得到这个ap是在5教汇聚的2/0/8口连着的,且这个口是一个互连口 <NYIST-5#J-QY-HuiJu>dis mac-address 9820-449B-10A0<NYIST-5#J-QY-HuiJu>dis lldp neighbor-information list3.得到5教汇聚的2/0/8口所连接的交换机的ip地址为192.…

直播网站如何实现?

现在的年轻人基本都爱刷 B 站和抖音&#xff0c;空闲时间还喜欢去拉勾教育看看大厂面试、热门技术分享直播&#xff0c;以及各类游戏直播。不知道你有没有思考过&#xff0c;我们每天看到的这么多音视频内容&#xff0c;是如何从采集端&#xff0c;最终呈现到我们的手机 App 上…

华为OD机试真题 JavaScript 实现【Linux 发行版的数量】【2023Q1 100分】

一、题目描述 Linux 操作系统有多个发行版&#xff0c;distrowatch.com 提供了各个发行版的资料。这些发行版互相存在关联&#xff0c;例如 Ubuntu 基于 Debian 只开发而 Mint 又基于 Ubuntu 开发&#xff0c;那么我们认为 Mint 同 Debian 也存在关联。 发行版集是一个或多个…

openEuler 开源汇智赢未来|2023开放原子全球开源峰会 openEuler 论坛成功召开

2023年6月12日&#xff0c;开放原子全球开源峰会OpenAtom openEuler论坛成功召开。论坛以“openEuler汇众智&#xff0c;奔涌向前赢未来”为主题&#xff0c;众多openEuler社区成员、重磅开发者用户以及技术专家参与本次论坛。论坛充分展示了openEuler 社区的最新成果&#xff…

LabVIEW开发呼吸分析系统

LabVIEW开发呼吸分析系统 在日常生活中&#xff0c;许多人都在练习调息法&#xff0c;但大多数人都不知道如何以完美的方式做。不当的做法不会带来适当的结果。一种使用LabVIEW分析呼吸信号的方法&#xff0c;以使人们以完美的方式练习调息。这有助于从业者按照系统指定的说明…

Linux 用yum安装软件提示 cannot find a valid baseurl for repo:base/7/x86_64 的解决方法

文章目录 一、问题原因二、处理方案&#xff1a;1. 编辑修改网卡配置文件2. 在文件末尾&#xff08;或中间&#xff09;追加DNS3. 重启网络4. 验证&#xff0c;安装想要安装的软件 一、问题原因 如下&#xff1a; 出现这个问题是因为yum在安装包的过程中&#xff0c;虽然已经联…

【NOR闪存】MT25TL256BBA8ESF-0AAT 256Mbit、MT25TL01GBBB8ESF-0AAT 1Gbit 16-SOP

器件说明&#xff1a; Micron串行NOR闪存可满足消费电子、工业、有线通信以及计算应用的需求。这些器件采用行业标准封装、引脚分配、命令集和芯片组兼容性&#xff0c;易于为各类设计所采用。这样可节省宝贵的开发时间&#xff0c;同时确保与现有和未来设计的兼容性。 这些串…