使用测试覆盖率改进测试

发表于:2011-10-21 13:15

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:肖利琼    来源:51testing 投稿

分享:

  测试过程中引入代码覆盖率,总括起来可以获得以下一些好处:

  1)发现测试遗漏:通过代码覆盖率结果,能够比较直观的了解到哪些代码未被测试,哪些分支未被覆盖,进而补充相应的测试用例,并执行测试。

  2)衡量测试工作:代码覆盖率工具有非常好的可操作性,可以在一定程度上衡量测试人员的工作。

  3)评估软件质量:高的代码覆盖率可以给程序员和测试人员以信心。但由于软件是一个复杂的系统工程,100%的覆盖率并不代表没有bug,或者说高覆盖率并不能说明软件就没有问题了,但低覆盖率的软件一定是存在问题的。当然这个问题有时还可能不是因为缺少用例,还可能是模块中存在大多的孤代码造成的。

  4)评估代码冗余度:通过未覆盖到的代码分析,可评估冗余代码的占比,为开发人员修改、优化代码提供依据,比如一直无人调用的代码是否需注释或删除。有经验的测试朋友都知道,软件常会出现这种的情况,某函数在某段时间内一直没用上,但后来可能需求变了,此函数又用上了,而一旦用上了却造成对原有其他功能有影响,此时开发人员可能并不知晓,而测试人员却发现原来没问题的功能现在却不能正常使用了。

  4.2 代码覆盖的种类

  如图1,代码覆盖的标准有6种,采用哪一种标准进行度量,要求是不一样的,得到的结果也就不一样,在进行代码覆盖率工作实施前,需作好相关准备。如,采用哪一种标准适合自己,在什么测试阶段引入,需采用哪些第三方工具等。为了对这些标准有一个全面的理解,下面分别进行讲解。(由于这些标准的定义及样例在很多书本、互联网上的个人博客上也有,但比较分散,这里对它们进行总结,主要来源为CoderZh 2009-4-15 发表的“代码覆盖率浅谈”

  http://www.51testing.com/html/04/n-117104-2.html

  在工作中真正应用时,分支-条件,及条件组合单独作为一种标准进行应用的场景并不多见,下面就结合常见的覆盖率工具都包括的语句覆盖(行覆盖)、分支覆盖(判断覆盖)、条件覆盖、路径覆盖共4种覆盖标准。它们中,发现错误的能力呈由弱至强的变化是:语句覆盖->判定覆盖->条件覆盖->路径覆盖,下面结合案例,对这4种覆盖标准进行分析讲解。

  4.2.1 语句覆盖(StatementCoverage)

  又称行覆盖(LineCoverage),段覆盖(SegmentCoverage),基本块覆盖(BasicBlockCoverage),这是最常用也是最常见的一种覆盖方式,就是度量被测代码中每个可执行语句是否被执行到了。这里说的是“可执行语句”,不包括代码注释,空行,等等。非常好理解,只统计能够执行的代码被执行了多少行。需要注意的是,单独一行的花括号{} 也常常被统计进去。语句覆盖常常被人指责为“最弱的覆盖”,它只管覆盖代码中的执行语句,却不考虑各种分支的组合等等。

  有代码片段如下:

Int val(int a,int b)
{
Return a/b;
}

  用例:输入a=8,b=4,完全达到100%的语句覆盖,但充分吗?特殊数据b=0时的情况没有判断,是一个致命的bug。

  实例:自编一个两个整数相除的小程序

  输入X=8,Y=0 ,程序蹦溃,弹出如图4所示提示。

图4

63/6<123456>
100家互联网大公司java笔试题汇总,填问卷领取~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2023
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号