数据流测试

一、基本概念

定义节点  --   DEF(v,n)

使用节点  --   USE(v,n)

谓词使用  --   P-use

计算使用  --   C-use

定义-使用路径  --  du-path

定义-清除路径  --  dc-path

全定义覆盖准则:测试路径需要覆盖所有定义点和任意一个使用点,用dc-path扩展成测试路径

全使用覆盖准则:测试路径需要覆盖所有定义点和所有使用点,用dc-path扩展成测试路径

全定义-使用路径覆盖准则:测试路径需要覆盖所有定义点到所有使用点的路径,用dc-path扩展成测试路径

 

二、例题

void f(int x,int y,int m){
	w=x;
	if(m>0)
		w++;
	else
		w=w+2;
	if(y<=10)
		x=5*y;
	else
		x=3*y+5;
	z=w+x;
}

 步骤一:

变量

定义节点

使用节点

定义-使用对(DU Pairs)

(开始,结束节点)

定义-使用路径(是否为定义-清除路径)

计算使用

谓词使用

x

1,8,10

2,11

 

(1,2),(1,11),(8,11),(10,11)

1→2(T)

1→2→3→4→7→8→11(F)

1→2→3→6→7→8→11(F)

1→2→3→4→7→10→11(F)

1→2→3→6→7→10→11(F)

8→11(T)

10→11(T)

y

1

8,10

7

(1,7),(1,8),(1,10)

1→2→3→4→7(T)

1→2→3→6→7(T)

1→2→3→4→7→8(T)

1→2→3→6→7→8(T)

1→2→3→4→7→10(T)

1→2→3→6→7→10(T)

m

1

 

3

(1,3)

1→2→3(T)

w

2,4,6

4,6,11

 

(2,4),(2,6),(2,11),(4,4),(4,11),(6,6),(6,11)

2→3→4(T)

2→3→6(T)

2→3→4→7→8→11(F)

2→3→6→7→8→11(F)

2→3→4→7→10→11(F)

2→3→6→7→10→11(F)

4→7→8→11(T)

4→7→10→11(T)

6→7→10→11(T)

6→7→8→11(T)

z

11

 

 

 

 

du-path和dc-path 都是对于变量来讲的,比如y 的du-path是某某,y 的dc-path是某某。

面对程序我们把每一个变量当作一个片 来考虑,但是对于整个程序我们综合所有变量的dc-path来给出测试路径和测试用例

步骤二:

全定义覆盖准则:

测试路径1:1→2→3→4→7→8→11

测试路径2:1→2→3→6→7→10→11

 

输入数据

预期输出

测试用例1

x=0

y=0

m=1

x=0

y=0

m=1

w=1

z=1

测试用例2

x=0

y=11

m=0

x=38

y=11

m=0

w=2

z=40

全使用覆盖准则:

测试路径1:1→2→3→4→7→8→11

测试路径2:1→2→3→6→7→10→11

 

输入数据

预期输出

测试用例1

x=0

y=0

m=1

x=0

y=0

m=1

w=1

z=1

测试用例2

x=0

y=11

m=0

x=38

y=11

m=0

w=2

z=40

全定义-使用路径覆盖准则:

测试路径1:1→2→3→4→7→8→11

测试路径2:1→2→3→6→7→10→11

测试路径3:1→2→3→6→7→8→11

测试路径4:1→2→3→4→7→10→11

 

输入数据

预期输出

测试用例1

x=0

y=0

m=1

x=0

y=0

m=1

w=1

z=1

测试用例2

x=0

y=11

m=0

x=38

y=11

m=0

w=2

z=40

测试用例3

x=0

y=0

m=0

x=0

y=0

m=0

w=2

z=2

测试用例4

x=0

y=11

m=1

x=38

y=11

m=1

w=1

z=39

您似乎提到了软件测试中的几个概念,这里假设您说的是单元测试的一种面考虑方式,涉及到函数定义、功能实现、条件判断以及边界值测试。但没有具体的代码片段,所以我将以通用的方式来解释这四个概念及其测试用例设计。 1. **定义测试**(Complete Definition Test Case): 这种测试案例会检查函数的所有可能输入情况,包括正常值、边界值、空值(如null或特殊值)等,确保函数在所有定义范围内都能正确工作并返回预期结果。 2. **计算使用测试**(Thorough Computation Test Case): 测试函数是否正确处理复杂的运算算法流程,包括内部逻辑的完整性,如循环、递归、算术运算等。 3. **谓词使用测试**(Predicate Testing): 如果函数包含条件判断,测试会在满足不满足各种条件时都运行,以验证其分支逻辑是否按预期执行。 4. **使用测试**(Full Use Test Case): 考虑到函数在整个应用中可能的所有上下文环境配合其他模块的情况,模拟真实的使用场景进行测试。 5. **定义-使用覆盖测试准则**(Definition-Use Coverage Criteria): 确保每个函数的定义都被至少一次地在某个合理的使用情境下被调用,同时检查所有可能的结果路径。 例如,对于一个加法函数: ```python def add(a, b): return a + b ``` 测试用例可能包括: - 定义测试: - `add(0, 0)` (正常) - `add(-1, 1)` (边界) - `add('a', 'b')` (非数值输入) - 计算使用测试: - `add(100, 200)`, `add(9999, -5000)` - 谓词使用测试: - `add(1, 2) if a > 0 else 0` - `add(a, b) if b is not None else None` - 使用测试: - 在数组操作中,`sum([add(x, y) for x in arr for y in arr])` - 完覆盖: - 对于每个可能的`a`值(如所有整数),至少有一个对应的`b`使得`add(a, b)`被执行。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值