白盒测试有哪些方法?

2017-05-08 18:23:54

白盒测试是按照程序内部的结构测试程序,通过测试来检测产品内部动作是否按照设计规格说明书的规定正常进行,检验程序中的每条通路是否都能按预定要求正确工作。这一方法是把测试对象看作一个打开的盒子,测试人员依据程序内部逻辑结构相关信息,设计或选择测试用例,对程序所有逻辑路径进行测试,通过在不同点检查程序的状态,确定实际的状态是否与预期的状态一致。

白盒测试是针对软件内部结构的测试,主要是用覆盖的方式对程序代码进行测试。下面,西安中软卓越的小编就白盒测试中的六种典型覆盖方法和大家进行探讨一下。

白盒测试有哪些方法?.png

1、语句覆盖

作为最基本的逻辑覆盖方法,语句覆盖的含义是:选择足够多的测试数据,使得被测程序中的每个语句至少执行一次。通过语句覆盖,可以直观地从源代码得到测试用例,无须细分每条判定表达式;然而,语句覆盖对程序的逻辑覆盖很少,对于一个包含多个条件的判定表达式,它只关心判定表达式的值,并没有分别测试判定表达式中每个条件取不同值的情况。所以语句覆盖无法全面反映多分支的逻辑运算,是很弱的逻辑覆盖标准。

举个非常简单的例子:

Public int foo (int aint b)

{

Return a/b;

}

这是一个求两数之商的函数。如果我们设计如下的测试用例:

TestCase: a=2b=1

这时候我们会发现,该函数的代码覆盖率达到了100%,并且设计的case可以顺利通过测试。但是显然该函数有一个很明显的bug:当b=0时,会抛出异常。

2、判定覆盖

判定覆盖也称分支覆盖。其含义为:不仅每个语句必须至少执行一次,而且每个判定的每种可能的结果都应该至少执行一次,即每个判定的每个分支都至少执行一次。举个例子,有如下流程图:

白盒测试有哪些方法?.png

针对该图我们想要做到判定覆盖,可以设计如下case

TestCase1:a=1b=1(路径:ab)

TestCase2:a=-1b=-1(路径:acd)

TestCase3:a=2b=-1(路径:ace)

判定覆盖相对于语句覆盖,其逻辑覆盖能力更强。然而判定覆盖也具有和语句覆盖一样的简单性,大部分的判定语句是南多个逻辑条件组合而成,它也仅判断判定表达式的最终结果,而忽略每个条件的取值情况,故在执行过程中必然会遗漏部分测试路径。

3、条件覆盖

条件覆盖于分支覆盖不同,条件覆盖要求所设计的测试用例能使每个判定中的每一个条件都获得可能的取值,即每个条件至少有一次真值、有一次假值。

仍然以上面流程图作为例子来说明。上图中涉及到的条件一共有4个:

a>0a<0b>0b<0

为了达到条件覆盖的目的,我们设计的用例需要在a点有:

a>0a0b>0b0

这些情况出现,并且在c点有:

a<0a0b<0b0

这些情况出现。现在可以设计如下用例:

TestCase1:a=1b=1(路径:ab)

TestCase1:a=-1b=-1(路径:acd)

TestCase1:a=-1b=0(路径:ace)

TestCase1:a=1b=-1(路径:ace)

通常而言条件覆盖比判定覆盖强,因为条件覆盖使得判定中的每一个条件都取到了不同的结果,这一点判定覆盖则无法保证。但条件覆盖也有缺陷,因为它只能保证每个条件都取到了不同结果,但没有考虑到判定结果,因此有时候条件覆盖并不能保证判定覆盖

4、判定/条件覆盖

由于判定覆盖不一定包含条件覆盖,条件覆盖也不一定包含判定覆盖。故提出一种既能满足判定覆盖标准又能满足条件覆盖标准的覆盖方法,即:判定/条件覆盖。其含义是:选取足够多的测试数据,使得判定表达式中的每个条件都取到各种可能的值,而且每个判定表达式也都取到各种可能的结果。判定/条件覆盖准则的缺点是未能考虑条件的组合情况。

5、条件组合覆盖

条件组合覆盖是更强的逻辑覆盖标准,其含义是:选取足够多的测试数据,使得每个判定表达式中条件的各种可能组合都至少出现一次。满足条件组合覆盖准则的测试数据必然满足判定覆盖、条件覆盖和判定/条件覆盖准则。因此,条件组合覆盖是述几种覆盖标准中最强的。针对前文提到的流程图,做条件组合覆盖时我们可以设计如下用例:

