1 / 7
文档名称:

代码覆盖率.docx

格式:docx   大小:18KB   页数:7页
下载后只包含 1 个 DOCX 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

代码覆盖率.docx

上传人:guoxiachuanyue007 2022/11/26 文件大小:18 KB

下载得到文件列表

代码覆盖率.docx

文档介绍

文档介绍:该【代码覆盖率 】是由【guoxiachuanyue007】上传分享,文档一共【7】页,该文档可以免费在线阅读,需要了解更多关于【代码覆盖率 】的内容,可以使用淘豆网的站内搜索功能,选择自己适合的文档,以下文字是截取该文章内的部分文字,如需要获得完整电子版,请下载此文档到您的设备,方便您编辑和打印。在做单元测试时,代码覆盖率常常被拿来作为衡量测试好坏的指标,甚至,用代码覆盖率来考核测试任务完成情况,比如,代码覆盖率必须达到80%或90%。于是乎,测试人员费尽心思设计案例覆盖代码。用代码覆盖率来衡量,有利也有有弊。本文我们就代码覆盖率展开讨论,也欢迎同学们踊跃评论。
首先,让我们先来了解一下所谓的“代码覆盖率”。我找来了所谓的定义:
代码覆盖率二代码的覆盖程度,一种度量方式。
上面简短精悍的文字非常准确的描述了代码覆盖率的含义。而代码覆盖程度的度量方式是有很多种的,这里介绍一下最常用的几种:
语句覆盖(Statementcoverage)
又称行覆盖(LineCoverage),段覆盖(SegmentCoverage),基本块覆盖(BasicBlockCoverage),这是最常用也是最常见的一种覆盖方式,就是度量被测代码中每个可执行语句是否被执行到了。这里说的是“可执行语句”,因此就不会包括像C++的头文件声明,代码注释,空行,等等。非常好理解,只统计能够执行的代码被执行了多少行。需要注意的是,单独一行的花括号{}也常常被统计进去。语句覆盖常常被人指责为“最弱的覆盖”,它只管覆盖代码中的执行语句,却不考虑各种分支的组合等等。假如你的上司只要求你达到语句覆盖,那么你可以省下很多功夫,但是,换来的确实测试效果的不明显,很难更多地发现代码中的问题。
这里举一个不能再简单的例子,我们看下面的被测试代码:
{—
/b;
假如我们的测试人员编写如下测试案例:
TeseCase:a=10,b=5
测试人员的测试结果会告诉你,他的代码覆盖率达到了100%,并且所有测试案例都通过了。然而遗憾的是,我们的语句覆盖率达到了所谓的100%,但是却没有发现最简单的Bug,比如,当我让b=0时,会抛出一个除零异常。
正因如此,假如上面只要求测试人员语句覆盖率达到多少的话,测试人员只要钻钻空子,专门针对如何覆盖代码行编写测试案例,就很容易达到主管的要求。当然了,这同时说明了几个问题:
主管只使用语句覆盖率来考核测试人员本身就有问题。
测试人员的目的是为了测好代码,钻如此的空子是缺乏职业道德的。
是否应该采用更好的考核方式来考核测试人员的工作?为了寻求更好的考核标准,我们必须先了解完代码覆盖率到底还有哪些,如果你的主管只知道语句覆盖,行覆盖,那么你应该主动向他介绍还有更多的覆盖方式。比如:
判定覆盖(Decisioncoverage)
又称分支覆盖(BranchCoverage)所有边界覆盖(AII-EdgesCoverage),基本路径覆盖(BasicPathCoverage),判定路径覆盖
(Decision-Decision-Path)。它度量程序中每一个判定的分支是否都被测试到了。这句话是需要进一步理解的,应该非常容易和下面说到的条件覆盖混淆。因此我们直接介绍第三种覆盖方式,然后和判定覆盖一起来对比,就明白两者是怎么回事了。
条件■盖(Conditioncoverage)
它度量判定中的每个子表达式结果true和false是否被测试到了。为了说明判定覆盖和条件覆盖的区别,我们来举一个例子,假如我们的被测代码如下:
intfoo(inta,intb)
if(a<10||b<10)//判定
{return0;//分支-
else
}}}「分支二
设计判定覆盖案例时'我们只需要考虑判定结果为true和false两种情
况,因此,我们设计如下的案例就能达到判定覆盖率100%:
TestCaesI:a=5,b=任意数字覆盖了分支一
TestCaes2:a=15,b=15覆盖了分支二
设计条件覆盖案例时,我们需要考虑判定中的每个条件表达式结果,为
了覆盖率达到100%,我们设计了如下的案例:
TestCasel:a=5,b=5true,true
TestCase4:a=15,b=15false,false
通过上面的例子,我们应该很清楚了判定覆盖和条件覆盖的区别。需要特别注意的是:条件覆盖不是将判定中的每个条件表达式的结果进行排列组合,而是只要每个条件表达式的结果true和false测试到了就OK了。因此,我们可以这样推论:完全的条件覆盖并不能保证完全的判定覆盖。比如上面的例子,假如我设计的案例为:
TestCase1:a=5,b=15true,false分支一
TestCase1:a=15,b=5false,true分支一
我们看到,虽然我们完整的做到了条件覆盖,但是我们却没有做到完整的判定覆盖,我们只覆盖了分支一。上面的例子也可以看出,这两种覆盖方式看起来似乎都不咋滴。我们接下来看看第四种覆盖方式。
路径覆盖(PathCoverage)又称断言覆盖
(Predicatecoverage)。它度量了是否函数的每一个分支都被执行了。这句话也非常好理解,就是所有可能的分支都执行一遍,有多个分支嵌套时,需要对多个分支进行排列组合,可想而知,测试路径随着分支的数量指数级别增加。比如下面的测试代码中有两个判定分支:
intfoo(inta,intb)
{…n=0;
if(a<10)
{//分支一
}—;
if(b<10)
{//分支二
}—0;
}returnnReturn;
对上面的代码,我们分别针对我们前三种覆盖方式来设计测试案例:

