什么是白盒测试
白盒测试也称结构测试或逻辑驱动测试,是把测试对象看作一个透明白色的盒子,测试人员依据程序内部逻辑结构相关信息,设计或选择测试用例,对程序所有逻辑路径进行测试。
白盒测试是一种基于代码的测试,测试者必须检查程序的内部结构,从检查程序的逻辑着手,得出测试数据。
白盒测试一般是开发做单元测试用,但是也有测试自己做的,对测试能力要求比较高。
白盒测试的方法
白盒测试的基本方法主要有以下6种:
- 语句覆盖
- 分支覆盖
- 条件覆盖
- 判定条件覆盖
- 路径覆盖
- 组合覆盖
强度由低到高:语句覆盖、分支覆盖、条件覆盖、判定条件覆盖、条件组合覆盖、路径覆盖。
案例:
if A and B then Action1
if A or B then Action2
语句覆盖
语句覆盖,顾名思义就是针对代码语句。
设计出来的测试用例要保证程序中的每一个语句至少被执行一次。
通常语句覆盖被认为是“最弱的覆盖”,因为它仅仅考虑对代码中的执行语句进行覆盖而没有考虑各种条件和分支,比较难以发现代码中的问题。
例:案例中语句,设计一条测试用例即可:
A = true B = true C = true
分支覆盖
分支覆盖(判定覆盖),使得程序中每个判断的取真和取假至少经历一次,即判断的真假均曾被满足。
例:案例中的语句,设计两条测试用例即可:
teatcase1: A = true, B = true, C = true, D = false
teatcase2: A = true, B = false, C = false, D = false
条件覆盖
条件覆盖,要求所设计的测试用例能使每个判定中的每一个条件获得可能的取值,即每个条件至少有一次真值和假值。(不考虑组合情况)
第一个判断应考虑到 A=true, A=false, B=true, B=false
第二个判断应考虑到 C=true, C=false, D=true, D=false
例:案例中语句,可以设计测试用例满足下列条件,两条用例:
teatcase1: A = true, B = true, C = true, D = true
teatcase2: A = false, B = false, C = false, D = false
判定条件覆盖
判定条件覆盖,就是设计的测试用例可以使得判断中每个条件所有的可能取值至少执行一次(条件覆盖),同时每个判断本身所有的结果也要至少执行一次(判定覆盖)。
判定条件覆盖同时满足判定覆盖和条件覆盖,弥补了两者各自的不足,但是判定条件覆盖并未考虑条件的组合情况。
条件覆盖:
A=true, A=false, B=true, B=false
C=true, C=false, D=true, D=false
判断覆盖:
A and B = true, A and B = false
C or D = true, C or D = false
满足条件覆盖和判断覆盖,可以设计两条用例:
teatcase1: A = true, B = true, C = true, D = true (条件都为 true, A and B = true, C or D = true )
teatcase2: A = false, B = false, C = false, D = false (条件都为 false, A and B = false, C or D = false )
组合覆盖
组合覆盖也叫做条件组合覆盖,指设计的测试用例应该使得每个判定中的各个条件的各种可能组合都至少出现一次。
显然,满足条件组合覆盖的测试用例一定是满足判定覆盖、条件覆盖和判定条件覆盖的。
针对案例语句,条件组合覆盖时可以设计如下用例:
teatcase1: A = true, B = true, C = true, D = true
teatcase2: A = true, B = false, C = true, D = false
teatcase3: A = false, B = true, C = false, D = true
teatcase4: A = false, B = false, C = false, D = false
条件组合覆盖能够同时满足判定、条件和判定条件覆盖,覆盖度较高,但是组合覆盖的测试用例数量相对来说也是比较多的。
路径覆盖
路径覆盖,要求覆盖程序中所有可能的路径。
设计的测试用例可以覆盖程序中所有可能的执行路径。可以对程序进行彻底的测试用例覆盖,但是用例数量会增多很多。所以路径覆盖是最彻底的测试用例覆盖,但实际上可操作性不强。
可以设计测试用例满足下列条件:
teatcase1: A = true, B = true, C = true, D = true
teatcase2: A = false, B = false, C = false, D = false
teatcase2: A = true, B = true, C = false, D = false
teatcase3: A = false, B = false, C = true, D = true
......
总结
在实际操作中,要正确使用白盒测试的代码覆盖方法,就要从代码分析和代码调研入手,根据调研的结果,可以选择上述方法中的某一种,或者好几种方法的结合,设计出高效的测试用例,尽可能全面地覆盖到代码中的给每一个逻辑路径,只有适当的测试方法,才能帮助我们从代码的角度对产品做到最好的测试。
白盒测试的优劣
优点
- 迫使测试人员去仔细思考软件的实现。
- 帮助软件测试人员增大代码的覆盖率。提高代码质量,发现代码中隐藏的问题。
缺点
- 昂贵:系统庞大时,测试开销会非常大;测试人员要求比较高,人才昂贵。
- 测试基于代码,只能测试开发人员做的对不对,而不能知道设计是否正确,可能会漏掉一些功能需求。