软件测试 52 讲
茹炳晟
腾讯 TEG 基础架构部 T4 级专家
71691 人已学习
新⼈⾸单¥68
登录后,你可以任选4讲全文学习
课程目录
已完结/共 63 讲
结束语 (1讲)
软件测试 52 讲
15
15
1.0x
00:00/00:00
登录|注册

06 | 你真的懂测试覆盖率吗?

代码覆盖率工具的实现原理
代码覆盖率工具
代码覆盖率的局限性
代码覆盖率的价值
代码覆盖率
需求覆盖率
测试覆盖率

该思维导图由 AI 生成,仅供参考

在上一篇文章中,我为你介绍了软件测试各个阶段的自动化技术,在前面的文章中我也提到了测试覆盖率的概念,你当时可能有点不明白,那么今天我就和你详细聊聊测试覆盖率这个主题。
测试覆盖率通常被用来衡量测试的充分性和完整性,从广义的角度来讲,测试覆盖率主要分为两大类,一类是面向项目的需求覆盖率,另一类是更偏向技术的代码覆盖率。

需求覆盖率

需求覆盖率是指测试对需求的覆盖程度,通常的做法是将每一条分解后的软件需求和对应的测试建立一对多的映射关系,最终目标是保证测试可以覆盖每个需求,以保证软件产品的质量。
我们通常采用 ALM,Doors 和 TestLink 等需求管理工具来建立需求和测试的对应关系,并以此计算测试覆盖率。
需求覆盖率统计方法属于传统瀑布模型下的软件工程实践,传统瀑布模型追求自上而下地制定计划、分析需求、设计软件、编写代码、测试和运维等,在流程上是重量级的,已经很难适应当今互联网时代下的敏捷开发实践。
所以,互联网测试项目中很少直接基于需求来衡量测试覆盖率,而是将软件需求转换成测试需求,然后基于测试需求再来设计测试点。
因此,现在人们口中的测试覆盖率,通常默认指代码覆盖率,而不是需求覆盖率。

代码覆盖率

简单来说,代码覆盖率是指,至少被执行了一次的条目数占整个条目数的百分比。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

代码覆盖率工具的实现原理 本文深入介绍了代码覆盖率工具的实现原理,重点讨论了Java代码覆盖率工具JaCoCo的内部实现和报告展示。文章首先解释了测试覆盖率的概念和代码覆盖率的价值与局限性,强调了代码覆盖率提高可能带来的成本增加。随后详细介绍了代码覆盖率的三种指标:行覆盖率、判定覆盖和条件覆盖,并指出了代码覆盖率的局限性。文章还探讨了代码覆盖率工具的实现原理,着重介绍了基于字节码注入的实现技术,包括On-The-Fly注入模式和Offline注入模式。其中,JaCoCo作为主流工具采用了On-The-Fly模式,利用Java Agent实现实时字节码注入。最后,文章总结了测试覆盖率的重要性,强调了理解代码覆盖率工具的原理对于更好地利用这些工具完成测试工作的重要性。整体而言,本文内容详实,既介绍了理论知识,又结合实际工具进行了解释,对于读者快速了解代码覆盖率工具的实现原理具有很高的参考价值。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《软件测试 52 讲》
新⼈⾸单¥68
立即购买
登录 后留言

