【基础理论-白盒测试】:只要你看完这篇文章,你就超过了99.99%的同行了

简介: 【基础理论-白盒测试】:只要你看完这篇文章,你就超过了99.99%的同行了

前言

白盒测试一直是测试领域中几乎最难的存在,也是面试官和应聘者都不想提起的话题,但是一旦真的能掌握白盒测试技术,那么你的职业生涯将再无危机。

学习之前,让我们先来了结下白盒测试的相关:


白盒测试是一种测试手段,多用于单元测试阶段,测试对象是函数代码等。追求的目标叫做:逻辑覆盖率。共分为 语句覆盖,判定覆盖,条件覆盖,判定/条件覆盖 ,条件组合,路径覆盖 共六种测试方法。


语句覆盖


语句覆盖其就是让每句代码都至少执行一次的方法。


比如下面这段代码:

if a > 2:
  print ">"
else:
  print "<"


若是要保证每条语句都至少执行一次的话,你就需要俩条用例即可:a = 1 和 a = 3

判定覆盖


也叫分支覆盖,目的是让每个判定的 真假 都至少出现一次。


比如下面这段代码:


if a > 2 or b >3:
  print ">"
else:
  print "<"


若要保证每个判定真假都至少出现一次,则最少需要俩条用例:a = 3 和 a =1,b=1

这样 就保证了 判定(a>2orb>3) 真假至少出现了一次。



条件覆盖


保证代码中每个条件的真假都至少出现一次,这个就比较难了。来看下面的代码:


if a>1 or b>2:
  print '>'
else:
  print '<'


若要保证条件(a>1)和(b>2)和(else)都至少出现一次真假,那么用例如下:

a = 0,b = 0 :此时条件(a>1)和(b>2)都出现了假

a = 4, b=4 :此时条件(a>1)和(b>2)都出现了真


巧妙的运用数据组合,来用尽量少的用例数来达成目的才是高手的水平。



判定条件覆盖


这个方法就是要把判定和条件组合起来。用尽量少的用例同时满足俩种覆盖率的技术。

比如这段代码:


if a>1 and b>1:
  print '>'
else:
  print '<'


用例设计如下:

a = 0,b=0 此时条件(a>1)为假,条件(b>1)为假,判定(a>1 and b>1) 也为假。

a =2 ,b=2 此时条件(a>1)为真,条件(b>1)为真,判定(a>1 and b>1) 也为真。


这样我们仅用了 两条用例就完美实现了 所有条件和所有判定的真假都至少出现了一次的情况,当然面对更为复杂的判断,这个则更难,比如:


if a>1 and b>1 and c<1:
  print '>'
else:
  print '<'


用例如下 a =0,b=0,c=2  ,此时条件(a>1)(b>1)(c<1) 都为假,而判定(a>1 and b>1 and c<1) 也为假

a = 5,b=5,c=0 ,此时条件(a>1)(b>1)(c<1) 都为真,而判定(a>1 and b>1 and c<1) 也为真


条件组合覆盖


注意这个方法是针对判定作为结果的,只是手段是条件而已。


目的为:保证 判定的所有情况都至少出现一次 ,而不单单是真假。


什么意思呢?来看例子就明白了:

if a>1 or b>1:
  print '>'
else:
  print '<'


我们这里要保证判定(a>1 or b>1)的所有情况都出现一次,用例如下:

a = 0,b=0 : 假假 = 假

a = 5,b=5 : 真真 = 真

a = 0,b=5 : 假真 = 真

a = 5,b=0 : 真假 = 真


结果就是至少4条用例才能判定的所有情况都至少出现一次,虽然三个都是真,但是原因是不同的。



路径覆盖


保证代码中每条路径都至少执行一次!注意,这里并非语句,而是路径。


例子如下:

if a>1:
  print '*'
else:
  print '%'
if b>1:
  print '&'
else:
  print '#'


这个例子中,如果我们是语句覆盖,那么俩条用例足以,保证每条语句都至少执行一次,最终的输出可以为:*& 和 %#


但是路径覆盖则不这么简单,路径中,第一个判定的真假和第二个判定的真假各种组合 成为各种路径。


所以要求输出至少为以下所有情况路径:*& 和 *# 和 %& 和 %# 排列组合共四种路径。

所以至少需要如下四条用例:

a = 5,b=5: *&

a = 5,b=0: *#

a = 0,b=5: %&

a = 0,b=0: %#


好了这就是路径覆盖,也是号称最强的覆盖法,在时间成本不够的情况下,优先选用路径覆盖是最全面的。



你可能觉得 其实对于同一段代码,可能不同的覆盖率方法的用例是一样的,这就对了!的确用例是可以重复的,某条用例既符合路径法,又符合判定法 等这种情况 是很常见的。


所以最难的就是如何用最少的用例来覆盖最多的情况,不单单指单一方法,而是6种方法!高手用 3条用例可能就覆盖了六种覆盖率的95%的情况。而一般玩家用了12条用例才覆盖这么多。白盒测试技术水准的差距是肉眼可见的 天壤之别。技术难度智商要求也是非常非常高。


