软件开发的生命周期
从0到1 从无到有
从1到n 从有到好
传统软件开发的过程模型
两个基本类型:线性过程(Linear)、迭代过程(Iterative)
现有模型:
瀑布过程(Waterfall)
增量过程(Incremental)
V字模型(V-Model)
原型过程(Prototyping)
螺旋模型(Spiral)
选择合适的过程模型的依据:
用户参与度(适应变化的能力)
开发效率(管理复杂度)
开发出的软件的质量
瀑布过程
特点:
- 线性推进,整体推进
- 阶段划分清楚
- 管理简单
- 无法适应需求变化
- 无迭代
增量过程
特点:
- 线性推进
- 无迭代
- 比较容易适应需求的增加
- 增量式(多个瀑布串行)
V字模型
特点:
- 瀑布过程的拓展
原型过程
迭代过程,开发之后由用户试用、评审,发现问题反馈给开发者,开发者修改原有实现再交给用户评审。以上过程循环往复,直至用户满意为止。
时间代价高,但开发质量也高
螺旋模型
敏捷开发:
通过快速迭代和小规模的持续改进,以适应快速变化
极限的用户参与
极限的小步骤迭代
极限的确认、验证
软件控制管理和版本控制系统
软件配置管理:追踪和控制软件的变化(核心:版本控制和基线的确立)
软件配置项:软件中发生变化的基本单元(eg:文件)
基线:软件持续变化过程中的“稳定时刻”(对外发布的版本)
配置管理数据库(CMDB):存储软件的各配置项随时间发生变化的信息+基线
版本:为软件的任一特定时刻(Moment)的形态指派一个唯一的编号,作为“身份标识”(意义:1.在多个开发者之间共享和协作 2.记录开发者的动作,便于审计)
本地版本控制系统:仓库存储于开发者本地机器,无法共享和协作
集中式版本控制系统:仓库存储于独立的服务器,支持多开发者之间的协作
分布式版本控制系统:仓库存储于独立的服务器+每个开发者的本地机器(git)
Git——一种分布式版本控制工具
git的发展历史:
2005年,开发 BitKeeper 的商业公司同 Linux 内核开源社区的合作关系结束,他们收回了 Linux 内核社区免费使用 BitKeeper 的权利。为了Linux Kernel的持续开发,Linux的缔造者Linus Torvalds与众多Linux开源社区的开发者基于使用BitKeeper时的经验教训进行了Git的设计和开发。
初版Git就发行于2005年,随着时间的发展,Git日臻成熟完善。如今它依然是世界上最先进的分布式版本控制系统。
组成:
典型的Git仓库由以下三部分组成:
本地的CMDB(Configuration Management Database,配置管理数据库)
工作目录
暂存区
本地的CMDB存在于Git仓库中.git目录(通常是隐藏的)下,存储着所有的版本控制数据;
工作目录即本地文件系统,存储Git仓库中的文件;
暂存区隔离工作目录和Git仓库,被称为区域但其实只是在文件上打标记来区分(Git仓库的文件状态)。
文件状态:
每个文件处于以下三种状态之一:
- 已修改(Modified)
- 已暂存(Staged)
- 已提交(Committed)
三者可进行转化
Git版本管理
版本演化关系图(Object Graph)是一个有向无环图,体现了一个Git仓库的历史
其中,我们要注意一下:
HEAD指向当前commit对象
分支(branch)只是一个指向commit对象的名称
除去初始commit外,每个commit对象指向一个父对象
一个commit对象最多有两个父对象——通常只有一个,合并(Merge)操作才会有两个
多个commit对象可以指向同一个父对象——创建分支(branch)后产生
Git版本变化的存储方法
传统的版本控制工具存储版本之间变化的代码行,而Git存储版本之间变化的文件。这样做方便了使用者创建不同的分支,但缺点在于如果要查看两个版本间的差异则需要进行比较处理。
eg:
常用命令:
本地Git仓库部分:
获取Git仓库:
1.本地初始化创建 git init
2.克隆现有的仓库:git clone <url>(从url克隆同名仓库至当前目录)
暂存和修改
1.git add. 将当前目录下的所有已修改文件添加到暂存区
2.git add * 将仓库所有已修改文件添加至暂存区
3.git add [filename] 将指定文件添加到暂存区
4. git rm [filename] 同时删除暂存区和本地文件
5. git rm --cached[filename] 从暂存区删除但不删本地文件
撤销操作
1.git commit --amend 重新提交上次提交(多用于添加漏掉的文件)
2.git checkout -- <file> 撤销对文件所做的修改
3.git reset HEAD <file>撤销文件暂存
查看
1.git status 查看未暂存,已暂存的修改,如果关联了远程库还包含本地库和远程库的比较
2.git diff 查看未暂存文件
3.git diff --cached 查看已暂存文件跟上次提交之间的变化
4.git branch -a 查看所有分支
5.git brance -v 查看每一个分支的最后一次提交
分支的建立和合并
1.git checkout -b [branch] 新建一个分支,并切换到此分支
2.git branch [branchname] 新建一个分支,但仍停留在当前分支
3.git branch –d [branch] 删除指定分支
4.git checkout [branchname] 切换到指定分支,并更新工作区
5.git merge [branch] 合并分支到当前分支
6. git branch -m old_name new_name 修改分支名
远程git仓库
添加,查看远程仓库
git remote 查看远程仓库(使用-v参数会显示简写和地址)
git remote add<shortname><url> 添加远程仓库
Git支持多个远程仓库关联同一个本地仓库,使用git clone命令实际上自动添加了一个远程仓库。
git fetch <remote>
访问远程仓库,从中拉取所有你还没有的数据,而且会自动添加此远程仓库
git pull
从最初克隆的服务器上抓取并自动尝试合并到当前所在的分支
git push <remote> <branch>
推送到远程仓库,若未指定remote和branch则推送至默认远程仓库的默认分支
软件构造的普遍过程
1.语言:
从用途上划分:编程语言,建模语言,配置语言,构建语言
从形态上划分:基于语言学的构造语言,基于数字的结构化构造语言,基于图形的可视化构造语言
IDE 集成开发环境
UML 统一模拟语言(unified modeling language)
2.该部分剩余请自行翻看ppt
初步理解build
该部分请自行翻看ppt
p114