文章目录
- 0. 软件生命周期模型
-
- 瀑布模型
- (快速)原型模型
- 增量模型
- 迭代模型
- 敏捷开发思想
-
- 敏捷软件开发宣言(2001)
- 敏捷 VS. 瀑布
- 敏捷实践
- 1. 需求分析
- 2. 架构设计
-
- 1)基本步骤
- 2)技术选型
- 3. 开发编码
-
- 1)持续集成、持续交付和持续部署
-
- 发展
- 如何搭建持续交付环境/li>
- 2)源码管理工具
-
- 简介
- 基于源码管理的开发流程
- 3)自动化测试
-
- 什么是自动化测试/li>
- 如何在项目中应用/li>
- 4. 测试
-
- 软件测试工具
- 5. 运行维护
-
- 版本发布
- 线上监控和 警
- 故障处理
- 附录
学习笔记摘录于:宝玉.《软件工程之美》
软件工程 = 过程 + 方法 + 工具
**
软件开发过程(软件项目周期)可以分为需求定义与分析、设计、实现、测试、交付和维护。
基于此衍生出最基础的过程模型——瀑布模型。但是由于周期较长等缺点,又在瀑布模型基础上提出了V模型、原型设计、增量模型、螺旋模型等,已改善前者的一些缺陷。到90年代,各种轻量级开发方法不断被提出,又形成了敏捷开发。
**
好的实践流程化,好的流程工具化。
0. 软件生命周期模型
瀑布模型
阶段 | 内容 | 产出 |
---|---|---|
问题的定义和规划 | 需求方和开发方明确开发目标。研究可行性。 | 需求文档,可行性研究 告 |
需求分析 | 对需求进行分析和反复沟通确认。 | 需求分析文档 |
软件设计 | 对软件系统进行抽象和设计,如系统框架、数据库等。 | 架构设计文档 |
程序编码 | 将架构设计和界面设计的结果转换成代码。 | 代码文件 |
软件测试 | 依据需求分析文档对程序进行严密测试。 | 测试 告 |
运行维护 | 修复错误,增加功能等。 | 使用说明文档 |
优点:简单易行;分工协作;质量相对有保证。
缺点:难以响应需求变更;工作量分布不均。
(快速)原型模型
原型模型用于解决客户需求不明确和需求多变的问题。主要方法是快速造一个可以运行的软件原型*,再反复修改确认,直至符合用户需求。如果客户对质量要求较高,则原型只应用于需求分析阶段,后续重新开发(抛弃策略);或者将原型应用于整个开发过程,完善原型(附加策略)。
*:原型制作不一定需要设计编码,有时通过原型工具也可以完成。
原型模型能快速响应需求变更,但往往是以牺牲质量为代价。
增量模型
增量模型适用于能模块化、可以按批次交付的软件系统。主要方法是把待开发软件系统模块化,然后对每个模块应用瀑布模型。将软件产品分批次交付。
增量模型可以多模块并行开发。但是要求系统可模块化,以及人员有较高的系统架构水平。
迭代模型
迭代模型每次只设计和实现产品的一部分(一次迭代),然后逐步完成更多的功能。与增量模型的区别在于前者是按模块划分,而迭代模型则是按时间划分。
迭代模型同样依据分治原理缩短每次的交付周期。难点在于对每次迭代内容的把握。
敏捷开发思想
敏捷软件开发宣言(2001)
个体和互动 高于 流程和工具
工作的软件 高于 详尽的文档
客户合作 高于 合同谈判
响应变化 高于 遵循变化
敏捷 VS. 瀑布
阶段 | 敏捷 | 瀑布 |
---|---|---|
需求分析 | 用户故事 | 严谨的需求分析和详尽的需求文档 |
架构设计 | 渐进式 | 一步到位 |
项目质量保证 | 自动化测试为主 | 有专门的阶段测试 |
发布部署 | 持续集成 | 测试环境->验收通过->生产环境 |
敏捷实践
-
Ticket
-
基于Git 和 CI 的开发流程
针对代码不稳定和部署繁琐问题,基于Git的开发流程结合CI的自动测试、部署提供了良好的解决方案。
(1)从当前master克隆一个branch用于开发。开发完成后提交一个PR(Pull Request)。PR提交后,其他人就可以对代码进行评阅,确认没问题后通过代码审查。提交PR到源码服务器,CI会创建一个干净的运行环境,先把提交的代码下载下来,然后安装依赖项,接着运行自动化测试代码,并将测试结果反馈。当代码审查和自动化测试通过后,就可以合并到master了。
(2)自动部署:当代码合并到master时,再次运行自动化测试代码,测试通过后直接运行自动部署脚本(构建镜像等),把master代码部署到开发或测试环境上。 -
部署线上流程
-
每日站会
-
极限编程(eXtreme Programming, XP)
目前敏捷开发主流的工程实践方法。极限的意思是如果某个实践好,就将其做到极致。基于极限理念,产生了很多优秀的实践方法,如持续集成、自动化测试、重构等。
1. 需求分析
需求分析:对用户需求进行提炼分析,形成产品需求的过程。
- 挖掘真实需求
- 提出解决方案
- 筛选和验证方案
2. 架构设计
良好的架构设计可以降低因需求变动、人员组织、技术组织、软件稳定运行等带来的技术复杂度。
1)基本步骤