文章内容总结自:字节跳动青训营
软件开发流程
软件开发模型简介
传统瀑布模型
将流程视作为一条线:
完成需求分析后开发,开发完成后测试,测试完成后发布,发布完成后进行运维。这是最直观的一个模型,其流程是非常的严格的区分的。适用于银行、支付等对软件质量要求很高的领域,是以流程为本,理想化的模型。
这种流程的缺点是十分低效的
敏捷开发
为了提高开发的效率,敏捷开发的思想被提了出来,敏捷开发并不是一个具体的开发模型,但是敏捷开发主张:
- 个体和互动高于流程和工具
- 工作的软件高于详尽的文档
- 客户合作高于合同谈判
- 响应变化高于遵循计划
敏捷开发重视在变化中开发软件,敏捷开发以小团队快速迭代,团队成员之间合作更紧密,并且强调以人为本,而用户沟通,其中接触的最多的是scrum方法,有关于scrum方法可以参考以下这2篇文章
https://zhuanlan.zhihu.com/p/369842971
这是Scruum中的一次Sprint迭代的时间表,其中输入侧用于输入需求,消费侧用于消费需求,另外其中有一些关键会议:
- 待办事项整理会议Backlong Grooming Meeting是产品负责人描述下一个迭代希望实现的用户故事,PM提出需求列表
- 迭代计划会议(Sprint Planning Meeting)用于选择迭代的任务和估算工作量
- 每日站会:昨天你做了什么,今天你将要做什么,有什么需要帮助的地方
- 评审会:小组向产品负责人展示迭代工作成果
- 反思会:在每次迭代后召开简短的反思会,总结哪些事情做得好,哪些做得不好
其中专有名词解释如下:
- RD 研发
- PM 产品经理
- PRD 需求文档
- UED 用户体验设计
- QA 测试
- Scrum1 敏捷团队1
- P0 优先级为0
- Backlog 规划列表
开发流程的拆解和介绍
需求阶段
需求阶段的准则:
不要浪费时间讨论不该存在的问题
一些需求一开始就是不合理,应该在最开始砍掉,以防止之后投入精力进行开发。
除了砍需求之外,还需要以用户思维,合理地增加需求,这时候需要最小化可行产品思想MVP
其实这种思想就是先实现部分可行的功能,或者让功能简单能跑,然后交由客户并且接受反馈,再逐步改进
除此之外还可以:
安排自己任务的时候可以按照四象限法切分任务
其中的百分比表示花费在该事情上的比例
开发阶段
云原生改变了开发阶段
在传统虚拟机开发中:
- 物理主机中虚拟出多个虚拟机,每个虚拟机拥有自己的操作系统
- 运维人员负责维护和交付虚拟机
- 每个虚拟机中都要安装对应的相应以来环境
容器化后:
- 容器是在操作系统中虚拟出来的,也就是一个操作系统中有多个容器
- 通过cgroup, namespace和Union Mount等技术实现了容器之间的相互隔离,这样使得不同的容器里可以选择不同的运行环境,而不像传统虚拟机中需要交由运维负责
- 应用和其他以来作为一个整体,打包成镜像交付
另外一个改变是将单体结构变成微服务结构。微服务架构各功能在不同的服务中,不同模块之间使用RPC通信,不同模块可以独立扩缩容,并且每个服务的代码仓库只需要由少部分人维护
如今开发环境也逐渐云原生化,Fass、PaaS等技术,让开发逐渐从本地IDE向线上转变
团队的分支策略
需要清晰了解团队的分支策略,什么时候提交,什么时候回滚等
另外还需要养成良好的代码规范,对待代码进行自测试,并且完善技术设计文档,好的接口文档能够更方便和前端沟通
测试阶段
错误修复得越早,其修复成本就越低,因此要在单元测试中尽量将缺陷修复
测试应该如何确定测试环境?
功能环境:
- 需要一个能够模拟线上的环境进行开发和测试
- 环境和环境之间能够隔离
集成环境:
- 不同人开发的功能合并在一起测试,相互之间的影响可能出现缺陷
回归测试:
- 确保新的功能不对老得功能出现影响
- 回归测试一般会借助自动化测试脚本
发布阶段
蛮力发布
金丝雀发布
滚动发布
蓝绿发布