第三节 构造过程与配置管理
软件的过程模型
一. 构造过程
两种基本形式:Linear-线性过程 Iterative-迭代过程
五种模型:瀑布过程、增量过程、V字过程、原型过程、螺旋模型
瀑布模型(Waterfall)(顺序,不可迭代)
描述:按阶段实现软件,基本分为需求-设计-实现-验证-维护。
特点:容易使用,但实现后更改需求代价较大。
增量模型(Incremental)(不可迭代)
描述:软件被逐次一点点地设计、实现和测试,直至完成。相当于瀑布模型的反复增量完成。
特点:系统被分为许多子项目;高优先级的需求被首先完成;当一部分完成后,该部分的需求将被冻结。
V模型(V model)(为了测试)
描述:可看做是瀑布模型的扩展。阶段为:需求分析-概要设计-详细设计-软件编码-单元测试-集成测试-系统测试。
特点:适用于易被模块化的传统软件开发,开发和测试同时进行。
原型模型(Prototyping)(可迭代)
描述:产品原型仅模拟了最终产品的一部分,且可能完全不同。阶段为:确定基本需求-实现原型-复审-改进原型。
特点:软件设计者和开发者可从用户处得到反馈;客户可在软件开发过程中及时评价软件是否满足需求;总工程师可通过原型设计过程摸清软件架构,以及推算deadline可否满足。
螺旋模型(Spiral)(可迭代)
描述:螺旋模型是一个风险驱动模型,通过分析项目当前面临的风险来选择适当的开发模型(如瀑布模型等)。
特点:引入风险分析,使软件开发面临巨大风险时有机会停止;在每个迭代阶段构建原型以减小风险;适合大型昂贵系统开发。
敏捷开发(Agile development)
通过快速迭代和小规模的持续改进,快速适应变化。
要求:1. 强调交互 2. 不需要文档 3. 合作 4. 变化
适用于需求不稳定,快速开发(对高质量、高风险不适用)
二.软件配置管理
SCM(软件配置管理)
软件配置管理:追踪和控制软件的变化。 软件配置项:软件中发生变化的基本单元
VCS(版本控制系统)
本地版本控制系统:仓库存储在开发者本地及其,无法共享和合作。
集中式版本控制系统:仓库存储于独立的服务器,支持多开发者之间协作。
分布式版本控制系统:仓库存储于独立的服务器 + 每个开发者的本地机器。(如Git)
Git
工作区,即平时存放代码的地方。
暂存区,虚拟区域,无真实空间,用于临时存放改动。
本地仓库,安全存放数据的位置,这里有提交到所有版本的数据
远程仓库,托管代码的服务器,如Github
需要掌握根据Git文件的状态来判断处于哪一目录/区域中。
Object Graph
边 A -> B表示在版本B的基础上作变化形成了版本A(指向的对象是父对象)
除了最初的commit,每个commit都有一个指向父亲的指针
多个commit指向同一个父亲——分支
一个commit指向两个父亲——合并
Git中一个子对象只能有0,1,2个父对象,而一个父对象可以有多个子对象。
Git和传统版本控制工具的区别:Git存储的是变化后的文件,传统VCS存储版本之间的变化(行),很难创建分支。
Git一个文件可以存在在不同的版本中。
Git命令和版本图
git commit -a :把所有的change先add然后再commit
git fetch :从远程获取最新版本到本地,不会自动merge
git checkout -b:创建并切换分支
git remote add origin … :与远程仓库关联