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

白盒测试之测试用例设计方法

白盒测试之测试用例设计方法

    • 什么是白盒测试
    • 白盒测试的特点
    • 白盒测试的设计方法
      • 静态设计方法
      • 动态设计方法
        • 语句覆盖
        • 分支(判定)覆盖
        • 条件覆盖
        • 判定条件覆盖
        • 组合覆盖
        • 路径覆盖
        • 总结

什么是白盒测试

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

白盒测试的特点

测试人员需要了解软件的实现;
可以检测代码中的每条分支和路径;
揭示隐藏在代码中的错误;
对代码的测试比较彻底;
实现代码结构上的优化;
白盒测试投入较大,成本高;
白盒测试不验证规格的正确性。

白盒测试的设计方法

静态设计方法

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

动态设计方法

逻辑覆盖法
基本路径测试法

if A and Bthen action1
if C or Dthen action2
语句覆盖

顾名思义就是针对代码语句。我们设计出来的测试用例要保证程序中的每一个语句至少被执行一次
上例中,设计一条测试用例即可: A=true B=true C=true
通常语句覆盖被认为是“最弱的覆盖”,因为它仅仅考虑对代码中的执行语句进行覆盖而没有考虑各种条件和分支,比较难以发现代码中的问题。

分支(判定)覆盖

程序中每个判断的真和假至少经历一次,即判断的真假均被满足

判定是指A and B C or D
条件是指 A B C D

A and Btrue
A and Bfalse
C or Dtrue
C or Dfalse

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

条件覆盖

条件覆盖要求所设计的测试用例能使每个判定的每一个条件都获得可能的取值,即每个条件至少有一次真值和假值。(不考虑组合情况)
第一个判断应考虑到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

判定条件覆盖

2+3
设计的测试用例使得判断中每个条件所有的可能取值至少执行一次(条件覆盖)同时每个判断本身所有的结果也要至少执行一次(判定覆盖)。不难发现判定条件覆兰同时满足判定覆盖和条件覆盖,弥补了两者各自的不足,但是判定条件覆盖并未考虑条件的组合情况。
条件覆盖: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,Aand B=True,Cor D =True)
TestCase2: A=false,B=false, C=false, D=false (条件为False,A and B=False, C or D =False)

组合覆盖

也叫条件组合覆盖,我们设计的测试用例应该使得每个判定中的各个条件的各种可能组台都至少出现一次。显然,满足条件组合覆盖的测试用例一定是满足判定覆盖、条件覆盖和判定条件覆盖的。
针对这个案例,做条件组合覆盖时我们可以设计如下用例:
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

路径覆盖

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

  1. A=true,B=true,C=true,D=true
  2. A=false,B=false,C = false,D=false
  3. A=true,B=true,C=false,D=false
  4. A=false,B=false,C= true,D=true
  5. A=true,B=true,C=false,D=false
总结

以上简单描述了几种不用的白盒测试方法的原则和优劣。在实际的操作中,要正确使用白盒测试的代码覆盖方法,就要从代码分析和代码调研入手,根据调研的结果,可以选择上述方法中的某一种,或者好几种方法的结合,设计出高效的测试用例,尽可能全面地覆盖到代码中的每一个逻辑路径,只有适当的测试方法,才能帮助我们从代码的角度对产品做到最好的测试。
白盒测试的优势:
1、优点
迫使测试人员去仔细思考软件的实现
帮助软件测试人员增大代码的覆盖率,提高代码的质量,发现代码中隐藏的问题
2、缺点
昂贵:系统庞大时,测试开销会非常大;测试人员要求比较高,人才昂贵;
测试基于代码,只能测试开发人员做的对不对,而不能知道设计是否正确,可能会漏掉一些功能需求

相关文章:

白盒测试之测试用例设计方法

白盒测试之测试用例设计方法 什么是白盒测试白盒测试的特点白盒测试的设计方法静态设计方法动态设计方法语句覆盖分支(判定)覆盖条件覆盖判定条件覆盖组合覆盖路径覆盖总结 什么是白盒测试 按照测试方法分类,测试可以分为白盒测试和黑盒测试两种。 白盒测试也称结构…...

在CentOS 7上关闭SELinux

要在CentOS 7上关闭SELinux,可以按照以下步骤进行操作: 临时关闭SELinux(不建议使用): setenforce 0但是这种方式只对当前启动有效,重启系统后会失效。 2. 永久关闭SELinux: vi /etc/selinux…...

基于单片机温湿度PM2.5报警系统

**单片机设计介绍, 基于单片机温湿度PM2.5报警设置系统 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 单片机温湿度PM2.5报警设置系统是一种智能化的环境检测与报警系统。它主要由单片机、传感器、液晶显示屏、蜂鸣器…...

OpenHarmony系统编译环境

