数据流测试

2025年3月17日 | 阅读 7 分钟

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

数据流测试是一组测试策略,用于检查程序中的控制流,以探索变量的序列,根据事件的序列。 它主要侧重于为变量赋值的点和这些值被使用的点,通过关注这两个点,可以测试数据流。

数据流测试使用控制流图来检测可能中断数据流的不合逻辑的事情。 在值和变量之间的关联过程中,会检测到数据流中的异常,原因是

  • 如果变量在使用前没有被初始化。
  • 如果初始化的变量至少没有被使用一次。

让我们用一个例子来理解这一点

Data flow testing in white box testing Link

在此代码中,我们总共有8个语句,我们将选择一条路径来覆盖所有8个语句。 正如代码中显而易见的那样,我们无法在单个路径中覆盖所有语句,因为如果语句2为真,则语句4、5、6、7未被覆盖,如果语句4为真,则语句2和3未被覆盖。

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

1. x= 1
Path - 1, 2, 3, 8

输出 = 2

当我们首先将x的值设置为1时,它会进入步骤1来读取并为x赋值(我们在路径中取1),然后进入语句2(x>0(我们在路径中取2)),该语句为真,然后进入语句3(a= x+1(我们在路径中取3)),最后进入语句8来打印x的值(输出为2)。

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

2. Set x= -1
Path = 1, 2, 4, 5, 6, 5, 6, 5, 7, 8

输出 = 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=-1+1 
x=0 

x的值变为0。现在它进入语句5(x<1(我们在路径中取5))其中值为0,0小于1,因此为真。 进入语句6(x=x+1(我们在路径中取6))

x=x+1 
x= 0+1 
x=1 

这里x变成了1,再次进入语句5(x<1(我们在路径中取5)),现在1不小于1,因此条件为假,它将进入else部分,即语句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)。

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

Data flow testing in white box testing
  • (1, (2, t), x), (1, (2, f), x)- 这种关联是通过语句1(读取x;)和语句2(如果(x>0))建立的,其中x在第1行定义,并在第2行使用,因此x是变量。
    语句2是逻辑的,并且可以为真或为假,这就是关联以两种方式定义的原因;一种是(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(如果(x<=0))建立的,其中x在第1行定义,并在第4行使用,因此x是变量。 语句4是逻辑的,并且可以为真或为假,这就是关联以两种方式定义的原因;一种是(1, (4, t), x)用于真,另一种是(1, (4, f), x)用于假。
  • (1, (5, t), x), (1, (5, f), x)- 这种关联是通过语句1(读取x;)和语句5(如果(x<1))建立的,其中x在第1行定义,并在第5行使用,因此x是变量。
    语句5是逻辑的,并且可以为真或为假,这就是关联以两种方式定义的原因;一种是(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中定义,并在语句7中使用,当语句5为假时。 这是一个计算用法。
  • (6, (5, f) x), (6, (5, t) x)- 这种关联是通过语句6(x=x+1;)和语句5(如果(x<1))建立的,因为x在语句6中定义,并在语句5中使用。 语句5是逻辑的,并且可以为真或为假,这就是关联以两种方式定义的原因;一种是(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-use、p-use、c-use、一些p-use覆盖率、p-use、一些c-use覆盖率 <link>

下一个任务是将所有关联分组到定义、c-use、p-use、c-use、一些p-use覆盖率、p-use、一些c-use覆盖率类别中。

请参阅以下代码

How to make associations in data flow testing link

因此,这些是包含定义、谓词使用(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)

定义

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

  • 如果(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-use)

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

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

计算使用 (c-use)

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

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

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

所有c-use覆盖率

(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)。

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


下一主题控制流测试