白盒测试与黑盒测试

在这里插## 标题入图片描述

> 						大家好,我是程序员小羊!

✨博客主页: https://blog.csdn.net/m0_63815035?type=blog

💗《博客内容》:.NET、Java.测试开发、Python、Android、Go、Node、Android前端小程序等相关领域知识
📢博客专栏: https://blog.csdn.net/m0_63815035/category_11954877.html
📢欢迎点赞 👍 收藏 ⭐留言 📝
📢本文为学习笔记资料,如有侵权,请联系我删除,疏漏之处还请指正🙉
📢大厦之成,非一木之材也;大海之阔,非一流之归也✨

在这里插入图片描述

白盒测试与黑盒测试

一、白盒测试

1.白盒测试定义:白盒测试是基于软件内部结构的一种测试方法。(针对代码和程序逻辑)

2.白盒测试的目的:发现代码中的隐藏错误(逻辑错误、边界条件、异常处理缺陷),保证每个逻辑分支正确执行

3.白盒测试的常用方法:单元测试、语句覆盖、分支覆盖、路径覆盖、数据流分析

  • 单元测试编写代码测试程序中最小功能单位(一个函数或方法),输入不同数据验证函数的输出是否符合预期

    +++

    def grade(score):
        if score >= 90:
            return 'A'
        elif score >= 80:
            return 'B'
        elif score >= 70:
            return 'C'
        elif score >= 60:
            return 'D'
        else:
            return 'F'
    

    +++

  • 语句覆盖执行代码中的每一行至少一次,确保没有遗漏的代码

  • 解释:语句覆盖是一种最基本的覆盖方法,要求每一行代码都被执行。这并不要求所有的条件和逻辑都被测试,只要代码行被执行就行

  • 如何测试

    • 用例 1:grade(95),输出 ‘A’(覆盖 if score >= 90 的分支)

    • 用例 2:grade(75),输出 ‘C’(覆盖 elif score >= 70 的分支)

    • 用例 3:grade(50),输出 ‘F’(覆盖 else 的分支)

      +++

  • 分支覆盖:测试每个条件的每一个分支(True 或 False)

  • 解释:分支覆盖要求测试代码中所有的条件分支,包括 ifelifTrueFalse 情况。这样可以确保代码在各种条件下的行为是正确的

  • 如何测试

    • 用例 1:grade(95),覆盖 if score >= 90True 的分支

    • 用例 2:grade(85),覆盖 elif score >= 80True 的分支

    • 用例 3:grade(75),覆盖 elif score >= 70True 的分支

    • 用例 4:grade(65),覆盖 elif score >= 60True 的分支

    • 用例 5:grade(55),覆盖所有 ifelifFalse 的情况,走到 else 分支

  • 路径覆盖测试代码中所有可能的执行路径

  • 解释:路径覆盖是最严格的一种覆盖方法,要求测试程序中的每一条可能路径。包括每一条分支和条件的组合。例如,对于嵌套的 if-else 语句,路径覆盖会要求测试每一种嵌套组合

  • 如何测试: 在上述示例中,由于每个条件(ifelif)都是独立的,所有可能路径相对较少。主要路径包括:

    • 路径 1:score >= 90True,执行第一个分支,返回 ‘A’
    • 路径 2:score >= 90Falsescore >= 80True,执行第二个分支,返回 ‘B’
    • 路径 3:score >= 90Falsescore >= 80Falsescore >= 70True,返回 ‘C’
    • 路径 4:score >= 90Falsescore >= 80Falsescore >= 70Falsescore >= 60True,返回 ‘D’
    • 路径 5:所有条件都为 False,执行 else 分支,返回 ‘F’

    解释:每一种路径都代表了代码中可能的执行顺序,通过测试这些路径,可以确保代码逻辑的全面覆盖

    +++

  • 数据流分析检查变量的定义和使用,确保数据在程序中的流动是正确的

  • 解释:数据流覆盖更关注变量的状态。它跟踪变量的定义、使用和销毁,检查代码中变量在每个位置的正确性。例如,检查一个变量在被使用之前是否被正确初始化

  • 如何测试: 这个方法不直接适用于上述的 grade 函数,因为它更适合一些复杂函数,如涉及大量变量的计算函数。假设有如下代码:

    def calculate_area(radius):
        pi = 3.14
        area = pi * (radius ** 2)
        return area
    
    • 在这段代码中,piarea 被计算时是一个已定义的变量。数据流覆盖会检查 pi 是否在使用前被正确定义,并在后续过程中被正确使用

    解释:数据流覆盖确保在代码执行过程中,每个变量都被正确使用,减少由于错误数据流导致的程序错误

    +++