全部留言(68)

  • 最新
  • 精选
  • 海罗沃德
    实际项目中,无论覆盖率多高,没有根据需求正确的写assert其实也是无法利用测试用例发现bug,提高代码质量,在实际的测试用例中,正向的case一般比较容易写,难得是测试error handling和模拟各种异常情况下的代码行为

    作者回复: 你的两个观点都非常正确👍

    2018-07-20
    30
  • Nic辉少
    目前还没有接触过单元测试和代码方面的测试,每天努力坚持学一点,思考一点,吸收一点。

    作者回复: 好样的,学习的过程就是螺旋上升的过程,可能会有点痛苦,但是你会发现自己在潜移默化的进步,一个月后你再回头看看,会发现自己已经站在了一个全新的高度了,加油

    2018-07-11
    18
  • lucky_ziyie
    安全产品嵌入式C的单元测试对覆盖率要求很高,语句,分支,MCDC都要达到100%的覆盖率要求,单元测试工具一般会有统计要求,比如RTRT能统计一部分覆盖率,但MCDC没法统计;遇到的问题其实还是一个业界普遍的问题,就是覆盖率达到了,问题却发现的少,没有代码走查发现的多,但为完成覆盖率却耗时很多,所以包括公司领导在内的很多同事都认为覆盖率意义不大,觉得单元测试没有意义。这种局面貌似国内普遍现象,老师是否有一些指导建议?

    作者回复: 一看就知道你也是这个领域有过很多经验的业内人士,代码走查的确是个不错的时间,尤其是敏捷模式推崇的结对编程,但是走查往往只能发现静态或者一部分动态问题,而且走查的效果很大程度取决于个人的能力,不能系统化和体系化,代码覆盖率的局限性主要是不能发现有需求但是代码没有实现的场景,但是对于已有代码还是具有很高参考价值的,至少知道你那些分支和语句覆盖到了,另外mcdc现在只是在人生命相关的软件和系统中才会采用,很才有其它企业会用这个指标

    2018-07-15
    3
    13
  • 听到这一期,很多技术都是JAVA相关的~目前正在学习Python,Python自动化框架有什么好的建议么?谢谢~

    作者回复: 其实更多的还是框架的思想,至于是用什么语言来实现都是可以的,最近基于python的自动化框架比较流行,主要是python自己的方便性

    2018-07-12
    10
  • 你好,我想请教一些问题,我们公司属于迭代开发,更新比较快,没有技术文档,这种情况下感觉测试用例不能覆盖全面,这种情况应该怎么去写测试用例

    作者回复: 很多敏捷团队可能没有完全文档化的测试用例,所以会比较依赖团队成熟度以及一些BDD和TDD的工具,关于什么是bdd和tdd,后面会专门来讲,这两者都属于迭代开发下的敏捷实践

    2018-07-11
    6
  • 秋荣
    不知道多少的代码覆盖率才算是达标的?团队转型ASE,经理制定指标80%,很多时候就是在为了达标而补测试。老师讲的很对,不要只看数字,要透过现象看本质,需要去看看每个测试覆盖率的情况,增加相应的测试

    作者回复: 总结的很到位,至于到底多少%合适,这个没有定论,而且到底是用行覆盖率还是其它的覆盖率,也没有一定,主要取决于项目的实际情况。试想一个完全没有单元测试的项目突然要求行覆盖率达到100%,那开发就什么都不用干了,全去写case了

    2018-07-11
    5
  • Rachel_fang
    jacoco大多用于自动化测试得到覆盖率,但如果想知道单条case(手工or自动化)的覆盖率不知道有啥好的方法吗?

    作者回复: jacoco其实不管你的测试是手工跑的还是自动跑的,它都能统计哪些代码被执行到了,哪些没有。单条case的话也是一样的

    2018-07-11
    5
  • lalio
    最近在研究go语言的代码覆盖率工具集成到公司的CI,尝试用的go test 的cover,不过了解下来发现这款官方出的工具只统计到了语句覆盖,用了godoc实现(本人英文水平有限,目前还没吃透原理),没有jacoco这款覆盖的种类全,统计报告也比较单一,想在cover的统计数据基础上做一些优化,老师有没有好的建议

    作者回复: go test我没有用过,如果你想自己扩展开发代码覆盖率工具的话,技术要求还是比较高的,首先需要知道工具的注入原理,然后要搞清楚出内部的代码覆盖率统计的数据结构,然后再去修改工具的源代码,总体来看,技术要求比较高

    2018-07-15
    2
    4
  • 宸浩
    老师,我想问下测试接口的话,怎么能保证覆盖完全呢,敏捷项目中涉及到的接口覆盖率,麻烦普及一下呗

    作者回复: 这个会在后面的api测试中专门来讲。其实接口测试完全可以用代码覆盖率来衡量测试的完备性。

    2018-07-11
    4
  • 008
    .Net的使用NUnit+ReSharper,从来没想过单元测试的代码覆盖率会提供给测试人员,都是开发内部自行消化。也许是因为刚开始推行,整体的覆盖率还太低,也因为测试人员完全黑盒式的测试,不过让测试人员针对性对未覆盖代码进行用例设计的确符合未来自动化测试中对测试人员的要求,更多的进行自动化测试中涉及不到的场景

    作者回复: 很棒的观点,其实有一些技术背景很强的公司,单元测试的框架选型已经各种mock选型也是有资深的测试和开发一起完成的

    2018-07-11
    3
收起评论
显示
设置
留言
68
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部