📜  白盒测试中的数据流测试

📅  最后修改于: 2021-01-10 15:48:59             🧑  作者: Mango

数据流测试

数据流测试用于分析程序中的数据流。它是收集有关变量如何在程序中流动数据的信息的过程。它尝试获取过程中每个特定点的特定信息。

数据流测试是一组测试策略,用于检查程序的控制流,以便根据事件的顺序探索变量的顺序。它主要关注于分配给变量的值的点以及通过集中于两个点使用这些值的点,从而可以测试数据流。

数据流测试使用控制流图来检测可能中断数据流的不合逻辑的事物。由于以下原因,在值和变量之间关联时会检测到数据流异常:

  • 如果使用变量而不进行初始化。
  • 如果没有至少使用初始化变量一次。

让我们通过一个例子来理解这一点:

在此代码中,我们总共有8条语句,并且我们将选择一个覆盖所有8条语句的路径。从代码中可以明显看出,我们无法在单个路径中覆盖所有语句,因为如果语句2为真,则不覆盖语句4、5、6、7;如果语句4为真,则不覆盖语句2和3。 。

因此,我们采用两条路径来覆盖所有语句。

输出= 2

当我们首先将x的值设置为1时,它执行步骤1来读取并分配x的值(在路径中取1),然后在语句2中输入(x> 0(在路径中取2)),这是正确的,最后它出现在语句3上(a = x + 1(我们在路径中输入3)),最后它出现在语句8上以打印x的值(输出为2)。

对于第二条路径,我们将x的值设为1

输出= 2

当我们将x的值设置为?1时,首先进入步骤1,读取并分配x的值(在路径中取1),然后进入步骤2,这是错误的,因为x不大于0 (x> 0,且它们的x = -1)。由于条件错误,它将不会出现在语句3上,而是直接跳到语句4(我们在路径中采用4),并且4为真(x <= 0并且其x小于0),然后出现在语句5(x < 1(我们在路径中采用5))也是如此,因此它将出现在语句6(x = x + 1(我们在路径中采用6)),此处x递增1。

所以,

x的值变为0。现在转到值5的语句5(x <1(我们在路径中取5)),而0小于1,所以这是事实。来声明6(x = x + 1(我们在路径中采用6))

x变为1,然后再次转到语句5(x <1(我们在路径中采用5)),现在1不小于1,所以条件为假,它将变为其他部分,意味着语句7(a = x +1,其中x的值为1),并将其分配给a(a = 2)。最后,它出现在语句8上并显示值(输出为2)。

为代码建立关联:

社团协会

在关联中,我们列出了所有定义及其所有用途。

(1,(2,f),x),(1,(2,t),x),(1,3,x),(1,(4,t),x),(1,(4, f),x),(1,(5,t),x),(1,(5,f),x),(1,6,x),(1,7,x),(6,( 5,f)x),(6,(5,t)x),(6、6,x),(3、8,a),(7、8,a)。

