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

发表于:2021-12-30 09:42

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

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

  一、前言
  代码测试覆盖率是一种度量,它描述了对程序源代码的测试程度,是白盒测试的一种手段,能够直观暴露测试用例无法覆盖到的代码块。作为提升代码质量的利器,爱奇艺开发团队和QA团队在如何接入、使用等方面做了一些探索性的尝试与实践。
  目前代码覆盖率大多停留在整体层面,没有细化到更小的粒度。在协同开发过程中,如果能精细到需求粒度级别覆盖率,关联到具体的负责人,将能有效提高测试效率和精度。
  本文将从代码覆盖率接入和使用的角度,叙述了如何结合代码管理、项目管理等DevOps工具进行精细化代码覆盖率统计以帮助提高代码质量。
  二、背景
  互联网公司软件开发模式多为敏捷式或者迭代式开发模型,弥补了传统开发模式的一些弱点,具有更高的成功率和开发效率,能够先尽快地将产品投向市场,再通过用户的广泛参与,不断修改优化产品,实现产品的快速迭代,更好地适应用户市场变化。
  不过随着项目的迭代,功能场景变多,代码工程会愈加庞大复杂,代码质量也因此至关重要。如何在开发测试周期提升代码质量,代码测试覆盖率作为一个可以衡量代码质量的标准,如何接入使用覆盖率数据,是一个值得深入探索实践的方向。
   · 定义
  > 代码覆盖(英语:Codecoverage)是软件测试中的一种度量,描述程序中源代码被测试的比例和程度,所得比例称为代码覆盖率。
   ·  代码覆盖率的意义
  1. 完善测试用例:从代码覆盖率报告可以明确,哪些代码是执行过的,哪些代码是没有执行过的。对于没有执行过的代码,测试人员需要思考下是代码逻辑设计问题还是测试用例问题。如果是代码逻辑问题,那么需要与开发人员和产品人员沟通,达成需求的一致性理解。如果是测试用例问题,那么需要补足缺失的测试场景,尽可能保证所有重要的场景都覆盖到了,避免未测试的代码上线造成服务故障。
  2. 提升代码质量:开发人员从覆盖率报告可以获得代码的执行流程走向,帮助理解代码逻辑。分析生产环境的代码覆盖率报告,还可以区分出真实的用户请求执行覆盖情况,区分“有用/无用”代码,有利于优化简化代码逻辑。
  3. 代码质量标准:代码覆盖率是一个确切的数值,将模糊定义的代码质量用精准的数据来量化,是白盒测试和代码质量的衡量指标。
  从代码覆盖率报告可以明确,哪些代码是执行过的,哪些代码是没有执行过的,从未执行过的代码可以推算出测试用例是否充足,帮助测试人员理清代码逻辑和完善测试用例。代码测试覆盖率作为一项衡量代码质量的重要标准,可以在测试阶段发现隐藏问题,将隐性问题消灭在萌芽状态,减少线上问题发生。
   ·  现状
  开源的覆盖率实现工具有很多,但是在实际使用中,还需要做比较多的准备工作,经常遇到以下问题:
   ·  无法区分增量代码
  增量代码是指新修改的代码,从全量代码中区分出增量代码的好处是,让使用者只关注于自己负责的代码,去除干扰,减少人工筛选成本。而覆盖率工具只是用于生成代码覆盖率(全量)的工具,没有区分增量代码。
   ·  使用成本高
  覆盖率报告只是一份综合的报告,使用者通常只会关心自己的代码覆盖率,在多人协同开发过程中,如何将某一处代码覆盖率与具体的需求(开发人员、测试人员)关联是一个问题。
   ·  测试环境多人协同多次修改变化性大,维护成本高
  在实际的开发测试周期中,可能会出现修改代码再测试,测试后再修改代码的现象,代码覆盖情况是一个变化的过程。考虑到覆盖率工具只能对固定的代码进行收集,如何减少此变化过程的维护成本是需要解决的。
  三、目标和功能
  基于以上问题,爱奇艺开发团队在覆盖率生成工具基础上,整合DevOps工具,以相对较小的成本快速接入生成代码覆盖率,并支持计算生成代码分支级别、需求级别的精细粒度增量代码覆盖率报告。以下以Java为例,简单阐述实现方案和原理。
业务架构
   · 简化接入流程
  使用方仅关心如何将生产出来的java文件、class文件和exec文件推送到指定位置,即可自动化生成详细的覆盖率报告。
   ·  增量代码报告
  利用diff算法,区分出增量代码,生成单独的增量报告和全量报告。
 [增量&全量代码报告]

   ·  代码分支级别代码覆盖率
  计算测试分支中(某一个代码分支所占的)代码覆盖率。

  [代码分支级别报告]

   ·  需求级别代码覆盖率
  计算Jira中某一个需求(issue涉及到的)代码覆盖率。
 [需求级别报告]

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

关注51Testing

联系我们

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

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

沪ICP备05003035号

沪公网安备 31010102002173号