一、为什么要有后端开发流程
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 字节应用的开发流程
二、后端开发流程有哪些内容
2.1 需求阶段
不要浪费时间讨论不应该存在的问题
2.1.1 MVP思想
-
站在用户的角度思考
-
收集用户反馈,快速迭代
2.1.2 四象限法
2.2 开发阶段
2.2.1 云原生的发展历程
2.2.2 云原生下的开发
- 容器化:
- 微服务架构:
- 云原生IDE:
2.2.3 团队分支策略
-
多个团队成员之间各自用什么分支开发?
-
修改之间有冲突怎样解决?
-
出了问题的代码如何回退到之前版本?
2.2.4 代码规范、自测和文档
- 代码规范
-
养成良好的注释习惯
-
不要有魔法数字,魔法字符串
-
重复的逻辑抽象成公共的方法,不要copy代码
-
正确使用IDE的重构功能,防止修改错误
- 自测
-
单元测试
-
功能环境测试
-
测试数据构造
- 文档
-
大型改造需要有技术设计文档,方案评审
-
好的接口文档能更方便的和前端进行沟通
2.3 测试阶段
2.3.1 测试金字塔
2.3.2 测试环境
- 功能环境
-
需要一个能模拟线上的环境进行开发测试
-
环境和环境之间能够隔离,不影响其他功能的开发和测试
- 集成环境
-
不同人开发的功能合并在一起测试,相互之间的影响可能产生缺陷
-
迭代发布的所有功能合并在一起测试,确保发布的所有功能之间的影响不产生
- 回归环境
-
确保新的功能不对老的功能产生影响
-
回归测试一般会借助自动化测试脚本
2.4 发布阶段
2.4.1 发布模式
- 蛮力发布:简单粗暴,直接用新版本覆盖老版本
- 优点:简单、成本低
- 缺点:发布过程中服务会中断、出了问题会影响全部用户
- 适用:测试环境部署、小公司或者非核心的业务服务
- 金丝雀发布:小流量发布,观察反馈逐步放大流量
- 优点:相对简单、能够用少量用户验证新版本功能
- 缺点:发布过程中服务会中断、发现不了随用户增大才会暴露的问题
- 适用:测试环境部署、小公司或者非核心的业务服务
- 滚动发布:每个实例都通过金丝雀的方式逐步放大流量
- 优点:发布过程中用户体验不会中断、可以充分验证服务功能
- 缺点:流程较复杂,对发布系统有比较高的要求、发布速度较慢、新老版本不兼容的情况不能使用
- 适用:发布系统能力较强,可以平滑切换流量/发布自动化程度高,可以自动滚动
- 蓝绿发布:把服务分成蓝绿两组,先把蓝组流量摘掉然后升级,只用绿组提供服务,之后切换全部流量,只用蓝组提供服务,然后升级绿组服务,最终两组升级
- 优点:发布速度快、流程相对简单
- 缺点:需要有一半机器承担所有流量的能力、出问题会影响全部用户
- 适用:服务器资源丰富、新老版本不能兼容的情况,需要一次性升级到新版
2.5 运维阶段
2.5.1 故障处理
发生故障的原因是多种多样的,例如用户量增加引起的流量洪峰、数据库表的数据量增长导致查询速度变慢、内存/进程泄漏导致服务资源不足、光缆被挖断等。
故障处理的关键动作:止损->周知->定位->修复。