白盒测试怎么做?

2023-11-19

目录

前言

一、什么是白盒测试

二、白盒测试的分类

三、白盒测试的设计方法

四、白盒测试静态方法

五、白盒测试动态方法

六、白盒测试的特点

 七、总结


前言

在企业内部,软件测试工程师基本处于“双高”地位,即地位高、待遇高。可以说他们的职业前景非常广阔,从近期的企业人才需求和薪金水平来看,
软件测试工程师的年工资有逐年上升的明显迹象。测试工程师这个职位必将成为IT就业的新亮点。

一、什么是白盒测试

白盒测试又称结构测试逻辑驱动测试基于代码的测试

白盒测试是一种测试用例设计方法,盒子指的是被测试的软件,白盒指的是盒子是可视的,即清楚盒子内部的东西以及里面是如何运作的。

"白盒"法需要测试者了解程序内部逻辑结构,对所有逻辑路径进行测试,也就是说,"白盒"法是“穷举路径测试”。

二、白盒测试的分类

总体上分为静态分析动态分析两大类。

静态分析:不需要执行程序,就可以进行的测试,例如:代码审查、代码扫描

动态分析:需要执行程序,才可以进行的测试,例如:单元测试覆盖测试

三、白盒测试的设计方法

四、白盒测试静态方法

静态方法关注代码是否符合已制定的编码规范、发现潜在的bug或漏洞,更强调开发人员的参与。或者直接交给自动化代码检查工具去做,如SonarQube等

如何开展静态方法。

五、白盒测试动态方法

动态方法是白盒测试人员主要参与的环节。

1、逻辑覆盖法

原则:以程序内部的逻辑结构为基础设计测试用例。

逻辑覆盖包括语句覆盖判定覆盖条件覆盖、判定/条件覆盖条件组合覆盖路径覆盖。

以上六种覆盖标准发现错误的能力呈由弱到强变化:

  1. 语句覆盖每条语句至少执行一次。
  2. 判定覆盖每个判定的每个分支至少执行一次。
  3. 条件覆盖每个判定的每个条件应取到各种可能的值。
  4. 判定条件覆盖同时满足判定覆盖条件覆盖。
  5. 条件组合覆盖每个判定中各条件的每一种组合至少出现一次。
  6. 路径覆盖使程序中每一条可能的路径至少执行一次。

之所以六种覆盖标准发现错误的能力有差异,是因为使用每种覆盖标准所设计的测试用例对程序内部逻辑的覆盖率不同。

覆盖率是什么?

覆盖率是用来度量测试完整性的一个指标。

以下图的示例代码为例,分别说明每种覆盖标准的测试覆盖率。

1.1、语句覆盖(SC)

语句覆盖:设计足够多的测试用例,使得运行这些测试用例时,被测程序的每一个语句至少执行一次,其覆盖标准无法发现运算中的逻辑关系错误

示例代码中共有4条可执行语句

设计测试用例执行了3条,语句覆盖率为3/4=75%

1.2、判定覆盖(DC)

判定覆盖:设计足够多的测试用例,使得程序中的每一个判断至少获得一次“真”和一次“假”,即使得程序流程图中的每一个真假分支至少被执行一次

但若程序中的判定是有几个条件联合构成时,未必能发现每个条件的错误。

1.3、条件覆盖(CC)

条件覆盖:设计足够多的测试用例,使得运行这些测试用例时,使得判定中的每个条件至少有一次取真值,有一次取假值

但未必能覆盖全部分支。

案例代码中有判定2个,条件3个,条件结果6个

设计测试用例执行了5个条件结果,条件覆盖率为5/6=83%

1.4、判定/条件覆盖(DCC)

判定/条件覆盖:设计足够多的测试用例,使得被测试程序中的每个判断本身的判定结果(真假)至少满足一次,同时,每个逻辑条件的可能值(真假)也至少被满足一次

即同时满足100%判定覆盖100%条件覆盖的标准。

示例代码中有判定2个,条件3个,判定结果4个,条件结果6个

设计测试用例执行了3个判定结果,5个条件结果,判定条件覆盖率为:(3+5)/(4+6)=80%

1.5、条件组合覆盖(BCCC)

条件组合覆盖:设计足够多的测试用例,使得被测试程序中的每个判定中条件结果所有可能组合至少执行一次

显然,满足“条件组合覆盖”的测试用例是一定满足“判定覆盖”、“条件覆盖”和“判定/条件覆盖”的。

示例代码中有判定2个,条件3个(判定1有2个条件,判定2有1个条件),判定1的条件组合为4个,判定2的条件组合为2个

