白盒测试究竟怎么做
大家好,我是洋子
在进行日常测试的时候,我们大部分时间花在手动的功能测试上,功能测试又可称为手工测试,官方一点的学名叫黑盒测试,当然作为测试工程师,我们一般俗称点点点
黑盒测试是一种软件测试方法,它的主要目的是检查软件的功能和性能,而不考虑软件的内部实现和代码。在黑盒测试中,测试人员不了解软件的内部结构和实现,只能根据软件的需求文档(PRD)、用户手册或其他相关文档,来设计测试用例和执行测试
在进行黑盒测试时,不需要看代码,而是直接根据需求文档编写黑盒测试用例,根据测试用例就可以进行业务测试
在IT行业不断发展过程中,白盒测试逐渐走进了我们的视野
白盒测试是一种软件测试方法,它通过检查和评估软件代码的内部结构和实现细节来测试软件的功能、安全性和稳定性。在白盒测试中,测试人员通常具有软件开发和编程的知识,可以访问代码和系统的内部结构,以检查代码是否符合规范和标准,是否遵循最佳实践和设计原则
对比黑盒测试和白盒测试的最大区别,就是测试工程师能否看到开发写的代码
白盒测试究竟该怎么做,在一直做点点点的同学心里一直是一个谜,其实白盒测试本来在工业界并没有完整的方法论标准
看过许多软件测试相关书籍以及博客,大家了解到的白盒测试理论一般局限在白盒测试的分类以及6种常用白盒测试的覆盖方法
白盒测试的分类
- 静态分析:不需要执行程序代码,就可以进行的测试,例如:Code Review(代码走查)、静态代码扫描
- 动态分析:需要执行程序代码,才可以进行的测试,例如:单元测试,Debug测试,打桩测试等
6种白盒测试的覆盖方法
- 语句覆盖:每条语句至少执行一次
- 判定覆盖:每个判定的每个分支至少执行一次
- 条件覆盖:每个判定的每个条件应取到各种可能的值
- 判定条件覆盖:同时满足判定覆盖条件覆盖
- 条件组合覆盖:每个判定中各条件的每一种组合至少出现一次
- 路径覆盖:使程序中每一条可能的路径至少执行一次
若按照覆盖严格程度来看,语句覆盖< 判定覆盖 < 条件覆盖 < 判定条件覆盖 < 条件组合覆盖 < 路径覆盖,即在这6种覆盖方法中最严格的是路径覆盖,
在这篇文章当中《互联网大厂服务端测试流程》,我对语句覆盖/判定覆盖/条件覆盖,这3种覆盖方法进行了举例探讨,感兴趣可以阅读
看到这里对于新人小白来说,可能就会产生疑问了,做好白盒测试,是不是只要达到最严格的路径覆盖就行
理论能够指导实践,我们可以根据覆盖方法进行白盒测试,但不管是黑盒还是白盒测试,测试的目的都是在有限的测试时间内,尽量发现更多的Bug,而不是追求更加严格的测试覆盖率
做好白盒测试的关键点
那么做好的白盒测试的关键点到底是什么呢,抛出一个观点就是理解代码,换句话说就是能看懂开发写的每一行代码,并定位到有问题的代码行,至于是否要达到白盒测试中的非常严格的覆盖程度是次要的
为什么会这么说,主要是因为看懂代码是发现Bug的最快方式,扫一眼就能知道这里会不会有Bug,当然想拥有这样过眼就能发现问题的能力,需要掌握扎实的计算机基础以及看过几万甚至几十万行代码
另外开发写的代码当中,有的逻辑并没有分支,所以达到语句覆盖就行,个别存在多个分支的情况可以考虑加大覆盖程度,如到达条件覆盖,但达到更高的覆盖率意味着测试时间会拉长
测试是否要去看开发的代码,是一个长久以来比较有争议的话题,持反对意见的同学认为没必要看,公司没要求,自己也看不懂,有问题直接抛给开发
但从目前测试行业来看,以及微服务架构和前后端分离的流行,互联网大厂的测试早已经划分出一种测试角色,叫服务端测试,也称SQA(Server QA),这种工种承接的日常测试工作,基本以接口测试,Code Review,以及后端代码的白盒测试为主,也是目前在测试行业里面发展相对前景较好的岗位
综上,能够看懂代码对于我们测试来说,只有好处没有任何坏处,在就业环境如此差的今天,测试能看懂代码就是一道分水岭
白盒测试举例
从看懂代码语法,再到理解代码,再到定位Bug到代码行,提供修改建议,是一个循序渐进的过程
代码究竟怎么看才能快速发现问题,应该关注哪些测试点,拿一个比较典型的接口来举例子,下面是一段伪代码,描述了一个很常见的业务场景,如果Redis缓存中有数据,则读取Redis当中的数据,没有数据则读取数据库DB里面的数据

