Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >白盒测试?看这一篇就够了

白盒测试?看这一篇就够了

作者头像
一个正经的AI
发布于 2024-01-22 09:03:33
发布于 2024-01-22 09:03:33
75500
代码可运行
举报
运行总次数:0
代码可运行

DAY 1

14

2024-01

点击上方蓝字“一个正经的测试“关注我,每周早上08:30准时推送,每月不定期赠送技术书籍

微信公众号后台回复“软件测试基础”、“简历与面试”等领取测试资源,回复“微信交流群”、“内推群”一起进群吹水摸鱼。

本文4099字,阅读约需15分钟

五星上将麦克阿瑟曾经说过“在白盒测试面前,黑盒测试就是一个弟弟”

1

让我们来讲一个故事

今天和女朋友吵架了,(假设你有女朋友)。

今晚又是一个人睡沙发,这天晚上,你躺在沙发上,夜不能寐

决定。痛定思痛

决定分享一下今天的主题——白盒测试

什么是白盒测试?

在深化白盒测试的理解之前,让我们通过一个简单的故事来解释白盒测试的概念。想象一下,你正在修理一台复杂的钟表。白盒测试正如你打开钟表的背盖,查看每一个齿轮的转动,每一个弹簧的走向,确定每一部分都正确地互相作用。现在,让我们更详细地了解白盒测试,并了解它的实施步骤和方法。

白盒测试概述:

  • 白盒测试用例需要做到:大体上,白盒测试用例应确保每一个逻辑路径都被检验,每一个语句和函数都被执行,确保软件的内部结构和功能达到预期。
  • 白盒测试的目的:白盒测试主要目的是提高软件质量,通过检查内部结构和设计,找出可能的逻辑错误和遗漏等,并通过改正这些功能错误和逻辑错误,做到预防软件错误。
  • 白盒测试的特点:白盒测试要求测试人员具有一定的程序设计能力,理解被测程序的内部逻辑结构及其相互关系,是一种结构化的测试方法。这就需要测试人员对软件的实现有深入的理解,包括数据流、控制流、数据结构、程序结构、程序和程序的接口、程序和操作系统及硬件的接口等。

白盒测试的实施步骤:

  1. 理解需求和设计:需要理解软件的需求和设计,以了解软件的预期行为。
  2. 创建详细的测试计划:在软件的设计阶段完成后,对软件进行详细的测试计划,确定测试的工作及其范围。
  3. 设计测试用例:根据软件的内部结构设计测试用例。
  4. 执行测试:通过执行设计的测试用例进行测试,并记录结果。
  5. 分析和报告:分析测试结果并对测试结果进行报告。

  • 白盒测试的方法:总体上分为静态方法和动态方法两大类。静态方法主要通过阅读和审查代码来找出错误,不需要运行系统。动态方法则是通过实际运行系统的方式来进行测试。

2

白盒测试的方法

  • 语句覆盖:保证代码中每一个语句至少执行一次。
  • 判定覆盖:保证代码中的每一个判断(if,while等)的结果至少为真和假各一次。
  • 条件覆盖:保证判定中的每一个条件(一般指"&&"、“||”连接的多个判断中的每一个判断)结果至少为真和假各一次。
  • 判定条件覆盖:满足判定覆盖和条件覆盖。
  • 条件组合覆盖:一个判断中的所有条件的所有组合情况。
  • 路径覆盖:保证代码中的每一个可能路径都至少执行一次。该方法测试的全面性最强,但同时需要的工作量也是最大的,实际中往往因为路径数量过大而无法做到全部覆盖。

下面我们通过具体的代码例子来进行说明

  1. 语句覆盖 - 下面的代码示例展示了如何用语句覆盖测试方法来测试一个简单的Python函数。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def greetings(name):
    return "Hello, " + name
#测试用例:
def test_greetings(): 
    assert greetings("Amy") == "Hello, Amy"
  1. 判定覆盖 - 这种测试方法确保代码中的每一个判断(if,while等)的结果至少为真和假各一次。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def is_even(number):
    if number % 2 == 0:
        return True
    else:
        return False
#测试用例
def test_is_even():
    assert is_even(2) == True
    assert is_even(3) == False
  1. 条件覆盖 - 这种测试方法关注的是判定中的每一个条件至少为真和假各一次。以下是一个简单的if else条件测试案例。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def can_vote(age, citizenship):
    if age >= 18 and citizenship == 'USA':
        return True
    else:
        return False
#测试用例
def test_can_vote():
    assert can_vote(21, 'USA') == True
    assert can_vote(17, 'USA') == False
    assert can_vote(21, 'France') == False
  1. 判定条件覆盖 - 判定覆盖和条件覆盖的结合体,同样使用can_vote的函数来测试。
  2. 条件组合覆盖 - 这种方法关注的是一个判断中的所有条件的所有可能组合情况。以下是一个简单的逻辑操作符测试案例。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def check_numbers(a, b, c):
    if a > b and b > c:
        return 'Descending'
    elif a < b and b < c:
        return 'Ascending'
    else:
        return 'None'
