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

白盒测试究竟怎么做

大家好,我是洋子

在进行日常测试的时候,我们大部分时间花在手动的功能测试上,功能测试又可称为手工测试,官方一点的学名叫黑盒测试,当然作为测试工程师,我们一般俗称点点点

黑盒测试是一种软件测试方法,它的主要目的是检查软件的功能和性能,而不考虑软件的内部实现和代码。在黑盒测试中,测试人员不了解软件的内部结构和实现,只能根据软件的需求文档(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后发现,代码逻辑走到了读取数据库当中的数据,这个问题产生的原因是什么

结束语

在白盒测试当中,理解代码和理清数据流是做好白盒测试两个关键点,至于能够在白盒测试当中发现多少问题,取决于测试工程师对于技术的理解深度

相关文章:

白盒测试究竟怎么做

大家好&#xff0c;我是洋子 在进行日常测试的时候&#xff0c;我们大部分时间花在手动的功能测试上&#xff0c;功能测试又可称为手工测试&#xff0c;官方一点的学名叫黑盒测试&#xff0c;当然作为测试工程师&#xff0c;我们一般俗称点点点 黑盒测试是一种软件测试方法&am…...

EEG微状态的功能意义

导读大脑的瞬时全局功能状态反映在其电场结构上。聚类分析方法一致地提取了四种头表面脑电场结构&#xff0c;这些结构能够最佳地解释自发EEG记录中随时间变化的差异。这四种结构被称为EEG微状态A、B、C和D类&#xff0c;分别与言语/语音、视觉、主观感受-自主加工和注意力重定…...

Python3 - Flask+swift实现单点登录

基于 Flask 和 Redis 实现单设备登录的服务端代码和客户端swift、oc代码&#xff1a; Python flask 实现服务端 from flask import Flask, jsonify, request from redis import Redisapp Flask(__name__) redis_db Redis()# 用户登录接口&#xff0c;验证用户名和密码&#…...

HTML URL

文章目录HTML URLURL - 统一资源定位器常见的 URL SchemeURL 字符编码URL 编码实例HTML URL URL 是一个网页地址。 URL可以由字母组成&#xff0c;如"csdn.net"&#xff0c;或互联网协议&#xff08;IP&#xff09;地址&#xff1a; 192.168.100.1。大多数人进入网站…...

带你了解ICCV、ECCV、CVPR三大国际会议

文章目录 前言 一、ICCV、ECCV、CVPR是什么? 1.ICCV 2.ECCV 3.CVPR 二、三大会链接及论文下载链接 前言  作为刚入门CV的新人,有必要记住计算机视觉方面的三大顶级会议:ICCV,CVPR,ECCV,统称为ICE。 与其它学术领域不同,计算机科学使用会议而不是期刊作为发表研究成果的主…...

常用的一些代码

今天菜鸟涨工资了&#xff0c;到手估计有8000左右了&#xff0c;有点开心&#xff0c;本来想上一篇就把这篇写了的&#xff0c;但是发现还是分开写比较好&#xff01; 文章目录自适应js禁止放大播放声音store的使用websocket封装echarts实现渐变swiper常用的陌生方法&#xff0…...

Python-df.pop()和np.array.shape()属性

1.df.pop() 删除某一列 可以使用这个来删除某一列&#xff08;不能是多列&#xff09;&#xff0c;只有一个参数&#xff0c;就是列名&#xff0c;可以是str类型&#xff0c;函数返回的是被删除的列&#xff0c;df直接是删除后的df&#xff0c;不需要我们处理。 我们建模时&a…...

多线程并发编程笔记03(小滴课堂)---线程安全性

原子性操作&#xff1a; 这样一段代码。 我们输出一下&#xff1a; 我们发现它的结果和我们想的不太一样。 正常应该输出1000. 这是因为没有保证原子性。 所以我们来加上原子性&#xff1a; 这样就保证了我们的原子性。 接下来我们来细说说这个关键字&#xff1a; 我发现我…...

提升代码质量,使用插件对 java 代码进行扫描检查分析

目录前言一、使用maven-checkstyle-plugin插件1. maven-checkstyle-plugin 介绍2.引入依赖3.使用二、使用 idea 插件1.安装2.使用前言 很多时候我们的代码写的不规范&#xff0c;比如没缩进、参数间没空格、导入的包没用到没删除、方法很长没有进行拆分、 直接对方法参数进行了…...

如何用秒验提升用户体验和转换率?

手机号验证是移动应用开发中常见的需求&#xff0c;它可以用于用户注册、登录、身份认证等场景。目前&#xff0c;市场上主要的手机号验证方式是短信验证码&#xff0c;但这种方式存在一些问题&#xff0c;例如&#xff1a; 延迟&#xff1a;短信验证码需要等待运营商发送和用…...

【新】(2023Q2模拟题JAVA)华为OD机试 - 机器人活动区域

最近更新的博客 华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南华为od机试,独家整理 已参加机试人员的实战技巧本篇题解:机器人活动区域 题目 现有一…...

2023软件测试面试真题宝典大汇总,没收藏的都后悔了

下边是我根据工作这几年来的面试经验&#xff0c;加上之前收集的资料&#xff0c;整理出来350道软件测试工程师 常考的面试题。字节跳动、阿里、腾讯、百度、快手、美团等大厂常考的面试题&#xff0c;在文章里面都有提到。 虽然这篇文章很长&#xff0c;但是绝对值得你点击一…...

十、MyBatis的逆向工程

一、MyBatis的逆向工程 正向工程:先创建java实体类&#xff0c;由框架负责根据实体类生成数据库表。Hibernate是支持正向工程逆向工程:先创建数据库表&#xff0c;由框架负责根据数据库表&#xff0c;反向生成如下资源&#xff1a; Java实体类 Mapper接口 Mapper映射文件 1.创…...

网站是怎么屏蔽脏话的呢:简单学会SpringBoot项目敏感词、违规词过滤方案

一个社区最重要的就是交流氛围与审查违规&#xff0c;而这两者都少不了对于敏感词进行过滤的自动维护措施。基于这样的措施&#xff0c;我们才能基本保证用户在使用社区的过程中&#xff0c;不至于被敏感违规词汇包围&#xff0c;才能够正常的进行发布帖子和评论&#xff0c;享…...

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博文页面源码&#xff0c;Python内置re正则解析出博文笔记信息。 (本文获得CSDN质量评分【xx】)【学习的细节是欢悦的历程】Python 官网&#xff1a;https://www.python.org/ Free&#xff1a;大咖免费“圣经”教程《 python 完全自学…...

修改Windows hosts文件的解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…...

愤怒的Spring(三)Idaea Maven搭建Spring并运行项目(超详细,超全)

愤怒的Spring&#xff08;三&#xff09; 一、目录结构 环境搭配与上一篇内容一样&#xff0c;详情请看愤怒的Spring&#xff08;二&#xff09;Idaea Maven搭建Spring并运行项目&#xff08;超详细&#xff0c;超全&#xff09;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 其它四…...

禅道——图文安装及使用教程

&#x1f468;‍&#x1f4bb;作者简介&#xff1a;练习时长两年半的java博主 &#x1f4d6;个人主页&#xff1a;君临๑ &#x1f39e;️文章介绍&#xff1a;禅道的2023版安装图文教程 &#x1f381; 如果文章对你有用&#xff0c;就点个免费的赞吧&#x1f44d; 目录 一、搜…...

告别信号混乱!手把手教你正确处理Qt QLineEdit的编辑完成与回车事件

告别信号混乱&#xff01;手把手教你正确处理Qt QLineEdit的编辑完成与回车事件 在Qt开发中&#xff0c;QLineEdit作为最常用的输入控件之一&#xff0c;其信号处理看似简单却暗藏玄机。许多开发者都曾遇到过这样的困扰&#xff1a;明明只想在用户完成编辑时触发一次验证逻辑&a…...

对比直接使用厂商API,Taotoken在路由容灾上的体验差异

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 对比直接使用厂商API&#xff0c;Taotoken在路由容灾上的体验差异 1. 引言&#xff1a;服务稳定性的现实挑战 在将大模型能力集成…...

【独家首发】DeepSeek-VL与R1在HumanEval上的性能断层:87.3 vs 62.1分,这15.2分差距究竟卡在哪一行代码?

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;DeepSeek-VL与R1在HumanEval上的性能断层现象 HumanEval 是评估代码生成模型逻辑正确性的黄金基准&#xff0c;其测试集由 164 道手写 Python 编程题构成&#xff0c;每题包含函数签名、文档字符串和若…...

你还在迷信AI的回答?2026年,信息主权争夺战已全面打响

一、AI信息乱象&#xff1a;个人与企业的双重困境 &#xff08;一&#xff09;个人用户&#xff1a;深陷“AI虚假陷阱”&#xff0c;决策毫无安全感2026年的今天&#xff0c;AI大模型的“幻觉缺陷”非但没有消失&#xff0c;反而因模型参数膨胀而变得更加隐蔽。用户向豆包询问某…...

ClawRouter:智能流量路由与内容处理工具的设计与实践

1. 项目概述与核心价值 最近在折腾一些网络相关的自动化任务时&#xff0c;发现了一个挺有意思的项目&#xff0c;叫 ClawRouter。乍一看这个名字&#xff0c;可能会联想到“爪子”和“路由器”&#xff0c;感觉像是某种抓取工具和网络设备的结合体。实际上&#xff0c;这个项目…...

LayerDivider:如何用3步将单张插画自动分层为可编辑PSD文件?

LayerDivider&#xff1a;如何用3步将单张插画自动分层为可编辑PSD文件&#xff1f; 【免费下载链接】layerdivider A tool to divide a single illustration into a layered structure. 项目地址: https://gitcode.com/gh_mirrors/la/layerdivider 你是否曾经面对一张精…...

Arm CoreLink CMN-600硬件错误解析与解决方案

1. Arm CoreLink CMN-600硬件错误深度解析在复杂SoC设计中&#xff0c;互连架构的质量直接决定整个系统的稳定性和性能。作为Arm Neoverse平台的核心组件&#xff0c;CoreLink CMN-600&#xff08;Coherent Mesh Network&#xff09;承担着处理器集群、内存控制器和I/O设备之间…...

模拟电路缩放迷思破解:从挑战到协同优化的设计范式转变

1. 模拟电路缩放&#xff1a;一个被误解的“物理定律”在半导体行业里&#xff0c;尤其是数字电路设计工程师和项目经理之间&#xff0c;流传着一个近乎“常识”的观点&#xff1a;模拟电路不能像数字电路那样随着工艺节点进步而有效缩放。这个说法听起来很有道理&#xff0c;毕…...

从临床试验到互联网AB测试:边缘结构模型(MSM)如何解决你的‘时变混杂’难题

从临床试验到互联网AB测试&#xff1a;边缘结构模型如何破解动态混杂困局 当我们在互联网产品中测试一个新功能对用户留存率的影响时&#xff0c;常常会遇到一个棘手的问题&#xff1a;用户的行为会随着时间不断变化。比如&#xff0c;早期接触新功能的用户可能因为新鲜感而产生…...

Sketch Find and Replace终极指南:设计师必备的批量文本替换神器

Sketch Find and Replace终极指南&#xff1a;设计师必备的批量文本替换神器 【免费下载链接】Sketch-Find-And-Replace Sketch plugin to do a find and replace on text within layers 项目地址: https://gitcode.com/gh_mirrors/sk/Sketch-Find-And-Replace 还在为Sk…...