白盒测试:为什么要做白盒测试

白盒测试:为什么要做白盒测试

2016-08-25

目录

1 预备知识
 2 白盒测试的认识误区
   2.1 从一个比喻开始
   2.2 误区之一:白盒测试太耗时间,不值得一做
   2.3 误区之二:系统测试可以发现所有问题,不必做白盒测试
   2.4 误区之三:白盒测试必须在真实环境下进行
   2.5 误区之四:个人能力强的不必做白盒测试
   2.6 误区之五:白盒测试仅证明该怎么跑的代码是这样跑了,测不出什么问题!
 3 参考

1 预备知识



返回

软件测试技术不同分类:

  • 按是否关注软件结构和算法可分为:黑盒测试、白盒测试
  • 按测试过程中软件是否被执行可分为:为静态测试、动态测试
  • 按测试阶段可分为:单元测试、集成测试、系统测试、验收测试
  • 按目标/特性客分为:功能测试、安全性测试、兼容性测试、可靠性测试、性能测试、易用性测试等。

白盒测试包含静态测试和动态测试。白盒测试也常在单元测试与集成测试阶段进行,但这是相对的,与当前项目遵循的研发流程有关,某些流程把白盒测试划分为单元测试与集成测试,而另一些流程,把白盒测试划分为模块单元测试、模块系统测试、多模块集成测试,还有一些流程把单元测试与集成测试混为一体,统称为持续集成测试。

2 白盒测试的认识误区



返回

白盒测试作为软件质量保证中的重要一环,但由于以下认识误区,导致白盒测试被忽视:

  • 误区之一:白盒测试太耗时间,不值得一做
  • 误区之二:系统测试可以发现所有问题,不必做白盒测试
  • 误区之三:白盒测试必须在真实环境下进行
  • 误区之四:个人能力强的不必做白盒测试
  • 误区之五:白盒测试仅证明该怎么跑的代码是这样跑了

本篇总结实施白盒测试的几个主要误区,我们先从认识上端正对白盒测试的看法:

2.1 从一个比喻开始

前两个认识误区可以从从一个比喻开始讲起。

假设有一台的面包机,从上面倒入面粉与水,开动机器后从下面出来的就是烤好了的面包,这个机器的功能比较单一,接口很清晰,输入是面粉与水,输出是面包。现在假定这个面包机多年未用,内部都生锈了,现在要清洗它,类似于我们开发的软件,软件有Bug,那得通过测试来清理。

图1 面包机

那如何更快速的清洗这台面包机呢?有两种洗法:

  • 一种是拿水从上往下灌,这是系统测试的方法;
  • 另一种是拆开来洗,拆开机器后,拿抺布沾点清洁剂,把各零件的坑坑槽槽擦洗一遍。

无疑,上面第二种方法是正确的,我们的前提是:清洗多年未用的面包机,铁锈够多,如果洗不干净,造出的面包都是致癌物质。当然,清洗面包机还只能算简单劳动,清理软件中的Bug要复杂得多,一个if语句有两条分支,一个while循环判断也是两条分支,还有break、continue、return等,想想看,一个1万行规模的软件能有多少个分支!一个分支就是一条坑坑槽槽,而且软件Bug还具备动态特性,不是静止的明摆在哪儿。

所以,软件的白盒测试不可或缺,因为遗留Bug的影响很大,就像面包机没洗净留铁锈会致癌,还因为软件系统远比面包机复杂,不拆开来怎么能洗干净!

2.2 误区之一:白盒测试太耗时间,不值得一做

白盒测试是高效测试

尽管白盒测试如此重要,为什么还有许多企业不愿做白盒测试,有一个很重要的原因是:认为白盒测试太低效,不值得去做。

这种观点主要有两种误解导致:

  • 决策者评估各阶段测试的有效性,往往仅以发现问题的数量为依据,这好比锈蚀斑斑的面包机,第一次冲水下去,看到大量浊水流出就很有成就感,其实这只是表象。
  • 把发现问题与解决问题割裂开来了

实际上:

  • 只做系统测试的结果是:第一次冲水,很有成效,第二次冲水,还能冲出点铁锈,第三次就没什么效果了。采用该手段并不能有效的达成既定质量目标。
  • 研发质量改善,不只发现问题,还要定位问题、解决问题。白盒测试是拆开来洗,发现、定位与解决问题不仅是彻底的,也是直接的,效率非常高,所以,单以发现问题数评估一个测试过程是否有效不尽准确,我们应该综合评估一个问题从被发现,到定位、解决,以及针对它完成回归测试的总效率。

下图来源于Capers Jones与McGraw-Hill的“Applied Software Measurement”文章,从该统计数据可看出,针对一个功能点的测试,若将问题发现、定位与解决都计算进去,单元测试效率最高,是集成测试的2倍,是系统测试的3倍。

图2 各阶段测试效率

而且,经验数据表明,编码阶段的一个问题遗留到验收测试去解决,所须费用将增加5倍,如下图,一个问题越遗留到后面阶段解决,付出代价就越高,而且是成倍递增关系。

