过程与配置管理
1.传统的开发模型
两种基本类型:线性过程、迭代过程
1.1线性过程
1.1.1瀑布过程
特点:线性推进、整体推进、非迭代
优点:管理简单
缺点:无法适应需求增加/变化
1.1.2 增量过程
特点:线性推进、增量式(多个瀑布的串行)、非迭代
优点:比较容易适应需求的增加
1.1.3 v-model
V 模型可以看作瀑布模型的优化,它仍然是线性推进的,瀑布模型存在的问题大多在 V-model 中也存在。
每个开发阶段都有相应的测试对齐进行验证,但是测试与开发是串行而非并行进行的,也就是测试需要等开发完成后再开始。
1.1.4 原型过程
开发出来之后由用户试用/评审,发现问题反馈给开发者,开发者修改原有的实现,继续交给用户评审,循环往复这个过程,直到用户满意为止。重点在于在原型上持续不断地迭代发现用户变化的需求。
特点:迭代推进
优点:开发质量高
缺点:时间代价高
1.2 敏捷开发
敏捷开发,即通过快速迭代和小规模的持续改进,以快速适应变化。
敏捷宣言四个维度:
个体和互动高于流程和工具
工作的软件高于详尽的文档
客户合作高于合同谈判
响应变化高于遵循计划
敏捷 = 增量 + 迭代,每次迭代处理一个小规模增量。
2.软件配置管理和版本控制
2.1 SCM与VCS
软件配置管理:追踪和控制软件的变化。
软件配置项(SCI):软件中发生变化的最小单元。
基线:软件变化过程中的“稳定时刻”。
为了存储各配置项随时间变化的信息和基线信息,就有一个数据库来管理这些内容,即配置管理数据库==(CMDB)==。
VCS分为三种:
1.本地版本控制系统:仓库存储在本地开发系统,无法合作和共享;
2.集中式版本控制系统:仓库存储在独立的服务器上,支持多开发者之间的合作,但没办法抵抗服务器崩溃导致无法开发的风险;
3.分布式版本控制系统:仓库存储于在每个开发者的本地机器+独立的服务器。
2.2 Git
Git是一个分布式版本控制系统
一个 Git 仓库分为三个部分:
.git 目录:本地的 CMDB
工作目录:本地文件系统
暂存区:.git 目录中的一个文件,隔离工作目录和 Git 仓库
git是一个典型的分布式管理系统。其选用的数据结构是一张有向无环图,每次commit会在图上增加一个新的节点,并将HEAD指向这个节点。通常一个子节点有一个父节点,当一个父节点有多个子节点时说明创建了一个分支,而当一个子节点有多个父亲节点时说明进行了合并。
结点
一个 commit 存储一个树形结点。tree 中包含了数个 blob;每个 blob 是一个压缩了的仓库文件,不保存文件名信息。
对于每个文件的每个版本(或是不同文件名但相同内容的文件),Git 只会存储一个 blob,而允许多个 commit tree 指向同一个 blob。
一个 commit 中与之前相比未发生变化的文件,无需重复存储。文件未发生变化,则后续多个版本始终指向同一个 blob;文件发生变化了,存储两份不同的 blob,两个版本指向不同的 blob。
3. 软件构造的一般过程
3.1 代码评审
结对编程
走查
正式评审会议
自动化评审
3.2 性能分析
动态分析:执行程序并观察现象、收集数据、分析不足
Profiling:对代码的运行时状态和性能进行度量,发现代码中的潜在问题