概述

代码覆盖率,是一种依靠计算测试过程中被执行源码占全部代码行的比例,进而度量测试用例对程序覆盖的情况,从而查漏补缺,完善软件质量的方法。

那么做代码覆盖率统计的意义是什么呢?通过研究代码覆盖率报告,一方面我们可以直观的发现没有被测试用例测试过的代码,另一方面也能发现开发人员在新版本中新增/修改了哪些代码,从而及时的更新测试用例来增加覆盖率:保证程序功能的覆盖度。

在具体的实施过程中,中通是如何将代码覆盖率运用到实践中的呢?本文将对此展开详细讨论。

中通代码覆盖率实现方案

在开始介绍具体的实现方案之前,我们先了解一下目前使用的代码覆盖率工具Jacoco。作为一款开源的覆盖率工具,它能够应用在java服务端项目,并直观的给出整个项目的测试覆盖情况。此外我们采用其无需改动源码的On-The-Fly插桩模式进行部署,可以在系统无感知的情况下,实时的收集代码覆盖率信息。

基于此方案,中通的代码覆盖率服务执行流程大致如下图所示:

如上图所示:

1. 项目发布时,Jacoco会将探针插桩入项目jvm中(用来记录测试人员在执行测试用例(手动/自动化用例)时的代码运行情况);

2. 项目发布完成后,发布平台(stellar)会将本次发布的版本相关信息(比如:git地址、分支信息、commitid等)推送给质控平台进行保存;

3. 测试人员在完成测试后,通过质控平台选择分支及代码对比的模式,触发代码覆盖率服务;

4. 代码覆盖率服务通过发布的版本信息从git上拉取相应的源码,以及探针获取到的代码覆盖率dump文件生成代码覆盖率报告。

此外针对中通实际的业务场景也做了很多功能开发,提高了代码覆盖率系统的易用性:

1. 在发布平台(stellar)发布过程中,用户可以自行选择是否插桩Jacoco探针,最终实现了将插桩过程无感知的嵌入到发布流程中;

2. 在质控平台选择发布数据生成报告时,通过对Jacoco的二次开发,能够满足测试人员生成全量/增量/分支增量多维度报告的需求。以下详细解释三种生成报告的模式:

  • 全量报告:为选定分支提供全量的代码覆盖率报告。可以为项目整体测试情况提供参考;

  • 分支增量:增量报告的衍生,即当前开发分支commitid默认和master分支(生产版本)比较,即用于比较当前开发阶段版本与生产版本之间的差异与代码覆盖情况;

  • 增量报告:基于选定两次提交的代码commitid之间版本比较,对比差异代码的覆盖率情况。新版本迭代时,通过此模式可以精确掌握代码的变动情况及变动情况的测试覆盖。

3. 以集群的形式挂载了多台执行机,提高执行效率;服务间通过队列方式进行数据传输,提高了数据的可靠性。

测试流程与实践应用

目前中通结合代码覆盖率的测试流程如下:

1. 新版本开始后,开发人员在master分支上拉取新开发分支(branch1),并在此分支上进行当前版本的功能开发,开发完成并自测通过后发起提测;

2. 测试人员冒烟准入后,根据测试用例进行手工及自动化测试,新功能及改动点测试完毕后生成分支增量覆盖率,并根据报告,针对遗漏功能点,补充执行测试用例;

3. 代码合并主干后,测试人员进行回归测试,并再次获取分支增量覆盖率,针对回归遗漏点,补充执行测试用例;

4. 回归测试通过后,代码封板并上线。

上图以通用配置管理流程举例,实际情况各项目组可能有部分差异。

具体代码覆盖率报告如何使用,我们来看以下例子。

生成的报告如下:

报告中展示被测服务各类不同维度的测试覆盖统计汇总信息

具体点击某类后详情如下,红色代表测试未覆盖代码行

绿色代表测试已覆盖代码行,黄色代表部分覆盖代码行

测试人员根据具体代码染色情况补充测试用例并执行。

总结

在实际运用过程中代码覆盖率在协助发现测试遗漏点及完善测试用例设计的确是能起到很好的辅助作用。此外它也能协助检测出废代码,逆向反推代码设计中的缺陷,提醒开发人员理清代码逻辑,提升代码质量。

目前代码覆盖率服务已经在中通数个部门累计200多个服务中试运行。另外根据行业的测试覆盖率要求,测试人员也在朝着语句覆盖率70%,核心模块的语句覆盖率及分支覆盖率100%的目标前进。在接下去的一年中,代码覆盖率服务也会逐渐推广到全中心,为全体测试人员、开发人员提供更好的协助。

更多详情交流可加微信 :13003195121

