技术狂人:代码覆盖率浅谈

技术狂人:代码覆盖率浅谈

ID:11325185

大小:30.00 KB

页数:3页

时间:2018-07-11

技术狂人:代码覆盖率浅谈_第1页
技术狂人:代码覆盖率浅谈_第2页
技术狂人:代码覆盖率浅谈_第3页
资源描述:

《技术狂人:代码覆盖率浅谈》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、技术狂人:代码覆盖率浅谈在做单元测试时,代码覆盖率常常被拿来作为衡量测试好坏的指标,甚至,用代码覆盖率来考核测试任务完成情况,比如,代码覆盖率必须达到80%或90%。于是乎,测试人员费尽心思设计案例覆盖代码。用代码覆盖率来衡量,有利也有有弊。本文我们就代码覆盖率展开讨论,也欢迎同学们踊跃评论。   首先,让我们先来了解一下所谓的“代码覆盖率”。我找来了所谓的定义:   代码覆盖率=代码的覆盖程度,一种度量方式。   上面简短精悍的文字非常准确的描述了代码覆盖率的含义。而代码覆盖程度的度量方式是有很多种的,这

2、里介绍一下最常用的几种:   1.语句覆盖(StatementCoverage)   又称行覆盖(LineCoverage),段覆盖(SegmentCoverage),基本块覆盖(BasicBlockCoverage),这是最常用也是最常见的一种覆盖方式,就是度量被测代码中每个可执行语句是否被执行到了。这里说的是“可执行语句”,因此就不会包括像C++的头文件声明,代码注释,空行,等等。非常好理解,只统计能够执行的代码被执行了多少行。需要注意的是,单独一行的花括号{}也常常被统计进去。语句覆盖常常被人指责为“

3、最弱的覆盖”,它只管覆盖代码中的执行语句,却不考虑各种分支的组合等等。假如你的上司只要求你达到语句覆盖,那么你可以省下很多功夫,但是,换来的确实测试效果的不明显,很难更多地发现代码中的问题。   这里举一个不能再简单的例子,我们看下面的被测试代码:intfoo(inta,intb){returna/b;}   假如我们的测试人员编写如下测试案例:   TeseCase:a=10,b=5   测试人员的测试结果会告诉你,他的代码覆盖率达到了100%,并且所有测试案例都通过了。然而遗憾的是,我们的语句覆盖率达到

4、了所谓的100%,但是却没有发现最简单的Bug,比如,当我让b=0时,会抛出一个除零异常。   正因如此,假如上面只要求测试人员语句覆盖率达到多少的话,测试人员只要钻钻空子,专门针对如何覆盖代码行编写测试案例,就很容易达到主管的要求。当然了,这同时说明了几个问题:   1.主管只使用语句覆盖率来考核测试人员本身就有问题。   2.测试人员的目的是为了测好代码,钻如此的空子是缺乏职业道德的。   3.是否应该采用更好的考核方式来考核测试人员的工作?   为了寻求更好的考核标准,我们必须先了解完代码覆盖率到底还

5、有哪些,如果你的主管只知道语句覆盖,行覆盖,那么你应该主动向他介绍还有更多的覆盖方式。比如:   2.判定覆盖(DecisionCoverage)   又称分支覆盖(BranchCoverage),所有边界覆盖(All-EdgesCoverage),基本路径覆盖(BasicPathCoverage),判定路径覆盖(Decision-Decision-Path)。它度量程序中每一个判定的分支是否都被测试到了。这句话是需要进一步理解的,应该非常容易和下面说到的条件覆盖混淆。因此我们直接介绍第三种覆盖方式,然后和

6、判定覆盖一起来对比,就明白两者是怎么回事了。   3.条件覆盖(ConditionCoverage)   它度量判定中的每个子表达式结果true和false是否被测试到了。为了说明判定覆盖和条件覆盖的区别,我们来举一个例子,假如我们的被测代码如下:intfoo(inta,intb){  if(a<10

7、

8、b<10)//判定  {       return0;//分支一 }  else  {       return1;//分支二  }}   设计判定覆盖案例时,我们只需要考虑判定结果为true和false两

9、种情况,因此,我们设计如下的案例就能达到判定覆盖率100%:   TestCaes1:a=5,b=任意数字覆盖了分支一   TestCaes2:a=15,b=15         覆盖了分支二   设计条件覆盖案例时,我们需要考虑判定中的每个条件表达式结果,为了覆盖率达到100%,我们设计了如下的案例:   TestCase1:a=5,b=5      true,true   TestCase4:a=15,b=15  false,false   通过上面的例子,我们应该很清楚了判定覆盖和条件覆盖的区别。需要

10、特别注意的是:条件覆盖不是将判定中的每个条件表达式的结果进行排列组合,而是只要每个条件表达式的结果true和false测试到了就OK了。因此,我们可以这样推论:完全的条件覆盖并不能保证完全的判定覆盖。比如上面的例子,假如我设计的案例为:   TestCase1:a=5,b=15true,false  分支一   TestCase1:a=15,b=5false,true   分支一   我们看到,虽然我们完整的做到

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。