一、覆盖率概念

覆盖率是用来度量测试完整性的一个手段,是测试技术有效性的一个度量。分为:白盒覆盖、灰盒覆盖和黑盒覆盖;测试用例设计不能一味追求覆盖率,因为测试成本随覆盖率的增加而增加。

覆盖率=(至少被执行一次的item数)/item的总数

二、白盒覆盖率***

白盒测试时基于程序结构的逻辑驱动测试,白盒覆盖中最常见的是逻辑覆盖(也叫代码覆盖或结构化覆盖),逻辑覆盖包括:语句覆盖、判定覆盖、条件覆盖、判定条件覆盖、条件组合覆盖、路径覆盖。

1.语句覆盖(Statement Coverage)

指在测试时运行被测程序后,程序中被执行到的可执行语句的比率:

语句覆盖率=(至少被执行一次的语句数量)/(可执行的语句总数)

例:

case1:(2,0,3)   语句覆盖率=?
case2:(2,1,3)   语句覆盖率=?

分析:案例中可执行的语句总数有2条:X=X/A和X=X+1;
        case1走ace路线,2条语句都被执行了,所以语句覆盖率为2/2,即100%;
        case1走abe路线,只执行了1条语句,所以语句覆盖率为1/2,即50%;

总结:case1中语句覆盖率达到了100%,看似很完美,但是并不能百分百的发现bug,若上例中两个被测程序段逻辑有问题,条件语句写成:

会发现语句覆盖率依然为100%,但是发现不了逻辑运算中出现的错误;即使语句覆盖率达到百分百也有缺陷发现不了,所以覆盖率只是我们度量的手段。

2.判定覆盖率(Decision Coverage)

判定覆盖,也叫分支覆盖(Branch Coverage),是指在测试时运行被测试程序后,程序中所有判断语句的取真和取假分支被执行到的比率:

判定覆盖率=(判定结果被评价的次数)/(判定结果的总数)

例:

case1:(2,0,3)   判定覆盖率=?
case2:(1,0,1)   判定覆盖率=?

分析:案例中判断语句的取真和取假分支共有4个:T1\F1\T2\F2

case1走T1-T2路线,2个判断分支被执行,所以判定覆盖率为2/4,即50%;
 case1走F1-F2路线,2个判断分支被执行,所以判定覆盖率为2/4,即50%;

总结:case1和case2加起来刚好可以达到判定覆盖率100%,但是同样地,依然会有缺陷发现不了,例如将源程序改为:

3.条件覆盖(Condition Coverage)

指在测试时运行被测程序后,所有判断语句中每个条件的可能取值(真值和假值)出现过的比率:

条件覆盖率=(条件操作数值至少被评价一次的数量)/(条件操作数值的总数)

分析:案例中有两条判断语句,每个语句有两个条件,即4个条件,每个条件有两个取值,所以条件操作数值的总数为8个,测试用例如下:

总结: 每个case的覆盖率为4/8,50%,三个用例加起来刚好实现条件覆盖率100%。但是下面两条用例也可以实现100%覆盖,但是却没有覆盖所有分支,所以说条件覆盖也会有缺陷发现不了。

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

是指设计足够的测试用例,使得判断中每个条件的所有可能取值至少执行一次,同时每个判断本身的所有可能判断结果至少执行一次,也即要求各个判断的所有可能的条件取值组合至少执行一次,也叫分支条件覆盖;实际上就是判定覆盖率和条件覆盖率的组合。

判定条件覆盖率=(条件操作数值或判定结果至少被评价一次的数量)/(条件操作数值总数+判定结果总数)

分析:从表面上看,判定条件覆盖测试了所有的条件的取值,但是事实并非如此。因为往往某些条件掩盖了另一些条件,对于条件表达式(A>1)and(B=0)来说,若(A>1)的测试结果为真,则还要测试(B=0),才能决定表达式的值;而若条件表达式(A>1)的测试结过果为假时,可以立刻确定表达式的结果为假。这是,往往不再测试条件表达式(B=0)的取值了,这样的话条件B就没有检查,对于(A=2)or(X>1)来说也是同样的道理。因此,词用判定-条件覆盖,逻辑表达式中的错误不一定能够查出来。

总结: 为了能够防止某些条件掩盖另一些条件,必须将逻辑表达式分解为单个条件,转换成如下图所示的单一条件的嵌套条件结构,这样可以针对每一条件和判定设计测试用例,防止测试中队某些条件的侧漏。

5.条件组合覆盖(Multiple Condition Coverage)

