白盒测试、黑盒测试、灰盒测试

news2024/12/22 18:31:08

根据被测对象的不同,软件测试可以分为白盒测试、黑盒测试、灰盒测试三种方式。那么,这三种测试测试方式具体是如何运行的?各有什么特点?下面,跟着小厚一起了解一下吧!

01

白盒测试

●概念:

➢ 白盒测试是依据被测软件分析程序内部构造,并根据内部构造设计用例,来对内部控制流程进行测试,可完全不顾程序的整体功能实现情况。

➢ 白盒测试是基于程序结构的逻辑驱动测试。

➢ 白盒测试又可以被称为玻璃盒测试、透明盒测试、开放盒测试、结构化测试、逻辑驱动测试。

●目的:

➢ 白盒测试一般在测试前期进行,通过达到一定的逻辑覆盖率指标,使得软件内部逻辑控制结构上的问题能基本得到消除。

➢ 白盒测试能保证内部逻辑结构达到一定的覆盖程度,能够给予软件代码质量更大的保证。

➢ 白盒测试发现问题后解决问题的成本较低。

●常用技术:

➢ 静态分析:包括控制流分析、数据流分析、信息流分析。

➢ 动态分析:逻辑覆盖测试(分支测试、路径测试等)、程序插装等。

• 逻辑覆盖测试根据覆盖的对象不同,可以分为:语句覆盖、判定(分支)覆盖、条件覆盖、判定条件覆盖、条件组合覆盖、路径覆盖。

• 程序插装指调试程序时,在程序中插入一些打印语句,程序执行时打印出我们关心的信息,通过这些信息了解执行过程中程序的一些动态行为。

●特点:

➢ 测试人员需要了解软件的实现,可以检测代码中的每条分支和路径,对代码的测试比较彻底。

➢ 揭示隐藏在代码中的错误,实现代码结构上的优化。

➢ 投入较大,成本高。

➢ 无法检测代码中遗漏的路径和数据敏感性错误。

➢ 不验证规格的正确性。

02

黑盒测试

●概念:

➢ 黑盒测试把被测对象看成一个黑盒,只考虑其整体特性,不考虑其内部具体实现。

➢ 黑盒测试针对的被测对象可以是一个系统、一个子系统、一个模块、一个子模块、一个函数等。

➢ 黑盒测试又可以被称为基于规格的测试。

常见的黑盒测试类型:

➢ 功能测试:一种是顺序测试每个程序特性或功能,另一种途径是一个模块一个模块的测试,即每个功能在其先调用的地方被测试。

➢ 容量测试:检测软件在处理海量数据时的局限性,能发现系统效率方面的问题。

➢ 负载测试:检测系统在一个很短时间内处理一个巨大的数据量或执行许多功能调用上的能力。

➢ 异常测试:主要保证系统在崩溃后能够恢复外部数据的能力。 

常用的黑盒测试方法:

➢ 等价类划分法、边界值分析法、因果图分析法、判定表法、状态迁移法等。

●特点:

➢ 对于更大的代码单元来说(子系统甚至系统级)比白盒测试效率要高。

➢ 测试人员不需要了解实现的细节,包括特定的编程语言。

➢ 从用户的视角进行测试,很容易被大家理解和接受。

➢ 有助于暴露任何规格不一致或有歧义的问题。

➢ 如果没有清晰的需求规格说明书,测试用例很难设计。

➢ 不能控制内部执行路径,会有很多内部程序路径没有被测试到。

03

灰盒测试

● 利用被测对象的整体特性信息,采用黑盒测试方法。

● 利用被测对象的内部具体实现信息,采用白盒测试方法。

● 如果既利用被测对象的整体特性信息,又利用被测对象的内部具体实现信息,采用的就是灰盒测试方法。两种信息占的比例不同,相应的灰度就不同。

● 完全是整体特性信息,就是黑盒测试,完全是内部具体实现信息,就是白盒测试。

● 灰盒测试多用于集成测试阶段,不仅关注输入、输出的正确性,同时也关注程序内部的情况。

【案例】PDA闹钟事件的测试