TestCasea=5,b=5nReturn=11
语句覆盖率100%

TestCasela=5,b=5
TestCase2a=15,b=15判定覆盖率100%
nReturn=11
nReturn=0

TestCase1a=5,b=15
nReturn=1
TestCase2a=15,b=5
nReturn=10
条件覆盖率100%
我们看到,上面三种覆盖率结果看起来都很酷!都达到了100%!主管可能会非常的开心,但是,让我们再去仔细的看看,上面被测代码中,nReturn的结果一共有四种可能的返回值:0,1,10,11,而我们上面的针对每种覆盖率设计的测试案例只覆盖了部分返回值,因此,可以说使用上面任一覆盖方式,虽然覆盖率达到了100%,但是并没有测试完全。接下来我们来看看针对路径覆盖设计出来的测试案例:
TestCase1a=5,
b=5
nReturn=0
TestCase2a=15,
b=5
nReturn=1
TestCase3a=5,
b=15
nReturn=10
TestCase4a=15,
b=15
nReturn=11
路径覆盖率100%
太棒了!路径覆盖将所有可能的返回值都测试到了。这也正是它被很多
人认为是“最强的覆盖”的原因了。
还有一些其他的覆盖方式,如:循环覆盖(LoopCoverage),它度量是
否对循环体执行了零次,一次和多余一次循环。剩下一些其他覆盖方式就不介绍了。
通过上面的学****我们再回头想想,覆盖率数据到底有多大意义。我总
结了如下几个观点,欢迎大家讨论:
覆盖率数据只能代表你测试过哪些代码,不能代表你是否测试好这
些代码。(比如上面第一个除零Bug)
不要过于相信覆盖率数据。
不要只拿语句覆盖率(行覆盖率)来考核你的测试人员。
路径覆盖率>判定覆盖>语句覆盖
测试人员不能盲目追求代码覆盖率,而应该想办法设计更多更好的
案例,哪怕多设计出来的案例对覆盖率一点影响也没有。

最近更新

2022-2023年二级建造师之二建机电工程实务题库.. 50页

2022年电子商务专业理论综合真题卷(一)及参考.. 13页

中职英语模拟题(2015年) 28页

中秋佳节致客户的祝福语 21页

九年级上科学第四章知识点总结--全 10页

义务教育课程标准实验教科书语文 10页

中药配伍表 11页

高考化学总复习第一轮复习化学物质及其变化第.. 69页

汽车行业中国汽车市场与营销模式调查分析PPT7.. 79页

内部账户专项治理方案 3页

4.4力学单位制说课比赛获奖课件公开课一等奖课.. 19页

美甲店双向选择方案 2页

机械原理第七版孙桓 20页

红星美凯龙全球招商发布会策划案市公开课一等.. 46页

渔业资源可持续利用 168页

2024年钼矿项目资金筹措计划书代可行性研究报.. 58页

2024年冷冻饮品项目资金筹措计划书代可行性研.. 62页

2024年胶囊内窥项目资金需求报告代可行性研究.. 60页

吸入性肺炎的护理 32页

企业选址与布局 (2) 44页

2024年端子机项目投资申请报告代可行性研究报.. 68页

静脉输液治疗护理学考核试题题库及答案 38页

2024企业主要负责人安全培训考试题及答案优质.. 12页

叙事歌曲《二月里见罢到如今》创作及演唱解析 2页

毕业设计 论文 酒店管理系统 62页

以工代赈项目开工仪式表态发言稿 1页

学前儿童卫生学 220页

酒店管理系统毕业设计(论文设计) 41页

江淮六安YE2电机安装尺寸及技术参数 8页

2014安全评价课程设计任务书 6页