what's the 白盒测试
what's the 白盒测试
白盒测试又称结构测试、透明盒测试、逻辑驱动测试或基于代码的测试。盒子指的是被测试的软件,白盒指的是盒子是可视的,你清楚盒子内部的东西以及里面是如何运作的。白盒要考虑测试用例对程序内部的覆盖程度,最好的白盒测试是能覆盖到每一条路径,但是由于路径数目极大,要执行每一条路径是不可能。但我们能做到就是让覆盖率变高一点,下面要介绍的六种覆盖测试方法,看看他们的覆盖程度。
六种白盒测试:(覆盖率从低到高排序)
- 语句覆盖
- 判定覆盖
- 条件覆盖
- 判定/条件覆盖
- 条件组合覆盖
- 路径覆盖
一、语句覆盖
“语句覆盖”是一个比较弱的测试标准,它的含义是:在测试时,首先设计若干个测试用例,然后运行被测程序, 使程序中的每个可执行语句至少执行一次。这时所谓“若干个”,自然是越少越好。
用例设计:
从本例可看出,语句覆盖实际上是很弱的,程序中每个语句都得到执行这一点来看,语句覆盖的方法似乎能够比较全面地 检验每一个语句。但它也绝不是完美无缺的。假如这一程序段中两个判断的逻辑运算 有问题,如果第一个条件语句中的AND错误地编写成OR,上面的测试用例是不能发现这个错误的;又如第三个条件语句中X>1误写成X>0,这个测试用例也不能暴露它,此外,沿着路径abd执行时,X的值应该保持不变,以为每个语句都经历过,似乎可以放心了。其实这种测试不十分可靠。语句覆盖在测试被测程序中,除去对检查不可执行语句有一定作用外,并没有排除被测程序包含错误的风险。
总之,一般认为“语句覆盖”是很不充分的一种标准。
优点:可以很直观地从源代码得到测试用例,无须细分每条判定表达式。
缺点:由于这种测试方法仅仅针对程序逻辑中显式存在的语句(即可执行语句),但对于隐藏的条件和可能到达的隐式逻辑分支,是无法测试的。
二、判定覆盖
比“语句覆盖”稍强的覆盖标准是“判定覆盖”(或称branch coverage分支覆盖)标准。判定覆盖准则进行测试是指,设计若干测试用例,运行被侧程序,使得程序中每个判断的取真分支和取假分支至少经历一次,即判断的真假值均曾被满足。判定覆盖又称为分支覆盖
优点:
判定覆盖比语句覆盖要多几乎一倍的测试路径,当然也就具有比语句覆盖更强的测试能力。同样判定覆盖也具有和语句覆盖一样的简单性,无须细分每个判定就可以得到测试用例。
缺点:
往往大部分的判定语句是由多个逻辑条件组合而成(如,判定语句中包含AND、OR、CASE),若仅仅判断其整个最终结果,而忽略每个条件的取值情况,必然会遗漏部分测试路径。
三、条件覆盖
设计用例时针对判断语句里面每个条件表达式true 和 false各取值一次,不考判断语句的计算结果
测试用例条件:
A=T A=F
B=T B=F
四、判定条件覆盖(分支条件覆盖)
设计测试用例时,使得判断语句中每个条件表达式的所有可能结果至少出现一次,每个判断语句本身所有可能结果也至少出现一次。
测试用例条件:
A ^ B = T A ^ B = F
A=T A=F
B=T B=F
五、条件组合覆盖
设计测试用例时,使得每个判断语句中条件结果的所有可能组合至少出现一次
测试用例条件:
A= T B= T
A= T B= F
A= F B= T
A= F B= F
六、路径覆盖
设计测试用例时,覆盖程序中所有可能的执行路径
优点:这种覆盖方法可以对程序进行彻底的测试用例覆盖,比前面讲的五种方法覆盖度都要高。
缺点:于路径覆盖需要对所有可能的路径进行测试(包括循环、条件组合、分支选择等),那么需要设计大量、复杂的测试用例,使得工作量呈指数级增长。路径覆盖虽然是一种比较强的覆盖,但未必考虑判断语句中条件表达式结果的组合,并不能代替条件覆盖和条件组合覆盖。
参考:https://blog.csdn.net/write6/article/details/78702977
参考:https://blog.csdn.net/tsj11514oo/article/details/49161073