9数据流测试
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
软件测试概论
张福勇
zhangfy@dgut.edu.cn
•东莞理工学院计算机学院
1
软件测试—结构性测试
结构性测试
逻辑覆盖 路径测试 数据流测试 小结
2
软件测试—结构性测试
程序结构分析
程序结构分析
数据流分析
查找定义/引用缺陷 基于程序片分析 静态 分析 方法
3
软件测试—结构性测试
数据流分析-定义/引用
Locks
软件测试—结构性测试
数据流分析——定义/使用测试
部分定义-使用路径
变量 sales 路径(开始、结束)节点 27,28 27,29 27,33 27,34 27,37 27,38 是定义清除吗? Y Y Y Y Y Y
20
软件测试—结构性测试
数据流分析——定义/使用测试
定义-使用路径测试覆盖指标
10
软件测试—结构性测试
3.2 数据流分析——定义/使用测试
变量的定义和使用 例1: a=b; – DEF(1)={a}, – USES(1)={b}. 例2: a=a+b; – DEF(1)={a}, – USES(1)={a , b}.
11
软件测试—结构性测试
数据流分析——定义/使用测试
定义-使用路径(du-path)
节点n是变量v的使用节点,当且仅当变量v的值在对应节点n 的语句片段处使用。
谓词使用(P-use)/计算使用(C-use)
使用节点USE(v,n)是一个谓词使用,当且仅当语句n是谓词语 句,否则,USE(v,n)是计算使用。
9
软件测试—结构性测试
数据流分析——定义/使用测试
定义节点(DEF(v,n))
数据流分析-定义/引用
从数据流视角:程序是一个程序元素对 数据访问的过程 数据流关系:数据“定义——使用”对 使用程序图来描述数据定义-使用对
5
软件测试—结构性测试
数据流分析-定义/引用
数据流测试用作路径测试的“真实性检查” 定义/使用测试 基于程序片的测试
6
软件测试—结构性测试
数据流分析——定义/使用测试
1
2 3
4 5 7
6
14
软件测试—结构性测试
数据流分析——定义/使用测试
1 2 3 4 5
7
6
Du-path dc-path 1234 y 1237 y 12345 y 1234567 n 567 y
15
程序图
软件测试—结构性测试
数据流分析——定义/使用测试
佣金问题涉及的变量(see程序代码) lockPrice, stockPrice, barrelPrice stocks, barrels
关于变量v的定义-使用路径是PATHS(P)中的路径, 使得对某个 v V ,存在定义和使用节点DEF(v,m)和 USE(v,n),使得m和n是该路径的最初和最终节点。
定义清除路径(dc-path)相当于传递的概念
关于变量v的定义-清除路径是具有最初和最终节 点DEF(v,m)和USE(v,n)的PATHS(P)中的路径,使得该 路径中没有其他节点是v的定义节点。
全使用
全计算使用/部分谓词使用 全谓词使用/部分计算使用
全定义
全谓词使用
全边 全节点
25
定义/使用测试提供一种检查缺陷可 能发生点的严格和系统化的方法。
软件测试—结构性测试
数据流分析——定义/使用测试
测试用例的产生的步骤:
1. 选择定义/使用路径测试覆盖指标 2. 由测试覆盖指标构造定义/使用路径 3. 选择一条路径,使得其至少包含一条“定 义/使用路径” 4. 由路径产生测试用例
来自百度文库
全使用准则
集合T满足程序P的全使用准则,当且仅当所有变 量 v V ,T包含从v的每个定义节点到v的所有使用以 及到所有USE(v,n)后续节点的定义清除路径。
22
软件测试—结构性测试
数据流分析——定义/使用测试
全谓词使用/部分计算使用准则
集合T满足程序P的全谓词使用/部分计算使用准则, 当且仅当所有变量 v V ,T包含从v的每个定义节点 到v的所有谓词使用的定义清除路径,且若v的一个定 义没有谓词使用,则定义清除路径导致至少一个计算 使用。
G(P):程序图
构造方式同前,语句片段代表节点,边代表节 点序列 单入口,单出口,且不允许从某个节点到其自 身的边
P:程序 V:一组程序变量
7
软件测试—结构性测试
数据流分析——定义/使用测试
节点是语句或语句的一部分;边表示语句 的控制流程
1 2 3 1 If-then 2 3 Choose-case
执行时,与该变量关联的存储单元的内容会改变
输入语句,赋值语句,循环控制语句和过程调用
使用节点(USE(v,n))
执行时,与该变量关联的存储单元的内容保持不变 输出语句,赋值语句,条件语句,循环控制语句和过程调用
谓词使用(P-use)/计算使用(C-use)
对应谓词使用的节点的出度>=2 对应计算使用的节点的出度<=1
数据流指标假设所有程序变量都标识了定义 节点和使用节点,且关于各变量都标识了定 义-使用路径 T:拥有变量集合V的程序P的程序图G(P)中的 一个路径集合
21
软件测试—结构性测试
数据流分析——定义/使用测试
全定义准则
集合T满足程序P的全定义准则,当且仅当所有变 量 v V ,T包含从v的每个定义节点到v的一个使用的 定义清除路径。
26
软件测试—结构性测试
数据流分析
数据流测试适用于计算密集的程序 定义/使用路径的定义,使我们能够准确 的描述我们要测试的程序部分 在控制密集的程序中,若要计算控制变 量(谓词使用),则数据流测试也适用
27
软件测试—结构性测试
谢谢!
28
串行
1 2 前测试循环 If-then-else
1 2 后测试循环 1
1
2
4
3
2
3
5
4
8
软件测试—结构性测试
数据流分析——定义/使用测试
定义节点(DEF(v,n))
节点 n G( P) 是变量 v V 的定义节点,当且仅当变量v的 值由对应节点n的语句片段处定义。
使用节点(USE(v,n))
软件测试—结构性测试
数据流分析——定义/使用测试
部分定义-使用路径
变量 lockPrice stockPrice barrelPrice totalStocks 路径(开始、结束)节点 7,24 8,25 9,26 11,17 11,22 11,25 17,17 17,22 17,25 13,14 19,14 13,16 19,16 是定义清除吗? Y Y Y Y N N y N N Y Y Y 19 Y
集合T满足程序P的全定义-使用路径准则,当且仅 当所有变量 v V ,T包含从v的每个定义节点到v的 所有使用,以及到所有USE(v,n)后续节点的定义清除 路径,且这些路径要么有一次的环经过,要么没有 环路。
24
软件测试—结构性测试
数据流分析——定义/使用测试
数据流覆盖指标层次结构
全路径 全定义-使用路径
全计算使用/部分谓词使用准则
集合T满足程序P的全计算使用/部分谓词使用准则, 当且仅当所有变量 v V ,T包含从v的每个定义节点到 v的所有计算使用的定义清除路径,且若v的一个定义 没有计算使用,则定义清除路径导致至少一个谓词使 用。
23
软件测试—结构性测试
数据流分析——定义/使用测试
全定义-使用路径准则
变量 lockPrice stockPrice barrelPrice totalLocks totalStocks totalBarrels locks Stocks barrels lockSales stockSales barrelSales Sales Commission 定义节点 7 8 9 10,16, 11,17 12,18 13,19 15 15 24 25 26 27 31,32,33,36,37,38 使用节点 24 25 26 16,21,24 17,22,25 18,23,26 14,16 17 18 27 27 27 28,29,33,34,37,38 18 32,33,37,41
locks
totalStocks, totalLocks, totalBarrels
lockSales, stockSales, barrelSales
sales commission
16
软件测试—结构性测试
17
软件测试—结构性测试
数据流分析——定义/使用测试
佣金问题变量的定义使用节点
定义-使用路径和定义清除路径描述了跨 从值被定义的点到值被使用的点的源语 句的数据流。
12
软件测试—结构性测试
数据流分析——定义/使用测试
不是定义清除的定义-使用路径,是潜在 有问题的地方。
13
软件测试—结构性测试
数据流分析——定义/使用测试
变量的定义和使用
1 a=5; // 定义 a 2 While(C1) { 3 if (C2){ 4 b=a*a;//使用 a 5 a=a-1;//定义且使用a 6 } 7 print(a); } //使用 a
最初是随着编译系统要生成有效的目标码 而出现的,主要用于代码优化 现在主要为发现定义/引用异常缺陷
变量被定义,但从来没有使用(引用); 所使用的变量没有被定义;
变量在使用之前被定义两次;
数据流测试指关注变量接收值(点)和使用(或 引用)这些值(点)的路径,是结构性测试方法 的一种。 4
软件测试—结构性测试
张福勇
zhangfy@dgut.edu.cn
•东莞理工学院计算机学院
1
软件测试—结构性测试
结构性测试
逻辑覆盖 路径测试 数据流测试 小结
2
软件测试—结构性测试
程序结构分析
程序结构分析
数据流分析
查找定义/引用缺陷 基于程序片分析 静态 分析 方法
3
软件测试—结构性测试
数据流分析-定义/引用
Locks
软件测试—结构性测试
数据流分析——定义/使用测试
部分定义-使用路径
变量 sales 路径(开始、结束)节点 27,28 27,29 27,33 27,34 27,37 27,38 是定义清除吗? Y Y Y Y Y Y
20
软件测试—结构性测试
数据流分析——定义/使用测试
定义-使用路径测试覆盖指标
10
软件测试—结构性测试
3.2 数据流分析——定义/使用测试
变量的定义和使用 例1: a=b; – DEF(1)={a}, – USES(1)={b}. 例2: a=a+b; – DEF(1)={a}, – USES(1)={a , b}.
11
软件测试—结构性测试
数据流分析——定义/使用测试
定义-使用路径(du-path)
节点n是变量v的使用节点,当且仅当变量v的值在对应节点n 的语句片段处使用。
谓词使用(P-use)/计算使用(C-use)
使用节点USE(v,n)是一个谓词使用,当且仅当语句n是谓词语 句,否则,USE(v,n)是计算使用。
9
软件测试—结构性测试
数据流分析——定义/使用测试
定义节点(DEF(v,n))
数据流分析-定义/引用
从数据流视角:程序是一个程序元素对 数据访问的过程 数据流关系:数据“定义——使用”对 使用程序图来描述数据定义-使用对
5
软件测试—结构性测试
数据流分析-定义/引用
数据流测试用作路径测试的“真实性检查” 定义/使用测试 基于程序片的测试
6
软件测试—结构性测试
数据流分析——定义/使用测试
1
2 3
4 5 7
6
14
软件测试—结构性测试
数据流分析——定义/使用测试
1 2 3 4 5
7
6
Du-path dc-path 1234 y 1237 y 12345 y 1234567 n 567 y
15
程序图
软件测试—结构性测试
数据流分析——定义/使用测试
佣金问题涉及的变量(see程序代码) lockPrice, stockPrice, barrelPrice stocks, barrels
关于变量v的定义-使用路径是PATHS(P)中的路径, 使得对某个 v V ,存在定义和使用节点DEF(v,m)和 USE(v,n),使得m和n是该路径的最初和最终节点。
定义清除路径(dc-path)相当于传递的概念
关于变量v的定义-清除路径是具有最初和最终节 点DEF(v,m)和USE(v,n)的PATHS(P)中的路径,使得该 路径中没有其他节点是v的定义节点。
全使用
全计算使用/部分谓词使用 全谓词使用/部分计算使用
全定义
全谓词使用
全边 全节点
25
定义/使用测试提供一种检查缺陷可 能发生点的严格和系统化的方法。
软件测试—结构性测试
数据流分析——定义/使用测试
测试用例的产生的步骤:
1. 选择定义/使用路径测试覆盖指标 2. 由测试覆盖指标构造定义/使用路径 3. 选择一条路径,使得其至少包含一条“定 义/使用路径” 4. 由路径产生测试用例
来自百度文库
全使用准则
集合T满足程序P的全使用准则,当且仅当所有变 量 v V ,T包含从v的每个定义节点到v的所有使用以 及到所有USE(v,n)后续节点的定义清除路径。
22
软件测试—结构性测试
数据流分析——定义/使用测试
全谓词使用/部分计算使用准则
集合T满足程序P的全谓词使用/部分计算使用准则, 当且仅当所有变量 v V ,T包含从v的每个定义节点 到v的所有谓词使用的定义清除路径,且若v的一个定 义没有谓词使用,则定义清除路径导致至少一个计算 使用。
G(P):程序图
构造方式同前,语句片段代表节点,边代表节 点序列 单入口,单出口,且不允许从某个节点到其自 身的边
P:程序 V:一组程序变量
7
软件测试—结构性测试
数据流分析——定义/使用测试
节点是语句或语句的一部分;边表示语句 的控制流程
1 2 3 1 If-then 2 3 Choose-case
执行时,与该变量关联的存储单元的内容会改变
输入语句,赋值语句,循环控制语句和过程调用
使用节点(USE(v,n))
执行时,与该变量关联的存储单元的内容保持不变 输出语句,赋值语句,条件语句,循环控制语句和过程调用
谓词使用(P-use)/计算使用(C-use)
对应谓词使用的节点的出度>=2 对应计算使用的节点的出度<=1
数据流指标假设所有程序变量都标识了定义 节点和使用节点,且关于各变量都标识了定 义-使用路径 T:拥有变量集合V的程序P的程序图G(P)中的 一个路径集合
21
软件测试—结构性测试
数据流分析——定义/使用测试
全定义准则
集合T满足程序P的全定义准则,当且仅当所有变 量 v V ,T包含从v的每个定义节点到v的一个使用的 定义清除路径。
26
软件测试—结构性测试
数据流分析
数据流测试适用于计算密集的程序 定义/使用路径的定义,使我们能够准确 的描述我们要测试的程序部分 在控制密集的程序中,若要计算控制变 量(谓词使用),则数据流测试也适用
27
软件测试—结构性测试
谢谢!
28
串行
1 2 前测试循环 If-then-else
1 2 后测试循环 1
1
2
4
3
2
3
5
4
8
软件测试—结构性测试
数据流分析——定义/使用测试
定义节点(DEF(v,n))
节点 n G( P) 是变量 v V 的定义节点,当且仅当变量v的 值由对应节点n的语句片段处定义。
使用节点(USE(v,n))
软件测试—结构性测试
数据流分析——定义/使用测试
部分定义-使用路径
变量 lockPrice stockPrice barrelPrice totalStocks 路径(开始、结束)节点 7,24 8,25 9,26 11,17 11,22 11,25 17,17 17,22 17,25 13,14 19,14 13,16 19,16 是定义清除吗? Y Y Y Y N N y N N Y Y Y 19 Y
集合T满足程序P的全定义-使用路径准则,当且仅 当所有变量 v V ,T包含从v的每个定义节点到v的 所有使用,以及到所有USE(v,n)后续节点的定义清除 路径,且这些路径要么有一次的环经过,要么没有 环路。
24
软件测试—结构性测试
数据流分析——定义/使用测试
数据流覆盖指标层次结构
全路径 全定义-使用路径
全计算使用/部分谓词使用准则
集合T满足程序P的全计算使用/部分谓词使用准则, 当且仅当所有变量 v V ,T包含从v的每个定义节点到 v的所有计算使用的定义清除路径,且若v的一个定义 没有计算使用,则定义清除路径导致至少一个谓词使 用。
23
软件测试—结构性测试
数据流分析——定义/使用测试
全定义-使用路径准则
变量 lockPrice stockPrice barrelPrice totalLocks totalStocks totalBarrels locks Stocks barrels lockSales stockSales barrelSales Sales Commission 定义节点 7 8 9 10,16, 11,17 12,18 13,19 15 15 24 25 26 27 31,32,33,36,37,38 使用节点 24 25 26 16,21,24 17,22,25 18,23,26 14,16 17 18 27 27 27 28,29,33,34,37,38 18 32,33,37,41
locks
totalStocks, totalLocks, totalBarrels
lockSales, stockSales, barrelSales
sales commission
16
软件测试—结构性测试
17
软件测试—结构性测试
数据流分析——定义/使用测试
佣金问题变量的定义使用节点
定义-使用路径和定义清除路径描述了跨 从值被定义的点到值被使用的点的源语 句的数据流。
12
软件测试—结构性测试
数据流分析——定义/使用测试
不是定义清除的定义-使用路径,是潜在 有问题的地方。
13
软件测试—结构性测试
数据流分析——定义/使用测试
变量的定义和使用
1 a=5; // 定义 a 2 While(C1) { 3 if (C2){ 4 b=a*a;//使用 a 5 a=a-1;//定义且使用a 6 } 7 print(a); } //使用 a
最初是随着编译系统要生成有效的目标码 而出现的,主要用于代码优化 现在主要为发现定义/引用异常缺陷
变量被定义,但从来没有使用(引用); 所使用的变量没有被定义;
变量在使用之前被定义两次;
数据流测试指关注变量接收值(点)和使用(或 引用)这些值(点)的路径,是结构性测试方法 的一种。 4
软件测试—结构性测试