TestCase1:a=1b=1(路径:ab)

TestCase1:a=-1b=-1(路径:acd)

TestCase1:a=-1b=0(路径:ace)

TestCase1:a=1b=-1(路径:ace)

然而,条件组合覆盖存在两个不足之处:是线性地增加了测试数据的数量;二是满足条件组合覆盖标准的测试数据不一定能使序中的每条路径都执行到。

6、路径覆盖

路径覆盖要求选取足够多的测试数据,覆盖序中所有可能的路径。其优点是:可以对程序进行彻底的测试,比前述五种的覆盖面都广。然而,由于路径覆盖需要对所有可能的路径进行测试(包括循环、条件组合、分支选择等),故需要设计大量、复杂的测试用例,使得工作量呈指数级增长。

 以上简单描述了几种不用的逻辑覆盖方法的原则和优劣。在实际的操作中,要正确使用白盒测试的代码覆盖方法,就要从代码分析和代码调研入手,根据调研的结果,可以选择上述方法中的某一种,或者好几种方法的结合,设计出高效的测试用例,尽可能全面地覆盖到代码中的每一个逻辑路径

总之,软件测试的目的不仅是为了发现软件缺陷与错误,而且是对软件质量进行度量和评估,以提高软件的质量。

中软卓越,中国最具影响力IT培训机构之一,17年成就50万大学生IT职业梦想。依托于中软国际的企业背景,为尚未步入职场的同学提供基于岗位的IT项目实战训练。在中软卓越培训中心,你可以置身于真实的工作环境之中,由真实的项目经理带队,实操真实的项目案例,感受真实的工作压力,为你推荐真实的就业机会。

4个月,120天,历经中软国际真实项目案例的淬炼,踏入直通IT领域的绿色就业通道,西安中软卓越努力,缔造属于你的传奇!


本文由中软卓越(西安)汇集整理,转载请注明作者及出处。

如需学习java、UI设计、软件测试、Python、大数据、嵌入式、Linxu云计算,请点击咨询,加入我们让你的未来不再迷茫。

关于我们

“简称中软卓越”,是中软国际教育科技股份有限公司是大型IT人才培训机构,是人才战略的核心组成部分之一,承担集团发展过程中人才储备和培养的任务;专注IT培训37年,国内高端IT培训品牌,教育部指定官方IT人才培训机构。专注java培训、UI设计培训、软件测试培训、Python培训、大数据培训、嵌入式培训、Linxu云计算培训等培训课程。217家合作院校,880家合作企业,真实项目实战,素质拓展,职业规划。零首付,100%保障就业,先就业,后付款。

最牛逼的毕业学员入职名企享受高薪就业。880家合作企业,年培育学员人数逾6000人,毕业学员就职于中软国际、百度、腾讯、阿里巴巴、IBM、华为科技、中兴通讯、软通动力等知名企业。

还有什么疑问?我们全面为你解答!为您提供一对一专人服务,请点击下方咨询

  • 卓越资讯
  • 猜你想看
  • 常见问题

    Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。[详细课程]

    软件开发是根据用户要求建造出软件系统或者系统中的软件部分的过程;软件开发是一项包括需求捕捉、需求分析、设计、实现和测试的系统工程。[详细课程]

    软件测试是在规定的条件下对程序进行操作,以发现程序错误,衡量软件质量,并对其是否能满足设计要求进行评估的过程。[详细课程]

    Python是一种面向对象的解释型计算机程序设计语言,语法简洁清晰,特色之一是强制用空白符作为语句缩进,它常被昵称为胶水语言,能够把用其他语言制作的各种模块。[详细课程]

    UI设计分为实体UI和虚拟UI,互联网说的UI设计是虚拟UI,一般是指对软件的人机交互、操作逻辑、界面美观的整体设计。[详细课程]

    大数据,又称巨量资料,指的是所涉及的数据资料量规模巨大到无法通过人脑甚至主流软件工具,在合理时间内达到撷取、管理、处理、并整理成为帮助企业经营决策更积极目的的资讯。[详细课程]

    云计算是一种按使用量付费的模式,这种模式提供可用的、便捷的、按需的网络访问, 进入可配置的计算资源共享池(资源包括网络,服务器,存储,应用软件,服务),这些资源能够被快速提供,只需投入很少的管理工作,或与服务供应商进行很少的交互。[详细课程]

    西安市长安北路8号高速大厦三楼

    电话:029-61876930