中通科技代码覆盖率应用实践相关推荐

  1. 中通科技代码覆盖率应用实践(一)

    概述 代码覆盖率,是一种依靠计算测试过程中被执行源码占全部代码行的比例,进而度量测试用例对程序覆盖的情况,从而查漏补缺,完善软件质量的方法. 那么做代码覆盖率统计的意义是什么呢?通过研究代码覆盖率报告 ...

  2. 中通科技代码覆盖率应用实践(二)

    欢迎进入

  3. 中通科技代码覆盖率应用实践(三)

    欢迎进入

  4. TiDB x 中通科技 | 提效 300%,TiDB 联手中通让你的包裹“实时可见”

    「我们已经用起来了」,是我们最喜欢听到的话,简简单单几个字的背后代表着沉甸甸的信任和托付.从今天开始,我们将通过**「相信开放的力量」**系列深度案例分享,从业务的角度,看看一个数据库为各行业用户带来 ...

  5. 中通科技是如何建模并高效处理车辆上的时序数据的

    小 T 导读:车联网业务是中通科技配送全链路业务中非常重要的一环,在实际的项目需求中,需要实时查询车辆最新位置状态,达到车辆运营可视化管理.中智车联服务平台选择了用 TDengine 来高效处理从车辆 ...

  6. 中通科技移动自动化测试的革新与探索

    背景: 随着移动设备的大量普及,这几年,移动应用也甚嚣尘上,层出不穷.用户对便捷性,对体验感的极致追求,促使移动端研发越来越火爆,对应的,移动端的测试也变得越来越重要. 作为物流行业,业务生命周期比较 ...

  7. 中通快递数据治理实践

    导读:本次分享的内容是中通快递在数据治理方面的实践,主要会从如下四个方面展开: 中通简介 数据治理驱动力&目标 数据治理实践 未来规划 01 中通简介 中通快递成立已经有将近 20  年时间, ...

  8. videojs如何获取请求消息_中通消息平台 Kafka 顺序消费线程模型的实践与优化

    各类消息中间件对顺序消息实现的做法是将具有顺序性的一类消息发往相同的主题分区中,只需要将这类消息设置相同的 Key 即可,而 Kafka 会在任意时刻保证一个消费组同时只能有一个消费者监听消费,因此可 ...

  9. 科技逆袭?中通变了呢!

    电子面单.分拨中心.代收蜂巢.同城配and次日达--耳熟能详的词汇一大串儿-- 当当当--您的包裹--在家吗? 在这开门与关门之间,快递俨然成为人们生活中即柴米油盐之后最最重要的组成部分之一. 有数据 ...

最新文章

  1. R语言应用substr函数和substring函数抽取(extract)、删除(Remove)、替换、匹配(Match)特定的字符串、并对比两个函数的异同、grepl检查子字符串是否存在于字符串中
  2. 数据库分页存储过程(5)
  3. Symfony 4.3 发布,带来搜索引擎自动保护
  4. Marketing Cloud contact里和twitter相关的数据
  5. java安全——类加载器+字节码校验+安全管理器与访问权限
  6. Linux的环境变量配置
  7. jquery.tablesorter
  8. c++数字转化为字符串、字符串转换为数字
  9. java三个技术平台_Java的3个平台有什么区别
  10. CentOS6.5安装telnet命令
  11. python全栈开发下载_python全栈开发神器 - 『精品软件区』 - 吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn...
  12. Okhttp之CallServerInterceptor简单分析
  13. JavaSE基础 ——运算符
  14. java中的this关键字详解(图示)
  15. 树莓派处理温湿度监控,红外蔽障传感器,超声波测距传感器,激光传感器,有害气体检测,人体感应器,倾斜开关,雨滴传感器,土壤监测
  16. java移位运算符详解_java移位运算符详解
  17. python输入一个字符一个数字_Python程序输入一个字符串并查找字母和数字的总数...
  18. 【LeetCode】723. Candy Crush 解题报告 (C++)
  19. pmp考试24计 | 第十三计-计清:首先和首要
  20. idea中使用git创建分支与标签

热门文章

  1. iOS一键打开支付宝小程序以及指定页
  2. 数据分析时None和NaN区别
  3. BIZHUB184打印机提示维修召唤(m2)修复
  4. python messagebox排版,Python——简单几步制作完整可视化的窗口
  5. 魔兽作弊命令 只能单机用
  6. 算法入坑——之字形打印矩阵
  7. MySQL索引底层数据结构
  8. 剑指Offer——P32——之字形打印二叉树
  9. Java8 Stream 流 多字段求和、汇聚
  10. python 查看所有python的路径;电脑闹钟和定时执行python程序 APScheduler