设计测试用例执行了5个条件组合,条件组合覆盖率为:5/(4+2)=83%

 

1.6、路径覆盖

路径覆盖:设计足够多的测试用例,覆盖被测试程序中的所有可能路径,是最强的覆盖准则。

案例代码中共有4条路径

设计测试用例执行了3条路径,路径覆盖率为3/4=75%

2、基本路径测试法

理想情况下,路径覆盖需要覆盖程序中所有可能的路径。但在路径数目很大时,真正做到完全覆盖是很困难的,

必须把覆盖路径数目压缩到一定限度。例如程序中的循环体只执行一次

所以,基本路径测试法可以理解为压缩后的路径覆盖。

基本路径测试法如何操作?

在程序控制流图的基础上,通过分析程序的环路复杂性,导出基本可执行路径集合,从而设计测试用例。

程序的控制流图:描述程序控制流的一种图示方法

程序环路复杂度:McCabe复杂性度量。从程序的环路复杂性可导出程序基本路径集合中的独立路径条数。

导出测试用例:根据圈复杂度和程序结构设计用例数据输入和预期结果。

准备测试用例:确保基本路径集中的每一条路径的执行。

六、白盒测试的特点

1. 优点

  • 可以检测代码中的每条分支和路径
  • 揭示隐藏在代码中的错误
  • 对代码的测试比较彻底
  • 让软件最优化

2. 缺点

  • 投入成本高昂
  • 覆盖所有代码路径难度大
  • 不能替代集成测试 

 七、总结


希望所有看到这里的小伙伴都能再坚持坚持,至于压力,一般来自三个方面:行业变化带来的职业危机压力;公司团队带来的工作任务压力;自身成长带俩的能力恐慌压力。而能力成长带来的压力是始终存在的。任何工作都是一样,干一行爱一行,既然选择了你就应该去努力提升自己的实力来把压力值降到最低。

衷心感谢每一个认真阅读我文章的人

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

