您可以捐助,支持我们的公益事业。

金额: 1元 10元 50元

姓名:

邮件:

电话:

公司:

说明:

认证码: 验证码,看不清楚?请点击刷新验证码 必填



  要资料 文章 文库 Lib 视频 Code iProcess 课程 认证 咨询 工具 讲座吧   专家招募  
会员   
 
   
 
  
每天15篇文章
不仅获得谋生技能
更可以追随信仰
 
 
     
   
 订阅
  捐助
软件测试系列–白盒测试覆盖率的问题
 
来源:博客园 发布于 2015-12-9
来自于要资料   1202 次浏览     评价:      
 

覆盖率

一、覆盖率的概念

覆盖率是用来度量测试完整性的一个手段,现在有越来越多的测试工具能够支持覆盖率测试,但是它们本身并不包含测试技术,只是测试技术有效性的一个度量。白盒测试中经常用到的覆盖率是逻辑覆盖率。

二、覆盖率的目的

覆盖率对于软件测试有着非常重要的作用,通过覆盖率我们可以知道我们的测试是否充分,我们测试的弱点在哪些方面,进而指导我们设计能够增加覆盖率的测试用例,有效的提高测试质量。 一方面覆盖率技术可以指导测试用例的设计;另一方面,可以通过覆盖率来衡量白盒测试的力度。

三、逻辑覆盖率主要有以下六种:

(1)语句覆盖;

(2)判定覆盖;

(3)条件覆盖;

(4)判定条件覆盖;

(5)条件组合覆盖;

(6)路径覆盖。

1、语句覆盖(Statement Coverage)

语句覆盖的含义是,在测试时,运行被测程序后,程序中被执行到的可执行语句的比率。 语句覆盖=(至少被执行一次的语句数量)/可执行的语句总数。 *语句覆盖是最弱的一种覆盖方式。

2、判定覆盖(Decision Coverage)

判定覆盖也叫分支覆盖(Branch Coverage),含义是:在测试时,运行被测程序后,程序中所有判断语句的取真分支和取假分支被执行到的比率。 判定覆盖=(判定结果被评价的次数)/判定结果的总数。

3、条件覆盖(Condition Coverage)

条件覆盖的含义是:在测试时,运行被测程序后,所有判断语句中每个条件的可能取值(真值和假值)出现过的比率。 条件覆盖=(条件操作数值至少被评价一次的数量)/(条件操作数值得总数)

4、判定条件覆盖(Decision Condition Coverage)

判定条件覆盖也叫分支条件覆盖(Branch Condition Coverage)它的含义是:在测试时,运行被测程序后,所有判断语句中每个条件的所有可能值(为真为假)和每个判断本身的判定结果(为真为假)出现的比率。 判定条件覆盖=(条件操作数值或判定结果至少被评价一次的数量)/(条件操作数值总数+判定结果总数) *判定条件覆盖率实际上就是判定覆盖率和条件覆盖率的组合。

5、条件组合覆盖(Condition combination coverage)

条件组合覆盖的含义是,在测试时,运行被测程序后,所有语句中子条件所有可能的取值结果组合出现过的比率。 条件组合覆盖=(至少被执行到一次的条件组合)/总的可能的条件组合数。 *条件组合覆盖是除路径覆盖以外,最强的一种覆盖方式。

6、路径覆盖(Path Coverage)

路径覆盖的含义是:在测试时,运行被测程序后,程序中所有可能的路径被执行过的比率。 路径覆盖=(至少被执行到一次的路径数)/总的路径数。

四、总结五种逻辑覆盖率。

1、语句覆盖是最弱的一种覆盖方式。

2、条件组合覆盖是除路径覆盖以外,最强的一种覆盖方式。

3、百分百的条件组合覆盖一定包含:百分百的语句覆盖、百分百的判定覆盖、百分百的条件覆盖以及百分百的判定条件覆盖;但不一定包含百分百的路径覆盖。

