在软件测试中,大家对于白盒测试应该都很熟悉,白盒测试是与黑盒测试完全相反的一种测试,正如它们的名字一样相反。黑盒测试是基于输入和输出的测试,不用考虑其内部的执行情况,而白盒测试则是依赖于程序内部构成来进行的一种测试。
白盒测试又称结构测试、逻辑驱动测试或基于程序的测试。白盒测试一般被用来分析程序的内部结构。白盒测试的测试者可以看到被测程序的内部,因此,白盒测试要求对被测的程序做到一定程度的覆盖,并且要求软件中的各类成分都要被测试,而白盒测试的优良标准也会以程序的某种成分是否被测试来评判,这也被称为基于覆盖的测试技术。
白盒测试在不同的时期提出了不同的覆盖准则,到现在已经有几十种不同的覆盖准则。
这次从两个方面来介绍一些用的比较广泛并且普遍被接收的覆盖准则:
一、控制流测试
在软件的发展历史中,人们发现非结构化的程序会给测试,排错及维护带来极大的不便,因此人们开始要求写出的程序是结构良好的,符合结构化的。而控制流图在用来刻画程序结构已经非常成熟。此后人们按照覆盖准则在控制流中提出了几个著名的覆盖准则。
1、语句覆盖准则
语句覆盖准则是最简单的测试方法之一,当然也是比较暴力的一种测试方法、其要求被测程序的每条语句都被运行,而在控制流图中则表现在每条语句对应的节点都被覆 盖。语句测试的覆盖率表达为在控制流图中被覆盖的节点数[NODE(LT)]除以控制流图中的所有节点数(NG)。
表达式为 语句测试的覆盖率 = ||NODE(LT)||/||NG ||
2、分支覆盖准则
语句覆盖测试时最基本的测试手段,因此其对很多软件错误而言还是无能为力,所以在这个时候更强的覆盖准则就被提出来了。分支测试是要求在软件测试中每一分支至少要获得一个“真”和一次“假”;即为每一个分支都必须进行一次正确和一次错误的测试。因此也称分支覆盖测试包含语句覆盖测试。分支测试的覆盖率表达式为控制流图中所有被覆盖的有向边数[EDGE(LT)]除以控制流图中的所有有向边的总数(EG)。
表达式为 分支测试的覆盖率 = ||EDGE(LT)||/||EG||
3、路径覆盖准则
路径覆盖准则是要求在观察到的程序的整个路径中,要求程序的运行能够覆盖所有的完整路径。
LT边说GP中的被覆盖的完整路径,EP(GP)为控制流图中的所有完整路径,其覆盖率的表达式为:
路径覆盖测试的覆盖率 = ||LT||/||EP(GP)||
二、数据流测试
1、数据流覆盖准则
在数据流测试中最简单的测试方式是测试每一个数据定义的正确性。其定义为: 如果对具有数据流信息的控制流图GP中的每一个变量x的定义性出现,若该定义性出现能够可行的传递到该变量的某一个引用性出现,那么LT重存在一条路径A,它包含一条子路径A`,使得A`将该定义出现传递到某一个引用性出现。则称测试数据集T对测试程序P满足定义覆盖准则。
以上准则即为在白盒测试中适用性高的其中几个。