|
|
|
|
移动端

1.14.3 路径(1)

《软件测试基础教程》第1章软件测试的基本知识,本章作为一个导引,其目的在于让读者熟悉与软件测试相关的基本概念,建立起全书的框架。在本书后续章节中将要详细阐述的问题,首先在这里被提了出来。读完这章之后,读者就能够在软件测试和软件质量方面提出一些有意义的问题。本节为大家介绍路径。

作者:王峰/郭长国/陈振华 等译来源:机械工业出版社|2011-09-16 21:46

技术沙龙 | 邀您于8月25日与国美/AWS/转转三位专家共同探讨小程序电商实战

1.14.3 路径(1)

考虑流图G=(N,E)。一个k(k>0)条边的序列(e1,e2,…,ek)表示流图中一条长度为k的路径,如果下列条件成立的话:假设np,nq,nr,ns是N中的结点,对任何i(0<i<k),如果ei=(np,nq)且ei+1=(nr,ns),则nq=nr。

这样,边序列((1,3),(3,4),(4,5))是图1-16所示流图中的一条路径,但((1,3),(3,5),(6,8))不是一条有效路径。为简洁起见,将路径表示成一个基本块序列。例如,在图1-16中,基本块序列(1,3,4,5)等同于边序列((1,3),(3,4),(4,5))。

对任何n,m∈N,如果存在一条从n到m的路径,则称m是n的后继,n是m的前驱。另外,如果n≠m,则n是m的真前驱, m是n的真后继。如果存在(n,m)∈E,则称m是n的直接后继,n是m的直接前驱。结点n的直接后继集合和直接前驱集合分别表示为succ(n),pred(n)。结点Start没有前驱,End没有后继。

流图中一条路径,如果其首结点是Start,末结点是End,则认为其是完整的。程序P的流图中的一条路径p,如果至少存在一个测试用例,当其被输入程序P时能够遍历p,则称p是可达的;如果不存在这样的测试用例,则称p是不可达的。程序P中的特定路径p是否可达,通常是个不可解问题,也就是说,不可能写一个算法,将任意一个程序以及程序中的一条路径作为输入,能够正确判断出针对该程序这条路径是否可达。

假设路径p={n1,n2,…,nt},s={i1,i2,…,iu},如果对于1≤j≤t和j+u-1≤t,i1=nj,i2=nj+1,…,iu=nj+u-1,则称s是p的一个子集。在这种情况下,我们也说,s以及每个结点ik(1≤k≤u)包含于p,连接结点nm和nm+1(1≤m≤t-1)的边(nm,nm+1)包含于p。

例1.25在图1-16中,下面两条路径分别是长度为10和9的完整可达路径。路径用基本块序号、Start结点、End结点表示。图1-17描述了前两条路径,其中用粗线边描述完整路径,用虚线表示一个子路径。

 
图1-17 程序P1.2的控制流图


 

下面两条长度为4和5的路径是非完整的。其中p3在图1-17中用虚线表示。

 

下面两条长度为11和8的路径是完整的,但不可达。

 

最后,下面两条路径是无效的,因为它们不满足前述的顺序条件。

 

在图1-17中,结点2、3是结点1的直接后继,结点6,7是结点5的直接后继,结点8,9是结点7的直接后继,结点6,7,8,9,End是结点5的后继

succ(5)={6,7}

pred(5)={4}

注意,由于存在循环,一个结点可以是其自身的前驱和后继。

一个程序可能有若干条不同的路径。一个没有条件语句的程序,只包含一条从Start开始、到End结束的路径。然而,程序中每增加一个条件语句,至少增加一条不同的路径。根据其位置的不同,条件语句可能引起路径数目达指数级增长。

例1.26考虑包含下列语句序列的程序,其中只有一条语句是条件语句。该程序有两条不同的路径,一条当C1为true时被遍历,另一条当C1为false时被遍历。

 

我们对上面的程序进行修改,增加另一个if语句。修改后的程序如下所示,它有4条路径,对应条件C1 与C2的4个不同组合。


  
注意,由于增加if语句造成路径数量指数级地增大。然而,假如一个新增的条件语句只是放在一个if语句的作用域内,整体路径数量只是增加1,如下列程序的情形,其只有3条不同的路径。
 


【责任编辑:云霞 TEL:(010)68476606】

回书目   上一节   下一节
点赞 0
分享:
大家都在看
猜你喜欢

读 书 +更多

网管员必读——网络安全(第2版)

本书是在《网管员必读—网络安全》第1版的基础上修改而成的。新版在保留第1版实用内容的基础上增加了大量新的实用内容,同时删除了一些过时...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