4、百分百的判定覆盖(分支覆盖)一定包含:百分百的语句覆盖。

5、百分百的条件覆盖不一定包含:百分百的语句覆盖。

五、举例说明。

软件测试系列--白盒测试覆盖率的问题

范例一:

1、分析图1(被测程序流程图)

(1)语句:有两条语句,分别为,X=X/A 和 X=X+1。

(2)判定:有两个判定,分别为(A>1)AND(B=0) 和 (A=2)OR(X>1);这两个判定,分别都有两种可能,true或者false,图中我们用F或者T来表示,所以说这个流程中判定结果的总数为四。

(3)条件:每个判定里面都包含了两个子条件,每个子条件都有两种可能性,true或者false,图中我们分别用T1 F1;T2 F2…来表示,每个判定里面就有四种可能,这样,这个流程图中的条件操作数值的总数为八。

(4)判定条件:判定条件覆盖率实际上就是判定覆盖率和条件覆盖率的组合。

(5)条件组合:上面我们在条件里面提到过的,每个判定里面都包含了两个子条件,每个子条件都有两种可能性,true或者false,图中我们分别用T1、F1、T2、F2…来表示,但是和条件覆盖不一样的是,每个子条件里面的两种可能性(T或者F)都要进行两两组合,即进行排列组合,那么,条件组合的总数为八种组合。分别为:T1T2,F1F2,T1F2,F1T2;T3T4,F3F4,T3F4,F3T4.

【 这个时候大家不能混淆这两个概念,只是因为2个判定比较特殊而已,因为2乘以2和2的2次方是相等的,条件里面是八种条件,而条件组合里面是八种组合。如果一个判定里面有三个子条件的话,这一个判定里面的条件总值就成为2乘以3;而条件组合就是2的3次方。】

(6)路径:图1中路径共有四条,即:abd,ace,abe,acd。

2、给出用例,计算以上六种覆盖率的值

执行CASE:A=2;B=1;X=3。

在计算覆盖率之前,我们首先要看判定中的子条件在做什么运算,第一个判定中,这两个子条件在做与运算,(一个假即为假)。第二个判定中,这两个子条件在做或预算,(一个真即为真)。

(1)语句覆盖率:1/2 (50%)

分析:第一个判定中子条件的值为T1、F2(一真一假),所以我们走F这条分支,此时X=X/A这条语句没有被执行到;接下来,我们看第二个判定,它的子条件的值为T3、T4(都为真),所以我们走T这条分支,这时,语句X=X+1这条语句被执行到了。也就是说,我们只执行到一条语句,所以语句覆盖率位1/2。

(2)判定覆盖率:2/4 (50%)

分析:我们刚才在分析语句覆盖的时候,我们提到第一个判定语句走的是F分支,第二个判定语句也的是T分支,所以我们共走了两条分支,分支总数为4,所以判定覆盖率为:2/4。

(3)条件覆盖率:4/8 (50%)

第一个判定中子条件的值为T1、F2;第二个判定的子条件的值为T3、T4。也就是说我们执行到的条件总数为4;总共的条件操作总值为8,所以条件覆盖率为:4/8。

(4)判定条件覆盖率:6/12 (50%)

前面我们已经分析过了,判定条件覆盖率实际上就是判定覆盖率和条件覆盖率的组合,所以判定条件覆盖率就等与,2/4 (判定覆盖率)+ 4/8(条件覆盖率)=6/12(注意,这里的“+”代表的是组合,而不是算数相加,所以是分子分母分别相加即可)。

(5)条件组合覆盖率:2/8 (25%)

同样的,在条件覆盖率分析中我们已经提到过了,第一个判定中子条件的组合为T1F2;第二个判定的子条件的组合为T3T4,也就是说我们执行到了两种组合;我们在分析流程图的时候已经提到过,总的可能的条件总数为八种组合,所以说条件组合覆盖率为:2/8。