白盒测试怎么做? 的相关文章

  • 如何查看Databricks中的所有数据库和表

    我想列出 Azure Databricks 中每个数据库中的所有表 所以我希望输出看起来像这样 Database Table name Database1 Table 1 Database1 Table 2 Database1 Table
  • 在 python 程序中合并第三方库的最佳实践是什么?

    下午好 我正在为我的工作编写一个中小型Python程序 该任务需要我使用 Excel 库xlwt and xlrd 以及一个用于查询 Oracle 数据库的库 称为CX Oracle 我正在通过版本控制系统 即CVS 开发该项目 我想知道围
  • 如何在flask中使用g.user全局

    据我了解 Flask 中的 g 变量 它应该为我提供一个全局位置来存储数据 例如登录后保存当前用户 它是否正确 我希望我的导航在登录后在整个网站上显示我的用户名 我的观点包含 from Flask import g among other
  • 使用 matplotlib 绘制时间序列数据并仅在年初显示年份

    rcParams date autoformatter month b n Y 我正在使用 matpltolib 来绘制时间序列 如果我按上述方式设置 rcParams 则生成的图会在每个刻度处标记月份名称和年份 我怎样才能将其设置为仅在每
  • 从字符串中删除识别的日期

    作为输入 我有几个包含不同格式日期的字符串 例如 彼得在16 45 我的生日是1990年7月8日 On 7 月 11 日星期六我会回家 I use dateutil parser parse识别字符串中的日期 在下一步中 我想从字符串中删除
  • 是否可以忽略一行的pyright检查?

    我需要忽略一行的pyright 检查 有什么特别的评论吗 def create slog group SLogGroup data Optional dict None SLog insert one SLog group group da
  • 测试 python Counter 是否包含在另一个 Counter 中

    如何测试是否是pythonCounter https docs python org 2 library collections html collections Counter is 包含在另一个中使用以下定义 柜台a包含在计数器中b当且
  • 使用 Tkinter 显示 numpy 数组中的图像

    我对 Python 缺乏经验 第一次使用 Tkinter 制作一个 UI 显示我的数字分类程序与 mnist 数据集的结果 当图像来自 numpy 数组而不是我的 PC 上的文件路径时 我有一个关于在 Tkinter 中显示图像的问题 我为
  • Python pickle:腌制对象不等于源对象

    我认为这是预期的行为 但想检查一下 也许找出原因 因为我所做的研究结果是空白 我有一个函数可以提取数据 创建自定义类的新实例 然后将其附加到列表中 该类仅包含变量 然后 我使用协议 2 作为二进制文件将该列表腌制到文件中 稍后我重新运行脚本
  • Python 函数可以从作用域之外赋予新属性吗?

    我不知道你可以这样做 def tom print tom s locals locals def dick z print z name z name z guest Harry print z guest z guest print di
  • 如何使用 OpencV 从 Firebase 读取图像?

    有没有使用 OpenCV 从 Firebase 读取图像的想法 或者我必须先下载图片 然后从本地文件夹执行 cv imread 功能 有什么办法我可以使用cv imread link of picture from firebase 您可以
  • AWS EMR Spark Python 日志记录

    我正在 AWS EMR 上运行一个非常简单的 Spark 作业 但似乎无法从我的脚本中获取任何日志输出 我尝试过打印到 stderr from pyspark import SparkContext import sys if name m
  • python获取上传/下载速度

    我想在我的计算机上监控上传和下载速度 一个名为 conky 的程序已经在 conky conf 中执行了以下操作 Connection quality alignr wireless link qual perc wlan0 downspe
  • 向 Altair 图表添加背景实心填充

    I like Altair a lot for making graphs in Python As a tribute I wanted to regenerate the Economist graph s in Mistakes we
  • 对年龄列进行分组/分类

    我有一个数据框说df有一个柱子 Ages gt gt gt df Age 0 22 1 38 2 26 3 35 4 35 5 1 6 54 我想对这个年龄段进行分组并创建一个像这样的新专栏 If age gt 0 age lt 2 the
  • 解释 Python 中的数字范围

    在 Pylons Web 应用程序中 我需要获取一个字符串 例如 关于如何做到这一点有什么建议吗 我是 Python 新手 我还没有找到任何可以帮助解决此类问题的东西 该列表将是 1 2 3 45 46 48 49 50 51 77 使用
  • 有人用过 Dabo 做过中型项目吗? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我们正处于一个新的 ERP 风格的客户端 服务器应用程序的开始阶段 该应用程序是作为 Python 富客户端开发的 我们目前正在评估 Dabo
  • Rocket UniData/UniVerse:ODBC 无法分配足够的内存

    每当我尝试使用pyodbc连接到 Rocket UniData UniVerse 数据时我不断遇到错误 pyodbc Error 00000 00000 Rocket U2 U2ODBC 0302810 Unable to allocate
  • Python 类继承 - 诡异的动作

    我观察到类继承有一个奇怪的效果 对于我正在处理的项目 我正在创建一个类来充当另一个模块的类的包装器 我正在使用第 3 方 aeidon 模块 用于操作字幕文件 但问题可能不太具体 以下是您通常如何使用该模块 project aeidon P
  • 如何使用 Pycharm 安装 tkinter? [复制]

    这个问题在这里已经有答案了 I used sudo apt get install python3 6 tk而且效果很好 如果我在终端中打开 python Tkinter 就可以工作 但我无法将其安装在我的 Pycharm 项目上 pip