1. 推荐系统Ubuntu 2204 2. 必须安装的软件 apt-get install curl build-essential gcc g make ninja-build cmake libffi-dev e2fsprogs pkg-config flex bison perl bc openssl libssl-dev libelf-dev binutils binutils-dev libdwarf-dev u-boot-tools mtd-utils cpio de…...

二十三种设计模式全面解析-职责链模式(Chain of Responsibility Pattern):解放代码责任链,提升灵活性与可维护性

在软件开发中,我们经常面临处理请求或事件的情况。有时候,我们需要将请求或事件依次传递给多个对象进行处理,但又不确定哪个对象最终会处理它。这时候,职责链模式(Chain of Responsibility Pattern)就能派上…...

通过制作llama_cpp的docker镜像在内网离线部署运行大模型

对于机器在内网,无法连接互联网的服务器来说,想要部署体验开源的大模型,需要拷贝各种依赖文件进行环境搭建难度较大,本文介绍如何通过制作docker镜像的方式,通过llama.cpp实现量化大模型的快速内网部署体验。 一、llam…...

JavaScript 异步编程

异步的概念 异步(Asynchronous, async)是与同步(Synchronous, sync)相对的概念。 在我们学习的传统单线程编程中,程序的运行是同步的(同步不意味着所有步骤同时运行,而是指步骤在一个控制流序…...

linux课程第一课------命令的简单的介绍

作者前言 🎂 ✨✨✨✨✨✨🍧🍧🍧🍧🍧🍧🍧🎂 ​🎂 作者介绍: 🎂🎂 🎂 🎉🎉&#x1f389…...

XLua热更新框架原理和代码实战

安装插件 下载Xlua插件:https://github.com/Tencent/xLua 下载完成后,把Asset文件夹下的文件拖入自己的工程Asset中,看到Unity编辑器上多了个Xlua菜单,说明插件导入成功 Lua启动代码 新建一个空场景,场景中什么都不…...

Hive客户端hive与beeline的区别

hive与beeline简介 1、背景2、hive3、beeline4、hive与beeline的关系 1、背景 Hive的hive与beeline命令都可以为客户端提供Hive的控制台连接。两者之间有什么区别或联系吗? Hive-cli(hive)是Hive连接hiveserver2的命令行工具,从Hive出生就一直存在&…...

<MySQL> 什么是数据库索引?数据库索引的底层结构是什么?

目录 一、什么是数据库索引? 1.1 索引的概念 1.2 索引的特点 1.3 索引的适用场景 1.4 索引的使用 1.4.1 创建索引 1.4.2 查看索引 1.4.3 删除索引 二、数据库索引的底层结构是什么? 2.1 数据库中的 B树 长啥样? 2.2 B树为什么适合做数据库索…...

对于koa中间件的理解

洋葱模型 大家都知道koa是洋葱模型,先一层一层通过next往下,之后再回去执行next后面的内容,next即使没写,最后也会进入下一个中间件。 那么什么是ctx呢,ctx顾名思义就是上下文,也就是上一层传给下一层的东…...

分页文件pagefile.sys引出的疑问

现象描述: 磁盘中显示无任何文件,却占用5GB左右的磁盘空间;格式化D盘时提示【此驱动器正在使用中。另一个程序或进程正在使用此驱动器。是否仍要对其进行格式化?】,点击【是】提示【Windows 无法完成格式化。】&#…...

【开题报告】疫苗在线预约小程序的设计与实现

1.选题背景 (1)新冠疫情下的疫苗接种挑战: 针对当前全球范围内的新冠疫情,疫苗接种成为控制疫情蔓延的重要手段。然而,大规模疫苗接种也带来了接种排队、人群聚集等管理难题,为了更好地组织和管理疫苗接种…...

【深度学习实验】注意力机制(二):掩码Softmax 操作

文章目录 一、实验介绍二、实验环境1. 配置虚拟环境2. 库版本介绍 三、实验内容0. 理论介绍a. 认知神经学中的注意力b. 注意力机制: 1. 注意力权重矩阵可视化(矩阵热图)2. 掩码Softmax 操作a. 导入必要的库b. masked_softmaxc. 实验结果 ​ …...

idea运行项目之后一直卡在Writing classes… 解决方案

最近遇到idea里直接运行一个Spring boot项目后,idea一直慢悠悠的parsing java,然后就writing classes,然后就一直卡着不动了,运气好10几分钟能把项目启动起来。 多年的摸鱼经验告诉我,事出反常必有妖,赶紧…...

CentOS7 安装mysql8(离线安装)postgresql14(在线安装)

注:linux系统为vmware虚拟机,和真实工作环境可能有出入,不过正因如此我暴露了NAT转出的IP也没什么大碍 引言 postgresql与mysql目前都是非常受人欢迎的两大数据库,其各有各的优势,初学者先使用简单一张图来说明两者区…...

使用vant list实现订单列表,支持下拉加载更多

在公司项目开发时&#xff0c;有一个需求是实现可以分页的订单列表&#xff0c;由于是移动端项目&#xff0c;所以最好的解决方法是做下拉加载更多。 1.在页面中使用vant组件 <van-listv-model"loading":finished"finished"finished-text"没有更…...

OpenCV快速入门:图像形态学操作

文章目录 前言一、图像形态学基础1.1 背景介绍1.2 像素距离1.2.1 什么是像素距离&#xff1f;1.2.2 常见的像素距离度量方法1.2.3 计算像素距离的代码实现 1.3 图像连通性1.3.1 什么是图像连通性&#xff1f;1.3.2 连通类型1.3.3 连通组件标记1.3.4 连通性在图像处理中的应用 1…...

Scrapy----Scrapy简介

文章目录 概述与应用背景架构和组件功能和特点社区生态概述与应用背景 Scrapy,一个高效、灵活、且强大的Web爬取框架,被广泛应用于数据抓取和网页内容的结构化提取。它是用Python编写的,支持多平台运行,适用于数据挖掘、在线零售信息收集、历史数据存档等多种场景。Scrapy…...

基环树(pseudotree)入门

目录 无向基环树找环&#xff0c;[题目](https://www.luogu.com.cn/problem/P8655)拓扑排序找环并查集找环dfs找环 内向基环树[2876. 有向图访问计数](https://leetcode.cn/problems/count-visited-nodes-in-a-directed-graph/description/)[2127. 参加会议的最多员工数](https…...

nrm的安装以及使用

1&#xff0c;什么是nrm nrm 是一个 npm 源管理器&#xff0c;允许你快速地在 npm源间切换。 什么意思呢&#xff0c;npm默认情况下是使用npm官方源&#xff08;使用npm config ls命令可以查看&#xff09;&#xff0c;在国内用这个源肯定是不靠谱的&#xff0c;一般我们都会…...

Linux:补充一些常用命令

Linux&#xff1a;补充一些常用命令 1. free -h2. df -lh3. du -sh *4. uname -a5. which6. mvn install 编译打包7. find -name *.jar8. cd -9. nohup java -jar *.jar &10. ps -ef|grep java11. netstat -ntlp 1. free -h free 命令显示系统使用和空闲的内存情况&#x…...

Maven编译报错:javacTask: 源发行版 1.8 需要目标发行版 1.8

报错截图&#xff1a; IDEA中的jdk检查都正常设置的1.8一点毛病没有。参考其他帖子链接如下&#xff1a; https://blog.csdn.net/zhishidi/article/details/131480199https://blog.51cto.com/u_16213460/7197764https://blog.csdn.net/lck_csdn/article/details/125387878 逐…...

python批量为视频添加文字水印和图片水印的程序

如题&#xff0c;代码如下&#xff0c;可设置多个图片水印及它们的移动位置 功能为&#xff1a;可以添加多个动态移动的水印&#xff0c;还可以设置水印的大小以及移动速度&#xff0c;也可以增加文字水印&#xff0c;重点是这个是批量执行的&#xff0c;可以对目录下的所有视…...

使用 webpack 打包 express 应用

使用 webpack 打包 express 应用 安装 webpack 依赖 pnpm add webpack webpack-cli -D初始化配置 可以使用命令 webpack init 初始化配置或者直接自己创建 webpack.config.js 文件和增加 npm 脚本&#xff1a; 下面是 npm 脚本 和 webpack.config.js 配置&#xff1a; // G…...

Add the installation prefix of “Qt5“ to CMAKE_PREFIX_PATH or set “Qt5_DIR“解决

修改为Qt5安装目录...

深度学习——(生成模型)DDPM

前置数学知识 1、先验概率和后验概率 先验概率&#xff1a;根据以往经验和分析得到的概率,它往往作为“由因求果”问题中的“因”出现&#xff0c;如 q ( x t ∣ x t − 1 ) q(x_t|x_{t-1}) q(xt​∣xt−1​) 后验概率&#xff1a;指在得到“结果”的信息后重新修正的概率,是…...

uniapp如何使用api相关提示框

uni.showToast&#xff1a;用于显示一条带有图标的提示框。title&#xff1a;提示的内容。icon&#xff1a;图标&#xff0c;可选值包括 success、loading、none。duration&#xff1a;提示框持续时间&#xff08;单位&#xff1a;毫秒&#xff09;&#xff0c;默认为1500。 un…...

在Java代码中指定用JAXB的XmlElement注解的元素的顺序

例如&#xff0c;下面的类RegisterResponse 使用了XmlRootElement注解&#xff0c;同时也使用XmlType注解&#xff0c;并用XmlType注解的propOrder属性&#xff0c;指定了两个用XmlElement注解的元素出现的顺序&#xff0c;先出现flag&#xff0c;后出现enterpriseId&#xff0…...