小结
  • 语句覆盖:确保每行代码都被执行

  • 分支覆盖:确保每个条件的 TrueFalse 分支都被测试

  • 路径覆盖:测试所有可能的执行路径,验证代码中不同逻辑组合的正确性

  • 数据流覆盖:检查变量在程序中的定义和使用情况,确保数据流的正确性

    +++

    二、黑盒测试

1.黑盒测试定义:黑盒测试是根据软件的功能和需求进行测试,而不关注其内部实现

2.黑盒测试的目的:通过模拟用户的操作发现软件的功能缺陷、界面问题和性能问题,保证功能的完整性和可靠性

3.黑盒测试的常用方法:等价类划分、边界值分析、决策表、因果图、错误推测法

+++

示例 :登录系统
假设有一个登录系统,需要输入用户名和密码,然后验证是否匹配。它的功能需求如下:
1.用户名长度必须在 4 到 12 个字符之间。
2.密码不能为空,且必须包含至少一个数字。

+++

  • 等价类划分将输入数据划分为不同的等价类,每个等价类代表一种输入情况,只需测试每个类中的一个值,就能覆盖整个类

  • 解释:通过划分等价类,可以减少测试用例的数量。等价类分为有效等价类无效等价类

    如何划分
    1. 用户名:
      • 有效等价类:用户名长度为 4-12 个字符。
      • 无效等价类:用户名长度小于 4 或大于 12。
    2. 密码:
      • 有效等价类:密码不为空。
      • 无效等价类:密码为空。
    测试用例
    • 用例 1(有效):用户名 = “user1234”,密码 = “pass123”。
    • 用例 2(无效):用户名 = “usr”,密码 = “pass123”(用户名长度小于 4)。
    • 用例 3(无效):用户名 = “username_is_too_long”,密码 = “pass123”(用户名长度大于 12)。
    • 用例 4(无效):用户名 = “user1234”,密码 = “”(密码为空)。

    解释:通过划分等价类,我们确保覆盖了所有可能的输入类型。只要测试了每个等价类中的一个值,就可以代表该类的所有情况。

+++

  • 边界值分析测试输入数据的边界条件>

  • 解释:边界值分析关注输入值的边界,如最小值、最大值、刚超过边界和刚未到边界的值。常用来检测可能的溢出、越界等问题

    如何分析
    1. 用户名长度:用户名必须是 4 到 12 个字符。边界值包括:
      • 最小边界:4 个字符。
      • 最大边界:12 个字符。
      • 刚小于最小边界:3 个字符。
      • 刚大于最大边界:13 个字符。
    测试用例
    • 用例 1(边界值):用户名 = “user”,密码 = “pass123”(4 个字符,最小边界)。
    • 用例 2(边界值):用户名 = “user12345678”,密码 = “pass123”(12 个字符,最大边界)。
    • 用例 3(边界值):用户名 = “usr”,密码 = “pass123”(3 个字符,刚小于最小边界)。
    • 用例 4(边界值):用户名 = “user123456789”,密码 = “pass123”(13 个字符,刚大于最大边界)。

    解释:通过测试边界值,我们能更好地发现程序在处理边界情况时的潜在问题,如输入限制不正确或处理异常情况失败。

