06 | 你真的懂测试覆盖率吗?
该思维导图由 AI 生成,仅供参考
需求覆盖率
代码覆盖率
- 深入了解
- 翻译
- 解释
- 总结
代码覆盖率工具的实现原理 本文深入介绍了代码覆盖率工具的实现原理,重点讨论了Java代码覆盖率工具JaCoCo的内部实现和报告展示。文章首先解释了测试覆盖率的概念和代码覆盖率的价值与局限性,强调了代码覆盖率提高可能带来的成本增加。随后详细介绍了代码覆盖率的三种指标:行覆盖率、判定覆盖和条件覆盖,并指出了代码覆盖率的局限性。文章还探讨了代码覆盖率工具的实现原理,着重介绍了基于字节码注入的实现技术,包括On-The-Fly注入模式和Offline注入模式。其中,JaCoCo作为主流工具采用了On-The-Fly模式,利用Java Agent实现实时字节码注入。最后,文章总结了测试覆盖率的重要性,强调了理解代码覆盖率工具的原理对于更好地利用这些工具完成测试工作的重要性。整体而言,本文内容详实,既介绍了理论知识,又结合实际工具进行了解释,对于读者快速了解代码覆盖率工具的实现原理具有很高的参考价值。
《软件测试 52 讲》,新⼈⾸单¥68
全部留言(68)
- 最新
- 精选
- 海罗沃德实际项目中,无论覆盖率多高,没有根据需求正确的写assert其实也是无法利用测试用例发现bug,提高代码质量,在实际的测试用例中,正向的case一般比较容易写,难得是测试error handling和模拟各种异常情况下的代码行为
作者回复: 你的两个观点都非常正确👍
2018-07-2030 - Nic辉少目前还没有接触过单元测试和代码方面的测试,每天努力坚持学一点,思考一点,吸收一点。
作者回复: 好样的,学习的过程就是螺旋上升的过程,可能会有点痛苦,但是你会发现自己在潜移默化的进步,一个月后你再回头看看,会发现自己已经站在了一个全新的高度了,加油
2018-07-1118 - lucky_ziyie安全产品嵌入式C的单元测试对覆盖率要求很高,语句,分支,MCDC都要达到100%的覆盖率要求,单元测试工具一般会有统计要求,比如RTRT能统计一部分覆盖率,但MCDC没法统计;遇到的问题其实还是一个业界普遍的问题,就是覆盖率达到了,问题却发现的少,没有代码走查发现的多,但为完成覆盖率却耗时很多,所以包括公司领导在内的很多同事都认为覆盖率意义不大,觉得单元测试没有意义。这种局面貌似国内普遍现象,老师是否有一些指导建议?
作者回复: 一看就知道你也是这个领域有过很多经验的业内人士,代码走查的确是个不错的时间,尤其是敏捷模式推崇的结对编程,但是走查往往只能发现静态或者一部分动态问题,而且走查的效果很大程度取决于个人的能力,不能系统化和体系化,代码覆盖率的局限性主要是不能发现有需求但是代码没有实现的场景,但是对于已有代码还是具有很高参考价值的,至少知道你那些分支和语句覆盖到了,另外mcdc现在只是在人生命相关的软件和系统中才会采用,很才有其它企业会用这个指标
2018-07-15313 - 仡听到这一期,很多技术都是JAVA相关的~目前正在学习Python,Python自动化框架有什么好的建议么?谢谢~
作者回复: 其实更多的还是框架的思想,至于是用什么语言来实现都是可以的,最近基于python的自动化框架比较流行,主要是python自己的方便性
2018-07-1210 - 丹你好,我想请教一些问题,我们公司属于迭代开发,更新比较快,没有技术文档,这种情况下感觉测试用例不能覆盖全面,这种情况应该怎么去写测试用例
作者回复: 很多敏捷团队可能没有完全文档化的测试用例,所以会比较依赖团队成熟度以及一些BDD和TDD的工具,关于什么是bdd和tdd,后面会专门来讲,这两者都属于迭代开发下的敏捷实践
2018-07-116 - 秋荣不知道多少的代码覆盖率才算是达标的?团队转型ASE,经理制定指标80%,很多时候就是在为了达标而补测试。老师讲的很对,不要只看数字,要透过现象看本质,需要去看看每个测试覆盖率的情况,增加相应的测试
作者回复: 总结的很到位,至于到底多少%合适,这个没有定论,而且到底是用行覆盖率还是其它的覆盖率,也没有一定,主要取决于项目的实际情况。试想一个完全没有单元测试的项目突然要求行覆盖率达到100%,那开发就什么都不用干了,全去写case了
2018-07-115 - Rachel_fangjacoco大多用于自动化测试得到覆盖率,但如果想知道单条case(手工or自动化)的覆盖率不知道有啥好的方法吗?
作者回复: jacoco其实不管你的测试是手工跑的还是自动跑的,它都能统计哪些代码被执行到了,哪些没有。单条case的话也是一样的
2018-07-115 - lalio最近在研究go语言的代码覆盖率工具集成到公司的CI,尝试用的go test 的cover,不过了解下来发现这款官方出的工具只统计到了语句覆盖,用了godoc实现(本人英文水平有限,目前还没吃透原理),没有jacoco这款覆盖的种类全,统计报告也比较单一,想在cover的统计数据基础上做一些优化,老师有没有好的建议
作者回复: go test我没有用过,如果你想自己扩展开发代码覆盖率工具的话,技术要求还是比较高的,首先需要知道工具的注入原理,然后要搞清楚出内部的代码覆盖率统计的数据结构,然后再去修改工具的源代码,总体来看,技术要求比较高
2018-07-1524 - 宸浩老师,我想问下测试接口的话,怎么能保证覆盖完全呢,敏捷项目中涉及到的接口覆盖率,麻烦普及一下呗
作者回复: 这个会在后面的api测试中专门来讲。其实接口测试完全可以用代码覆盖率来衡量测试的完备性。
2018-07-114 - 008.Net的使用NUnit+ReSharper,从来没想过单元测试的代码覆盖率会提供给测试人员,都是开发内部自行消化。也许是因为刚开始推行,整体的覆盖率还太低,也因为测试人员完全黑盒式的测试,不过让测试人员针对性对未覆盖代码进行用例设计的确符合未来自动化测试中对测试人员的要求,更多的进行自动化测试中涉及不到的场景
作者回复: 很棒的观点,其实有一些技术背景很强的公司,单元测试的框架选型已经各种mock选型也是有资深的测试和开发一起完成的
2018-07-113