#测试用例
def test_check_numbers():
    assert check_numbers(3, 2, 1) == 'Descending'
    assert check_numbers(1, 2, 3) == 'Ascending'
    assert check_numbers(2, 1, 3) == 'None'
  1. 路径覆盖 - 保证代码中的每一个可能路径都至少执行一次。这个例子将覆盖所有的路径:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def order(a, b, c):
    smallest = min(a, b, c)
    largest = max(a, b, c)
    middle = (a + b + c) - smallest - largest
    return [smallest, middle, largest]
#测试用例
def test_order():
    assert order(1,2,3) == [1, 2, 3]
    assert order(1,3,2) == [1, 2, 3]
    assert order(2,1,3) == [1, 2, 3]
    assert order(2,3,1) == [1, 2, 3]
    assert order(3,2,1) == [1, 2, 3]
    assert order(3,1,2) == [1, 2, 3]

3

我们举一个具体的例子

假设我们有一个函数,它需要处理一个银行账户的交易,如存款,提款和余额查询。我们需要覆盖所有路径以确保每一种操作都被正确执行。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class BankAccount:
    def __init__(self):
        self.balance = 0

    def deposit(self, amount):
        self.balance += amount
        return self.balance

    def withdraw(self, amount):
        if amount > self.balance:
            return 'Insufficient funds'
        self.balance -= amount
        return self.balance

    def get_balance(self):
        return self.balance

为了使用路径覆盖测试,我们可以写如下的测试用例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def test_bank_account():
    account = BankAccount()
    
    # Test deposit
    assert account.deposit(100) == 100
   
    # Test get balance
    assert account.get_balance() == 100

    # Test withdraw with sufficient funds
    assert account.withdraw(50) == 50
    assert account.withdraw(50) == 0

    # Test withdraw with insufficient funds
    assert account.withdraw(50) == 'Insufficient funds'

    # Check final balance
    assert account.get_balance() == 0
    
    

我们覆盖了所有可能的路径:存款,查询余额,足够的资金提现,资金不足的提现,以及最终的余额查询。这就是路径覆盖测试的实施例子,它可以确保代码在所有可能的路径下都被验证。

