`
infinite
  • 浏览: 41759 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

代码质量之测试覆盖率

阅读更多

统计测试代码的增长趋势的方式有:1.统计测试用例数量,及测试成功的用例数量  2. 统计测试覆盖率

用例之间的覆盖贡献率差别可能很大,简单的用例只能覆盖到极少数的几行的代码,而复杂的用例则有可能覆盖到上千行代码,这种情况下用例数量的参考价值就变的很小。还有就是用例之间还存在着重复测试的情况,如果多个用例对应的都是同一段代码,那么它们充其量只能计一个有效用例。

个人在实践的过程中基本采用第二种,统计测试覆盖率,并且是覆盖率的狂热崇拜者,到了能为之废寝忘食的地步。

最早的时候,通过打印日志或者debug代码,看看设想中的逻辑是不是都被运行正确了。

那种方式只能做到自己心中有数,但谈不上有何真正意义的统计价值。后来慢慢学会使用各种工具插件来统计,常见的有cobertura-maven-plugin和Atlassian Clover,前者为开源插件,可方便的集成到maven project中,生成网页版的统计结果,但其内容稍显单薄,只有各种层级(project、package、class)的行覆盖率和分支覆盖率及复杂度,且当项目为multi-modules的结构时,只能给出各个module的单独的覆盖率统计,没有汇总,这个在某些时候很要命,尤其是项目按service、dao、model这样分module时。Cobertura同时也是Sonar中默认的测试覆盖率统计插件。

         相比Cobertura,Atlassian公司的 Clover插件则要强大很多,能解决各种开源插件处理不了的问题,包括上面说的multi-modules的测试覆盖率统计问题。但其价格也不菲,server版的要1200$/每机器。其还提供为期一个月的试用版license,当下我正拿着试用的license,拼命的完善个人代码的测试覆盖率中。下图详细介绍了clover测试报告首页的各种统计信息。各个维度还可具体展开查看,比如单个用例为哪些class贡献了多少的覆盖率等等。

     

 

 

对照这份统计报告,如果你的覆盖率还有完善的余地,那么拿危险性最大的class开刀就行了。处理掉一批,重新运行,再对下一批进行处理,直到每个class的覆盖率都到安全线以上为止。处理的过程中,有时候能发现一些代码中的臭虫,比如某些分支死活测试不到,那就有必要检查下是不是有bug存在,或者调整下代码逻辑了。在对每个class,每个method进行分析的过程中,相当于做了一遍code review,能发现不少需要重构的地方。有Test保驾护航,重构起来自然是如鱼得水。此时已经搞不清是 Test drive Development 还是 Test drive Design。Test和代码,浑然一体。

 

通常,对平常工作中的业务代码,写单元测试要做的就是尽可能的模拟各种业务场景,创造各种场景下的具体数据。这个我觉得不难,我写的责任模块的测试覆盖率至少在85%以上。但是对于底层框架类的代码,想要这么高的测试覆盖率可谓难于上青天。框架需要模拟各种多线程、web容器、DB,甚至WS服务、LDAP服务、FTP服务、JMS等。每一个都够头疼一阵子。好在现在各种容器/服务基本都有了可embedded的JAVA版的开源工具,能比较方便的集成嵌入到单元测试代码中来。

 

提高测试覆盖率的方法无外乎两种,一、添加单元测试 二、删除不必要的代码。

 

个人总结完善覆盖率会经历下面三个阶段:

0% 到 60% 跑马圈地阶段,怎么写怎么有。

      60% 到 85% 精耕细作阶段。

85% 以上,要么是登峰造极了,要么是走火入魔、覆盖率中毒了,不到100%不罢休,getter、setter 方法和catch exception也不放过。无论是哪一种,需要有偏执的秉性。

 

最后,测试的代码应该写的比业务代码更漂亮才对。业务代码经常改来改去,熵增是跑不掉的,日积月累,积重难返。但测试代码不需要,测试代码只依赖被测试的接口,本身的代码并不需要动来动去。

  • 大小: 1.1 MB
分享到:
评论

相关推荐

    测试覆盖率

     基于代码的测试覆盖评测测试过程中已经执行的代码的多少,与之相对的是要执行的剩余代码的多少。代码覆盖可以建立在控制流(语句、分支或路径)或数据流的基础上。控制流覆盖的目的是测试代码行、分支条件、代码中...

    基于BullseyeCoverage工具的代码覆盖率研究.doc

    代码覆盖率并不能表明覆盖到的代码不包含缺陷,不能完全用来衡量代码质量。但是,它可以帮我们定位到没有被测试覆盖的代码,发现测试用例的薄弱部分,进而改善测试用例。本文将通过介绍C/C++代码覆盖率测试工具...

    敏捷开发流程 之 junit提高代码覆盖率

    Java 项目开发过程中,由于开发人员的经验、代码风格各不相同,以及缺乏统一的标准和管理流程,往往导致整个项目的代码质量较差,难于维护,需要较大的测试投入和周期等问题。这些问题在一个项目组初建、需求和设计...

    emma代码覆盖率

    用户代码覆盖率测试 ,开源可重写,对于产品质量控制非常重要

    iOS覆盖率检测原理与增量代码测试覆盖率工具实现

    代码覆盖率检测正是帮助开发、测试同学提前发现问题,保证代码质量的好帮手。对于开发者而言,代码覆盖率可以反馈两方面信息:自测的充分程度。 代码设计的冗余程度。 尽管代码覆盖率对代码质量有着上述好处,但在...

    轻量级覆盖率测试工具logcover.zip

    logcover是Baidu质量部推出的一款专门用于度量异常测试覆盖率的轻量级工具,通过度量异常日志的测试覆盖率来反应异常测试覆盖率,因为打印异常日志的程序分支往往更需要测试覆盖的异常分支。原理: 结合程序源代码...

    基于Jacoco的代码覆盖率实时监控与精准测试实践-QECon深圳站2021年全球软件质量&效能大会.pdf

    基于Jacoco的代码覆盖率实时监控与精准测试实践-QECon深圳站2021年全球软件质量&效能大会

    Ant+JUnit+EMMA单元测试覆盖率

    三者结合,利用EMMA产生的测试覆盖度报考,可以一目了然的知道那部分代码已经被测试,哪部分没有,从而控制单元测试的质量。  EMMA,它是一个免费、开源的、用来衡量单元测试覆盖度的工具。  三者结合,利用EMMA...

    浅谈代码覆盖率

    经常有人问这样的问题:“我们在做单元测试,那测试覆盖率要到多少才行?”。答案其实很简答,“作为指标的测试覆盖率都是没有用处的。”  引言  经常有人问这样的问题:“我们在做单元测试,那测试覆盖率要到多少...

    使用EMMA测量测试覆盖率

    北京火龙果软件工程技术中心 本文主要通过一个示例项目介绍如何在集成了Ant和Junit的基础上,利用EMMA来收集单元测试对代码的覆盖率。介绍测试代码覆盖率的重要性测试驱动开发(TDD)是极限编程的一个重要特点,它...

    前端精准测试探索:覆盖率实时统计工具

    背景 随着业务增长,随之而来的前端需求激增,如何在有限的时间内保证前端代码的质量。通过测试同学单方面的保障,... 同时前端缺少像jacoco这样的集成测试覆盖率统计框架,无法通过集成测试收集覆盖率,对于测试阶段的

    C++语言的单元测试与代码覆盖率

    测试是软件开发过程中一个必须的环节,测试确保软件的质量符合预期。对于工程师自己来说,单元测试也是提升自信心的一种方式。直接交付没有经过测试的代码是不太好的,因为这很可能会浪费整个团队的时间,在一些原本...

    使用 EclEmma 进行覆盖测试

    相反,如果测试覆盖到了软件的绝大部分代码,甚至全部代码(个人认为这很难实现,也没有追求全覆盖),这就为我们发布高质量的软件打下了坚实的基础。 本文将介绍一个开源软件测试工具 EclEmma,它能够对Java 语言...

    使用Contest分析测试用例的代码覆盖率

    同时通过一个实际例子来讲解取得代码覆盖率的基本流程,其间贯穿一些基本概念,并且在得到代码覆盖率的基础之上分析如何改进测试用例,在反复迭代的过程中来提高测试用例的代码覆盖率。您可以在短时间内了解代码覆盖...

    CodeCov-Jacoco-Java-Jenkins-Demo:确保代码质量始终保持较高水平的最佳方法之一是监视测试覆盖率。 在这个简短的演示中,我演示了如何在每次使用Jenkins和Codecov进行更改时在Java应用程序中设置JaCoCo并生成代码覆盖率报告。

    CodeCov-Jacoco-Java-Jenkins-Demo 确保代码质量始终保持较高水平的最佳方法之一是监视测试覆盖率。 在这个简短的演示中,我演示了如何在每次使用Jenkins和Codecov进行更改时在Java应用程序中设置JaCoCo并生成代码...

    FeTestAndCov:前端代码测试盒覆盖率展示

    2、提供单元测试覆盖率实时显示。 为什么有这个框架? 因为作为前端一直想实现tdd开发,之前受到几种限制: 1、使用jq的年代,dom操作实在无法按照逻辑做单元测试,因为dom的结构变化太多了。 2、当使用mv*框架却又...

    代码覆盖率:记录结果.pdf

    为确保具体的产品(例如,医疗或航空电子市场)质量合格,通常...劳特巴赫代码覆盖率测试系统为客户提供实时的语句覆盖和判定覆盖证明。然而,所使用的处理器或多核芯片必须符合一定的要求,详细内容请参考此培训文档。

    嵌入式系统/ARM技术中的代码覆盖分析工具在嵌入式软件测试中的应用

    这些,可以依靠测试覆盖率的分析来实现。嵌入式软件系统也不例外。 1 代码覆盖分析 代码覆盖分析过程包含以下几个方面: ◇通过一组覆盖测试数据发现和分析那些没有被运行到的代码; ◇为了提高代码覆盖率而...

    diff_cover:自动查找需要测试覆盖的差异线

    自动查找需要测试覆盖率的差异线。 还可以找到有违规的差异行(根据pycodestyle,pyflakes,flake8或pylint之类的工具)。 在代码审查期间,它用作代码质量指标。 概述 差异覆盖率是测试覆盖的新行或修改行的百分比...

Global site tag (gtag.js) - Google Analytics