白盒测试方法详解
测试流程语句覆盖判定覆盖条件覆盖判定条件覆盖条件组合覆盖路径覆盖测试流程
测试计划:根据需求说明书,制定测试的计划、进度测试设计:按照软件的需求、规格,按照规范的方法对软件进行结构划分以及设计合适的测试用例测试执行:输入测试用例,记录测试结果测试总结:观察测试结果,与预期结果对比,找到软件的bug语句覆盖
语句覆盖很好理解了,就是设计若干个测试用例,保证我们的每一行有效代码都能够被执行至少一次就可以了。
判定覆盖
又称分支覆盖,对每个有分支的语句,如 if else 等,对每种情况的所产生的分支都要走一遍。
条件覆盖
一开始看的时候我有点懵,看了几个实例才清楚,条件覆盖,即我们设计的所有测试用例,要包含了条件语句的每个条件的所有情况,如
if(A>0 && B ==3)...else...if(B<3 || C)...else...
此时,所有条件语句中有这么多种情况:
① A>0② A<=0③ B==3 ④ B!=3⑤ B<3⑥ B>=3⑦ C==true⑧ C==false
我们的所有测试用例,要把上述的所有情况包含进去,如:
用例一:A=1,B=3 , C=true 满足:① ③ ⑥ ⑦用例二:A=0, B=1 , C=false 满足:② ④ ⑤ ⑧
到这里我有点迷茫,似乎语句覆盖、判定覆盖、条件覆盖经常相同,找不出具体的执行差别,但这其实不重要,因为我们的测试点不同,测试方法针对的对象不一样,尽管整体上的测试流程没有明显的区别,但针对不同点测试时产生的效果明显不一样。
判定条件覆盖
因为满足了多有条件的覆盖,并不能保证每个分支都走一遍,如:
if(A>0 || B>0)...else...测试用例:A=1,B=0A=0,B=1
可以看出测试用例符合条件覆盖但只执行了if中true的分支,所以我们要设计即满足条件覆盖,又满足判定覆盖的用例:
A=1, B=1A=0, B=0
条件组合覆盖
每个单条件中的true or false 都与别的每个单条件的true or false 组合过,如:
if(A>0 || B <0 || C==3)...else...
此时有:
A>0 , A<=0B>=0 , B<0C==3 , C!=3
3对情况,所以有2×2×2=8种组合,即:
1. A>0 B>=0 C==32. A>0 B>=0 C!=33. A>0 B<0 C==34. A>0 B<0 C!=35. A<=0 B>=0 C==36. A<=0 B>=0 C!=37. A<=0 B<0 C==38. A<=0 B<0 C!=3
路径覆盖
我们知道我们的程序可以通过点和线用流程图表示出来,流程图中每个判定节点又会产生许多分支,这就导致产生了许多程序的执行路径,所以我们设计的测试用例就需要满足流程图中每个路径都走一遍,环路至少走一遍
我们设E为边数,N为节点数,P为判断节点数
则定义路径复杂度V(G)为:
V(G) = E - N + 2V(G) = P + 1