(注意,目前国内的很多自称做白盒测试的同学,只是简单的单纯的代码而已,属于单元测试阶段,和开发自测差不太多,基本没有能流畅运用真正的逻辑覆盖率方法的人物,更没有能融会贯通用最巧 最少的用例覆盖最多情况的大能,就算是博主也经验不足,不敢这么夸海口。所以即便你学习白盒测试不够好,也不用受打击,只要你能做,你就已经超过了99.99%的同行了。)


最后还要给大家多介绍俩种白盒覆盖率方法,只是这俩种更加冷门,知道的人不多:


ESTCA覆盖法


也叫错误敏感测试用例分析规则。由Foster提出,属于根据程序中的谓词最容易出错的部分得出的规则,属于大数据的范畴。



LCSAJ覆盖法


也叫线性代码顺序和跳转覆盖法,是一个比较全面的测试方法。


每个LCSAJ定义为一段代码:起始于程序入口或者一个跳转点,结束于程序出口或一个跳转点。


整个方法的做法就是:分层测试


第一层用语句覆盖,第二层是分支覆盖,第三层就是一段LCSAJ覆盖,第四层就是任意相连的俩段LCSAJ覆盖。第五层就是任意相连的三层LCSAJ覆盖,以此类推。看起来更像是 一种集成测试的方法。


大家了解下即可,属于开拓眼界的东西。

相关文章
|
6月前
|
SQL 安全 关系型数据库
接上篇文章,在测试宝塔 WAF 的未授权访问漏洞时无意间还发现了一个 SQL 注入漏洞
接上篇文章,在测试宝塔 WAF 的未授权访问漏洞时无意间还发现了一个 SQL 注入漏洞,品相还不错,可执行任意 SQL 语句。 总之,吃了一惊,一个防 SQL 注入的工具居然也有 SQL 注入漏洞。 请看这段代码
573 6
|
测试技术
读完这篇文章后,才发现Allpairs这款工具,让测试用例变得如此简单
读完这篇文章后,才发现Allpairs这款工具,让测试用例变得如此简单
426 0
|
SQL 数据采集 关系型数据库
软件测试|一篇文章带你深入理解SQL约束
软件测试|一篇文章带你深入理解SQL约束
93 0
|
4月前
|
测试技术 API 持续交付
【Python自动化测试】文章探讨了Python在测试领域的关键作用,分为三部分
【7月更文挑战第2天】【Python自动化测试】文章探讨了Python在测试领域的关键作用,分为三部分:1) 自动化测试的重要性与Python的易用性、库支持、跨平台和社区优势;2) Unittest作为标准测试框架的基础用法,及Pytest的灵活性与强大功能;3) 实践中包括Selenium的Web UI测试、Requests的API测试,强调测试隔离、持续集成等最佳实践。Python助力高效稳定的软件测试。
56 2
|
5月前
|
监控 Shell 测试技术
一篇文章讲明白MonkeyAPP压力稳定性测试
一篇文章讲明白MonkeyAPP压力稳定性测试
305 1
|
5月前
|
JavaScript Java 测试技术
基于ssm+vue.js+uniapp小程序的高中信息技术课程在线测试系统附带文章和源代码部署视频讲解等
基于ssm+vue.js+uniapp小程序的高中信息技术课程在线测试系统附带文章和源代码部署视频讲解等
49 6
|
4月前
|
机器学习/深度学习 存储 Linux
我的OS Copilot测试文章
在阿里云管理控制台尝试重置密码时遇到错误,未能成功跳转至相应实例;但后续的密码重置流程顺利,安全组设置和SSH连接快速无阻,且体验到AccessKey预警系统的实用性。在处理代码时曾因未替换特殊字符报错,但最终解决了问题,实现了Python代码分析功能,确认系统为Linux,并对OS工具的交互性和实用性表示赞赏,特别是其与Linux环境的兼容性。遇到过一次生成实例的错误,但整体体验良好,有兴趣参与OS Copilot的开源开发。
|
4月前
|
运维 测试技术 双11
什么是性能测试,一篇文章告诉你!
性能测试评估系统在现实负载下的性能和可靠性,包括响应时间、吞吐量和稳定性。目的是发现瓶颈、评估系统能力、优化性能和确保可靠性。在**双十一大促**等高并发场景下,性能测试至关重要。它有助于合理规划资源,降低成本,提升效率。测试工程师需掌握性能调优,理解压力曲线图,识别最佳并发用户数和最大承载点。通过测试,确保系统在最佳效率下运行,避免资源浪费和用户满意度下降。
67 0
|
5月前
|
Web App开发 测试技术 iOS开发
一篇文章讲明白locust性能测试
一篇文章讲明白locust性能测试
79 0
|
6月前
|
JavaScript Java 测试技术
基于ssm+vue.js的在线测试管理系统附带文章和源代码设计说明文档ppt
基于ssm+vue.js的在线测试管理系统附带文章和源代码设计说明文档ppt
47 0