第二章 软件构造的过程与工具
2.1软件的生命周期(SDLC)与配置管理(SCM)
2.1.1SDLC介绍
从0到1地完成一个软件构造,将如图经历:
- 计划
- 分析
- 设计
- 实现
- 测试与回归
- 维护
从1到n地迭代软件版本是不断地优化分支,合并。
故而,软件拥有其自己的生命特征
- Age
- Vitality(活力)
我们对于软件的期望是:
Long-lasting and full of vitality at any time
2.1.2传统开发模式
- 两种基本模式
- 线性模式
- 迭代模式
- 更多的还有
- Waterfall (Linear, non-iterative) 瀑布模型
- Incremental (non-iterative) 增量模型
- V-Model (for verification and validation) V模型
- Prototyping (iterative) 原型法
- Spiral (iterative) 螺旋模型
对于开发模式的选用有如下关键考虑点
- 用户参与(适应甲方的变化)
- 开发效率以及实现难度
- 软件质量
下面介绍各种开发模式
-
瀑布模型
- 特点:利于使用,应对变化代价高
-
视图
增量模型
- 实现:将整个产品分成不同的增量,逐一完成,通常首先实现优先级最高的需求,一旦开始开发某增量,则该增量的对应需求被冻结(一截一截的瀑布)
- 视图: V模型
- 实现:瀑布模型的扩展, 强化测试
-
视图:
原型法 - 原型的概念:软件原型设计是创建软件应用程序原型的活动,即正在开发的软件程序的不完整版本
-
实现:确定需求,设计初始原型,回顾,增强和修改原型
视图:
优势:- 在项目早期可以获得用户的反馈
- 用户判断软件是否符合规格说明
- 对软件进行估算
螺旋模型
-
特点:一种风险驱动的过程模型,基于给定项目的独特风险模式,螺旋模型指导团队采用一个或多个过程模型的元素,例如增量,瀑布或进化原型
视图:
2.1.3敏捷开发
敏捷开发提倡适应性规划、演化开发、尽早交付和持续改进,并鼓励对变化作出快速和灵活的响应。
- “人”以及“人与人的互动”胜于 “过程”和”工具”
- 可运行的软件 胜于 面面俱到的文档
- 客户合作 胜于 合同谈判
- 响应变化 胜于 遵循计划
核心在于敏捷
上图是一个敏捷开发的单元
下面是整个开发过程
下面介绍敏捷开发的开发模式
-
极限编程(XP)
- 总体视图:
2.1.4 开源
2.1.5 SCM(软件配置管理) & VCS(版本控制)
-
SCM
-
- SCM的任务是追踪与控制软件中的变化
- SCM实际任务是版本控制和建立基线
- 软件配置项(SCI) 是软件配置管理的基本单位,任何需要管理的要素都时软件配置项(源代码、数据、文档、软硬件、环境等)
- SCI与 基线(baseline) :基线是在某时间点上,通过评审和认可后的版本,作为后续变化的基点
- CMDB (配置管理数据库):配置管理数据库是指这样一种数据库,它包含一个组织的IT服务使用的信息系统的组件的所有相关信息以及这些组件之间的关系。配置管理数据库提供一种对数据的有组织的检查和从任何想要的角度研究数据的方法
- 它的工作流程图(主要由检入检出组成)
- 版本:给软件的某个状态唯一的标识
VCS
-
- 对于个人
- 恢复以前版本
- 比较不同版本
- 将完整版本历史记录推送到另一个位置
- 再推送回来
- 合并作为相同早期版本的分支的版本
- 对于个人
-
- 对于团队
- 多个开发者间可以共享资源
- 记录不同开发人员的工作,以便于审计
- 对于团队
-
- 特点
- 可靠
- 多文件
- 版本意义
- 恢复
- 版本比较
- 查找历史
- 不只是编程
分支(Branches)
- 特点
-
功能
- 在分支上进行并行开发, 如测试新功能
- 其他人员不想在新功能完成之前涉及新功能
- 分支对单个开发人员也很有用
- 通过正确的设置,任何程序员都可以从任何位置拉出或推送到任何位置,从而在合作模式中创造出极大的灵活性
Git
-
- Git 储存库(repository)
- 包括
- .git目录(存储所有版本控制数据的存储库)
- 工作目录(本地文件系统)
- 暂存区(内存中)
- 任何一个被管理的文件都会在有如下状态之一
- 已修改(工作目录中的文件与git存储库中的文件不同,但不在暂存区域中)
- 已暂存(文件已修改并已添加到暂存区域)
- 已提交(文件在工作目录和git目录中保持相同)
- Git的所有操作都是在一个图数据库上进行(对象图是Git项目的历史,是有向无环图(DAG))
- 从另一台机器/服务器复制git项目意味着复制整个对象图
- 不重复保存各版本中没有发生变化的文件
- 每次提交都会有单独的log
传统的VCS与Git
对于Git 分支是在版本控制下对对象的复制,以便修改可以沿两个分支平行进行。
- 包括
- Git 储存库(repository)