(6)路径覆盖率:1/4 (25%)

在流程图分析中我们已经提到,路径共有四条,而我们走到的路径为只有abe一条,所以路径覆盖率为:1/4。

范例二:

被测程序流程图还是上面范例一的图1。

执行case1:A=2,B=0,X=3; 执行case2:A=1,B=0,X=1。

计算这两种情况下的6种覆盖率。

(1)语句覆盖率:2/2 (100%)

case1:第一个判定中子条件的值为T1、T2(都为真),所以我们走T这条分支,执行到X=X/A这条语句;接下来,第二个判定,它的子条件的值为T3、T4(都为真),所以我们走T这条分支,这时,语句X=X+1这条语句被执行到了。也就是说,我们把两条语句都执行到了,所以语句覆盖率位2/2。 所以说case1这一条用例就可以到达100%的语句覆盖,我们就不用再去执行case2了。

(2)判定覆盖率:4/4 (100%)

case1:我们刚才在分析语句覆盖的时候,我们提到第一个判定语句走的是T分支,第二个判定语句走的也是T分支; case2:第一个判定语句中子条件的值为F1、T2,所以我们走F分支;第二个判定语句中子条件的值为F3、F4,所以我们依然走F分支; 上面两个用例把我们两个判定中的4个分支都执行到了,所以判定覆盖率为4/4(100%)。

(3)条件覆盖率:7/8(100%)

case1:第一个判定语句中子条件的值为T1、T2,第二个判定条件中子条件的值为T3、T4; case2:第一个判定语句中子条件的值为F1、T2,第二个判定条件中子条件的值为F3、F4; 这两个用例执行了七种条件,F2没有执行到,所以条件覆盖率为:7/8(100%)。

(4)判定条件覆盖率:11/12。

判定条件覆盖率=判定覆盖率和条件覆盖率的组合 = 4/4 + 7/8 = 11/12。

(5)条件组合覆盖率:4/8 (50%)

case1:第一个判定语句中子条件的组合为T1T2,第二个判定条件中子条件的组合为T3T4; case2:第一个判定语句中子条件的组合为F1T2,第二个判定条件中子条件的组合为F3F4; 我们可以看出:这两个用例只执行到八种组合中的四种组合,所以条件组合覆盖率为4/8(50%)。

(6)路径覆盖率:2/4(50%)

case1:在这条用例中我们所执行到的路径为:ace。 case2:在这条用例中我们所执行到的路径为:abd。 这两条用例执行到两条路径(ace和abd),还有两条路径(abe和acd)没有执行到,所以路径覆盖率为2/4(50%)。

   
 订阅
  捐助
相关文章

性能测试十问:测试经理篇
web前端性能优化进阶路
性能测试综述
VS2010中自动化测试—Web性能测试
相关文档

性能测试
性能测试执行之测试脚本录制
性能测试进阶1-流程篇
性能测试进阶2-方案篇
相关课程

性能测试方法与技术
使用LoadRunner进行性能测试
Android应用的性能测试
基于Android的单元、性能测试
 

LoadRunner性能测试基础
软件测试结果分析和质量报告
面向对象软件测试技术研究
设计测试用例的四条原则
功能测试中故障模型的建立
性能测试综述
更多...   

性能测试方法与技术
测试过程与团队管理
LoadRunner进行性能测试
WEB应用的软件测试
手机软件测试
白盒测试方法与技术

相关咨询服务
建立软件测试规范
性能评测与调优

某博彩行业 数据库自动化测试
IT服务商 Web安全测试
IT服务商 自动化测试框架
海航股份 单元测试、重构
测试需求分析与测试用例分析
互联网web测试方法与实践
基于Selenium的Web自动化测试
更多...   
 
 
 
 
 
每天2个文档/视频
扫描微信二维码订阅
订阅技术月刊
获得每月300个技术资源
 
 

关于我们 | 联系我们 | 京ICP备10020922号 京公海网安备110108001071号