基本思想是,设计足够的测试用例,使得每个判定中条件的各种可能组合都至少出现一次。

条件组合覆盖率=(条件组合至少被评价一次的数量)/(条件组合总数)

分析:每个判定中条件的各种可能组合如下,条件组合总数为8中。

总结:上面测试用例达到了100%的条件组合覆盖,但是它所走的路径只有3条,没有达到100%的路径覆盖,所以条件组合覆盖也不是十全十美的。

6.路径覆盖 (Path Coverage)

指在测试时运行被测程序后,程序中所有可能的路径被执行过的比率:

路径覆盖率=(至少被执行一次的路径数)/(总的路径数)

分析:案例中总的路径为4条,分别为ace,abd,abc,acd,下面4条例子实现了100%的路径覆盖。

case1:(2,0,3) 覆盖路径ace
case2:(1,0,1) 覆盖路径abd
case3:(1,0,3) 覆盖路径abc
case4:(3,0,1) 覆盖路径acd

总结:对于这组测试用例,路径覆盖达到了100%,但是很明显没有达到100%条件覆盖(B!=0未取到) ,所以说路径覆盖也不是零缺陷的,进一步说明了覆盖率只是我们度量的手段。

7.其他覆盖

a.指令块覆盖(Instruction Blocks Coverage,IB Coverage)

是语句覆盖的一个变体,其唯一的区别是计算方式的不同,在这里指令块表示函数内部的一个序列语句,在这一个序列语句中不存在控制语句(会引起分支)

指令块覆盖=(至少被执行一次的指令块数量)/(系统中指令块总数)

例:一次测试中,在第一个控制点走了3条指令的分支,在第二个控制点走了空指令分支,那么其指令块覆盖式2/4,即50%;其语句覆盖式(5+3)/15,即53.33%;

b.判定路径覆盖(Decision-to-Decision paths Coverage,DDP Coverage)

是判定覆盖的一个变体,这里的判定指的是一个序列语句,其起始位置是函数入口或一个判定(如If,while,switch等)的开始,结束位置是下一个判定的开始。具体如下图:

通过计算哪些判定路径已经走过,哪些没走过,我们就可以得到DDP覆盖率了,公式如下:

DDP 覆盖=(至少被执行到一次的判定路径数量)/(系统中判定路径总数)

三、灰盒覆盖率

1.接口覆盖(Interface Coverage)

接口覆盖,又称入口点覆盖,要求通过设计一定的用例使得系统的每个接口被测试到。

接口覆盖=(至少被执行一次的接口数量)/(系统中接口的总数)

2.函数覆盖(True Coverage)

函数覆盖是针对系统或一个子系统的测试的,它表示在该测试中,有哪些函数被测试到了,其被测试到的频率有多大,这些函数在系统所有函数中占的比例有多大,函数覆盖是一个比较容易自动化的技术,同时也易于理解。其公式如下:

函数覆盖=(至少被执行一次的函数数量)/(系统中函数的总数)

四、黑盒覆盖率

在实际测试中,与黑盒相关的覆盖率比较少,主要是功能覆盖率(Functional  Coverage),功能覆盖中最常见的是需求覆盖(Requirement Coverage),其含义是通过设计一定的测试用例,要求每个需求点都被测试到。

需求覆盖=(被验证到的需求数量)/(总的需求数量)

五、面向对象的覆盖率

1.继承上下文覆盖

2.基于状态的上下文覆盖

3.基于线程的上下文覆盖

六、案例

为以下所示的程序段设计一组测试用例,要求分别满足语句覆盖、判定覆盖、条件覆盖、判定条件覆盖、条件组合覆盖和路径覆盖,并画出相应的程序流程图。

思路:  首先根据程序代码画出程序流程图 ,然后根据程序流程图分别列出各种覆盖率的条件,然后设计测试用例,设计完一个用例标记下覆盖了多少条件,依次往下,直到覆盖了所有的条件。

用例:

七、重点 

1.需要掌握:一个测试用例的各种覆盖率为多少?
                 覆盖率100%的情况下需要设计多少用例?

2.各种测试覆盖率之间的关系

转载于:https://www.cnblogs.com/Carolinee/p/5404675.html