随机推荐

  • Matlab 二维图转三维图详解

    Matlab 二维图转三维图详解 Matlab 是一款常用的数学软件 其可视化效果也非常出色 在 Matlab 中 我们可以通过简单的代码将二维图转换成三维图 在本文中 我们将为大家介绍如何使用 Matlab 将二维图转换成三维图 一 Ma
  • 小森生活一直显示服务器连接异常,小森生活进不去怎么解决?无法进入游戏问题原因与解决办法[多图]...

    小森生活进不去怎么解决 最近许多玩家反应 在登录小森生活时无法正常进入游戏 有的崩溃 有的闪退 有的直接系统提示无法进入 盒子小编来告诉大家解决办法 小森生活进不去解决攻略 一 检查小森生活安装包 1 小森生活公测用的都是最新版本 内测的老
  • vue中如何在外部调用methods的方法

    1 首先定义一个公共的vue组件 var eventHub new Vue 2 在事件当前的组件中 在created中 用 on向公共的组件eventHub传递 translate是自定义的 getCardNum data 是要在外部调用的
  • elasticsearch去重计数(distinct)

    如果需要针对ES索引统计某个字段上出现的不同值的个数时 可以使用cardinality聚合查询完成 GET urlAttributes search search type count aggs
  • 亚利桑那州立大学周纵苇:研习 U-Net ——现有的分割网络创新

    雷锋网AI研习社按 经典的 Encoder Decoder 结构在目标分割问题中展现出了举足轻重的作用 然而这样一个相对固定的框架使得模型在感受野大小和边界分割精度两方面很难达到兼顾 本次公开课 讲者以 U Net 为案例分析 总结现有的分
  • Python面试50题!面试巩固必看!

    题目001 在Python中如何实现单例模式 点评 单例模式是指让一个类只能创建出唯一的实例 这个题目在面试中出现的频率极高 因为它考察的不仅仅是单例模式 更是对Python语言到底掌握到何种程度 建议大家用装饰器和元类这两种方式来实现单例
  • Jenkins+RobotFramework 失败用例重执行方案

    背景 接口测试用例运行在Jenkins节点上 在某些情况下 比如网络波动等原因 会导致用例运行失败 此时会触发邮件和钉钉预警 通知给到责任人 按照现有策略 当本次构建失败时 会立马触发第二次构建活动 若第二次构建仍然失败 则会再次触发预警信
  • 编译原理_计算器_flex、bison实现(详细辅助理解)

    编译原理 计算器 flex bison实现 详细辅助理解 个人博客 https www yuque com ngp blog tuanh6 https www yuque com ngp blog tuanh6 P S 这篇文章只能助你理解
  • python在财务分析中的应用,用python做财务数据分析

    大家好 本文将围绕python在财务分析中的应用展开说明 用python做财务数据分析是一个很多人都想弄明白的事情 想搞清楚python与财务数据分析需要先了解以下几个事情 1 说明 Python 处理业财数据的应用场景 并写出相应代码 可
  • VS附加进程调试

    什么是附加进程调试 附加进程调试就是将当前的代码工程附加到一个电脑程序进程中进行调试运行 从而达到调试定位问题的目的 附加进程调试的场景 1 软件运行崩溃 无dump或者dump看不出关键信息 2 当前代码工程编译的库不作为启动项 而是作为
  • SpringBoot+MybatisPlus+Druid极速搭建项目原型

    前言 听说你又有新需求了 什么 又是对某些表的增删改查 什么 还要从数据库一直写到dao层 还要配置mapper xml文件 完事儿之后还要写service层 controller层 什么 遇到条件查询还要写dao层和xml文件中的sql语
  • vscode 如何运行pip_VS Code写Python的一些小技巧

    本文基于 VS Code 1 36 1 为什么要用 VS Code 用 PyCharm 不好吗 VS Code 是开源免费的 PyCharm 是收费的 VS Code 除了 Python 还可以写其他语言 PyCharm 不行 VS Cod
  • 代码迁移_三种类型的代码迁移

    代码迁移 随着代码变老 通常有必要对其进行现代化 有以下动机 我们找到了一种更好的方法 我们需要出于支持 许可或仅出于最佳实践的原因而更新核心库 技术 我们需要在更现代的基础架构上运行该软件 简而言之 几年前编写的软件很少能完美地在我们现有
  • 自变化折线图(两周数据)

  • 小饼干问题 find寻找字符串 substr截取字符串

    所有人的回复都由大写字母 小写字母与 组成 占一行 MJJ认为只要其中包含了连续的10个小写字母 zailaiyihe 就意味着这个人想要再来一盒 题目描述 现在MJJ准备给每一个想要 再来一盒 的人买一盒小饼干 他想知道总共需要买几盒小饼
  • 【多线程例题】顺序打印abc线程

    顺序打印 进阶版 方法一 三个线程竞争同一个锁 通过count判断是否打印 方法二 三个线程同时start 分别上锁 从a开始 打印后唤醒b 三个线程分别打印A B C 方法一 通过count计数打印 三个线程上同样的锁 打印一个 召唤所有
  • msi afterburner怎么调节风扇转速教程

    msi afterburner是集超频 信息检测和参数调节等诸多功能为一体的显卡调节控制软件 要怎么使用msi afterburner调节风扇转速呢 很多小伙伴都不清楚怎么设置吧 下面就来看看详细操作 1 根据Afterburner软件的检
  • java String 转utf-8编码

    Get XML String of utf 8 return XML Formed string public static String getUTF8XMLString String xml A StringBuffer Object
  • Docker学习笔记(四)-docker中的网络与存储

    前言 要了解docker的网络和存储 首先需要知道docker的资源隔离机制 namespace 让某个特定的全局系统资源通过抽象方法使namespace 中的进程看起来拥有它们自己的隔离的全局系统资源实例 The purpose of e
  • 白盒测试怎么做?

    目录 前言 一 什么是白盒测试 二 白盒测试的分类 三 白盒测试的设计方法 四 白盒测试静态方法 五 白盒测试动态方法 六 白盒测试的特点 七 总结 前言 在企业内部 软件测试工程师基本处于 双高 地位 即地位高 待遇高 可以说他们的职业前