目录
一、基于控制流设计用例
1、用于讲解测试方法的示例
示例的测试代码及程序流程图
-
定义一个整型函数function1,该函数接收3个布尔类型的变量,分别是a、b、c;
-
函数中定义了一个整型变量x,并给x赋值为0;
-
判断a与b或c的运算结果,为真时执行x=1;为假时直接返回x的值。
![](https://i-blog.csdnimg.cn/blog_migrate/602228574fb84b2aa45355c3fbd48e76.png)
2、基于控制流的动态的测试方法
(1)语句测试
(2)分支测试
(3)判定测试
-
判定测试与分支测试的区别
(4)分支条件测试
(5)分支条件组合测试
(6)修正条件判定测试
二、语句测试
1、覆盖要求
-
选择足够多的测试数据,使得程序中的每条语句都要被覆盖一次。
-
测试集是程序代码,测试条件是代码中的可执行语句,测试覆盖项是要覆盖每一条可执行的语句。
-
如下图,设计两条测试用例就能覆盖到代码中的所有语句,但是右侧的假路径没有执行语句,所以就设计左面路径的测试用例即可。
2、测试用例
![](https://i-blog.csdnimg.cn/blog_migrate/59d1edb155bdd10c0d0db86a0a321386.png)
-
用例1: a=T,b=T,c=T,预期结果x=1
3、语句测试的缺点
-
语句测试的覆盖强度不强;
-
对于判定中逻辑与和逻辑或写错的情况,可能会检测不出来。
三、分支测试
1、覆盖要求
-
设计足够多的测试用例,使得程序中的每个分支都要被经历到(覆盖到),哪怕这个分支上没有语句也要被经历到。
2、测试用例
![](https://i-blog.csdnimg.cn/blog_migrate/4470f1d987109591526a9f7ac131afc0.png)
-
用例1: a=T,b=T,c=T,预期结果x=1
-
用例2: a=F,b=F,c=F,预期结果x=0
3、分支测试的缺点
-
对于判定中逻辑与和逻辑或写错的情况,可能会检测不出来。
四、判定测试
1、覆盖要求
-
设计足够多的测试用例,使得程序中的每个判定条件的取值(T、F)都要被覆盖到;
-
判定测试着眼分析的是判定,所以不要这些判定串联起来分析,而是一个一个的分析这些判定里的每一个取值。
2、测试用例
![](https://i-blog.csdnimg.cn/blog_migrate/0238f1bf47fbb4eb89fa4c41d4386b65.png)
-
用例1: a=T,b=T,c=T,预期结果x=1
-
用例2: a=F,b=F,c=F,预期结果x=0
3、判定测试的缺点
-
对于判定中逻辑与和逻辑或写错的情况,可能会检测不出来。
五、分支测试与判定测试的区别
![](https://i-blog.csdnimg.cn/blog_migrate/ba4121c7250ba770b0c2ba61c15c65d3.png)
基本块
-
进行程序分析的时候首先要划分基本块;
-
基本块:所谓基本块是指程序的一组顺序执行的语句,只有一个入口和一个出口(基本块一定是从最前面的语句进来,最后面的语句出去,不会在这个基本块中间的代码部分跳出),只要执行了这个基本块,那么这个基本块中的代码就都会执行,如果不执行这个基本块,那么这个基本块中的代码就都不会执行。
-
划分基本块时可以先找入口,一般第一条语句是一个入口,紧跟判断条件之后的语句一般也是入口。找出入口之后看这个语句是否产生出口,就是看这条语句是否跳出去,没有跳出的话继续看下条语句是否有多个跳出的点,是不是出口......将所有的入口和出口找好了,那么程序的基本块也就划分好了。
![](https://i-blog.csdnimg.cn/blog_migrate/9a8064e0855d309cbdd9c885108a68a3.png)
控制流图
![](https://i-blog.csdnimg.cn/blog_migrate/1e46d8b95998ea157c3a9099afc9cdf1.png)
1、100%覆盖:所有的边和判断都被覆盖
![](https://i-blog.csdnimg.cn/blog_migrate/7f3731c24280f025e31a159b7d1d4414.png)
-
分支测试与判定测试没有区别
2、不完全覆盖
-
分支测试覆盖率和判定测试覆盖率会产生差异
测试用例
-
serviceYear=10
-
age=40
-
salary=5000.00
-
预期输出:10000.00
控制流图的执行路径:B1->B5->B6
-
判定覆盖率:1/4=25.00%(B1(T、F)和B2(T、F)结点一共是2个判定,会产生4中结果,此时只覆盖了一种结果)
-
分支覆盖率:2/7=28.57%(控制流图有7条边,所以该程序共有7个分支,B1->B5->B6目前只覆盖了2条边)
六、分支条件测试
1、覆盖要求
-
设计足够多的测试用例,使得每一个判定语句的取值,以及每个判定条件的取值都要被覆盖。
2、测试用例
![](https://i-blog.csdnimg.cn/blog_migrate/b539ea48b72bad2d652dece94587ad3c.png)
-
用例1: a=F,b=T,c=F,预期结果x=0
-
用例2: a=T,b=F,c=T,预期结果x=1
3、分支条件测试的缺点
-
对于判定中逻辑与和逻辑或写错的情况,可能会检测不出来。
七、分支条件组合测试
1、覆盖要求
-
设计足够多的测试用例,使得每一个判定中,所有条件的各种可能组合都被覆盖到。
-
2个条件有2的2次方种测试用例,3个条件有2的3次方中测试用例,n个条件有2的n次方种测试用例。
2、测试用例
-
用例1: a=F,b= F ,c=F
-
用例2: a=T,b=F,c= F
-
用例3: a=F,b=T,c=F
-
用例4: a=F,b=F,c=T
-
用例5: a=T,b=T,c=F
-
用例6: a=T,b=F,c=T
-
用例7: a=F,b=T,c=T
-
用例8: a=T,b=T,c=T
3、分支条件组合测试
-
覆盖强度是最强的,但是测试的工作量会比较大。
八、修正条件判定测试(MC/DC)
1、目的
-
在保证测试覆盖强度的基础上,去减少分支条件组合覆盖测试用例的数量 的一种 基于控制流的动态的测试技术。
2、覆盖要求
-
设计足够多的测试用例,来确定各个条件能够影响到包含的判定结果,这要包括两个条件,第一个是每个程序的入口到出口点至少要被调用一次,每个程序的判定的所有可能的结果值要转换一次,程序判定被分解为通过逻辑操作and和or连接的布尔条件时每个条件对判定结果的值是独立的(两次计算)。
-
测试条件就是每一个判定语句;覆盖项就是单个布尔条件可以独立影响到判定结果的条件,其布尔值是唯一的,可行的一组组合。
3、修正判定判定测试步骤
(1)MC/DC首先要求实现分支条件覆盖
(2)在此基础上,对于每一个条件C,要求存在符合以下条件的
两次计算
-
条件C所在判定内的所有条件,除条件C外,其他条件的取值完全相同
-
条件C的取值相反
-
判定的计算结果相反
![](https://i-blog.csdnimg.cn/blog_migrate/4274e680b0c449f165ffc880488ec025.png)
4、测试用例
![](https://i-blog.csdnimg.cn/blog_migrate/00376984caa03ce1818d79a162ce4fb8.png)
九、考点
![](https://i-blog.csdnimg.cn/blog_migrate/f930a979ee2797986b643b92d9dee13d.png)