背景描述:闹钟是PDA(Personal Digital Assistant)上的一个应用程序,它的主要功能就是在用户设置的时间点到达时,进行响铃提醒。响铃时,无论用户当前在做什么操作,会弹出一个响铃提示界面。

提出问题:一天,负责测试此模块的工程师小叶提出一个问题“闹铃事件优先级高,在所有应用程序界面、对话框或提示框上面都会弹出,黑盒测试需要进入所有情况的用户界面,然后等待闹钟事件的发生,才能全面验证到各种情况的用户使用场景。”但这样穷举测试,需耗的时间太多,效果也并不一定好。

分析问题:关于闹钟的应用,实际上该模块只提供了一个接口。如能从代码角度分析到所有其他模块调用的是同一个闹铃接口函数(对于响铃及停止响铃后对原界面的恢复,都是统一一个接口处理的),那么再通过黑盒功能测试,在某一个用户界面进行此响铃功能的验证,即可证明代码的实现是符合需求的,这正是灰盒测试的方法。

解决问题:后来,对于闹铃功能点的系统验证,采用了灰盒测试的方法,做了代码正向、逆向分析,结合功能性用户场景进行验证,节省了近2/3的测试时间。

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

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

相关文章

网络安全入门必学内容

随着时代的发展,经济、社会、生产、生活越来越依赖网络。而随着万物互联的物联网技术的兴起,线上线下已经打通,虚拟世界和现实世界的边界正变得模糊。这使得来自网络空间的攻击能够穿透虚拟世界的边界,直接影响现实世界的安全。 网…

2023最新网络安全面试题大全,看完这篇你的秋招offer就到手了!

前言 随着国家政策的扶持,网络安全行业也越来越为大众所熟知,想要进入到网络安全行业的人也越来越多。 为了拿到心仪的 Offer 之外,除了学好网络安全知识以外,还要应对好企业的面试。 作为一个安全老鸟,工作这么多年…

【unity小技巧】常用的方法属性和技巧汇总

学习目标: 最近学习过程经常遇到一些好的方法属性和技巧,但是很容易忘记,单内容都比较少,又不至于开一篇文章单独讲解各个用法,特此单独写一篇做汇总,好记性不如烂笔头,后面收获一些新的知识我还…

基于kubesphere的k8s环境部署单点版本的rook-ceph

文章目录 前言一、rook-ceph是什么?二、开始部署1.环境准备2.软件包准备3.下载rook-ceph文件4. 部署operator5.创建ceph集群6.创建工具容器,检查集群状态7.准备dashboard的nodeport端口映射服务8.准备prometheus的metric端口映射服务 总结 前言 基于kub…

第16章:InnoDB数据存储结构

一、数据库的存储结构:页 1.磁盘与内存的交互基本单位:页 InnoDB将表中数据划分多个页来存储,InnoDB中页的大小默认是16KB 在数据库中,不论读一行,还是读多行,都是将这些行所在的页从磁盘加载到内存。数据库管理存储…

自动化测试,B、C接口要将A接口返回的参数作为入参,有哪些方法?

在进行自动化测试时,如果需要将A接口返回的参数作为B、C接口的入参,可以通过以下几种方法实现: 如果你想学习自动化测试,我这边给你推荐一套视频,这个视频可以说是B站百万播放全网第一的自动化测试教程,同…

PyTorch 深度学习 || PyTorch 编程基础

PyTorch 编程基础 文章目录 PyTorch 编程基础1. backword 求梯度2. 常用的激活函数2.1 Sigmoid 函数2.2 ReLu 激活函数2.3 Leakly ReLu 激活函数 2. 常用损失函数2.1 均方误差损失函数2.2 L1范数误差损失函数2.3 交叉熵损失函数 3. 优化器 1. backword 求梯度 import torchw …

(十)服务器K8S集群部署SpringBoot项目实战

1.准备springboot项目 可以在 https://start.spring.io/网站准备一个项目,这里作为k8s的学习所以springboot项目中准备一个简单的访问接口即可。 2.服务器环境准备 安装Jdk 1.更新系统软件包: sudo yum update2.安装 OpenJDK 11: sudo…

陶瓷板视觉检测系统和运动控制有什么联系?