如何在数据流测试中建立关联

  • (1,(2,t),x),(1,(2,f),x)-此关联是通过语句1(读取x;)和语句2(If(x> 0))建立的,其中x为在第1行定义,并且在第2行使用,因此x是变量。语句2是合乎逻辑的,它可以为true或false,这就是为什么以两种方式定义关联的原因;一个是(1,(2,t),x)表示真,另一个是(1,(2,f),x)表示假。
  • (1,3,x)-这种关联是由语句1(读取x;)和语句3(a = x + 1)建立的,其中x在语句1中定义并在语句3中使用。这是一种计算用途。
  • (1,(4,t),x),(1,(4,f),x)-这种关联是通过语句1(读取x;)和语句4(If(x <= 0))建立的,其中x在第1行定义,并在第4行使用,因此x是变量。语句4是逻辑上的,它可以是true或false,这就是为什么以两种方式定义关联的原因:一种是(1,(4,t),x)表示true,另一种是(1,(4,f),x)为假。
  • (1,(5,t),x),(1,(5,f),x)-此关联是通过语句1(读取x;)和语句5(如果(x <1))建立的,其中x为在第1行定义,并且在第5行使用,因此x是变量。语句5是合乎逻辑的,它可以为true或false,这就是为什么以两种方式定义关联的原因;一个是(1,(5,t),x)为真,另一个是(1,(5,f),x)为假。
  • (1,6,x)-这种关联是通过语句1(读取x;)和语句6(x = x + 1)进行的。 x在语句1中定义并在语句6中使用。它是一种计算用途。
  • (1,7,x)-这种关联是由语句1(读取x)和语句7(a = x + 1)构成的。 x在语句1中定义,并在语句5为false时在语句7中使用。这是一种计算用途。
  • (6,(5,f)x),(6,(5,t)x)-这种关联是通过语句6(x = x + 1;)和语句5进行的,如果(x <1)因为x被定义在语句6中使用,并在语句5中使用。语句5是逻辑的,它可以是true或false,这就是为什么以两种方式定义关联的原因:一种是对(6,(5,f)x)表示真,另一种是(6, (5,t)x)为假。这是预期用途。
  • (6,6,x)-这种关联是通过语句6建立的,该语句使用变量x的值,然后定义x的新值。 x = x + 1 x =(-1 + 1)语句6使用变量x的值为?1,然后定义x的新值[x =(-1 + 1)= 0]为0。
  • (3,8,a)-这种关联是由语句3(a = x + 1)和语句8建立的,其中变量a在语句3中定义并在语句8中使用。
  • (7,8,a)-这种关联是由语句7(a = x + 1)和语句8建立的,其中变量a在语句7中定义并在语句8中使用。

在数据流测试中定义,使用,使用,使用某些使用范围,使用某些使用范围

下一个任务是将“定义”,“ c使用”,“ p使用”,“ c使用”某些“ p使用覆盖”,“ p使用一些c使用覆盖”类别中的所有关联分组。

请参见下面的代码:

因此,这些都是包含定义,谓词使用(p-use),计算使用(c-use)的所有关联。

(1,(2,f),x),(1,(2,t),x),(1,3,x),(1,(4,t),x),(1,(4, f),x),(1,(5,t),x),(1,(5,f),x),(1,6,x),(1,7,x),(6,( 5,f)x),(6,(5,t)x),(6、6,x),(3、8,a),(7、8,a),(3、8,a), (7、8,a)

定义

变量的定义是当值绑定到变量时变量的出现。在上面的代码中,该值绑定在第一条语句中,然后开始流动。

  • If(x> 0)是语句2,其中x的值与其绑定。语句2的关联为(1,(2,f),x),(1,(2,t。)
  • a = x + 1是语句3以x的值为边界的语句语句3的关联为(1、3,x)

所有定义覆盖

(1,(2,f),x),(6,(5,f)x),(3,8,a),(7,8,a)。

谓词使用(p使用)

如果使用变量的值来确定执行路径,则将其视为谓词使用(p使用)。在控制流语句中,有两个

如果(x <= 0)是谓词,则使用语句4,因为它可以谓为true或false。如果为真,则(x <1),6x = x + 1;否则将执行执行路径,否则将执行路径。

计算用途(c用途)

如果变量的值用于计算输出值或定义另一个变量。

陈述3 a = x + 1(1、3,x)
陈述7 a = x + 1(1、7,x)
语句8打印(3、8,a),(7、8,a)。

这些是计算用途,因为x的值用于计算,而a的值用于输出。

所有c用途覆盖

(1、3,x),(1、6,x),(1、7,x),(6、6,x),(6、7,x),(3、8,a),(7 ,8,a)。

所有c-use部分p-use覆盖

(1、3,x),(1、6,x),(1、7,x),(6、6,x),(6、7,x),(3、8,a),(7 ,8,a)。

所有p-use部分c-use覆盖范围

(1,(2,f),x),(1,(2,t),x),(1,(4,t),x),(1,(4,f),x),(1 ,(5,t),x),(1,(5,f),x),(6,(5,f),x),(6,(5,t),x),(3,8 ,a),(7,8,a)。

在收集了这些组之后(通过检查每个点是否至少使用过一次变量),测试人员可以看到所有语句和变量都已使用。未使用但存在于代码中的语句和变量将从代码中删除。