图3 各阶段解决问题代价

依据上述原因,我们评估白盒测试效率时,通常将发现问题总数乘上一个系数K,以此为据再与其它测试方段的发现问题效率做对比,来权衡白盒测试值不值得去做。系数K取值与产品形态相关,按照实际经验,系数K取值区间为1.5~2.5,产品越复杂,出现问题越不容易解决的,K值要往大调。

2.3 误区之二:系统测试可以发现所有问题,不必做白盒测试

白盒测试能彻底解决编码阶段引入的问题

不同阶段的测试发现问题的特点各不相同,比如:

  • 单元测试阶段,容易发现逻辑问题、边界条件、变量未初始化、内存越界等问题,
  • 集成测试容易发现接口错误、任务配合问题等,
  • 系统测试容易发现业务流程问题、界面操作问题等。

如果某阶段的测试没做,把问题遗留后面阶段,又如何能保证查错的彻底性。比如使用非法内存,出问题是否表现出来是随机的,如果操作非法内存当前被系统还认为是有效的,系统并不死机,但某些情况下,操作非法内存会死机,而另一些情况,非法内存操作将不期望变化的变量改写了,会导致其它莫名其妙的问题。类似这样的问题,在白盒测试阶段很容易发现,也容易定位解决,但遗留系统测试阶段,就很难去发现、去定位。

在V模型中,软件开发过程与测试行为具有不同层次的对应关系,如下图:

图4 V模型

单元测试针对编码阶段引入的问题,集成测试与功能测试针对软件设计中引入的问题,验收测试针对需求与规格。

单元测试不要或缺的重要原因是:编码阶段引入的问题占很高比例,不进行单元测试就难以保证系统最终的稳定性。

2.4 误区之三:白盒测试必须在真实环境下进行

有的时候真实环境很难搭建,或搭建了也很难测试,这导致测试无法顺利进行。

近代量子力学有一个海森堡测不准原理,讲的是某个粒子的位置与动量不能同时被测量出来,由测量存在干扰,对其中一个参数测量越准确,另一个参数就越不准确。测不准原理在我们日常生活中很常见,比如要测试某物质的导电性,我们串联接上一个安培计来观察电流,但是,安培计本身也带电阻,导致测不准,测量值会偏小。

在软件测试领域也存在类似情况,比如要测试系统的CPU占用,于是添加代码统计CPU占用率,但添加的代码运行时,它本身也会消耗CPU。再如,为了实施白盒测试,必然追加测试代码,比如:构造特定运行环境、替换桩函数使之在特定情况下返回特定值,这些都改变了被测对象自身的特性,追求完全准确的测试非常困难。

所以,我们并不是一定要追求在真实环境下做测试,而是要评估非真实环境(或仿真环境)下的测试对最终结果能产生多大偏离。

2.5 误区之四:个人能力强的不必做白盒测试

能力强者不必做白盒测试,这显然是谬论。一个人能力再强,软件开发中都会犯错误,只不过能力强的,犯错误少些而已。

2.6 误区之五:白盒测试仅证明该怎么跑的代码是这样跑了,测不出什么问题!

白盒测试针对的是规格,而非可见代码,通过可见代码做测试只是手段,最终目的是要测规格,所以我们白盒测试不仅要测可见代码,也测试不可见代码,如缺失的else分支、default分支,甚至漏写的处理过程都在测试范围之内。

3 参考

[1] 第4代白盒测试方法之“为什么要做白盒测试”

[2] 第4代白盒测试方法之“实施白盒测试的几个误区”

时间: 2024-08-05 01:24:44

白盒测试:为什么要做白盒测试的相关文章

入门级----黑盒测试、白盒测试、手工测试、自动化测试、探索性测试、单元测试、性能测试、数据库性能、压力测试、安全性测试、SQL注入、缓冲区溢出、环境测试

黑盒测试 黑盒测试把产品软件当成是一个黑箱子,只有出口和入口,测试过程中只要知道往黑盒中输入什么东西,知道黑盒会出来什么结果就可以了,不需要了解黑箱子里面是如果做的. 即测试人员不用费神去理解软件里面的具体构成和原理,只要像用户一样看待产品就可以了. 例如银行转账功能,不需要知道转账的具体实现代码是怎样工作的,只需要把自己想象成各种类型的用户,模拟多种转账情况看系统是否能正常转账即可. 但是仅仅像用户一样去测试又是不够的.如果只做黑盒测试,必然是存在一定的风险的. 例如某个安全性较高的软件系统,

白盒测试简介

