📅  最后修改于: 2021-01-08 08:48:15             🧑  作者: 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上以printx的值(输出为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和print值(输出为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使用”,“ 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)
变量的定义是当值绑定到变量时变量的出现。在上面的代码中,该值绑定在第一条语句中,然后开始流动。
所有定义覆盖
(1,(2,f),x),(6,(5,f)x),(3,8,a),(7,8,a)。
如果使用变量的值来确定执行路径,则将其视为谓词使用(p使用)。在控制流语句中,有两个
如果(x <= 0)是谓词,则使用语句4,因为它可以谓为true或false。如果为真,则(x <1),6x = x + 1;否则将执行执行路径,否则将执行路径。
如果变量的值用于计算输出值或定义另一个变量。
陈述3 a = x + 1(1、3,x)
陈述7 a = x + 1(1、7,x)
语句8print(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)。
在收集了这些组之后(通过检查每个点是否至少使用过一次变量),测试人员可以看到所有语句和变量都已使用。未使用但存在于代码中的语句和变量将从代码中删除。