软件测试52讲
茹炳晟
eBay中国研发中心,测试基础架构技术主管
立即订阅
13397 人已学习
课程目录
已完结 63 讲
0/4登录后,你可以任选4讲全文学习。
开篇词 (1讲)
开篇词 | 从“小工”到“专家”,我的软件测试修炼之道
免费
测试基础知识篇 (11讲)
01 | 你真的懂测试吗?从“用户登录”测试谈起
02 | 如何设计一个“好的”测试用例?
03 | 什么是单元测试?如何做好单元测试?
04 | 为什么要做自动化测试?什么样的项目适合做自动化测试?
05 | 你知道软件开发各阶段都有哪些自动化测试技术吗?
06 | 你真的懂测试覆盖率吗?
07 | 如何高效填写软件缺陷报告?
08 | 以终为始,如何才能做好测试计划?
09 | 软件测试工程师的核心竞争力是什么?
10 | 软件测试工程师需要掌握的非测试知识有哪些?
11 | 互联网产品的测试策略应该如何设计?
GUI自动化测试篇 (10讲)
12 | 从0到1:你的第一个GUI自动化测试
13 | 效率为王:脚本与数据的解耦 + Page Object模型
14 | 更接近业务的抽象:让自动化测试脚本更好地描述业务
15 | 过不了的坎:聊聊GUI自动化过程中的测试数据
16 | 脑洞大开:GUI测试还能这么玩(Page Code Gen + Data Gen + Headless)?
17 | 精益求精:聊聊提高GUI测试稳定性的关键技术
18 | 眼前一亮:带你玩转GUI自动化的测试报告
19 | 真实的战场:如何在大型项目中设计GUI自动化测试策略
20 | 与时俱进:浅谈移动应用测试方法与思路
21 | 移动测试神器:带你玩转Appium
API自动化测试篇 (3讲)
22 | 从0到1:API测试怎么做?常用API测试工具简介
23 | 知其然知其所以然:聊聊API自动化测试框架的前世今生
24 | 紧跟时代步伐:微服务模式下API测试要怎么做?
代码测试篇 (3讲)
25 | 不破不立:掌握代码级测试的基本理念与方法
26 | 深入浅出之静态测试方法
27 | 深入浅出之动态测试方法
性能测试篇 (7讲)
28 | 带你一起解读不同视角的软件性能与性能指标
29 | 聊聊性能测试的基本方法与应用领域
30 | 工欲善其事必先利其器:后端性能测试工具原理与行业常用工具简介
31 | 工欲善其事必先利其器:前端性能测试工具原理与行业常用工具简介
32 | 无实例无真相:基于LoadRunner实现企业级服务器端性能测试的实践(上)
33 | 无实例无真相:基于LoadRunner实现企业级服务器端性能测试的实践(下)
34 | 站在巨人的肩膀:企业级实际性能测试案例与经验分享
测试数据准备篇 (4讲)
35 | 如何准备测试数据?
36 | 浅谈测试数据的痛点
37 | 测试数据的“银弹”- 统一测试数据平台(上)
38 | 测试数据的“银弹”- 统一测试数据平台(下)
测试基础架构篇 (4讲)
39 | 从小作坊到工厂:什么是Selenium Grid?如何搭建Selenium Grid?
40 | 从小工到专家:聊聊测试执行环境的架构设计(上)
41 | 从小工到专家:聊聊测试执行环境的架构设计(下)
42 | 实战:大型全球化电商的测试基础架构设计
测试新技术篇 (5讲)
43 | 发挥人的潜能:探索式测试
44 | 测试先行:测试驱动开发(TDD)
45 | 打蛇打七寸:精准测试
46 | 安全第一:渗透测试
47 | 用机器设计测试用例:基于模型的测试
测试人员的互联网架构核心知识篇 (5讲)
48 | 优秀的测试工程师为什么要懂大型网站的架构设计?
49 | 深入浅出网站高性能架构设计
50 | 深入浅出网站高可用架构设计
51 | 深入浅出网站伸缩性架构设计
52 | 深入浅出网站可扩展性架构设计
特别放送篇 (8讲)
测试专栏特别放送 | 答疑解惑第一期
测试专栏特别放送 | 答疑解惑第二期
测试专栏特别放送 | 答疑解惑第三期
测试专栏特别放送 | 答疑解惑第四期
测试专栏特别放送 | 答疑解惑第五期
测试专栏特别放送 | 答疑解惑第六期
测试专栏特别放送 | 答疑解惑第七期
测试专栏特别放送 | 浅谈全链路压测
测一测 (1讲)
测一测 | 这些软件测试题目,你都掌握了吗?
结束语 (1讲)
结束语 | 不是结束,而是开始
软件测试52讲
登录|注册

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

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

