软件生命周期
软件生命周期:可行性分析、项目计划、需求分析、总体设计、详细设计、编码测试、运行维护等阶段
软件过程模型
瀑布模型
优点:
- 可强迫开发人员采用规范的方法
- 严格地规定了每个阶段必须提交的文档
- 要求每个阶段交出的所有产品都必须经过质量保证小组的仔细验证 缺点:
- 开发模型是线性的,用户只有等到整个过程的末期才能见到开发成果
- 各个阶段划分完全固定,阶段之间产生大量文档
- 早期的错误可能要等到后期测试阶段才能发现,进而带来严重的后果
增量模型
优点:
- 人员分配灵活
缺点:
- 至始至终开发者和客户必须在一起,直到完全版本出来。
螺旋模型
优点:
- 对于大型系统及软件的开发,这种模型是一个很好的方法。开发者和客户能够较好地对待和理解每一个演化级别上的风险。
缺点:
- 需要相当的风险分析评估技术,比较复杂
喷泉模型
敏捷开发
- The Scale Agile Framework (SAFe)
开发流程拆解
需求阶段
MVP思想(最小化可行产品)
- 站在用户的角度思考
- 收集用户反馈,快速迭代
开发阶段
云原生下的开发
容器化:
- 容器是在操作系统中虚拟出来的
- 通过cgroup,namespace和Union Mount等技术实现了容器之间的相互隔离,同时容器只有很低的开销
- 应用和其依赖作为一个整体,打包镜像交付 微服务架构:
- 各个功能在不同的服务中
- 不同模块需要进行RPC通信
- 不同模块可以独立扩缩器
- 每个服务的代码仓库仅由少部分人维护
团队的分支策略
- 团队成员各自什么分支开发
- 修改冲突
- 版本回滚
代码规范、自测和文档
代码规范:
- 良好的注释习惯
- 重复的逻辑抽象成公共的方法,不要copy代码
- 正确地使用IDE的重构功能,防止修改错误
自测:
- 单元测试
- 功能环境测试
- 测试数据构造
文档:
- 大型改造需要有技术设计文档,方案评审
- 好的接口文档更方便和前端进行沟通
测试阶段
功能环境:
- 需要一个能模拟线上的环境进行开发和测试
- 环境和环境之间能够隔离,不影响其他功能的开发和测试
集成环境:
- 不同人开发的功能合并在一起测试,相互之间的影响可能产生缺陷
- 迭代发布的所有功能合并在一起测试,确保发布的所有功能之间的影响不产生缺陷
回归环境:
- 确保新的功能不对老的功能产生影响
- 回归测试一般会借助自动化测试脚本
发布阶段
各种发布模式
- 蛮力发布
- 金丝雀发布
- 滚动发布
- 蓝绿发布
- 红黑发布
运维阶段
流程优化
DevOps 解决方案
- 代码管理
- 自动化测试
- 持续集成
- 持续交付