`
infinite
  • 浏览: 42205 次
  • 性别: 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
分享到:
评论

相关推荐

    Java单元测试之代码覆盖率-JaCoCo

    这样,开发者可以直观地看到测试覆盖的全面性,找出未被充分测试的代码区域。 JaCoCo的主要功能包括: 1. **类和方法级别的覆盖率**:JaCoCo可以分别显示每个类和每个方法的覆盖率,包括执行了多少行、多少条件判断...

    测试覆盖率报告

    测试覆盖率报告通过量化的方式帮助开发者了解哪些代码已经被测试过,哪些部分可能还是未被触及的盲区,从而提高软件的质量和可靠性。在标签“测试覆盖”下,我们可以深入探讨测试覆盖率的几个关键方面。 首先,我们...

    测试覆盖率工具

    总结来说,测试覆盖率工具是保证软件质量的重要工具,通过合理的使用和管理,可以帮助我们提高代码的健壮性和可靠性。理解不同类型的覆盖率,选择适合的工具,并将其融入到开发流程中,是提升软件质量的关键。

    测试代码覆盖率

    EclEmma是Eclipse平台上的一个开源代码覆盖率工具,它为Java开发者提供了一种直观的方式来查看他们的测试覆盖率。版本1.2.2是该插件的一个特定发行版,可能包含了一些特定的功能改进和修复。 EclEmma提供以下核心...

    jacoco统计手动测试覆盖率工具文件

    在软件开发过程中,测试覆盖率是衡量代码质量的一个重要指标,它能够帮助我们了解有多少代码被测试所覆盖。Jacoco(JaCoCo)是Java领域内广泛使用的代码覆盖率工具,它能为单元测试、集成测试等提供精确的覆盖率报告...

    使用Cobertura统计单元测试覆盖率

    【使用Cobertura统计单元测试覆盖率】 在软件开发过程中,单元测试是确保代码质量的重要环节。它能够帮助我们发现潜在的错误,提高代码的可维护性。然而,仅仅编写单元测试是不够的,我们还需要知道这些测试覆盖了...

    用 Cobertura 测量测试覆盖率

    标题中的“用 Cobertura 测量测试覆盖率”指的是在软件开发过程中使用 Cobertura 工具来评估代码的测试覆盖率。...通过持续关注并优化测试覆盖率,开发者可以提升整体的代码质量,使得软件产品更加可靠。

    单元测试覆盖率

    单元测试覆盖率是衡量软件测试充分程度的重要指标之一,它关注的是在所有的代码中,有多大比例被测试用例所覆盖。有效的单元测试覆盖率能够帮助开发人员确保他们的代码经过充分测试,进而提高软件的质量和稳定性。 ...

    EclEmma java单元测试覆盖率

    ### EclEmma Java单元测试覆盖率详解 #### 一、EclEmma简介 EclEmma是一款专为Eclipse设计的强大插件,主要用于Java项目的代码覆盖率分析。通过对Java代码进行覆盖率检查,开发人员可以清晰地了解到哪些代码已经被...

    代码覆盖率驱动的测试

    总之,代码覆盖率驱动的测试是一种有效的测试方法,通过覆盖率数据来指导测试,可以显著提高测试效率和软件质量。但同时,测试工程师也需要注意其局限性,不要将其视为万能的解决方案,而是要结合其他测试策略和方法...

    软件工程中的代码规范与测试覆盖率.pptx

    ### 软件工程中的代码规范与测试覆盖率 #### 第一章:软件工程简介 ...在软件工程实践中,代码规范和测试覆盖率都是保证软件质量的重要因素。希望各位能够在实际工作中充分应用这些知识,不断提高软件产品的质量。

    Java测试覆盖率工具cobertura1.9

    在软件开发过程中,测试覆盖率是衡量代码质量、测试充分性的重要指标,它可以帮助开发者了解哪些部分的代码在单元测试中得到了执行,哪些部分可能尚未被充分覆盖,从而提高代码的整体质量和可靠性。 Cobertura1.9的...

    测试覆盖率工具EclEmma使用培训

    测试覆盖率是衡量测试质量的重要指标,它表示了测试代码对被测功能代码的覆盖程度。EclEmma支持Class Instrumentation技术,即在编译后的.class文件中插入统计代码,而不是源代码,这样不会改变项目的原始文件。这种...

    代码覆盖率工具

    在Java开发环境中,为了确保代码质量,单元测试是必不可少的环节。而代码覆盖率工具则可以帮助开发者了解测试用例对程序代码的执行情况,判断是否达到了预期的测试效果。 Java单元测试通常使用JUnit框架进行,它...

    lcov测试代码覆盖率例程

    总结来说,lcov是一个强大的代码覆盖率工具,能够帮助开发人员评估测试质量,找出代码中的薄弱环节,进而提升软件的健壮性和可靠性。通过与genhtml和其他工具的配合,可以实现全面的覆盖率分析和报告,推动团队实施...

    java单元测试篇:使用clover为java代码的junit测试做覆盖率分析.pdf

    Java 单元测试篇:使用 Clover 为 Java 代码的 JUnit ...使用 Clover 分析 JUnit 测试,可以帮助开发者提高代码的单元测试覆盖率,提高软件的质量。Clover 提供了多种报告格式,方便开发者对单元测试进行分析和优化。

    代码覆盖率驱动的测试资料.docx

    本文主要探讨了如何利用代码覆盖率工具EMMA来进行测试,并详细介绍了在Android工程中使用EMMA进行单元测试覆盖率检查的步骤。 EMMA是一个开源的Java程序测试覆盖率工具,它通过字节码插装技术在运行时收集覆盖率...

Global site tag (gtag.js) - Google Analytics