首页 > 代码库 > 白盒测试方法

白盒测试方法

白盒测试是单元测试阶段常用到的测试方法,其特点有:?

(1)可以构成测试数据,使特定程序部分得到测试;

(2)有一定的充分性度量手段;

(3)可获得较多工具支持;

(4)通常只用于单元测试。

下边通过一段代码来看一下白盒测试中的逻辑覆盖:

技术分享

那么为了清晰,我们画出一个该程序的流程图:

 

技术分享

 

1、语句覆盖

语句覆盖是最弱的逻辑覆盖准则。要求设计足够多的测试用例,使得每一条语句至少被执行一次?。

对于示例来说?,可以设计:

{x=4,y=6,z=9}执行路径:abd

(理解:不能短路任何语句,比如路径走acd就会短路语块1)?

2、分支覆盖

?要求设计足够多的测试用例,使得每一个判定的?每一个分支至少各执行一次。

?对于示例来说?,可以设计:

{x=5,y=4,z=9}执行路径:abe

{x=2,y=6,z=9}执行路径:acd?

(理解:只要将每个判定即每个菱形框的真假都各取过一次即可,比如走路径abd和ace也是可以的)?

3、条件覆盖

?要求设计足够多的测试用例,使得每一个判定的?每一个条件的每一个取值(真或假)至少各执行一次。

对于示例来说?,可以设计:

{x=4,y=4,z=11}  条件取值:TFTF

{x=2,y=6,z=9}  条件取值:FTFT

{x=5,y=4,z=9} 条件取值:TTFF

(理解:只要将每个判定即每个菱形框里的每个条件真假都各取一次,但注意,比如TFTF时由于第二个判定里的逻辑运算符是||,那么条件y>5不执行,同理,FTFT时z<10不执行,就引出了第三条测试用例)

4、分支条件覆盖

?要求设计足够多的测试用例,使得每一个判定的?每一个条件的每一个取值(真或假)至少各执行一次,并且使得每一个判定的?每一个分支至少各执行一次。

对于示例来说?,可以设计:

{x=4,y=6,z=9}  条件取值:TTTT 执行路径:abd

{x=2,y=4,z=11}  条件取值:FFFF 执行路径:ace

{x=5,y=6,z=11} 条件取值:TFFT 执行路径:acd

(理解:先满足每个条件的真假都各取一次,最好使用TTTT和FFFF,这样肯定会满足abd和ace路径,那么再考虑执行过程中TTTT中的第4个T和FFFF中的第2个F被屏蔽的问题,再加一条TFFT的就好了,因为此时分支已经全部覆盖,所以第三条不用考虑分支覆盖的问题)?

5、条件组合覆盖

?要求设计足够多的测试用例,使得每一个判定的?每一个条件(同一个判定中)的可能的组合至少被各执行一次。

对于示例来说?,可以设计:

{x=4,y=4,z=11}  条件取值:TFTF

{x=4,y=6,z=9}  条件取值:TTTT 

{x=2,y=6,z=9} 条件取值:FTFT 

{x=2,y=4,z=11} 条件取值:FFFF

(理解:将每一个判定框中的条件组合再重新组合,比如第一个判定框中的两个条件的取值组合TT__、TF__、FT__、FF__和第二个判定框中的两个条件的取值组合__TT、__TF、__FT、__FF进行组合,但这8个组合必须都出现一次。所以说这个例子中条件组合判断的测试用例至少4个)

?6、路径覆盖

?要求设计足够多的测试用例,覆盖程序中的所有可能路径。

对于示例来说?,可以设计:

{x=4,y=6,z=9}  执行路径:abd

{x=5,y=4,z=9}  执行路径:abe

{x=4,y=6,z=11} 执行路径:acd

{x=2,y=4,z=11} 执行路径:ace

(理解:将每一个判定的分支组合起来,并保证每个判定的每个分支的所有可能组合都出现,比如第一个判定框可能为真,也可能为假。若第一个判定框为真,那么就有abd和abe的可能组合;若第一个判定框为假,那么就有acd和ace的可能组合,所有的可能情况就出来了,不难看出,至少也需要4个测试用例)

白盒测试方法