需求覆盖率

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

代码覆盖率

简单来说,代码覆盖率是指,至少被执行了一次的条目数占整个条目数的百分比。
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《软件测试52讲》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(51)

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

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

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

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

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

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

    2018-07-15
    3
  • sylan215
    1.我们目前的业务主要是 C++ 代码,曾经有测试开发调研过一些代码覆盖率工具,但是由于代码量庞大,且和目前业务场景不符,导致没有后续;
    2.非常同意茹老师说的「高的代码覆盖率不一定能保证软件的质量,但是低的代码覆盖率一定不能保证软件的质量」,所以我们一直坚持的理念是,注重效果,能够保证质量的手段就是好手段;
    3.针对 2 我们目前的做法是代码红线 + 关键代码人工走读相结合的形式,一定程度上去加强代码层面的覆盖率;
    4.相对全量代码覆盖率,个人感觉差异代码覆盖率的实用性更好;

    以上,欢迎沟通交流。
    2019-02-12
    2
  • Jia
    还有一个很重要的覆盖率,Mutation测试覆盖率。主要是用来测试Test case的质量,而不是代码本身的质量。一个Test case suite质量高的话,对于代码出现的人为变异(可以理解为错误代码)都能很好的检测出来。
    2018-08-28
    1
  • Struggling
    打卡~~之前的公司单元测试都是开发写,不过我也帮开发写过单元测试,正如老师所说单元测试覆盖率达到一定程度想要再提升非常难,而且并不是覆盖率越高就表明质量就没问题,个人觉得如果能从需求功能的角度去写单元测试,更能发挥单元测试的作用。
    2018-07-18
    1
  • 田🤘🏻妞
    看留言中有说 手动测试也可以使用jacoco来查看覆盖率,是说比如我在android手机上手动点点点测试,也可以查看覆盖率吗? 通往期待回答 非常感谢
    2018-07-18
    1
  • 小康师傅
    目前在后台和安卓端使用过jacoco,还是有很好的作用的。一方面可以让开发同学了解自己的业务逻辑设计是否有问题,另一方面可以让测试同学了解自己的用例设计是否完善。覆盖率高不一定质量就没有问题,但是覆盖率低质量肯定不能保证。
    2018-07-17
    1
    1
  • lalio
    最近在研究go语言的代码覆盖率工具集成到公司的CI,尝试用的go test 的cover,不过了解下来发现这款官方出的工具只统计到了语句覆盖,用了godoc实现(本人英文水平有限,目前还没吃透原理),没有jacoco这款覆盖的种类全,统计报告也比较单一,想在cover的统计数据基础上做一些优化,老师有没有好的建议

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

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

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

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

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

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

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

    2018-07-11
    1
  • FamilyLi
    对于安卓智能手机的代码覆盖率有什么测试或者工具

    作者回复: Android SDK内置了Emma test coverage,你可以直接用,不过我还是比较推荐Jacoco

    2018-07-11
    1
  • 假装乐
    jococo是哪年出的?当初因为没有找到合适的,把cobertura改成了agent模式的

    作者回复: jacoco的早期版本2009年就有了,那时还不是很成熟,早期的版本我也没有用过

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

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

    2018-07-11
    1
  • 飞翔
    老师 那一般情况 单元测试的覆盖率应该达到多少
    2019-11-24
  • (╯‵□′)╯︵┻━┻
    单元测试的功能点会在集成和GUI测试中耦合在一起。所以对单元测试实现高覆盖率的好处是:测试点的粒度小,设计成本低;缺陷的定位和修复成本小。
    2019-08-17
  • 蓝宇
    原文:互联网测试项目中很少直接基于需求来衡量测试覆盖率,而是将软件需求转换成测试需求,然后基于测试需求再来设计测试点。

    有点疑问:为什么敏捷开发需要将软件需求转换为测试需求呢
    2019-07-22
  • 口水窝
    测试工作中没有接触过代码覆盖率的工具,所以测试的工作不仅仅是测试业务逻辑,更多的时候本着质量的意识,从广度、深度去挖掘,以前没有接触过,去学习,去自己搭建环境,去实践,对于测试的理解更上一层楼!
          但是在测试报告的编写中,知道测试用例覆盖率和需求覆盖率,那时候用简单的加减法算的,没用具体工具。
    2019-03-04
  • 向着光亮那方
    想问下,对于Android写的SDK,功能测试怎么统计覆盖率呢?

    作者回复: 同样是基于传统的代码覆盖率工具,没有任何的区别

    2018-11-16
收起评论
51
返回
顶部