• Home
  • About
    • wanziの遇笺 photo

      wanziの遇笺

      一点随笔,一丝感悟,一些记录,一种成长。

    • Learn More
    • Instagram
    • Github
  • Archive
  • Category
  • Tag

ByteDance|光阴的故事-字节的软件研发流程

07 Dec 2020

Reading time ~1 minute

  • 一、前言
  • 二、背景
  • 三、方法
    • 1. DevOps成熟度模型
    • 2. 精益测试
      • 2.1 测试四象限
      • 2.2 测试分层
  • 四、流程
    • 1. 软件开发过程
    • 2. 上线流程
  • 五、工具
    • 1. 软件开发管理
    • 2. 持续交付
    • 3. 技术运营
  • 六、度量
    • 1. 产品侧
    • 2. 研发侧
    • 3. 测试侧
    • 4. SRE侧
    • 5. 运营侧
  • 七、扩展
    • 1. 原则
    • 2. Google测试发展历史
    • 3. 测试未来趋势
  • 八、其他维度的历史
  • 九、参考

一、前言

  本文按照方法、流程、工具、度量、扩展的方式进行展开,着力讲述在字节的时候,涉及到产品、开发、测试、运维、运营角色在内的 DevOps流程。

二、背景

  最近以私人名义,再次回到字节,友情分享,讲述自己当初在字节的一些研发流程实践。刚到腾讯的时候,主要描述多的是在TW的 一些最佳实践,而这次借着这次机会,算是从整体维度总结了一下在字节的那段光阴里的快照,权当一个小总结了吧。

三、方法

1. DevOps成熟度模型

2. 精益测试

2.1 测试四象限

2.2 测试分层

四、流程

1. 软件开发过程

  双周迭代图如下(黄色代表会议,蓝色代表开发,绿色代表测试):

  上图里面只描述了开发过程前后一点的事情,不涉及到的:

  • 开发前   产品内部评审 -> 需求评审 -> 技术评审 -> 录单估算
  • 进入开发   进入迭代 -> 开发 -> 测试 -> showcase -> 提测 -> pre -> 验收 -> prd
  • 上线后   报警监控 -> 反馈 -> 阻塞性问题及时修复

2. 上线流程

  • 上线前
    • 上线Checklist(Owner、前期准备、上线前影响通知、上线审批)
    • 上线窗口、周期
  • 上线后
    • 工单运营(数据的清理、修复)
    • 生产验收
  • 事项
    • 事故处理&复盘
    • 违规操作

五、工具

1. 软件开发管理

项目管理工具:Jira、Rocket、Meego

  • 工作流
  • 配置字段
  • 工作模式
  • 度量,基于Jira仪表盘和Jira数据库的数据

2. 持续交付

  • 代码仓库:Gitlab
  • 依赖包:Maven私服
  • 版本控制:
    • Git
    • 分支策略
      • GitFlow
      • Trunk Base
  • CICD工具
    • Jenkins
    • TCE&BOE、Devops平台
    • 内部自建平台封装
  • 代码扫描
    • CheckStyle
    • Sonar代码质量
    • 测试覆盖率
    • 安全检查(依赖包检查)
  • 测试
    • 代码层面:单元测试、小规模集成测试
    • 接口测试:postman、Tesla
    • 系统测试:测试环境治理与搭建
    • 自动化UI测试:无
    • 手工测试:测试用例+人工验证

3. 技术运营

  • 自动化运维
    • 自建平台工单申请
    • 配置管理
  • 监控
    • 硬件监控:IT机房管理(磁盘、温度、风扇、电压)
    • 系统监控:TCE管理(CPU、磁盘、内存、网络、进程)
    • 应用监控:Prometheus、Grafana
    • 业务监控:自研系统、BI仪表盘
    • 日志监控:ELK
    • 调用链路监控:SkyWalking
  • 报警
    • 等级:群通知、短信、电话、上级电话
    • 阈值设置:1min、5min、30min
    • 值班关注:运维值班、应用研发Owner值班
  • 运营
    • 用户反馈
    • 话术统一(公告)

六、度量

1. 产品侧

  • PV、UV
  • 竞品   根据产品类型的不同,此处差异较大

2. 研发侧

  • 任务创建与完成对比(横向、纵向)
  • 缺陷创建与完成对比(横向、纵向)
  • Code Review统计分析
  • 分支情况分析
  • 代码质量对比

3. 测试侧

  • 单测覆盖率
  • 自动化测试覆盖率
  • 问题解决时间
  • 问题原因分类(是否在测试阶段没测到)
  • 每周线上问题解决率

4. SRE侧

  • SLA相关
    • 资源使用
    • 性能延迟
    • 请求大小
    • 请求响应时间等
    • 稳定性等
  • 每日报警汇总

5. 运营侧

  • 线上反馈
  • 满意度调查

七、扩展

1. 原则

  • Fast Fail
  • 能量守恒
  • 测试左移(Testing Shift Left)
  • 需求评审、设计评审、ATDD/BDD
  • 测试右移(Testing Shift Right)
  • 性能、安全、易用性、可靠性
  • 可视化原则

2. Google测试发展历史

  • 质量内建
  • Tester -> QA-> Software Engineer for Test(SET) -> Software Engineer on Tooling and Infrastructure(SETI)
  • LeadTime = WIP / Throughtput(Little Law)

3. 测试未来趋势

  • 敏捷化
  • 高度自动化
  • 云化:基础设施
  • 服务化:中台与API
  • 模型化:MBT
  • 智能化:大数据与AI

八、其他维度的历史

  上面的维度,比较系统的呈现了所涉及到的流程。现在回头看,当时觉得很有条理的、按照双月所做的事情,虽然比较散,但是成果 却不错。

  • ~2月,行政房产项目、财务项目
  • 3~4月,持续集成,搭建Jenkins流水线
  • 5~6月,敏捷管理,Jira工作流标准化、归一化、落地到所有项目
  • 7~8月,代码质量,Sonar扫描修改,阈值设置
  • 9~10月,持续交付,Build Once, Deploy anywhere。迁移到TCE、BOE、DevOps。
  • 11~12月,应用元数据,GAIA需求调研、设计开发、上线。
  • 1月~2月,运维自动化,GAIA支持其他平台,灌入数据。
  • 3月~5月,采购供应链

九、参考

  1. 《Google的软件测试之道》
  2. 《测试人员在DevOps转型过程中的发展路径》
  3. 《”六化”——软件测试发展趋势》


devopsbytedance Share Tweet +1