以上就是今天的全部内容,希望对大家有所帮助,也希望大家多多留言、点赞、在看、转发四连爱❤️ 支持。 咱们下篇文章见,Bye~👋

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-01-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 一个正经的测试 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
软件测试:黑白盒测试的区别及白盒测试全面解析与应用
白盒测试方法应用于代码评审、单元程序之中,而黑盒测试方法则应用于模块、组件等大单元的功能测试之中。
Srlua
2024/10/19
3330
软件测试:黑白盒测试的区别及白盒测试全面解析与应用
软件工程黑盒白盒测试
等价类划分法是把程序的 输入域 划分为若干部分,然后从每个部分中选取少数代表性数据当作测试用例。
wsuo
2021/01/14
1.5K0
软件工程黑盒白盒测试
软件测试技术之: 白盒测试和黑盒测试[通俗易懂]
一般地,我们将软件测试活动分为以下几类:黑盒测试、白盒测试、静态测试、动态测试、手动测试、自动测试等等。
全栈程序员站长
2022/10/02
6.8K0
软件测试技术之: 白盒测试和黑盒测试[通俗易懂]
白盒测试中的几种覆盖方法
文章转自:http://www.51testing.com/html/44/n-3713444.html 白盒测试用例设计的一个很重要的评估标准就是对代码的覆盖度。一说到覆盖,大家都感觉非常熟悉,但是常见的覆盖都有哪些?各自有什么优缺点?在白盒测试的用例设计中我们应该如何自如地运用呢?今天小编就为大家总结了一下几种常见的覆盖以及各自的优缺点。 白盒测试中常见的覆盖有六种:语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、组合覆盖和路径覆盖。下面我们就分别看看这几种不同的覆盖究竟是什么鬼。 一、语句覆盖(St
张俊怡
2018/04/24
9.2K0
白盒测试中的几种覆盖方法
技术分享 | 白盒测试方法论
白盒测试又称为结构测试、透明盒测试、逻辑驱动测试或基于代码的测试。白盒测试是一种测试用例设计方法。盒子指的是被测试的软件,白盒指的是盒子是可视的,即清楚盒子内部的东西以及里面是如何运作的。"白盒"法全面了解程序内部逻辑结构,对所有逻辑路径进行测试。"白盒"法是穷举路径测试。在使用这一方案时,测试者必须检查程序的内部结构,从检查程序的逻辑着手,得出测试数据。
霍格沃兹测试开发
2022/03/22
4870
测试技术|白盒测试以及代码覆盖率实践
白盒测试也称逻辑驱动测试,是针对被测单元内部是如何进行工作的测试。它根据程序的控制结构设计测试用例,主要用于软件程序验证,属于基于代码的测试技术。与之相对应的黑盒测试是从用户角度对软件进行测试。
互联网金融打杂
2022/08/01
1.9K0
测试技术|白盒测试以及代码覆盖率实践
白盒测试:如何进行代码级别的测试?
白盒测试也称结构测试,透明盒测试。主要用于单元测试阶段,代码和逻辑的测试,重点复杂的测试,是一种测试用例设计方法,不同于黑盒测试,白盒测试是可以看到内部代码如何运作的,可通过测试来检测产品内部是否符合规定正常运行。
测试开发技术
2023/08/21
4030
白盒测试:如何进行代码级别的测试?
【白盒测试】单元测试的理论基础及用例设计技术(6种)详解
综上,白盒测试和黑盒测试的主要区别在于测试者对系统内部结构的了解程度。白盒测试关注程序内部逻辑和代码覆盖率,而黑盒测试则关注系统的功能和用户体验。
SarPro
2024/04/25
8940
【白盒测试】单元测试的理论基础及用例设计技术(6种)详解
图解-白盒测试之逻辑覆盖
白盒测试是一种测试用例设计方法,盒子指的是被测试的软件,白盒指的是盒子是可视的,即清楚盒子内部的东西以及里面是如何运作的。"白盒"法全面了解程序内部逻辑结构、对所有逻辑路径进行测试。"白盒"法是穷举路径测试。在使用这一方案时,测试者必须检查程序的内部结构,从检查程序的逻辑着手,得出测试数据。
wangmcn
2022/07/26
9980
图解-白盒测试之逻辑覆盖
白盒测试的测试用例设计方法
对简单的程序流程而言,确定程序的路径有多少条可通过:语句覆盖(覆盖率100%);分支(判定)覆盖(覆盖率85%);条件覆盖;分支-条件覆盖;条件组合覆盖;路径覆盖(覆盖率80%)来确定,这也是白盒测试的主要技术。
全栈程序员站长
2022/11/07
1.4K0
白盒测试的测试用例设计方法
白盒测试方法与黑盒测试方法简析
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/11/10
1.4K0
白盒测试用例设计方法有哪些_软件测试语句覆盖测试用例
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/11/04
5310
白盒测试用例设计方法有哪些_软件测试语句覆盖测试用例
黑盒测试和白盒测试的区别
1.        软件测试方法:白盒测试、黑盒测试、灰盒测试、静态测试、动态测试
庞小明
2018/10/11
9.7K1
浅谈黑盒测试和白盒测试
  从图中可以直接看出来,黑盒测试就当整个程序是个黑盒子,我们看不到它里面做了些什么事情,只能通过输入输出看是否能得到我们所需的来测试。而白盒测试可以当盒子是透明的,里面的一切我们都看的清楚,从而我们可以通过去测内部结构来测试。
lyb-geek
2018/07/26
3.9K0
浅谈黑盒测试和白盒测试
白盒测试 | 用例设计方法之条件组合覆盖
条件组合覆盖:列出所有判定条件中可能的取值组合,使得每个判定条件结果的所有可能组合至少出现一次
王大力测试进阶之路
2022/03/14
2.3K0
白盒测试 | 用例设计方法之条件组合覆盖
白盒测试扫盲
白盒测试正在测试一个软件解决方案的内部结构,设计和代码。在这种类型的测试中,测试人员可以看到代码。它主要侧重于验证通过应用程序的输入和输出,改善设计和可用性,增强安全性。白盒测试也称为透明测试,开盒测试,结构测试,基于代码的测试,它通常由开发人员执行。
FunTester
2020/04/03
1.7K0
黑盒测试VS白盒测试
这篇文章是我从stackoverflow上翻译过来的,如果以后遇到好的文章我还会继续翻译。
Peter Shen
2020/06/12
1.5K0
黑盒测试VS白盒测试
白盒测试技术_静态白盒测试
它是度量测试完整性的一个工具,通常可以分为逻辑覆盖和功能覆盖。覆盖率 =(被执行到的项数/总项数)* 100%
全栈程序员站长
2022/09/27
1.5K0
白盒测试技术_静态白盒测试
聊聊 Python 中的同步原语,为什么有了 GIL 还需要同步原语
👋 你好,我是 Lorin 洛林,一位 Java 后端技术开发者!座右铭:Technology has the power to make the world a better place.
Lorin 洛林
2024/05/01
1870
从软件测试看芯片验证-白盒测试
白盒测试是关注测试用例覆盖程序逻辑(源代码)的程度。最终的白盒测试是执行程序中的每个路径。但对于大多数的程序(例如带有循环的程序),完全意义上的全路径覆盖是不现实的。
AsicWonder
2023/09/01
3120
从软件测试看芯片验证-白盒测试
推荐阅读
相关推荐
软件测试:黑白盒测试的区别及白盒测试全面解析与应用
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验