如果要测试这段代码,需要检查Redis里面有数据的情况下,是否能正常从Redis当中读取数据。同理,需要检查在Redis没有数据的情况下,能否正常从MySQL当中读取数据
为了便于验证数据,我们可以使用编程语言自带的打印函数,如各大编程语言当中的print函数,PHP当中的var_dump,或者调用代码框架当中已经封装好打印日志函数

测试这段代码的核心关键是在于理清数据流,变量var从哪里来,接下来又会在哪些地方去使用,理清数据流同样也是白盒测试当中的关键点
留一个思考题,假设在测试过程当中,发现Redis里面有数据,但是经过Debug后发现,代码逻辑走到了读取数据库当中的数据,这个问题产生的原因是什么
结束语
在白盒测试当中,理解代码和理清数据流是做好白盒测试两个关键点,至于能够在白盒测试当中发现多少问题,取决于测试工程师对于技术的理解深度
相关文章:
白盒测试究竟怎么做
大家好,我是洋子 在进行日常测试的时候,我们大部分时间花在手动的功能测试上,功能测试又可称为手工测试,官方一点的学名叫黑盒测试,当然作为测试工程师,我们一般俗称点点点 黑盒测试是一种软件测试方法&am…...
EEG微状态的功能意义
导读大脑的瞬时全局功能状态反映在其电场结构上。聚类分析方法一致地提取了四种头表面脑电场结构,这些结构能够最佳地解释自发EEG记录中随时间变化的差异。这四种结构被称为EEG微状态A、B、C和D类,分别与言语/语音、视觉、主观感受-自主加工和注意力重定…...
Python3 - Flask+swift实现单点登录
基于 Flask 和 Redis 实现单设备登录的服务端代码和客户端swift、oc代码: Python flask 实现服务端 from flask import Flask, jsonify, request from redis import Redisapp Flask(__name__) redis_db Redis()# 用户登录接口,验证用户名和密码&#…...
HTML URL
文章目录HTML URLURL - 统一资源定位器常见的 URL SchemeURL 字符编码URL 编码实例HTML URL URL 是一个网页地址。 URL可以由字母组成,如"csdn.net",或互联网协议(IP)地址: 192.168.100.1。大多数人进入网站…...
带你了解ICCV、ECCV、CVPR三大国际会议
文章目录 前言 一、ICCV、ECCV、CVPR是什么? 1.ICCV 2.ECCV 3.CVPR 二、三大会链接及论文下载链接 前言 作为刚入门CV的新人,有必要记住计算机视觉方面的三大顶级会议:ICCV,CVPR,ECCV,统称为ICE。 与其它学术领域不同,计算机科学使用会议而不是期刊作为发表研究成果的主…...
常用的一些代码
今天菜鸟涨工资了,到手估计有8000左右了,有点开心,本来想上一篇就把这篇写了的,但是发现还是分开写比较好! 文章目录自适应js禁止放大播放声音store的使用websocket封装echarts实现渐变swiper常用的陌生方法࿰…...
Python-df.pop()和np.array.shape()属性
1.df.pop() 删除某一列 可以使用这个来删除某一列(不能是多列),只有一个参数,就是列名,可以是str类型,函数返回的是被删除的列,df直接是删除后的df,不需要我们处理。 我们建模时&a…...
多线程并发编程笔记03(小滴课堂)---线程安全性
原子性操作: 这样一段代码。 我们输出一下: 我们发现它的结果和我们想的不太一样。 正常应该输出1000. 这是因为没有保证原子性。 所以我们来加上原子性: 这样就保证了我们的原子性。 接下来我们来细说说这个关键字: 我发现我…...
提升代码质量,使用插件对 java 代码进行扫描检查分析
目录前言一、使用maven-checkstyle-plugin插件1. maven-checkstyle-plugin 介绍2.引入依赖3.使用二、使用 idea 插件1.安装2.使用前言 很多时候我们的代码写的不规范,比如没缩进、参数间没空格、导入的包没用到没删除、方法很长没有进行拆分、 直接对方法参数进行了…...
如何用秒验提升用户体验和转换率?
手机号验证是移动应用开发中常见的需求,它可以用于用户注册、登录、身份认证等场景。目前,市场上主要的手机号验证方式是短信验证码,但这种方式存在一些问题,例如: 延迟:短信验证码需要等待运营商发送和用…...
【新】(2023Q2模拟题JAVA)华为OD机试 - 机器人活动区域
最近更新的博客 华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南华为od机试,独家整理 已参加机试人员的实战技巧本篇题解:机器人活动区域 题目 现有一…...
2023软件测试面试真题宝典大汇总,没收藏的都后悔了
下边是我根据工作这几年来的面试经验,加上之前收集的资料,整理出来350道软件测试工程师 常考的面试题。字节跳动、阿里、腾讯、百度、快手、美团等大厂常考的面试题,在文章里面都有提到。 虽然这篇文章很长,但是绝对值得你点击一…...
十、MyBatis的逆向工程
一、MyBatis的逆向工程 正向工程:先创建java实体类,由框架负责根据实体类生成数据库表。Hibernate是支持正向工程逆向工程:先创建数据库表,由框架负责根据数据库表,反向生成如下资源: Java实体类 Mapper接口 Mapper映射文件 1.创…...
网站是怎么屏蔽脏话的呢:简单学会SpringBoot项目敏感词、违规词过滤方案
一个社区最重要的就是交流氛围与审查违规,而这两者都少不了对于敏感词进行过滤的自动维护措施。基于这样的措施,我们才能基本保证用户在使用社区的过程中,不至于被敏感违规词汇包围,才能够正常的进行发布帖子和评论,享…...
kafka经典面试题
这里写目录标题1.生产者1.1 生产者发送原理1.2 分区有什么好处?1.3 生产消息时, 是如何决定消息落盘到哪个分区的?1.4 生产者如何提高吞吐量1.5 如何保证生产的消息不丢失(能成功落盘)1.6 ack为-1, 就肯定不会丢失数据吗?1.7 生产者重复发送消息的场景1.8 生产者如何保证数据…...
我的CSDN笔记总索引(阅读量降序,代码自动遍历生成HTML5源码)
Python代码用Linux命令行工具crul获取CSDN博文页面源码,Python内置re正则解析出博文笔记信息。 (本文获得CSDN质量评分【xx】)【学习的细节是欢悦的历程】Python 官网:https://www.python.org/ Free:大咖免费“圣经”教程《 python 完全自学…...
修改Windows hosts文件的解决方案
大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…...
愤怒的Spring(三)Idaea Maven搭建Spring并运行项目(超详细,超全)
愤怒的Spring(三) 一、目录结构 环境搭配与上一篇内容一样,详情请看愤怒的Spring(二)Idaea Maven搭建Spring并运行项目(超详细,超全)https://blog.csdn.net/sz710211849/article/d…...
NDK(三):JNIEnv解析
文章目录一、概述二、JNIEnv结构体三、JNINativeInterface结构体3.1 Class操作3.2 反射操作3.3 对象字段 & 方法操作3.4 类的静态字段 & 静态方法操作3.5 字符串操作3.6 锁操作3.7 数组操作3.8 注册和反注册native方法3.9 异常Exception操作3.10 引用的操作3.11 其它四…...
禅道——图文安装及使用教程
👨💻作者简介:练习时长两年半的java博主 📖个人主页:君临๑ 🎞️文章介绍:禅道的2023版安装图文教程 🎁 如果文章对你有用,就点个免费的赞吧👍 目录 一、搜…...
深入理解JavaScript设计模式之单例模式
目录 什么是单例模式为什么需要单例模式常见应用场景包括 单例模式实现透明单例模式实现不透明单例模式用代理实现单例模式javaScript中的单例模式使用命名空间使用闭包封装私有变量 惰性单例通用的惰性单例 结语 什么是单例模式 单例模式(Singleton Pattern&#…...
页面渲染流程与性能优化
页面渲染流程与性能优化详解(完整版) 一、现代浏览器渲染流程(详细说明) 1. 构建DOM树 浏览器接收到HTML文档后,会逐步解析并构建DOM(Document Object Model)树。具体过程如下: (…...
ESP32 I2S音频总线学习笔记(四): INMP441采集音频并实时播放
简介 前面两期文章我们介绍了I2S的读取和写入,一个是通过INMP441麦克风模块采集音频,一个是通过PCM5102A模块播放音频,那如果我们将两者结合起来,将麦克风采集到的音频通过PCM5102A播放,是不是就可以做一个扩音器了呢…...
Spring AI 入门:Java 开发者的生成式 AI 实践之路
一、Spring AI 简介 在人工智能技术快速迭代的今天,Spring AI 作为 Spring 生态系统的新生力量,正在成为 Java 开发者拥抱生成式 AI 的最佳选择。该框架通过模块化设计实现了与主流 AI 服务(如 OpenAI、Anthropic)的无缝对接&…...
Java入门学习详细版(一)
大家好,Java 学习是一个系统学习的过程,核心原则就是“理论 实践 坚持”,并且需循序渐进,不可过于着急,本篇文章推出的这份详细入门学习资料将带大家从零基础开始,逐步掌握 Java 的核心概念和编程技能。 …...
汇编常见指令
汇编常见指令 一、数据传送指令 指令功能示例说明MOV数据传送MOV EAX, 10将立即数 10 送入 EAXMOV [EBX], EAX将 EAX 值存入 EBX 指向的内存LEA加载有效地址LEA EAX, [EBX4]将 EBX4 的地址存入 EAX(不访问内存)XCHG交换数据XCHG EAX, EBX交换 EAX 和 EB…...
实现弹窗随键盘上移居中
实现弹窗随键盘上移的核心思路 在Android中,可以通过监听键盘的显示和隐藏事件,动态调整弹窗的位置。关键点在于获取键盘高度,并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...
Fabric V2.5 通用溯源系统——增加图片上传与下载功能
fabric-trace项目在发布一年后,部署量已突破1000次,为支持更多场景,现新增支持图片信息上链,本文对图片上传、下载功能代码进行梳理,包含智能合约、后端、前端部分。 一、智能合约修改 为了增加图片信息上链溯源,需要对底层数据结构进行修改,在此对智能合约中的农产品数…...
c++第七天 继承与派生2
这一篇文章主要内容是 派生类构造函数与析构函数 在派生类中重写基类成员 以及多继承 第一部分:派生类构造函数与析构函数 当创建一个派生类对象时,基类成员是如何初始化的? 1.当派生类对象创建的时候,基类成员的初始化顺序 …...
sshd代码修改banner
sshd服务连接之后会收到字符串: SSH-2.0-OpenSSH_9.5 容易被hacker识别此服务为sshd服务。 是否可以通过修改此banner达到让人无法识别此服务的目的呢? 不能。因为这是写的SSH的协议中的。 也就是协议规定了banner必须这么写。 SSH- 开头,…...
