路径覆盖
1.什么是路径覆盖
路径覆盖是指选取足够多的测试数据,使程序的每条可能路径都至少执行一次(如果程序图中有环,则要求每个环至少经过一次)。路径覆盖是覆盖率最高的一种覆盖技术。
路径覆盖要求设计足够多的测试用例,在白盒测试法中,覆盖程度最高的就是路径覆盖,因为其覆盖程序中所有可能的路径。对于比较简单的小程序来说,实现路径覆盖是可能的,但是如果程序中出现了多个判断和多个循环,可能的路径数目将会急剧增长,以致实现路径覆盖是几乎不可能的。
路径覆盖率的公式:路径覆盖率=被执行到的路径数/程序中总的路径数。
2.路径覆盖的测试步骤
1、将程序流程图转换成控制流图;
2、经过语法分析求的路径表达式;
3、生成路径图;
4、进行路径编码;
5、经过译码得到执行的路径;
6、通过路径枚举产生特定路径测试用例;
7、修正的条件判断覆盖率。
3.完全路径覆盖测试方法[1]
虽然路径覆盖是覆盖率最高的,但是,简单的程序路径数量很少,而复杂的程序路径数量巨大,要实现路径覆盖几乎不可能,即测试量过大;另外,即使满足了程序结构一般意义上的路径覆盖,仍然不能保证被测程序的正确性,即测试不足。如果要求测试更加充分,则要求增加更多的测试用例来提高覆盖率,测试量会更大,于是,测试中就产生了测试量过大和测试不足这一对矛盾。
对于独立路径数的计算可以采用下面的方法:
第一步,从流图中找出程序所有的必经节点(流图中任何独立路径都必定经过的节点叫做必经节点),记作IV(i),其中i为整数且。
第二步,从流图中找出从必经节点N(i)到必经节点N(i+1)的独立路径数W(i),其中i为整数且。
第三步,重复上一步,直到程序结尾。
第四步,根据乘法法则,独立路径数= W(i),其中i为整数且,即独立路径数=W(0) * W(1) * ⋯ * W(N一1)。
完全路径是指所有独立路径的集合,非完全路径就是所有独立路径集合的真子集。由于程序中可能会包含有多个条件的判定,所以程序流程图可能包含有隐含路径,从而有程序流图转换成的对应流图可能包含有隐藏路径。如图1、图2所示。
消除隐含路径的办法就是将含有多个条件的判定分为多个判定。即把图1的程序流图转换成如图3所示,图4是其对应的流图。
图4中,节点1,4,7为必经节点,W(0)=3,W(1)=3,所以独立路径数=3*3=9。由此,要达到完全路径覆盖就需要设计9个测试用例,从而使得测试量更加庞大。根据线性代码序列与跳转的测试覆盖准则,将程序在必经节点处割断,分别对每一段程序进行完全路径覆盖的充分测试。对于被割断的程序片断,由于没有参数人口,可以在程序片断的开头增加代码对参数进行初始化。从而达到完全测试,缓解测试量过大与测试不足的矛盾。
总结完全路径覆盖的具体步骤如下:
1、将判定语句的条件进行分离,细化程序流程图,使其不含隐含路径。
2、根据程序流程图画出流图,找出必经节点,必经节点数为N。
3、将程序流程图在必经节点处割断,将整个程序分解为N+1个程序片断。
4、找出程序片断i的完全路径,为程序片断i的每条独立路径设计用例,其中:。
5、结合所设计的测试用例,将程序片断i的参数初始化,其中。
6、将测试用例付诸测试,重复第四步至第六步,直到i=N+1。