软件测试基础 - 测试覆盖率相关推荐

  1. 学习软件测试基础测试第十三天

    今天上午老师给我们讲解了测试用例的设计,因为悟空CRM系统是比较大的平台,功能模块比较多,大家也都没有什么思路,不知该怎么设计测试用例,所以老师详细的讲解了测试功能项和各个模块之间的联系,后台的设置, ...

  2. 软件测试基础测试分析法

    质量模型分析法之功能性 适合性 功能测试适合当前这个软件,需求人员来把控的: 提醒测试人员需求中的功能在被测试软件中都要有,即:所有的需求都要被开发,防止漏开发. 至于这个需求是否加到被测软件中,由需 ...

  3. 软件测试基础之你的测试覆盖率是多少?

    在面试过程中,遇到过面试官询问测试覆盖率的问题. 我说没统计过(完结撒花). 开个玩笑. 通常测试覆盖率是用来「衡量测试的充分性和完整性」. 从广义的角度来讲,测试覆盖率主要分为「两大类」,一类是「面 ...

  4. 想要踏入测试门这些软件测试基础知识必须闹记在心

    目录 一.软件测试概述 二.白盒测试 三.黑盒测试 四.测试用例 五.单元测试 六.功能测试 七.集成测试 八.系统测试 九.验收测试 十.回归测试 十一.配置测试 一.软件测试概述 1.什么是软件 ...

  5. 测试培训大纲第一课时,软件测试基础(培训待续中....)

    一.软件测试基础 1.软件测试的概念 1.1软件测试的定义与目的 为什么要测试? 测试的目的是什么? 测试的内容是什么? 主要内容:发现(discover)验证(verification)和确认(va ...

  6. 软件测试如何提高测试的覆盖率,测试覆盖率是什么?

    测试覆盖率是什么?   测试覆盖率(test coverage)是2018年公布的计算机科学技术名词,它是测试质量的度量标准之一,告诉我们测试了多少代码.它定义了系统的某些实体,目的是用测试覆盖它们. ...

  7. 测试时代新推出《测试员》特刊之软件测试基础

    忙碌了将近一个月,推出了测试时代新一期期刊 <测试员>特刊之软件测试基础 感谢大家共同的努力 下载地址:http://bbs.ltesting.net/thread-37554-1-1.h ...

  8. 软件测试基础(七)测试规范的确定

    无规矩不成方圆,现在我们在工作中其实用不到测试规范的,因为具体的规范一般情况公司是不会出的,当然一些大厂的话,是有测试规范的,比如我们熟知的Google 一.测试规范的概念 软件测试规范就是对软件测试 ...

  9. 软件测试中语句覆盖的优点,软件测试之测试覆盖率的基本策略

    原标题:软件测试之测试覆盖率的基本策略 软件测试覆盖率简介 1.定义:覆盖率是用来度量测试完整性的一个手段,同时也是测试技术有效性的一个度量. 2.计算:覆盖率=(至少被执行一次的item数)/ite ...

最新文章

  1. 这些神经网络,还可信吗?
  2. R语言-查看对象类型和长度
  3. fwm环境APP菜品数据加载失败的优化操作
  4. eclipse异常关闭,无法启动tomcat解决办法
  5. RAID原理分析总结
  6. MongoDB索引实战技巧
  7. ldap的shema
  8. eclipse操作指南
  9. android中的 listview控件,聊聊Android中的ListView控件
  10. js中常用方法以及document.readyState 判断页面是否加载完成 complete和interactive
  11. java 7个数排序_7 Java 快速排序
  12. thinkphp5 一周学习总结 10月12日
  13. idea最近svn提交很慢 idea中svn提交时performing vcs refresh时间很长
  14. redis在php下面的命令大全
  15. linux开启80和443,nginx 80和443同时做负载均衡
  16. Dart语言之旅(完全翻译版)
  17. ibm服务器开机显示如何设置,IBM服务器开机进入WEBBIOS界面配置RAID
  18. Undefined symbol main (referred from entry9a.o).
  19. 做一个学(chou)习(ka)游戏(一)
  20. hp linux 禁用u盘启动项,BIOS关闭Secure Boot(安全启动)方法大全(联想,华硕,DELL,HP等品牌)...

热门文章

  1. php是独立服务吗,在LNMP服务器中,PHP是作为一个独立的服务存在的,这个服务叫做_______。...
  2. 北航c语言简答题目汇总_2020下半年至2021年【化学/计算机/生物类】国际竞赛汇总!...
  3. Git HEAD 意思详解 和版本回退
  4. 【机器学习】集成学习与模型融合方法举例
  5. 【Linux入门到精通系列讲解】工具——make/Makefile
  6. python【数据结构与算法】二分归并模版
  7. python【蓝桥杯vip练习题库】ADV-150 周期字串
  8. python【数据结构与算法】各进制转换-使用内置函数
  9. mysql学_MySQL学习(一)
  10. srm linux字符界面,如何使用srm安全的删除Linux中的文件