逻辑覆盖测试是通过对程序逻辑结构的遍历实现程序的覆盖。从覆盖源代码的不同程度可以分为以下六个标准:语句覆盖、判定覆盖(又称为分支覆盖)、条件覆盖、判定-条件覆盖(又称为分支-条件覆盖)、条件组合覆盖和路径覆盖。
先看一下具体例子的源代码(C语言):
1. /*
2. * 白盒测试逻辑覆盖测试范例
3. * 作者:胡添发(hutianfa@126.com)
4. */
5. int logicExample(int x, int y)
6. {
7. int magic=0;
8. if(x>0 && y>0)
9. {
10. magic = x+y+10; // 语句块1
11. }
12. else
13. {
14. magic = x+y-10; // 语句块2
15. }
16.
17. if(magic < 0)
18. {
19. magic = 0; // 语句块3
20. }
21. return magic; // 语句块4
22. } |
一般做白盒测试不会直接根据源代码,而是根据流程图来设计测试用例和编写测试代码,在没有设计文档时,要根据源代码画出流程图:
做好了上面的准备工作,接下来就开始讲解六个逻辑覆盖标准:
一、语句覆盖
1、概念:
设计足够多的测试用例,使得被测试程序中的每条可执行语句至少被执行一次。在本例中,可执行语句是指语句块1到语句块4中的语句。
2、测试用例:
{x=3, y=3}可以执行到语句块1和语句块4,所走的路径:a-b-e-f
{x=-3, y=0}可以执行到语句块2、语句块3和语句块4,所走的路径:a-c-d-f
这样,通过两个测试用例即达到了语句覆盖的标准,当然,测试用例(测试用例组)并不是唯一的。
3、测试的充分性:
假设第一个判断语句if(x>0 && y>0)中的“&&”被程序员错误地写成了“||”,即if(x>0 || y>0),使用上面设计出来的一组测试用例来进行测试,仍然可以达到100%的语句覆盖,所以语句覆盖无法发现上述的逻辑错误。
在六种逻辑覆盖标准中,语句覆盖标准是最弱的。
|