测试用例之路径覆盖

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

路径覆盖测试

吕金和

(沈阳市电化教育馆,辽宁沈阳 110032)

摘要随着软件的广泛应用及其规模和复杂度不断地提高,软件测试的方法也有许多。本文讨论了完全路径覆盖测试方法和基于控制流图的路径测试的改进方法。

关键词完全路径覆盖;基于控制流图

1 引言

软件测试的步骤是单元测试、集成测试、系统测试、确认测试和回归测试。单元测试是软件测试的基本组成部分,也是最重要的部分之一。而单元测试主要采用的是白盒测试的技术。

白盒测试又称结构测试、逻辑驱动测试或基于程序的测试。一般用来分析程序的内部结构。它依赖于对程序细节的严密验证,针对特定条件和循环设计测试用例,对程序的逻辑路径进行测试。通过在程序的不同点检验程序状态,来判定其实际情况是否和预期的状态相一致。

用这种方法进行程序测试时,测试者可以看到被测程序,并利用其分析程序的内部构造。因此,白盒测试要求对被测程序的结构特性做到一定程度的覆盖,并以软件中的某类成分是否都已经得到测试为准则来判断软件测试的充分性,也称为基于覆盖的测试技术。例如,语句覆盖是一种逻辑覆盖准则,它要求选择测试数据使得程序中所有语句都得到运行,并根据是否所有语句都得到了运行来决定测试是否可以终止。到目前为止,已提出了几十种覆盖技术。

在这些覆盖的技术中,覆盖率最高的就是路径覆盖技术。路径覆盖,要求程序的每条可能路径都至少执行一次,如果程序中有环,则要求每个环至少经过一次。一般来说,语句覆盖是很弱的逻辑覆盖标准,判断覆盖比语句覆盖强,条件覆盖通常比判定覆盖强,判定一条件覆盖是判定覆盖和条件覆盖的综合,条件组合覆盖则比前面几种覆盖标准要强,但并不一定比路径覆盖强,下面我们讨论的完全路径覆盖测试方法和基于控制流图的路径测试的改进方法研究。

2 完全路径覆盖测试方法

虽然路径覆盖是覆盖率最高的,但是,简单的程序路径数量很少,而复杂的程序路径数量巨大,要实现路径覆盖几乎不可能,即测试量过大;另外,即使满足了程序结构一般意义上的路径覆盖,仍然不能保证被测程序的正确性,即测试不足。如果要求测试更加充分,则要求增加更多的测试用例来提高覆盖率,测试量会更大,于是,测试中就产生了测试量过大和测试不足这一对矛盾。

对于独立路径数的计算可以采用下面的方法:

第一步,从流图中找出程序所有的必经节点(流图中任何独立路径都必定经过的节点叫做必经节点),记作Ⅳ(i),其中i为整数且0 <= i <= N。

第二步,从流图中找出从必经节点N(i)到必经节点N(i+1)的独立路径数W(i),其中i 为整数且0 <= i < N 。

第三步,重复上一步,直到程序结尾。

第四步,根据乘法法则,独立路径数= W(i),其中i为整数且0 <= i < N,即独立路径数=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 图1对应的流图

图3 没有隐含路径的程序流图

图4 图3的对应流图

总结完全路径覆盖的具体步骤如下:

第一步,将判定语句的条件进行分离,细化程序流程图,使其不含隐含路径。第二步,根据程序流程图画出流图,找出必经节点,必经节点数为N。

第三步,将程序流程图在必经节点处割断,将整个程序分解为N+1个程序片断。

第四步,找出程序片断i的完全路径,为程序片断i的每条独立路径设计用例,其中:1 <= i <= N+l。

第五,结合所设计的测试用例,将程序片断i的参数初始化,其中1 <= i <= N+1。

第六步,将测试用例付诸测试,重复第四步至第六步,直到i = N+1。

3 基于控制流图的路径测试的改进方法研究

根据测试的目标,选择一个有一定效果且开销较小的覆盖准则,或者是根据一定的标准,选择所有完整逻辑路径中的一个有限子集来进行测试,用最小的测试用例,发现程序中最多的错误。采用自动机的思想和理论改进,可以生成少的测试用例,而达到所有路径的覆盖。

首先在程序的控制流图上,每条路径给一个标示,如e 1,e2,e3,... ,ek等,其中e0为惟一的入f_=_1弧,e 为最后一个唯一的出口弧。通过转化可以将控制流程图转换成只含有路径的自动机,根据自动机可以求出从eO到e的n(n≥1)条路径。

具体步骤如下:

第一步,输入:程序源代码程序。

第二步,输出:含有从e0到e 的n(n≥1)条路径。

第三步,根据程序块的概念将程序源代码转换成相应的控制流程图。

第四步,在每条弧上标注el,e2,...,em(m为弧的总条数)。

第五步,为了便于算法的实现,增加了两个空结点,其中一个s结点作为整个程序控制流程图的起始结点,其入度为0,出度为1,并与e0进行相连;en+l结点作为整个程序控制流程图的终

止结点,其入度为1,出度为0,并与e 进行相连。如果,一个控制流程图的结点数为n,则经过变换总的结点数为n+2。

第六步,根据表1的转换规则将控制流程图转换成以弧为结点的自动机M。

第七步,覆盖路径的寻找,寻找e0到e 的n(n≥1)条路径。

①寻找回边。并将回边构成的结点抽象成一个子结点,重复做①,直到所有的回边均抽象成子结点。将自动机_)If转换成等价的M’。

②在自动机M’上得到从e0到e 的n(n≥1)条独立路径。

4 总结

以上只介绍了两种了路径覆盖的测试方法,路径覆盖测试作为覆盖率最高的一种测试方法,对其完善和简化,将提高软件测试的完备性以及软件测试的效率。

参考文献

[1]宫云战. 软件测试;国防工业出版社出版2006年1月

[2]贺青春,叶柏龙. 完全路径覆盖测试法;矿业研究与开发第27卷第1期

[3]毛红梅,舒远仲.基于控制流程图的路径覆盖测试的改进方法研究;计算机工程与应用2008,44(30)

收稿日期:1月25日修改日期:2月2日

作者简介:吕金和(1973-),男,辽宁省,中学一级,学士,主要研究方向:网络安全、软件测试。

相关文档
最新文档