测试流程
- 测试计划:根据需求说明书,制定测试的计划、进度
- 测试设计:按照软件的需求、规格,按照规范的方法对软件进行结构划分以及设计合适的测试用例
- 测试执行:输入测试用例,记录测试结果
- 测试总结:观察测试结果,与预期结果对比,找到软件的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=0
A=0,B=1
可以看出测试用例符合条件覆盖但只执行了if中true的分支,所以我们要设计即满足条件覆盖,又满足判定覆盖的用例:
A=1, B=1
A=0, B=0
条件组合覆盖
每个单条件中的true or false 都与别的每个单条件的true or false 组合过,如:
if(A>0 || B <0 || C==3)
...
else
...
此时有:
A>0 , A<=0
B>=0 , B<0
C==3 , C!=3
3对情况,所以有2×2×2=8种组合,即:
1. A>0 B>=0 C==3
2. A>0 B>=0 C!=3
3. A>0 B<0 C==3
4. A>0 B<0 C!=3
5. A<=0 B>=0 C==3
6. A<=0 B>=0 C!=3
7. A<=0 B<0 C==3
8. A<=0 B<0 C!=3
路径覆盖
我们知道我们的程序可以通过点和线用流程图表示出来,流程图中每个判定节点又会产生许多分支,这就导致产生了许多程序的执行路径,所以我们设计的测试用例就需要满足流程图中每个路径都走一遍,环路至少走一遍
我们设E为边数,N为节点数,P为判断节点数
则定义路径复杂度V(G)为:
V(G) = E - N + 2
V(G) = P + 1