带你轻松解密白盒测试

2292 篇文章 32 订阅
1785 篇文章 16 订阅

“白盒测试”可以理解为一种专门用于评估代码及程序内部结构的测试技术,也有结构测试这么一说,因为白盒测试会涉及查看代码的结构。对于测试工程师而言,如果你知道软件产品/系统或应用程序的内部结构,就尽早展开针对性的测试以确保程序内部操作是按照规范运行的,并且所有内部结构都能得到充分的测试执行。

随着互联网大数据AI时代的接踵而至,测试人员从原始的手工功能测试,进化到面向不同方向的自动化测试,与此同时职能岗位也从测试升级为测试开发。对于测试工程师而言,总有需要持续学习的东西,无论是领域、过程还是技术。今天我们就来聊一聊测试人员的技术“阴暗面”,为什么说这是一个“阴暗面”,因为大家不擅长嘛,无论是立志于从事测试行业的学生,还是在职测试工程师,都会有意无意避免这种被认为非常复杂、而对开发人员来说却又轻而易举的测试技术。没错,就是“白盒测试”!

1. 白盒测试覆盖率(Coverage)

白盒测试中约定的代码覆盖率包含以下几个核心准则:

(1) 代码片段覆盖—— 确保指定代码块中的每个代码语句都能被执行一次;

(2) 分支覆盖或节点测试—— 覆盖每个代码分支中的所有可能;

(3) 复合条件覆盖—— 对于多个条件,采用多个路径不同组合的情况下,确保每个条件都被触发执行对应的代码片段;

(4) 基础路径测试—— 针对代码中每个独立路径进行测试;

(5) 数据流测试(DFT) —— DFT看似是个新名词,实则指的是特定变量的追踪,在测试中我们往往需要追踪一个变量值的变化(这似乎有点像你在pycharm中针对一个循环变量做断点调试,观察每次循环中变量值的变化),在白盒测试中,我们需要在代码中定义一组中间路径,用于跟踪我们关心的变量经过每一次代码“计算”后该值的变化。简而言之,跟踪每个数据变量并验证其是否被正确使用。这种方法往往会发现一些隐藏的bug,比如使用了未经初始化的变量,或者虽然声明了但却一直没有被使用的变量,等等;

(6) 路径测试—— 即覆盖代码中所有可能的路径,这项任务也是相当耗时的;

(7) 循环测试—— 这种测试策略分别针对于单个循环、串联循环(即循环中调用了包含循环的代码块)和嵌套循环有关。使用这种方法用于测试独立循环和依赖循环中涉及的代码及所关注的变量;

2. 为什么需要白盒测试?

我们从代码质量保障和潜在BUG挖掘这两层面说明白盒测试的必要性:

确保以下几点:

(1) 确保模块中所有独立路径至少被执行一次。

(2) 确保所有合乎逻辑的判断都要验证其真假值。

(3) 确保所有循环边界值,及其操作范围内的内部数据结构的有效性。

尽可能发现由于以下因素引起的BUG:

(4) 当我们还未将功能的设计实现及其相关条件控制用代码来实现时,逻辑错误往往会潜入到我们的工作中;

(5) 程序逻辑与实际实现的差异而导致的设计错误;

(6) 程序语法语义错误及程序书写不规范引起的错误;

3. 白盒测试能力要求 & 测试范畴

由于我们需要编写测试用例来确保程序逻辑的完整覆盖,对程序的了解和认知是先决条件,我们必须详细理解被测代码及测试需求。对于大型系统进行全面测试是不可能的,毕竟这非常耗时耗力,我们不可能针对程序中循环的每一条路径进行测试,这就意味着测试人员需要通过选择重要的逻辑路径和数据结构进行切实有效且可行的测试。

在企业中进行白盒测试时,开发人员和测试人员往往会协同工作,例如分析哪一行代码被实际执行的,哪一行代码由于逻辑缺失而未被执行,哪些片断的代码存在拼写错误等。因此,白盒测试对代码的能力要求较高,需要对被测试代码使用的语言及代码间的逻辑关系有相当程度的认知及驾驭能力。

4. 白盒测试主要测试技术

白盒测试技术主要分为:“语句覆盖”,“分支覆盖”,“路径覆盖”这三大类。值得一提的是这三类覆盖技术并不能识别出任何需要被修复的BUG或缺陷,而是为了发现程序中存在的那些从未被执行的语句,并以此为基础展开后续的测试活动。下面就这三大白盒测试技术逐一介绍。

(1) 语句覆盖

在程序设计语言中,语句只不过是一行代码或一条指令,这些代码/指令唯有计算机可以理解并据此进行执行操作。当程序中的语句被编译并转换为目标代码,且程序处于运行模式下,这些语句就成为可被执行的“可执行语句”。因此“语句覆盖率”,顾名思义,它是验证每一行代码是否至少被执行一次的方法。

(2) 分支覆盖

程序设计语言中的“分支”类似于“IF语句”,IF语句由“真和假”两个分支构成,因此在分支覆盖率(有时也称为决策覆盖率)中,我们验证每个分支是否至少被执行一次。例如,对于任何IF语句将会有两个测试条件:一个是为了验证分支的正确性,另一个是验证错误分支。从理论上看,分支覆盖是一种测试方法,它在执行时确保了每个决策点的每个分支都应该被执行。

(3) 路径覆盖

路径覆盖针对程序中所有路径的测试,这是一种全面的技术,可以确保程序中所有路径至少被遍历一次。路径覆盖比分支覆盖更强大,在测试相对复杂的程序结构时更具实用意义。

最后: 可以在公众号:伤心的辣条 ! 自行领取一份216页软件测试工程师面试宝典文档资料【免费的】。以及相对应的视频学习教程免费分享!,其中包括了有基础知识、Linux必备、Shell、互联网程序原理、Mysql数据库、抓包工具专题、接口测试工具、测试进阶-Python编程、Web自动化测试、APP自动化测试、接口自动化测试、测试高级持续集成、测试架构开发测试框架、性能测试、安全测试等。

我推荐一个【Python自动化测试交流群:746506216】,大家可以一起探讨交流软件测试,共同学习软件测试技术、面试等软件测试方方面面,助你快速进阶Python自动化测试/测试开发,走向高薪之路。

喜欢软件测试的小伙伴们,如果我的博客对你有帮助、如果你喜欢我的博客内容,请 “点赞” “评论” “收藏” 一 键三连哦!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值