白盒测试之测试用例设计方法
什么是白盒测试
按照测试方法分类,测试可以分为白盒测试 和黑盒测试 两种。
白盒测试也称结构测试或逻辑驱动测试 ,是把测试对象看作一个透明白色的盒子,测试人员依据程序内部逻辑结构相关信息,设计或选择测试用例,对程序所有逻辑路径进行测试。
所以白盒测试是一种基于代码 的测试,测试者必须检查程序的内部结构,从检查程序的逻辑着手,得出测试数据。
白盒测试一般是开发做单元测试用,但是也有是测试自己做的,那么对测试能力要求比较高
白盒测试的特点
测试人员需要了解软件的实现;
可以检测代码中的每条分支和路径;
揭示隐藏在代码中的错误;
对代码的测试比较彻底;
实现代码结构上的优化;
白盒测试投入较大,成本高;
白盒测试不验证规格的正确性。
白盒测试的设计方法
静态设计方法
桌面检查
代码审查
代码走查
代码扫描工具
动态设计方法
逻辑覆盖法
基本路径测试法
java
if A and B
then action1
if C or D
then action2
语句覆盖
顾名思义就是针对代码语句。我们设计出来的测试用例要保证程序中的每一个语句至少被执行一次
上例中,设计一条测试用例即可: A=true B=true C=true
通常语句覆盖被认为是"最弱的覆盖",因为它仅仅考虑对代码中的执行语句进行覆盖而没有考虑各种条件和分支,比较难以发现代码中的问题。
分支(判定)覆盖
程序中每个判断的真和假至少经历一次,即判断的真假均被满足
判定是指A and B C or D
条件是指 A B C D
java
A and B 为true
A and B 为false
C or D 为true
C or D 为false
上例中,两条测试用例即可:
testcase1: A=true,B=true,C= true,D=false
testcase2: A=true,B=false,C= false,D=false
条件覆盖
条件覆盖要求所设计的测试用例能使每个判定的每一个条件都获得可能的取值,即每个条件至少有一次真值和假值。(不考虑组合情况)
第一个判断应考虑到A=true,A=false,B=true,B=false
第二个判断应考虑到C=true,C=false,D=true,D=false
所以上例中可以设计测试用例满足下列条件,两条用例:
testcase1:A=true,B=true, C=true,D=true
testcase2:A=false, B=false, C= false,D=false
判定条件覆盖
2+3
设计的测试用例使得判断中每个条件所有的可能取值至少执行一次(条件覆盖)同时每个判断本身所有的结果也要至少执行一次(判定覆盖)。不难发现判定条件覆兰同时满足判定覆盖和条件覆盖,弥补了两者各自的不足,但是判定条件覆盖并未考虑条件的组合情况。
条件覆盖: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
所以满足条件覆盖和判断覆盖,我们可以设计两条用例:
TestCase1: A=true, B=true,C=true,D=true(条件都为True,Aand B=True,Cor D =True)
TestCase2: A=false,B=false, C=false, D=false (条件为False,A and B=False, C or D =False)
组合覆盖
也叫条件组合覆盖,我们设计的测试用例应该使得每个判定中的各个条件的各种可能组台都至少出现一次 。显然,满足条件组合覆盖的测试用例一定是满足判定覆盖、条件覆盖和判定条件覆盖的。
针对这个案例,做条件组合覆盖时我们可以设计如下用例:
TestCase1: A=True, B=True,C=True,D=True
TestCase2: A=True, B=False, C=True,D=False
TestCase3: A=False, B=True,C=False,D=True
TestCase4: A=False, B=False,C=False,D=False
路径覆盖
要求覆盖程序中所有可能的路径 。意思是说我们设计的测试用例可以覆盖程序中所有可能的执行路径,可以对程序进行彻底的测试用例覆盖,但是用例数量会增多很多,所以路径覆盖是最彻底的测试用例覆盖但实际上可操作性不强。
所以可以设计测试用例满足下列条件:
- A=true,B=true,C=true,D=true
- A=false,B=false,C = false,D=false
- A=true,B=true,C=false,D=false
- A=false,B=false,C= true,D=true
- A=true,B=true,C=false,D=false
...
总结
以上简单描述了几种不用的白盒测试方法的原则和优劣。在实际的操作中,要正确使用白盒测试的代码覆盖方法,就要从代码分析和代码调研入手,根据调研的结果,可以选择上述方法中的某一种,或者好几种方法的结合,设计出高效的测试用例,尽可能全面地覆盖到代码中的每一个逻辑路径,只有适当的测试方法,才能帮助我们从代码的角度对产品做到最好的测试。
白盒测试的优势:
1、优点
迫使测试人员去仔细思考软件的实现
帮助软件测试人员增大代码的覆盖率,提高代码的质量,发现代码中隐藏的问题
2、缺点
昂贵:系统庞大时,测试开销会非常大;测试人员要求比较高,人才昂贵;
测试基于代码,只能测试开发人员做的对不对,而不能知道设计是否正确,可能会漏掉一些功能需求