一.软件的生命周期和配置管理
1. 软件的生命周期
(1)从0至1
·计划:确定领域
·分析:转换用户需求
·设计:架构、语言的使用
·实行:编写软件
·测试:检验功能
·维护:延长至计划寿命
(2)从1至0
·软件的更新与老化
·不同软件之间相互取代演化
(3)经典软件模型
·两个基础类型:线性、迭代
·瀑布模型:线性类型
- 按步骤依次实现
- 需求稳定,修改困难
·增量模型:线性类型
- 分治思想,选择最核心的需求
- 每个增量各自开发时使用瀑布模型
·V模型:线性类型
- 避免错误
- 强化测试:对代码、文件等进行分析
·原型法:迭代类型
- 预发布简化版确定用户需求
- 为新开发的技术做市场实验
·螺旋模型:迭代类型
- 每做完一个层面进行评估
(4)敏捷开发
·开发宣言
- 人以及人的互动胜于过程和工具(实时评审)。
- 可运行的软件胜于面面俱到的文档。
- 客户合作胜于合同谈判。
- 响应变化胜于遵循计划。
·快速迭代:从需求驱动变为成果驱动
- 用户参与
- 短期开发
- 大量测试
·极限编程
- 情景对话表达需求
- 原型法设计
- 结对编程,自动构建
- 持续集成,持续发布
- 测试驱动的开发
·任务墙和过程管理:类似流水线
(5)协同软件开发
·开源软件构建模型:没有协同管理控制
·模式细节
2. 软件配置管理
(1)基本概念
·版本控制:配置管理的主要工具
·基线:软件配置项各个版本组成的标准线,是版本变化的基础
·检入、检出:检入解封,检出锁死
(2)版本控制系统的优点
·个人
- 易获得历史版本
- 可比较不同版本的差异
- 将完整的版本推送到其他位置
- 将历史记录从其他位置找回
- 合并早期版本的衍生版本
·团队
- 便于开发团队沟通交流
- 具有日志功能,记录不同开发人员的作品以便审核
(3)分支和进化图
·部分人员并行开发
·在新功能完成之前不将其加入软件
(4)三种管理模式
·本地管理
·集中式管理:客户通过云端交互
·分布式管理:用户可以直接交互或通过云端交互
(5)一些术语
·存储库:我们项目中的版本的本地或远程存储
·工作副本:我们可以处理的项目的本地可编辑副本
·版本或修订:记录我们项目在某个时间点的内容
·更改或差异:两个版本之间的差异
(6)特点
·可靠:可以保持版本不变,允许备份
·支持多个文件:跟踪项目的版本,而不是单个文件
·可还原:恢复全部或部分旧版本
·可审查历史:查看整个项目或个别文件
·允许合作:版本合并、并行工作、跟踪责任、作品共享
3. 实例:Git
(1)Git存储库
·.git目录:存储所有版本控制数据
·缓存区:在内存中
·工作目录:本地文件系统
(2)文件的三种状态
·修改:工作目录中的文件与git存储库中的文件不同,但不在临时区域中
·分阶段:文件已修改并已添加到暂存区
·提交:该文件在工作目录和git目录中保持相同
(3)Git中的对象图:Git所有操作的基础,存储在存储库的.git目录中
·从另一台机器/服务器复制git项目意味着复制整个对象图。
·对象图中的代码
- 不重复保存各版本中没有发生变化的文件
- 每个文件的每个版本只保存一次,多个提交可共享副本
(4)分支:commit -> branch -> merge