06 | 你真的懂测试覆盖率吗?
06 | 你真的懂测试覆盖率吗?
讲述:茹炳晟
时长12:48大小5.86M
需求覆盖率
代码覆盖率
代码覆盖率的价值
代码覆盖率的局限性
代码覆盖率工具
代码覆盖率工具的实现原理
总结
思考题
赞 30
提建议
精选留言(68)
- 第1周-吕斌2020-02-10手动功能测试从业者看的好艰难共 8 条评论43
- 海罗沃德2018-07-20实际项目中,无论覆盖率多高,没有根据需求正确的写assert其实也是无法利用测试用例发现bug,提高代码质量,在实际的测试用例中,正向的case一般比较容易写,难得是测试error handling和模拟各种异常情况下的代码行为
作者回复: 你的两个观点都非常正确👍
25 - Nic辉少2018-07-11目前还没有接触过单元测试和代码方面的测试,每天努力坚持学一点,思考一点,吸收一点。
作者回复: 好样的,学习的过程就是螺旋上升的过程,可能会有点痛苦,但是你会发现自己在潜移默化的进步,一个月后你再回头看看,会发现自己已经站在了一个全新的高度了,加油
18 - lucky_ziyie2018-07-15安全产品嵌入式C的单元测试对覆盖率要求很高,语句,分支,MCDC都要达到100%的覆盖率要求,单元测试工具一般会有统计要求,比如RTRT能统计一部分覆盖率,但MCDC没法统计;遇到的问题其实还是一个业界普遍的问题,就是覆盖率达到了,问题却发现的少,没有代码走查发现的多,但为完成覆盖率却耗时很多,所以包括公司领导在内的很多同事都认为覆盖率意义不大,觉得单元测试没有意义。这种局面貌似国内普遍现象,老师是否有一些指导建议?展开
作者回复: 一看就知道你也是这个领域有过很多经验的业内人士,代码走查的确是个不错的时间,尤其是敏捷模式推崇的结对编程,但是走查往往只能发现静态或者一部分动态问题,而且走查的效果很大程度取决于个人的能力,不能系统化和体系化,代码覆盖率的局限性主要是不能发现有需求但是代码没有实现的场景,但是对于已有代码还是具有很高参考价值的,至少知道你那些分支和语句覆盖到了,另外mcdc现在只是在人生命相关的软件和系统中才会采用,很才有其它企业会用这个指标
共 3 条评论12 - 仡2018-07-12听到这一期,很多技术都是JAVA相关的~目前正在学习Python,Python自动化框架有什么好的建议么?谢谢~
作者回复: 其实更多的还是框架的思想,至于是用什么语言来实现都是可以的,最近基于python的自动化框架比较流行,主要是python自己的方便性
9 - Jia2018-08-28还有一个很重要的覆盖率,Mutation测试覆盖率。主要是用来测试Test case的质量,而不是代码本身的质量。一个Test case suite质量高的话,对于代码出现的人为变异(可以理解为错误代码)都能很好的检测出来。7
- sylan2152019-02-121.我们目前的业务主要是 C++ 代码,曾经有测试开发调研过一些代码覆盖率工具,但是由于代码量庞大,且和目前业务场景不符,导致没有后续; 2.非常同意茹老师说的「高的代码覆盖率不一定能保证软件的质量,但是低的代码覆盖率一定不能保证软件的质量」,所以我们一直坚持的理念是,注重效果,能够保证质量的手段就是好手段; 3.针对 2 我们目前的做法是代码红线 + 关键代码人工走读相结合的形式,一定程度上去加强代码层面的覆盖率; 4.相对全量代码覆盖率,个人感觉差异代码覆盖率的实用性更好; 以上,欢迎沟通交流。展开共 2 条评论5
- Jecy-82018-07-18打卡~~之前的公司单元测试都是开发写,不过我也帮开发写过单元测试,正如老师所说单元测试覆盖率达到一定程度想要再提升非常难,而且并不是覆盖率越高就表明质量就没问题,个人觉得如果能从需求功能的角度去写单元测试,更能发挥单元测试的作用。5
- 丹2018-07-11你好,我想请教一些问题,我们公司属于迭代开发,更新比较快,没有技术文档,这种情况下感觉测试用例不能覆盖全面,这种情况应该怎么去写测试用例
作者回复: 很多敏捷团队可能没有完全文档化的测试用例,所以会比较依赖团队成熟度以及一些BDD和TDD的工具,关于什么是bdd和tdd,后面会专门来讲,这两者都属于迭代开发下的敏捷实践
5 - Rachel_fang2018-07-11jacoco大多用于自动化测试得到覆盖率,但如果想知道单条case(手工or自动化)的覆盖率不知道有啥好的方法吗?
作者回复: jacoco其实不管你的测试是手工跑的还是自动跑的,它都能统计哪些代码被执行到了,哪些没有。单条case的话也是一样的
5 - lalio2018-07-15最近在研究go语言的代码覆盖率工具集成到公司的CI,尝试用的go test 的cover,不过了解下来发现这款官方出的工具只统计到了语句覆盖,用了godoc实现(本人英文水平有限,目前还没吃透原理),没有jacoco这款覆盖的种类全,统计报告也比较单一,想在cover的统计数据基础上做一些优化,老师有没有好的建议
作者回复: go test我没有用过,如果你想自己扩展开发代码覆盖率工具的话,技术要求还是比较高的,首先需要知道工具的注入原理,然后要搞清楚出内部的代码覆盖率统计的数据结构,然后再去修改工具的源代码,总体来看,技术要求比较高
共 2 条评论4 - 秋荣2018-07-11不知道多少的代码覆盖率才算是达标的?团队转型ASE,经理制定指标80%,很多时候就是在为了达标而补测试。老师讲的很对,不要只看数字,要透过现象看本质,需要去看看每个测试覆盖率的情况,增加相应的测试
作者回复: 总结的很到位,至于到底多少%合适,这个没有定论,而且到底是用行覆盖率还是其它的覆盖率,也没有一定,主要取决于项目的实际情况。试想一个完全没有单元测试的项目突然要求行覆盖率达到100%,那开发就什么都不用干了,全去写case了
4 - higkoo2020-04-11用过Golang和C++的代码覆盖率工具,共性问题是:需要中断被测程序才能获取到测试结果,无法实时获取。 请问 茹老师 怎么看?共 1 条评论3
- 飞翔2019-11-24老师 那一般情况 单元测试的覆盖率应该达到多少3
- 宸浩2018-07-11老师,我想问下测试接口的话,怎么能保证覆盖完全呢,敏捷项目中涉及到的接口覆盖率,麻烦普及一下呗
作者回复: 这个会在后面的api测试中专门来讲。其实接口测试完全可以用代码覆盖率来衡量测试的完备性。
3 - FamilyLi2018-07-11对于安卓智能手机的代码覆盖率有什么测试或者工具
作者回复: Android SDK内置了Emma test coverage,你可以直接用,不过我还是比较推荐Jacoco
3 - 海罗沃德2018-07-29最近正在给公司准备一个关于TaaS和TDD的演讲,说一下我对TaaS的理解,请指正 TaaS是基于云计算的一套可以自定义服务的平台,在程序开发的初期,可以利用一些规则引擎,在TaaS的portal上把需求转化成use case和类图,进而可以利用类图反向生成桩代码,围绕桩代码不涉及到业务逻辑的unit test代码,这样可以节约开发人员大量的时间,让开发人员更加关注在业务逻辑模块的开发 当业务模块开发好之后,TaaS平台也可以24/7的运行来进行相应的压力测试,安全测试,甚至可以通过人工智能总结已经上载的业务相关unit test,根据上下游的数据流,发现潜在bug 此外对于整个公司来说,不同的团队可以给TaaS平台贡献不同的service,比如专注API的平台根据公司的实际情况开发出转么测试hystrix的服务,portal平台开发出转么测试用户权限是否匹配的服务等 希望能深入交流,我的wx是 tracyrobingao展开2
- 0082018-07-11.Net的使用NUnit+ReSharper,从来没想过单元测试的代码覆盖率会提供给测试人员,都是开发内部自行消化。也许是因为刚开始推行,整体的覆盖率还太低,也因为测试人员完全黑盒式的测试,不过让测试人员针对性对未覆盖代码进行用例设计的确符合未来自动化测试中对测试人员的要求,更多的进行自动化测试中涉及不到的场景
作者回复: 很棒的观点,其实有一些技术背景很强的公司,单元测试的框架选型已经各种mock选型也是有资深的测试和开发一起完成的
2 - 在路上2018-07-11测试中几乎没接触过这类的代码级别的覆盖率,若都是由开发来完成,那对测试要求应该没这么高吧?
作者回复: 要求还是高的,如果没有完整的测试,代码覆盖率是达不到要求的。
2 - 涅槃Ls2018-07-11打卡06
作者回复: 欢迎每次打卡
2