+++

  • 决策表列出输入条件和可能的操作,通过组合不同条件来测试每个可能的输出情况>

  • 解释:决策表是一种将输入条件与操作组合起来的表格,尤其适用于复杂的逻辑判断场景

    如何构建决策表

    假设登录系统有以下条件:

    1. 用户名有效(长度 4-12)。
    2. 密码非空。

    每个条件有两种状态(满足或不满足),组合成一个决策表:

    条件规则 1规则 2规则 3规则 4
    用户名有效
    密码非空
    输出允许登录错误:密码为空错误:用户名无效错误:用户名无效且密码为空
    测试用例
    • 用例 1:用户名 = “user1234”,密码 = “pass123”(规则 1,允许登录)。
    • 用例 2:用户名 = “user1234”,密码 = “”(规则 2,错误:密码为空)。
    • 用例 3:用户名 = “usr”,密码 = “pass123”(规则 3,错误:用户名无效)。
    • 用例 4:用户名 = “usr”,密码 = “”(规则 4,错误:用户名无效且密码为空)。

    解释:决策表将所有条件的组合列举出来,确保每种可能的情况都得到了测试,适用于具有多个条件的复杂逻辑。

    +++

    • 错误推测法基于测试者的经验和直觉,推测可能出现错误的地方

    • 解释:错误推测法没有严格的规则,它依赖于测试者对常见错误的了解,如输入非法字符、空值、极端值等

      如何进行错误推测
      • 假设测试者认为系统可能在处理特殊字符时出错,可以尝试输入包含特殊字符的用户名和密码。
      • 可能测试的输入:
        • 用户名 = “user!@#$”,密码 = “pass123”(测试特殊字符)。
        • 用户名 = “”,密码 = “pass123”(测试恶意代码注入)。
        • 用户名 = " ",密码 = “pass123”(测试全空格)。

      解释:错误推测法适用于不容易分类的测试场景,测试者通过经验和直觉来设计测试用例,往往能发现一些意想不到的问题。

      +++

      总结:白盒测试和黑盒测试的区别

      特性白盒测试黑盒测试
      测试视角了解软件内部结构,关注代码细节不了解内部结构,只关注功能和界面
      测试内容测试代码逻辑、路径、数据流测试软件功能、性能、用户界面
      测试方法语句覆盖、分支覆盖、路径覆盖等价类划分、边界值分析、错误推测
      优点发现代码中的隐藏错误,提高代码质量贴近用户操作,发现功能缺陷
      缺点测试范围有限,难以发现外部接口问题无法发现内部逻辑错误,需大量测试用例

      白盒测试和黑盒测试通常结合使用,以确保软件的全面质量:白盒测试侧重于代码的正确性黑盒测试则模拟用户操作,验证软件的功能性

      +++

今天这篇文章就到这里了,大厦之成,非一木之材也;大海之阔,非一流之归也。感谢大家观看本文

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

GIS在线监测SF6密度微水定量检漏仪传感器专用波纹管免焊接格兰头

SF6密度微水在线监测装置配套M12母头5孔格兰头穿波纹管连接器,该传感器能够监测SF6气体的露点,从而实现对SF6气体在线监测。 原理 SF6露点在线监测传感器是一种可以监测SF6气体露点的传感器它的工作原理是通过吸收SF6气体中的水分子来测量SF6气体的露点。…

k8s 资源管理

文章目录 ResourceQuota什么是资源配额定义一个ResourceQuotaResourceQuota的使用 LimitRangeLimitRange的用途示例1:配置默认的requests和limits示例2:配置requests和limits的范围 QoS什么是服务质量保证示例1:实现QoS为Guaranteed的Pod示例…

git的快速合并fast-forward merge详解

文章目录 1. 什么是快进合并?2. 快进合并的前提条件3. 快进合并的工作原理3.1 示例场景:3.2 使用命令:3.3 快进合并的视觉效果: 4. 快进合并的优点5. 快进合并的缺点6. 快进合并 vs 非快进合并6.1 非快进合并:6.2 非快…

splice用法

天行健,君子以自强不息;地势坤,君子以厚德载物。 每个人都有惰性,但不断学习是好好生活的根本,共勉! 文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。…

Google推出Data Commons解决AI“幻觉”

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

使用LDAP登录GitLab

使用LDAP登录GitLab gitlab.rb 配置如下 gitlab_rails[ldap_enabled] true #gitlab_rails[prevent_ldap_sign_in] false###! **remember to close this block with EOS below** gitlab_rails[ldap_servers] YAML.load <<-EOSmain:label: LDAPhost: 172.16.10.180port:…

C++ | Leetcode C++题解之第398题随机数索引

题目&#xff1a; 题解&#xff1a; class Solution {vector<int> &nums; public:Solution(vector<int> &nums) : nums(nums) {}int pick(int target) {int ans;for (int i 0, cnt 0; i < nums.size(); i) {if (nums[i] target) {cnt; // 第 cnt 次…

c++中的继承和多态

目录 Linux中的管道通信 ​编辑派生类的默认成员函数 继承 派生类的构造 隐藏 如何设计一个不能被继承的类 菱形继承 virtual virtual是如何解决的 内存对象模型 继承和组合 继承 组合 多态 概念 多态的构成条件 虚函数的重写 Linux中的管道通信 派生类的默认成…

ESKF学习笔记

参考资料 https://zhuanlan.zhihu.com/p/441182819 惯性导航(三)-基于流型的ESKF及代码实现_eskf和ekf-CSDN博客 用ESKF实现IMU/GNSS组合导航&#xff08;学习记录&#xff09;_eskf imu-CSDN博客 0.ESKF与KF的区别以及总体流程 0.1卡尔曼滤波过程 卡尔曼滤波的流程按照1…

