目录
一、数据流
-
基于结构的动态测试用例设计方式可分为基于控制流和数据流两大类。
-
基于数据流设计用例是通过选择的定义-使用的覆盖率来导出测试用例集,以覆盖测试项中变量定义和使用间的路径(就是对变量从定义到使用的相关子路径的覆盖进行测试)。
二、定义--使用
1、定义
-
给变量赋值的过程叫做定义;
-
给变量赋一次值,叫做定义一次,也就是说在程序的运行过程中对一个变量可能会进行多次定义,定义可能是给了变量一个新的值,也有可能等于原来的值;
2、使用
(1)概念
-
是指在程序中用到了这个变量,但并没有给这个变量赋值的过程叫做使用。
(2)分类
-
计算使用
-
是指一个变量作为其他变量定义、或者输出的计算输入。
-
-
谓词使用
-
是指用变量作为判定条件(谓词)的结果
-
3、举例说明
![](https://img-blog.csdnimg.cn/e4adfbe5945d41109ff10ef75e2565f0.png)
二、特征集
-
在基于数据流的测试中,测试特征集都是被测的代码段。
三、测试条件
-
测试条件是代码中的定义-使用对。
四、测试覆盖项
1、全定义测试
2、全计算使用测试
3、全谓词使用测试
4、全使用测试
5、全定义--使用路径测试
五、测试用例
1、测试用例的覆盖率
-
执行对应的测试用例所覆盖到的测试项占整个待测试项的百分比
2、全定义测试
(1)概念
-
从变量定义到使用(计算使用或谓词使用)的控制流子路径
(2)测试覆盖项
-
要求变量所有的定义都覆盖,从定义到其谓词使用或计算使用的至少一个子路径要覆盖
3、全计算使用测试
(1)概念
-
从变量定义到该定义 所有计算使用的控制流子路径
(2)测试覆盖项
-
要求变量从定义到其计算使用的自由子路径至少覆盖一次
4、全谓词使用测试
(1)概念
-
从变量定义到该定义 所有谓词使用的控制流子路径
(2)测试覆盖项
-
要求变量从定义到其谓词使用的自由子路径至少覆盖一次
5、全使用测试
(1)概念
-
从变量定义到该定义的 所有 使用(包括谓词使用和计算使用)的控制流子路径
(2)测试覆盖项
-
要求覆盖变量从每个定义到它的每个使用的所有子路径
6、全定义--使用路径测试
(1)概念
-
从每个变量定义到该定义的每次 使用(包括谓词使用和计算使用)的所有控制流子路径
(2)测试覆盖项
-
要求从每个变量定义到它的每次使用的所有无环子路径都覆盖到,如果从定义到同种使用类型有多条路径的话,每条路径都要被覆盖到
-
无环子路径:从定义到使用的过程中,对这个变量不再做第二次定义
7、全使用测试和全定义--使用路径测试的区别
-
例如当定义到计算使用有两条路径时,全使用只需要测试其中一条路径即可,但是全定义--使用必须把这两条路径都测试了
六、案例
测试程序示例
![](https://img-blog.csdnimg.cn/6b74b5639ffd4fb69986475b16d23a53.png)
1、定义、使用分析
![](https://img-blog.csdnimg.cn/d754d74cda114971bf77bb720f1d9c56.png)
![](https://img-blog.csdnimg.cn/e94445baac3d4affb5286d985e60b10b.png)
2、 全定义测试:定义-使用对
-
变量定义到使用(计算使用或谓词使用)的子路径
![](https://img-blog.csdnimg.cn/0f795b14913c40f689cb6b28d14a20af.png)
3、全定义测试:测试覆盖项
-
变量所有的定义都要被覆盖到,变量定义到使用(计算使用或谓词使用)的至少一条子路径要被覆盖,例如对于变量a,选择0->2或0->3作为测试覆盖项都可以。
![](https://img-blog.csdnimg.cn/7fd33da514704ad5b45a37aef9ca6ce4.png)
4、全定义测试:测试用例
![](https://img-blog.csdnimg.cn/ee8abe3f9fca4c02a113b9c7c45ad626.png)
![](https://img-blog.csdnimg.cn/286b1585b60a441fb52375c9e55b87cd.png)
5、全计算使用测试:定义-使用对
-
变量定义到使用(计算使用)的子路径
![](https://img-blog.csdnimg.cn/b82033f8b9fb4aa08cd890393e70b5d4.png)
6、全计算使用测试:测试覆盖项
-
要求所有变量的定义都覆盖,从定义到其使用使用的自由子路径至少覆盖一次
![](https://img-blog.csdnimg.cn/e90d5e0a463a46a2b80f879c28ef951d.png)
7、全计算使用测试:测试用例
![](https://img-blog.csdnimg.cn/b9386173641a4c53b275c62f3ee83961.png)
![](https://img-blog.csdnimg.cn/885c4b7fbba4482cb2e0986b8adc2f68.png)
![](https://img-blog.csdnimg.cn/11055abf81194ac1993938dc806e0792.png)
8、全谓词使用测试:定义-使用对
-
变量定义到使用(谓词使用)的子路径
![](https://img-blog.csdnimg.cn/d2fff057545b4341a49a5f7cf3dedc04.png)
9、全谓词使用测试:测试覆盖项
-
要求所有变量的定义都覆盖,从定义到其谓词使用的自由子路径至少覆盖一次
![](https://img-blog.csdnimg.cn/587722fe4d89464a939bb0c1de9dc49d.png)
10、全谓词使用测试:测试用例
![](https://img-blog.csdnimg.cn/4c54987f820c4490accc09e9c739530d.png)
![](https://img-blog.csdnimg.cn/1cb9c376856d453e92b1b95fc1abff06.png)
11、全使用测试:定义-使用对
-
变量定义到使用(计算使用和谓词使用)的所有子路径
![](https://img-blog.csdnimg.cn/b82033f8b9fb4aa08cd890393e70b5d4.png)
12、全使用测试:测试覆盖项
-
要求覆盖变量从每个定义到它的每个使用的所有子路径(例如当定义到计算使用有两条路径时,全使用只需要测试其中一条路径即可)
-
定义到一种类型的使用有多条子路径时,只需要挑选其中的一条
![](https://img-blog.csdnimg.cn/315918a05a004e618dd2e4d8b17611d3.png)
13、全使用测试:测试用例
![](https://img-blog.csdnimg.cn/f6423e5134ac4591b70ab7495cf20a5a.png)
![](https://img-blog.csdnimg.cn/829a8c3b540f4a57a6a6434206f0b8c3.png)
![](https://img-blog.csdnimg.cn/a24bb45b691f47f08b5771aa4f443e4b.png)
14、全定义-使用测试:定义-使用对
-
变量定义到使用(计算使用和谓词使用)的所有子路径
![](https://img-blog.csdnimg.cn/5047629ac722420599f419fef16ef9f4.png)
15、全定义-使用测试:测试覆盖项
-
从每个变量定义到该定义使用(包括谓词使用和计算使用)的所有控制流子路径,因为要覆盖所有子路径,一个变量的使用路径有多条,所以针对一个测试条件要设计多个测试覆盖项。
-
要求从每个变量定义到它的每次使用的所有无环子路径都覆盖到
-
定义到一种类型的使用有多条子路径时,多条子路径都需要覆盖到
![](https://img-blog.csdnimg.cn/e4b328119a384b1f975926280479c81f.png)
16、全定义-使用测试:测试用例
![](https://img-blog.csdnimg.cn/fd8af6a3661c449c945e29272e6ef1d7.png)
![](https://img-blog.csdnimg.cn/7869388715ca486cbb42cba247d39a59.png)
![](https://img-blog.csdnimg.cn/7ccfd2c01a6846bba61a00bb52ea42ae.png)
![](https://img-blog.csdnimg.cn/cfd0bdcc51ad4afe86764082b1240eea.png)