软件测试之白盒测试(超详细总结)

🍅 点击文末小卡片 ,免费获取软件测试全套资料,资料在手,涨薪更快      

白盒测试

白盒测试(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. 疑问代码故障
  11. 简单来说,静态白盒测试就是看代码找bug

动态白盒测试

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

动态白盒测试流程:

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

逻辑覆盖测试

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

代码如图所示:

对应结构图如下:

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

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


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

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

各个覆盖方法的优缺点:

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

数据流测试

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

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

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

程序插桩

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

总结

白盒测试方法基于被测程序的源代码开发测试用例。常见的白盒测试方法有逻辑覆盖、数据流测试、路径分析以及程序插装等。

逻辑覆盖以程序内部的逻辑结构为基础设计测试用例,要求对被测程序的结构作到一定程度的覆盖,如语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、条件组合覆盖及路径覆盖。路径覆盖是最强的逻辑覆盖准则,实际上我们只能有选择地测试程序中某些有代表的性路径。

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

​这些资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!凡事要趁早,特别是技术行业,一定要提升技术功底。

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

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

相关文章

【入门篇】数字统计——多语言版

题目跳转:数字统计 题目解析: 这道题目要求统计在给定范围 [L, R] 内所有整数中数字 2 出现的次数。例如,在范围 [2, 22] 中,数字 2 分别在数 2、12、20、21、22 中出现的次数,最终出现了6次。 题目的输入为两个正…

C++初阶——list

一、什么是list list是一个可以在序列的任意位置进行插入和删除的容器,并且可以进行双向迭代。list的底层是一个双向链表,双向链表可以将它们包含的每个元素存储在不同且不相关的存储位置。通过将每个元素与前一个元素的链接和后一个元素的链接关联起来&…

FlinkSql读取kafka数据流的方法(scala)

我的scala版本为2.12 <scala.binary.version>2.12</scala.binary.version> 我的Flink版本为1.13.6 <flink.version>1.13.6</flink.version> FlinkSql读取kafka数据流需要如下依赖&#xff1a; <dependency><groupId>org.apache.flink&…

力扣 LeetCode 19. 删除链表的倒数第N个结点(Day2:链表)

解题思路&#xff1a; 快慢指针 class Solution {public ListNode removeNthFromEnd(ListNode head, int n) {ListNode dummy new ListNode(-1);dummy.next head;ListNode fast dummy;ListNode slow dummy;for (int i 0; i < n; i) {fast fast.next;}while (fast.ne…

提升法律文书处理效率的秘密武器:开源文档比对工具解析

本篇文章介绍了一款针对律师行业的免费开源文档比对工具&#xff0c;旨在解决法律文档的多版本比对难题。通过逐字、逐句精确比对、语义分析、批量处理等核心功能&#xff0c;该工具可高效识别文本差异&#xff0c;提升文书审查效率并降低错误风险。它支持多种文件格式&#xf…

linux命令详解,openssl+历史命令详解

openssl openssl是一个开源的加密工具包&#xff0c;提供了各种加密、解密、签名、验证等功能 openssl passwd -1 123password表示这个命令用于处理密码相关的操作&#xff0c;-1参数指定使用MD5加密算法对密码“123”进行加密处理。MD5是一种常用的哈希算法&#xff0c;它将…

轻松理解操作系统 - Linux的虚拟文件系统是如何简化我们的使用的?

在前面几期&#xff0c;我们不仅了解了 Linux文件系统 是如何在硬盘等储存介质上保存文件的&#xff1a; 什么是软硬链接 文件的“身份证” - inode 真正储存文件的地方 - 数据块 文件系统的心脏 - 超级块 以及了解了 Linux系统 中具体都有一些什么文件&#xff1a; Linu…

LeetCode【0019】删除链表的倒数第N个结点

本文目录 1 中文题目2 求解方法&#xff1a;虚拟头节点和快慢指针2.1 方法思路2.2 Python代码2.3 复杂度分析 3 题目总结 1 中文题目 给定一个链表&#xff0c;删除链表的倒数第 n 个结点&#xff0c;并且返回链表的头结点。 示例&#xff1a; 链表如上&#xff1a; 输入&a…

【JavaSE】多线程案例---阻塞队列

1. 阻塞队列 阻塞队列是一种特殊的队列&#xff0c;也遵守 " 先进先出 " 的原则。 阻塞队列是一种线程安全的数据结构&#xff0c;并且具有以下特性&#xff1a; 1. 当队列为满时&#xff0c;继续进行入队列操作就会阻塞&#xff0c;直到有其他线程从队列中取走元素…

SQL练习(2)

题源&#xff1a;牛客官网 选择题 假设创建新用户nkw&#xff0c;现在想对于任何IP的连接&#xff0c;仅拥有user数据库里面的select和insert权限&#xff0c;则列表语句中能够实现这一要求的语句是&#xff08;&#xff09; A grant select ,insert on *.* to nkw% B grant…

Hyper-v中ubuntu与windows文件共享

Hyper-v中ubuntu与windows文件共享 前言相关链接第一步--第一个链接第二步--第二个链接测试与验证 前言 关于Hyper-V的共享我搞了好久&#xff0c;网上的很多教程太过冗余&#xff0c;我直接采用最简单的办法吧 相关链接 Hyper-V中Ubuntu 同windows系统共享文件夹-百度经验 …

【TCP零窗口问题】

零窗口问题说明 零窗口问题(Zero Window Problem)是指在TCP连接中,当接收方的接收缓冲区已满时,无法接受新的数据。此时,接收方会向发送方发送一个窗口大小为0的TCP消息,告知其暂停发送数据,直到接收方释放出缓冲区空间。这种情况在高负载或接收方处理能力不足时比较常见…

Oracle OCP认证考试考点详解082系列19

题记&#xff1a; 本系列主要讲解Oracle OCP认证考试考点&#xff08;题目&#xff09;&#xff0c;适用于19C/21C,跟着学OCP考试必过。 91. 第91题&#xff1a; 题目 解析及答案&#xff1a; 关于 Oracle 数据库中的索引及其管理&#xff0c;以下哪三个陈述是正确的&#x…

2445.学习周刊-2024年45周

一片树叶展示了秋天的美 ✍优秀博文 数据仓库如何划分主题域在忙碌的工作中如何保持信息的输入&#xff1f;PC小米妙享安装解锁流转补丁智能数据建设与治理Dataphin对方讲话不要乱插嘴轩师处世之道 ✍实用工具 typing-practice云搭 自动化巡检系统 ✍精彩言论 话说的越快、…

关于解决使用VMWare内的虚拟机无法识别USB问题小结

目录 前言 0. 查看是不是没有开启USB3.0的支持 1. 检查一下是否禁用了VMWare USB服务 2. 无奈之举 前言 笔者今天帮助一位同志解决了VMWare内的虚拟机不识别挂载设备的办法。这里对笔者使用的排查手段做一个总结。 0. 查看是不是没有开启USB3.0的支持 我们的第一件事情就…

【364】基于springboot的高校科研信息管理系统

摘 要 信息数据从传统到当代&#xff0c;是一直在变革当中&#xff0c;突如其来的互联网让传统的信息管理看到了革命性的曙光&#xff0c;因为传统信息管理从时效性&#xff0c;还是安全性&#xff0c;还是可操作性等各个方面来讲&#xff0c;遇到了互联网时代才发现能补上自古…

RN codegen编译报错

react-native codegen 编译报错 error: redefinition of ‘NativeAccessibilityInfoSpecJSI’ class JSI_EXPORT NativeAccessibilityInfoSpecJSI : public JavaTurboModule 解决&#xff1a; codegen不能和项目本身一起编译&#xff0c;先执行./gradlew clean&#xff0c;然…

大数据技术之Hadoop :我是恁爹

就如上图中的技术分类&#xff0c;大数据技术主要解决的就是海量数据的存储和计算问题。 这两个问题的解决方案最先被 Google 被提出&#xff0c;用于解决 Google 搜索引擎海量的网页存储和索引的构建。对应的技术就是日后被人所熟知的 HDFS 和 MapReduce。 不关注大数据的可…

ATAT-mcsqs生成准随机结构(SQS)更新

通常使用第一性原理计算某些多元素占据原胞中同一位置的结构会优先考虑使用准随机结构&#xff08;special quasirandom structure&#xff0c;SQS&#xff09;来进行模拟建模。此篇教程意在整理一个较为简便的操作流程&#xff0c;以供参考。 合金理论自动化工具包(ATAT)1是一…

人际交往中,想要有好人缘,需做到“三要”,做到一个,也是好事

人际交往中&#xff0c;想要有好人缘&#xff0c;需做到“三要”&#xff0c;做到一个&#xff0c;也是好事 在这个世上&#xff0c;每个人都是一座孤岛&#xff0c;但通过人际交往这座桥梁&#xff0c;我们能够彼此相连&#xff0c;共同编织出一张温暖的社会网络。 好人缘&a…