后端开发流程 | 青训营笔记

147 阅读6分钟

一、为什么要有后端开发流程

1.1 流程的产生

个人开发者不需要有流程,当开发团队超过一个人时,开发就需要协作,随着开发团队规模的上升,各种配合的问题将出现,为了提高开发的效率,流程的概念产生了。

1.2 团队规模与流程的关系

  • 需求阶段:每个人都有自己的想法,团队决策需要有一个过程

  • 开发阶段:多人/多端协作开发,每个人有自己的安排,相互配合需要有一个流程

  • 测试阶段:产物怎样交付,测试如何开展,BUG怎么修都需要流程

  • 发布阶段:怎样确保发布过程平稳丝滑,版本和流量如何控制,需要有规范

  • 运维阶段:线上问题如何应急响应,处理用户反馈和线上问题需要有流程

1.3 瀑布模型

瀑布模型是最直观的流程模型,主要过程是:需求->开发->测试->发布->运维。

1.3.1 优点:

  • 工作流程直观表达

  • 定义了标准的研发阶段

  • 以流程为本,理想化模型

1.3.2 缺点:

  • 流程低效,各个阶段的划分完全固定,阶段之间产生大量的文档,极大地增加了工作量

  • 开发模型线性,用户只有等到整个过程的末期才能见到开发成果,增加了开发风险

  • 没有与用户建立交流,不能很好适应用户需求的变化

1.4 敏捷开发

敏捷开发是一种更现代的流程模型,在敏捷开发中,软件项目在构建初期被切分成多个子项目,各个子项目的成果都经过测试,具备可视、可集成和可运行使用的特征。换言之,就是把一个大项目分为多个相互联系,但也可独立运行的小项目,并分别完成,在此过程中软件一直处于可使用状态。

1.4.1 特点:

  • 以小团队快速迭代

  • 团队成员之间的合作更加紧密

  • 以人为本,和用户沟通

1.5 SAFe

SAFe 是一种面向大型企业的敏捷开发框架,旨在协调多个团队和部门的协同工作,以实现高效的软件开发和交付。

1.5.1 框架层次:

  • Portfolio层:在这个层次上,管理人员确定公司的战略和目标,并负责管理整个组织的资金和资源分配

  • Program层:在这个层次上,多个团队协同开发一个或多个产品,形成一个“敏捷发布列车(Agile Release Train)”

  • Team层:在这个层次上,各个团队负责完成特定的功能或任务,并将其集成到产品中

  • Individual层:在这个层次上,个人在团队中负责实现具体的任务和功能

1.5.2 现代 Scrum

  • 敏捷教练 Scrum Master

  • 产品负责人 Product Owner

  • 敏捷团队 Scrum Team

  • 敏捷发布火车 Agile Release Train

1.6 字节应用的开发流程

image.png

二、后端开发流程有哪些内容

2.1 需求阶段

不要浪费时间讨论不应该存在的问题

2.1.1 MVP思想

  • 站在用户的角度思考

  • 收集用户反馈,快速迭代

2.1.2 四象限法

image.png

2.2 开发阶段

2.2.1 云原生的发展历程

image.png

2.2.2 云原生下的开发

  • 容器化:

image.png

  • 微服务架构:

image.png

  • 云原生IDE:

image.png

2.2.3 团队分支策略

  • 多个团队成员之间各自用什么分支开发?

  • 修改之间有冲突怎样解决?

  • 出了问题的代码如何回退到之前版本?

2.2.4 代码规范、自测和文档

  1. 代码规范
  • 养成良好的注释习惯

  • 不要有魔法数字,魔法字符串

  • 重复的逻辑抽象成公共的方法,不要copy代码

  • 正确使用IDE的重构功能,防止修改错误

  1. 自测
  • 单元测试

  • 功能环境测试

  • 测试数据构造

  1. 文档
  • 大型改造需要有技术设计文档,方案评审

  • 好的接口文档能更方便的和前端进行沟通

2.3 测试阶段

2.3.1 测试金字塔

image.png

2.3.2 测试环境

  1. 功能环境
  • 需要一个能模拟线上的环境进行开发测试

  • 环境和环境之间能够隔离,不影响其他功能的开发和测试

  1. 集成环境
  • 不同人开发的功能合并在一起测试,相互之间的影响可能产生缺陷

  • 迭代发布的所有功能合并在一起测试,确保发布的所有功能之间的影响不产生

  1. 回归环境
  • 确保新的功能不对老的功能产生影响

  • 回归测试一般会借助自动化测试脚本

2.4 发布阶段

2.4.1 发布模式

  1. 蛮力发布:简单粗暴,直接用新版本覆盖老版本
  • 优点:简单、成本低
  • 缺点:发布过程中服务会中断、出了问题会影响全部用户
  • 适用:测试环境部署、小公司或者非核心的业务服务
  1. 金丝雀发布:小流量发布,观察反馈逐步放大流量
  • 优点:相对简单、能够用少量用户验证新版本功能
  • 缺点:发布过程中服务会中断、发现不了随用户增大才会暴露的问题
  • 适用:测试环境部署、小公司或者非核心的业务服务
  1. 滚动发布:每个实例都通过金丝雀的方式逐步放大流量
  • 优点:发布过程中用户体验不会中断、可以充分验证服务功能
  • 缺点:流程较复杂,对发布系统有比较高的要求、发布速度较慢、新老版本不兼容的情况不能使用
  • 适用:发布系统能力较强,可以平滑切换流量/发布自动化程度高,可以自动滚动
  1. 蓝绿发布:把服务分成蓝绿两组,先把蓝组流量摘掉然后升级,只用绿组提供服务,之后切换全部流量,只用蓝组提供服务,然后升级绿组服务,最终两组升级
  • 优点:发布速度快、流程相对简单
  • 缺点:需要有一半机器承担所有流量的能力、出问题会影响全部用户
  • 适用:服务器资源丰富、新老版本不能兼容的情况,需要一次性升级到新版

2.5 运维阶段

2.5.1 故障处理

发生故障的原因是多种多样的,例如用户量增加引起的流量洪峰、数据库表的数据量增长导致查询速度变慢、内存/进程泄漏导致服务资源不足、光缆被挖断等。

故障处理的关键动作:止损->周知->定位->修复。

2.5.2 字节运维平台

image.png