后端开发流程
为什么要有流程
个人开发不需要流程 超过一个人的团队就需要协作 随着团队规模上升,会出现新的问题
复杂项目没有流程会出现什么问题?
- 需求阶段:每个人有自己的想法,团队决策需要有一个过程
- 开发阶段:多人协作,每个人有自己的安排,相互配合需要一个流程
- 测试阶段:产品怎样交付,测试如何开展,Bug怎么修
- 发布阶段:怎样确保发布过程平稳丝滑,版本和流量如何控制,需要有规范
- 运维阶段:线上问题如何紧急响应,处理用户反馈和线上问题需要有流程
传统瀑布模型
- 工作流程的直观表达
- 定义了标准的研发阶段
- 以流程为本,理想化模型
敏捷开发
敏捷开发宣言:
- 个体和互动高于流程和工具
- 工作和软件高于详尽的文档
- 客户合作高于合同谈判
- 响应变化高于遵循计划
敏捷开发
- 以小团队快速迭代
- 团队成员之间的合作更加紧密
- 以人为本,和用户沟通
SAFe:多个scrum相互配合
- 精益产品开发
- 敏捷软件开发
- 系统思考
现代的Scrum
- 敏捷教练
- 产品负责人
- 敏捷团队
- 敏捷发布火车
有哪些流程?
需求阶段:
不要浪费时间讨论不应该存在的问题,有些需求本身就不应该存在 ----------砍需求
如何评估一个需求? MVP思想方式 站在用户的角度思考 收集用户反馈,快速迭代
开发阶段
云原生开发
云原生下,应用和运行容器共同作为交付产物
微服务
- 各个功能在不同的服务中
- 不同模块需要进行RPC通信
- 不同模块可以独立扩缩容
- 每个服务的代码仓库仅需少部分人维护
>_<
- 开发环境逐渐云原生化
- Faas,Paas等等技术,让开发逐渐从本地IDE向线上转变
- 从入职领到电脑搭建完一套完整的开发环境需要多久,通过WebIDE等技术,环境未来将会开箱即用
团队分支策略
主要是Git的使用
代码规范、自测和文档
代码规范
- 养成良好的注释习惯,超过三个月的代码,自己都会忘了当时在想什么
- 不要有魔法数字,魔法字符串
- 重复的逻辑抽象成公共的方法,不要copy代码
- 正确使用IDE重构功能,防止修改错误
自测
- 单元测试
- 功能环境测试
- 测试数据构造
文档
- 大型改造需要有技术设计文档,方案评审
- 好的接口文档能更方便的和前端进行沟通
测试阶段
越早发现缺陷修复的成本越低
发布阶段
蛮力发布模式:
金丝雀发布:
滚动发布:
蓝绿发布:
运维阶段
公司在发展过程中,逐渐形成了十分复杂的超大规模微服务体系,为了实现对这些复杂微服务的监控,我们往往会在微服务中添加埋点采集Metrics,Logging,分布式Trace等多种数据
流程优化思路
在重视质量的团队,效率往往比较低 在重视效率的团队,事故往往比较多
- 技术发展会带来质量和效率的同时提高
- 将质量保证融入到流程将流程自动化
- 从需求到上线全流程自动化,同时提高质量和效率
DevOps
效率竖井
- 流程中实际产生的价值的部分很短
- 大量的时间用在等待和传递上
- 人与人之间的沟通很慢
全流程自动化
通过效能平台串联各个阶段
- 需求发起研发流程的自动化
- 写代码,测试环境部署的自动化
- 自动化测试触发和报告分析
- 发布过程可观测融入流程
减少无价值的等待
- 分析整个流程的耗时,计算真正产生价值的时间
- 不断优化流程,让有价值的流程时间占比上升