叶子 字节跳动技术质量 稿

简介

对于软件研发来说,持续、快速、高质量、低风险的交付需求特性,是业务对研发的主要诉求。目前各企业团队也正处于DevOps转型的不同阶段,字节跳动产品研发部质量架构团队针对业务现状,建立无人测试流水线专项,帮助业务建设从需求至交付全阶段流水线,提升产品发布质量和效率。本文简要介绍方案并重点阐述多业务线的优秀实践案例,供各位朋友参考借鉴。

背景

随着公司业务不断扩张,各个业务团队规模不断扩大,与此同时我们也发现:

  • 各个团队研发规范导致的线上问题也随之变多
  • 项目协同和信息同步(如联调环境信息、上线发布信息等等)成本变高,团队沟通效率下降
  • 大量项目若持续采用传统手工测试的方式,人力已无法覆盖,产品质量不确定性高

在此背景下,优化研发交付模式,持续提升业务整体的研发效率与质量显得尤为重要。

无人测试专项是将研发流程标准化管理、工程实践、质效工具相结合的一种集成方案,主要目标是:

  1. 研发流程抽象并标准化,包括研发流程规范、测试规范、发布上线规范流程以及质量准入准出规范,并以标准流水线形式落地;
  2. 质量提升,通过规范化发布流程,并辅以各类质量检测能力,提升规范发布占比,减少流程类发布事故;
  3. 效率提升,通过全流程的流水线建设,降低项目协同成本,不断加强自动化能力测试,减少人工测试占比,整体提升需求交付效率;

建设效率更高、质量更好的持续交付流程,最终达到无人测试理想态。

目标&解决方案

  1. 标准化并收敛所有类型服务发布过程
  2. 建设多级质量防御拦截能力
  3. 建设质量度模型及质量准出风险决策能力
  4. 建设全流程研发数据,牵引指导研发行为

业务开展路径与实践案例

业务流水线开展路径

  1. 确定合理的发布SOP,统一发布规范
  2. SOP固化,建设标准发布流水线,收敛发布过程
  • 流水线中强制分级发布(及分级发布时间观察)
  • 逐步建设自动化测试能力、发布过程管控能力(如线上观察时间管控、发布质检报警管控)、上线周知能力等
  1. 发布流水线拓展到研发全流程流水线
  • 全流程流水线:研发流水线 -> 测试流水线 -> 发布流水线
  • 有「人工介入」测试 -> 逐步减少人工介入占比 -> 研发流程全自动化「无人测试」
  • 逐步拓展服务发布类型,覆盖TCE、Cronjob、Faas、Bernard及goofy等
  1. 制定质量准入准出标准,依托「质量准出服务」能力,作为流水线强卡口
  2. 周期性指标统计,牵引研发过程标准化

产品研发部业务线流水线实践

TCE服务发布流水线实践

  • TCE主干发布流水线推荐业务线优先建设,业务线的流水线需要继承基准发布流水线,在其基础上再根据需要可以做一些自定义原子,最终形成业务个性流水线方案。其中,基准发布流水线包括分级发布、自动化回归、以及审核上线。
  • Case :字节跳动电商业务
    • 电商从0开始经过近三个双月的流水线建设,逐步形成业务线服务发布标准化流程。目前TCE服务发布已经基本收敛,规范发布占比达到95%+,平均每周拦截问题30+次。当前电商的发布流水线流程完善,质检能力多样,建设以来服务发布流程导致的线上事故为0。
    • 电商的发布流程如下图,电商的每一次服务发布,QA均会跟进,整体流程较其他业务线<span data-raw-text="" “=”" data-textnode-index-1643359715861=“35” data-index-1643359715861=“1249” class=“character”>“稍显复杂<span data-raw-text=”" “=”" data-textnode-index-1643359715861=“35” data-index-1643359715861=“1254” class=“character”>"。主要环节包括「高峰期审核」、上线前自动化检查(「回滚检查」、「FTF」、「接口自动化」、「Satcheck代码扫描」)、上线通知&审核确认、以及 分级发布(分级发布过程中强制观察时间、监控观察、以及上线通知回复)等。

需求全流程流水线实践

  • 全流程流水线一方面将流水线范围延展到开发阶段,另外一个重要特点是将流水线操作行为和项目需求相关联。
  • 需求全流程流水线推荐业务在具备一定的流水线使用基础后再进行推广。目前使用姿势是「人工介入」和「无人测试」不同研发流程相结合,发布阶段沿用TCE发布流水线标准,开发和测试阶段应用自动化能力将测试左移,同时将「质量准出服务」作为开发阶段和测试阶段的准入准出卡口,控制研发质量。
  • Case:字节跳动今日头条平台业务
    • 今日头条平台业务是字节跳动效能平台首批应用团队之一,也是目前落地全流程研发流水线进展TOP的业务线。由于头条平台业务的服务端技术需求QA不跟进测试,因此业务线制定了两类研发流程,针对产品类需求建立「人工介入」流程,针对技术需求建立「无人测试」流程,具体研发流程如下:

质量准入准出业务实践

  • 质量准入准出服务主要承载并平台化各不同类型业务以及不同测试手段的标准,依托流水线建设,辅助并逐步取代人工评估,最终实现自动化的智能风险决策。
  • Case:字节跳动电商业务
    • 电商定义一系列服务端质量准入准出标准,包括自动化测试标准以及功能测试、性能测试等人工checklist标准。电商标准依托质量准出服务置于流水线中,发布上线前需要对准出标准逐一判定(自动化+人工),准出判定通过后发出此需求的测试准出报告,并允许进入到发布阶段。近期业务推广落地中。

选择器应用场景

统一的「人工介入」or「无人测试」流程并不能覆盖业务线全流程所有场景,不同需求/不同研发阶段下仍可能存在较多细分的分支场景,比如需要临时走紧急发布,不同的环境选择等。

  • 目前字节跳动效能平台已支持在流水线编排中插入选择器功能,通过自动匹配/人工确认不同选项配置,达到不同场景执行不同路径的目的。
  • 一些业务线对于选择器的“玩法”供参考
    • 执行的不同发布流程

  • 部署不同的地域集群

  • 其他场景:部署字节跳动业务研发线下环境/部署生产预览环境、流水线MR原子/手工Gitlab MR等

原子能力推荐

  • 原子能力是流水线建设重要组成部分,结合无人测试的标准流程卡口能力,以及业务线常用能力使用情况,原子能力推荐使用姿势如下
    • 必备:接口自动化、TCE分级部署(小流量部署、单机房部署、全流量部署)、发布质检(用于分级发布过程中,灰度问题拦截)、质量准出服务(承载业务线测试准出标准)
    • 推荐:SatCheck代码扫描(业务线定制规则代码扫描能力)、延迟通过、FTF(基于流量的新型自动化测试)、代码覆盖率
    • 可选:上线窗口、上线通知、安全扫描

无人测试度量指标

  • 当前无人测试度量指标已支持并持续丰富「Devops流水线交付模式」、「字节跳动效能平台流水线模式」、以及「字