unity安装配置和vs2022联动教程

目录 1.选择vs2022配置 2.安装unity 2.1安装unity hub 2.2注册个人账号 2.3安装编辑器 2.4修改为简体中文 2.5添加许可证 2.6安装位置修改 3.项目的创建 3.1如何创建 3.2如何选择 3.3配置语言 3.4去哪里找语言包 4.unity编辑器窗口的介绍 4.1游戏的运行和停止 4…

Leetcode面试经典150题-162.寻找峰值

解法都在代码里&#xff0c;不懂就留言或者私信 想清楚的话会特别简单&#xff0c;你可能想不到这是个二分。。。 class Solution {/**本题题目规定我们只能用O(logN)的时间复杂度来解题&#xff0c;这显然就是让二分嘛而题目给的数组本身是无需&#xff0c;怎么二分呢其实我…

4G模块、WIFI模块、NBIOT模块通过AT指令连接华为云物联网服务器(MQTT协议)

MQTT协议概述 MQTT&#xff08;Message Queuing Telemetry Transport&#xff09;是一种轻量级的消息传输协议&#xff0c;它被设计用来提供一对多的消息分发和应用之间的通讯&#xff0c;尤其适用于远程位置的设备和高延迟或低带宽的网络。MQTT协议基于客户端-服务器架构&…

5.安卓逆向-java面向对象

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 内容参考于&#xff1a;图灵Python学院 上一个内容&#xff1a;4.安卓逆向-常用数据结构java语言中的集合 之前的内容写了java语言常用的数据结构&#xff08…

海外云服务器安装 Redis 6.2.x (Ubuntu 18.04 记录篇三)

本文已首发于 秋码记录 通过前两篇的实践&#xff0c;我们已然在海外云服务器/VPS安装了JDK和MariaDB数据库&#xff0c;一个能够运行Java项目的海外云服务器/VPS算是告一段落了。 然而&#xff0c;在这请求量与日俱增的情况下&#xff0c;MariaDB数据库显然是在超负债的工作…

Linux shell编程学习笔记80:gzip命令——让文件瘦身

0 引言 在 Linux shell编程学习笔记76&#xff1a;tar命令——快照 & 备份&#xff08;上&#xff09;-CSDN博客 Linux shell编程学习笔记77&#xff1a;tar命令——快照 & 备份&#xff08;下&#xff09;_linux 系统快照-CSDN博客 Linux shell编程学习笔记78&am…

10万人服务器配置如何选择?10w并发量配置架构

10万并发量的应用如何选择阿里云服务器配置&#xff1f;首先要选择云服务器ECS实例规格&#xff0c;因为是10万并发量需要配置负载均衡&#xff0c;而且还要使用缓存技术&#xff0c;阿里云服务器网aliyunfuwuqi.com从阿里云官网整理的关于阿里云10万并发量服务器配置和案例分享…

哈工大“计算机设计与实践”(cpu)处理器实验设计报告

哈工大“计算机设计与实践”&#xff08;cpu&#xff09;处理器实验设计报告 【哈工大“计算机设计与实践”&#xff08;cpu&#xff09;处理器实验设计报告】 在计算机科学领域&#xff0c;CPU&#xff08;中央处理器&#xff09;是计算机系统的核心部件&#xff0c;负责执行指…

【我的 PWN 学习手札】Fastbin Double Free

前言 Fastbin的Double Free实际上还是利用其特性产生UAF的效果&#xff0c;使得可以进行Fastbin Attack 一、Double Free double free&#xff0c;顾名思义&#xff0c;free两次。对于fastbin这种单链表的组织结构&#xff0c;会形成这样一个效果&#xff1a; 如果我们mallo…

如何下载各个版本的tomcat-比如tomcat9

1&#xff0c;找到tomcat官网https://tomcat.apache.org/ Apache Tomcat - Welcome! 找到tomcat9&#xff0c;或者archives 1.1&#xff0c;找到对应版本 1.2&#xff0c;找到小版本 1.3&#xff0c;找到bin 2&#xff0c;Index of /dist/tomcat/tomcat-9/v9.0.39/bin 2.1&a…

【知识图谱】3.Protege下载安装

一、Protege 1.相关介绍 Protg软件是斯坦福大学医学院生物信息研究中心基于Java语言开发的本体编辑和知识获取软件&#xff0c;或者说是本体开发工具&#xff0c;也是基于知识的编辑器&#xff0c;属于开放源代码软件。 这个软件主要用于语义网中本体的构建&#xff0c;是语义…