数据流测试用于分析程序中的数据流。它是收集有关变量如何在程序中流动数据的信息的过程。它试图获取过程中每个特定点的特定信息。
数据流测试是一组测试策略,用于检查程序的控制流,以便根据事件的顺序探索变量序列。它主要关注分配给变量的值的点以及使用这些值的点,通过集中在这两个点上,可以测试数据流。
数据流测试使用控制流图来检测可能中断数据流的不合逻辑的事情。由于以下原因,在值和变量之间关联时检测到数据流中的异常:
- 如果在未初始化的情况下使用变量。
- 如果初始化的变量未至少使用一次。
让我们通过一个例子来理解这一点:
在此代码中,我们总共有 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)。由于 false 条件,它不会出现在语句 3 上并直接跳转到语句 4(我们在路径中取了 4),4 为真(x<=0 并且它们的 x 小于 0),然后出现在语句 5 上(x<1(我们在路径中取了 5)),这也是真的,所以它将出现在语句 6 上(x=x+1(我们在路径中取了 6)),这里 x 递增 1。
所以
有 x 的值变为 0。现在它转到语句 5(x<1(我们在路径中取了 5)),值为 0,0 小于 1,因此,这是真的。来吧语句 6(x=x+1(我们在路径中取了 6))
x 变成了 1,再次转到语句 5(x<1(我们在路径中取了 5)),现在 1 不小于 1,所以条件为 false,它将来到 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)。
如何在数据流测试中建立关联<链接>
定义,c-use,p-use,c-use 一些p-use覆盖率,p-使用一些c-use覆盖率在数据流测试中<链接>
下一个任务是将所有关联分组到定义、c 使用、p 使用、c-use 一些 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), (7, 8, a)
定义
变量的定义是当值绑定到变量时变量的出现。在上面的代码中,值在第一个语句中绑定,然后开始流动。
所有定义覆盖范围
(1, (2, f), x), (6, (5, f) x), (3, 8, a), (7, 8, a).
谓语用法(p-用法)
如果变量的值用于确定执行路径,则被视为谓词使用 (p-use)。在控制流语句中有两个
语句 4 if (x<=0) 是谓词使用,因为它可以是谓词 true 或 false。如果为真,则如果 (x<1),6x=x+1;否则将执行路径,否则将执行路径。
计算使用(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 使用一些 p 用途覆盖率
(1, 3, x), (1, 6, x), (1, 7, x), (6, 6, x), (6, 7, x), (3, 8, a), (7, 8, a).
所有 p 使用一些 c 用途覆盖
(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).
收集这些组后,(通过检查每个点是否至少使用一次变量)测试人员可以看到所有语句和变量都被使用。未使用但存在于代码中的语句和变量将从代码中删除。 |