白盒测试 概览 白盒测试也叫透明盒测试,或者叫结构测试,是用来测试软件内部结构或者应用的工作情况的测试方法,在白盒测试中,设计测试用例时会用到对系统内部结构理解和一定的编程技巧.测试员需要选择合适的输入来覆盖路径,并决定合适的输出. 白盒测试可以应用在单元测试,集成测试和系统测试上.尽管传统测试者更倾向于在单元测试层面做白盒测试,但是现在白盒测试在集成测试和系统测试上的应用越来越频繁.白盒测试可以用于单元内的路径覆盖,集成测试时的单元间路径覆盖,或者在系统测试时子系统建的路径覆盖.虽然这种方法会

浅谈黑盒测试和白盒测试

1. 黑盒测试和白盒测试的直观图 从图中可以直接看出来,黑盒测试就当整个程序是个黑盒子,我们看不到它里面做了些什么事情,只能通过输入输出看是否能得到我们所需的来测试.而白盒测试可以当盒子是透明的,里面的一切我们都看的清楚,从而我们可以通过去测内部结构来测试. 2. 黑盒测试 (Black-Box Testing) 黑盒测试又称为功能测试.数据驱动测试或基于规格说明书的测试,是一种从用户观点出发的测试.测试人员一般把被测程序当作一个黑盒子. 黑盒测试主要测到的错误类型有:不正确或遗漏的功能:接口.

白盒测试:理论基础

白盒测试:理论基础 2016-08-23 目录 1 白盒测试的概念2 白盒测试的主要目的3 测试覆盖标准4 白盒测试的主要方法  4.1 逻辑驱动测试    4.1.1 语句覆盖    4.1.2 判定覆盖(分支覆盖)    4.1.3 条件覆盖    4.1.4 判定/条件覆盖    4.1.5 条件组合覆盖    4.1.6 黑盒法补充测试用例  4.2 路径测试    4.2.1 基本路径测试      1) 控制流图      2) 独立路径      3) 基本路径测试       4

白盒测试中如何实现真正意义上并发测试(Java)

在这个话题开始之前,首先我们来弄清楚为什么要做并发测试? 一般并发测试,是指模拟并发访问,测试多用户并发访问同一个应用.模块.数据时是否产生隐藏的并发问题,如内存泄漏.线程锁.资源争用问题. 站在性能测试的角度,并发测试不是为了获得性能指标,而是为了发现并发引起的问题. 那么并发对应的技术实现到底是怎样的呢? 简单地说,并发是指多个进程或线程在某一时刻同时处理指定的操作,有点类似于性能测试中集合点的概念,讲究同时性. 普及到这里,接下来讨论技术实现: 最近在项目里面发现一些开发人员做动态测试模拟

软件测试之“白盒测试”

[引言]工作关系,作为曾经的独立测试部门,现在与开发团队一起组成Scrum Team融合阶段. 因为以前的项目系统问题较多,上边大老板为了提高开发团队的代码提交质量,要求开发除了必要的Unit Test之外,也到做一些E2E的Functioanl Testing俗称Dev Testing:而QA的SIT Testing则可以侧重更广的E2E范围甚至直接上Regression. 而跟开发最近几次的会议讨论中,发现很多开发人员多次提出Dev Testing的侧重点和测试范围,并反复提到很可能与QA

黑盒测试,白盒测试,测试用例设计

1. 黑盒测试和白盒测试的直观图 从图中可以直接看出来,黑盒测试就当整个程序是个黑盒子,我们看不到它里面做了些什么事情,只能通过输入输出看是否能得到我们所需的来测试.而白盒测试可以当盒子是透明的,里面的一切我们都看的清楚,从而我们可以通过去测内部结构来测试. 2. 黑盒测试 (Black-Box Testing) 黑盒测试又称为功能测试.数据驱动测试或基于规格说明书的测试,是一种从用户观点出发的测试.测试人员一般把被测程序当作一个黑盒子. 黑盒测试主要测到的错误类型有:不正确或遗漏的功能:接口.

Charpter6 关于白盒测试

一.什么是白盒测试 黑盒测试:已知产品的功能设计规格,可以进行测试证明每个实现了的功能是否符合要求. 白盒测试:已知产品的内部工作过程,可以通过测试证明每种内部操作是否符合设计规格要求,所有内部成分是否以经过检查. 二.白盒测试的目的 保证一个模块中的所有独立路径至少被执行一次: 对所有的逻辑值均需要测试真.假两个分支: 在上下边界及可操作范围内运行所有循环: 检查内部数据结构以确保其有效性. 三.关于白盒测试覆盖 首先,白盒测试使用穷举测试是不可行的.白盒测试考虑的是测试用例对于程序内部逻辑的

我对白盒测试的理解与运用。。

在每个项目开发完成的初步阶段,应当为自己的软件进行测试,包括黑盒与白盒测试.我对白盒测试的理解是将所有有可能输入的数据进行验证,每个输入对应的输出我们能够根据自己软件的目的来进行 判断,它能够正确的判断出哪个环节或者是那个部分出现了问题,就好比一个判断语句,我如果能够通过正确的这一条线,那么我一定可以通过不正确的另一条线,这样能够判断那部分是否出现了问题,没有 通过判断条件进入对应的部分, private void setContent(String Message, int state) {/