陶瓷板视觉检测系统是一种利用现代计算机视觉技术对陶瓷板进行缺陷检测的设备,而运动控制则是一种控制运动的技术,两者之间存在着密切的联系。下面我们将详细介绍陶瓷板视觉检测系统和运动控制之间的联系。 一、陶瓷板视觉检测系统 陶瓷板视觉检测系统…

Redis面试核心技术点和缓存相关问题

目录 Redis的数据结构和原理 Redis持久化:RDB和AOF Redis的集群设计 缓存雪崩、击穿、穿透 高并发场景下缓存和数据库更新策略 Redis的大key和热key和大value 本地缓存 磁盘IO和网络开销 相比于 请求内存IO 要高上千倍,如果某个数据从数据库磁盘读…

第17章:存储引擎

一、查看存储引擎 1.什么是存储引擎 MySQL的存储引擎就是表的类型 2.查看mysql存储引擎 show engines; 二、设置系统默认的存储引擎 1.查看默认的存储引擎 select default_storage_engine; 2.修改默认存储引擎 set default_storage_engineMyISAM; 三、设置表的存储引擎 …

微信小程序开发之云函数本地调试

环境 微信开发者工具 Stable 1.06.2303220云开发控制台 v1.5.47 简介 微信云开发提供了云函数本地调试功能,在本地提供了一套与线上一致的 Node.js 云函数运行环境,让开发者可以在本地对云函数调试: 在本地调试时,可以设置断点…

【MD5知识详解】【面试知识】

MD5概述: MD5消息摘要算法,属Hash算法一类。MD5算法对输入任意长度的消息进行运行,产生一个128位的消息摘要(32位的数字字母混合码)。 MD5主要特点: 不可逆,相同数据的MD5值肯定一样,不同数据的MD5值不一样 (一个MD5理…

微信小程序nodejs+vue个人身体健康管理系统56b65

开发语言 node.js 框架:Express 前端:Vue.js 数据库:mysql 数据库工具:Navicat 开发软件:VScode 。配置文件 (自动编号、配置参数值、配置参数名称); 论坛交流 (自动编号、用户id、状态、父节点id、帖子标题、用户名…

ndoejs基于Vue.js二手书交易网站系统x3oh4

开发语言 node.js 框架:Express 前端:Vue.js 数据库:mysql 数据库工具:Navicat 开发软件:VScode 本毕业设计的内容是设计并且实现一个基于vue框架的二手书交易系统。它是在Windows下,以MYSQL为数据库开发平台&#xf…

chatgpt赋能python:Python取消warning指南:如何避免和处理警告

Python取消warning指南:如何避免和处理警告 如果您已经在使用Python编程,那么您一定会遇到过警告(warning)这个问题。虽然警告有时可能很有用,但在特定情况下,它们可能会引起程序错误或产生意想不到的行为…

Depcheck 检查前端项目中未使用的依赖包

前言 随着前端项目的迭代,项目中一部分的依赖包可能没被项目所使用的,手动查找这些依赖包耗时又繁琐,有没有根据能够快速的帮助我们识别和清理项目中未使用的依赖包呢? Depcheck 简介 Depcheck 是一款用于分析项目中依赖关系的…

windows下的SVN客户端访问ubuntu下的SVN服务器

目录 第一部分 windows创建本地版本库、连接ubuntu的SVN服务器 步骤0: 步骤一:创建windows本地版本库 步骤二:checkout检测 步骤三:输入之前配置的用户名和密码 第二部分 windows上传文件至SVN服务器 步骤一:添加…

Python数据攻略-DataFrame的创建与基础特性

大家好,我是Mr数据杨,今天我带来的是一本既实用又有趣的Python教程笔记,主角是Pandas DataFrame。它就像《三国演义》中的诸葛亮,机智、实用,可以帮助我们轻松处理各种数据问题。 我们来看如何创建诸葛亮——这个Data…

实现UDP通信(socket接口函数扩展)

一、write/read到send/recv 函数原型: ussize_t send(int sockfd, const void *buf, size_t len, int flags);//发送 ussize_t recv(int sockfd, void *buf, size_t len, int flags);//接收 前三个参数同read/write一样; ussize_t read(int fd, voi…