代码覆盖率在敏捷式软件开发过程中的实践(2)

发表于:2021-12-31 09:59

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:爱奇艺技术    来源:稀土掘金

  四、技术实现
  下面以Java为例,简要说明技术实现原理。考虑到目前维护性比较好的覆盖率工具,选择了JaCoCo开源工具。
  运行原理
 [运行原理]
  JaCoCo生成覆盖率报告需要三个依赖数据:源码Java文件、编译class文件和代码探针打桩执行的结果exec文件。
  1. 源码Java文件和编译class文件是通过CI job的方式push到服务端,exec文件是jvm 通过tcp连接将内存数据导出到服务端。
  2. 汇总三部分文件,利用JaCoCo工具生成代码的全量代码覆盖率报告。
  3. 从Gitlab平台获取到测试分支与master分支代码diff结果,即增量代码,结合其他三部分数据,生成增量代码覆盖率报告。
  4. 通常测试代码分支是多人协作的结果,很多feature代码分支都会合并到测试分支中,再通过git commit溯源关系,得到增量代码的初始来源分支,结合覆盖率报告可以得到每个代码分支的覆盖率报告。
  5. 最后,将Jira需求和代码分支关联,得到需求涉及的代码覆盖率报告。
  核心技术实现
  · JaCoCo改造
  JaCoCo覆盖率报告生成条件是Java源代码、编译后的Class文件和生成的exec(jvmexecution data,.exec类型)覆盖率数据。其中exec覆盖率数据是由probe探针生成的二进制文件,包括SessionInfo(此次数据的来源id、开始时间、结束时间)和 ExecutionData(每个类文件对应的探针boolean类型数组)。Jacoco官方给出导出exec数据的方式有三种:File System、TCP Socket Server和TCP SocketClient。现有的几种方式存在一定局限性,无法满足灵活自动上报的要求,并且如果jvm异常关闭,会导致数据直接丢失。所以,在TCP Socket Client基础上进行优化改造,支持了Schedule定时上报功能,通过配置化定时参数,允许随时上报,灵活配置。
  · 增量代码覆盖率的生成
  利用git工具对比测试分支与master分支,获取增量代码(新增和修改的代码)。根据增量代码找出匹配的Jacoco执行exec文件,再利用asm框架,分析计算得到增量覆盖率数据。
  · 代码分支级别覆盖率
  得到增量代码覆盖率后,再通过git commit信息,溯源找到所有代码的初始提交分支。
  · 需求级别代码覆盖率
  为了便于关联代码和需求,以及快速识别相关开发和测试负责人,对代码分支的命名做了一些规范。
  从代码分支中检索出符合规范的代码,查询Jira项目管理系统,进行关联。Jira需求对应的代码分支级别覆盖率即为需求的代码测试覆盖率。

需求类型 分支命名前缀 示例 
 跟版需求 feature/v{version}/{issue_id}_xxx|  feature/v11.7.0/JIRA-9443_xxx
 纯后端需求 feature/backend/{issue_id}_xxx feature/backend/JIRA-9444_xxx 

  · 使用要求
  为了提升代码质量和减少线上问题的出现,对增量代码的覆盖率提出了比较严格要求,低于标准的情况都需要备注说明原因。

类型  标准  
版本交付标准 所有代码增量覆盖率>=90% 
测试通过标准   需求分支增量覆盖率>=90%
代码上线标准代码分支增量覆盖率>=90% 

  覆盖率高不等同于代码质量高,但覆盖率不高说明存在有未测试过的代码,这些代码上线后可能会成为服务稳定性方面的隐性问题。但是一味得追求高覆盖率也是不可取的。一方面,无效的代码(例如判空类型的代码)可能无法覆盖;另一方面,追求高覆盖率付出的人力成本会比较高。
  · 需求测试上线流程
[需求测试上线流程]
  测试人员根据需求内容制定测试用例,在测试环境进行测试验证完毕后,根据生成的需求测试覆盖报告,衡量是否达标(检查覆盖率是否达到预期、关键的分支判断是否覆盖等)。如果不达标,需要进行补充用例或者需要开发人员进行代码逻辑修复,再进行重复测试,达标后的需求方可进行审批上线到生产环境。在此过程中,平台会自动生成该需求关联的变更代码覆盖情况,避免了复杂协作环境下其他人代码对该需求影响,测试人员可以较快地发现未覆盖代码,并与上线流程打通,减少未覆盖代码带来的隐性问题上线情况,一定程度上保证了服务质量。
  五、总结&规划
  本文介绍了爱奇艺开发团队和QA团队在测试覆盖率方面的探索和实践,在代码测试覆盖率工具基础深入研究改造,结合其他开发协作平台,支持更快速的集成接入方式,计算展示了增量代码报告、分支覆盖报告、需求覆盖报告等更多维度报告,为使用者提供了极大的便利性。在平台搭建后,平台能快速接入更多的服务,为测试人员提供更多维度的参考衡量标准,重点后端应用服务代码测试覆盖率从不足70%提升到90%+,在一定程度上有效地保证了服务质量。
  目前的覆盖率数据是来源于测试环境的,只限于开发测试周期使用。后续会在生产环境的代码覆盖率方向上做出一些尝试,例如,利用生产环境的代码执行的覆盖率报告自动化筛选一些关键接口请求作为拨测用例、将生产环境的流量请求测试环境对比生产环境和测试环境的覆盖率报告差别以衡量改动影响等。

  本文内容不用于商业目的,如涉及知识产权问题,请权利人联系51Testing小编(021-64471599-8017),我们将立即处理
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号