第3章 软件构造过程与配置管理
目的:
软件开发的基本过程SDLC;传统的软件开发过程模型;敏捷开发XP;软件配置管理SCM;Git作为配置管理工具;(Design > Programming > Debug > Testing > Build > Release释放, 发布, 公布)广义的软件构造过程;Eclipse作为Java构造工具;软件构造各阶段的常见工具;(Build: Validate > Compile > Link > Test > Package > Install > Deploy)狭义的软件构造:build;常见的build工具
(广义的)软件构建的一般过程:设计→编程/重构 → 调试 → 测试 → 构建 → 发布
– 编程/重构
– 审查和静态代码分析
– 调试(转储和日志记录)和测试
– 动态代码分析/剖析
狭义的软件构建(Build)过程:验证→编译→链接→测试→包→安装→部署
– 构建系统:组件和过程
– 构建变体和构建语言
– 构建工具:Make、Ant、Maven、Gradle、Eclipse/IDEA/NetBeans
1软件开发生命周期(SDLC)(重点)
计划→分析→设计→实现→测试&整合→维护→计划
2传统的软件开发过程模型
- Two basic types:
– Linear 线性过程
– Iterative 迭代过程
- Existing models:
– Waterfall (Linear, non-iterative) 瀑布过程
– Incremental (non-iterative) 增量过程
– V-Model (for verification and validation) V字模型
– Prototyping (iterative) 原型过程
– Spiral (iterative) 螺旋模型
- Key quality considerations 选择合适的过程模型的依据:
–用户参与程度有多大?--适应变化的能力
–开发效率/管理复杂度
–开发出的软件的质量
瀑布过程:
- 线性推进•阶段划分清楚•整体推进•无迭代•管理简单•无法适应需求增加/变化
增量过程:
- 线性推进•增量式(多个瀑布的串行)(这不是并行???)•无迭代•比较容易适应需求的增加
V-model 代表一个开发过程,可以被认为是瀑布模型的扩展。
– 不是以线性方式向下移动,而是在编码阶段之后向上弯曲工艺步骤,以形成典型的 V 形。
– 展示开发生命周期的每个阶段与其相关的测试阶段之间的关系。
– 横轴和纵轴分别代表时间或项目完整性(从左到右)和抽象级别(最粗粒度的抽象)
原型设计(迭代)
好处:
– 软件设计者和实施者可以在项目早期从用户那里获得有价值的反馈。– 客户端可以比较制作的软件是否与软件规范相匹配,从而构建软件程序。– 它还允许软件工程师深入了解初始项目估算的准确性以及是否可以成功满足最后期限和里程碑。
在原上连续不断的迭代发现用户变化的需求
迭代:开发出来之后由用户试验/评价,发现问题反馈给给开发者,开发者修改原有的实现,继续维持用户验证。
循环往复这个过程,直到用户满意为止。
时间长高,但开发质量也高。
螺旋(迭代)
非常复杂的过程: •多轮迭代基本遵循瀑布模式 •每轮迭代有明确的目标,遵循“原型”过程,进行严格的风险分析,方可进入下一轮迭代
3敏捷开发
敏捷开发:通过快速迭代和小规模 的持续改进,以快速适应变化
Agile = 增量 + 迭代:每次迭代处理一个小规模增量
极限的用户参与 § 极限的小步骤迭代 § 极限的确认/验证
瀑布vs敏捷
eXtreme Programming (XP,极限编程)
Pair Programming:一台电脑两个人,一个看一个写
4 软件配置管理(SCM)和版本控制系统(VCS)
软件配置管理:追踪和控制软件的变化;SCM 是跟踪和控制软件变化的任务;SCM 实践包括修订控制和基线的建立。
配置项(CI)的生命周期:软件的任何组成部分(源代码、数据、文档、硬件、各种环境)都可能随着软件生命周期中的时间而更新。
软件配置项(SCI):软件中发生变化的基本单元(例如:文件)
基线:软件持续变化过程中的“稳定时刻”(例如:对外发布的版本)
VCS
仓库:即于SCM中的CMDB
工作拷贝:在开发者本地机器上的一份项目拷贝
文件:一个独立的配置项
版本Version or revision:在某个特定时间点的所有文件的共同状态
HEAD:程序员正在其上工作的版本
本地版本控制系统:仓库存储于开发者本地机器无法共享和协作
集中式版本控制系统:仓库存储于独立的服务器,支持多开发者之间的协作
分布式版本控制系统:仓库存储于独立的服务器+每个开发者的本地机器
5 Git as an example of SCM tool
每个commit指向一个父亲(commit提交)
多个 commit指向同一个父亲:分支
一个commit 指向两个父亲:合并
分支只是一个指向提交的名称
HEAD 指向当前提交。
– 我们需要记住我们在哪个分支上工作。所以 HEAD 指向当前分支,它指向当前提交
传统VCS存储版本之间的变化(行)
Git存储发生变化的文件(而非代码行),不变化的文件不重复存储
文件未发生变化,则后续多个版本始终指向同一个文件
文件发生变化了,存储两份不同的文件,两个版本指向不同的文件
总结
一般软件开发生命周期 (SDLC)
传统的软件过程模型
– 瀑布式、增量式、原型式、迭代式
敏捷开发
协作软件开发
软件配置管理(SCM)
Git 作为 SCM 工具
(广义的)软件构建的一般过程:设计→编程/重构 → 调试 → 测试 → 构建 → 发布
– 编程/重构
– 审查和静态代码分析
– 调试(转储和日志记录)和测试
– 动态代码分析/剖析
狭义的软件构建(Build)过程:验证→编译→链接→测试→包→安装→部署
– 构建系统:组件和过程
– 构建变体和构建语言
– 构建工具:Make、Ant、Maven、Gradle、Eclipse/IDEA/NetBeans
第3章 软件构造过程与配置管理
目的:
软件开发的基本过程SDLC;传统的软件开发过程模型;敏捷开发XP;软件配置管理SCM;Git作为配置管理工具;(Design > Programming > Debug > Testing > Build > Release释放, 发布, 公布)广义的软件构造过程;Eclipse作为Java构造工具;软件构造各阶段的常见工具;(Build: Validate > Compile > Link > Test > Package > Install > Deploy)狭义的软件构造:build;常见的build工具
(广义的)软件构建的一般过程:设计→编程/重构 → 调试 → 测试 → 构建 → 发布
– 编程/重构
– 审查和静态代码分析
– 调试(转储和日志记录)和测试
– 动态代码分析/剖析
狭义的软件构建(Build)过程:验证→编译→链接→测试→包→安装→部署
– 构建系统:组件和过程
– 构建变体和构建语言
– 构建工具:Make、Ant、Maven、Gradle、Eclipse/IDEA/NetBeans
1软件开发生命周期(SDLC)(重点)
计划→分析→设计→实现→测试&整合→维护→计划
2传统的软件开发过程模型
- Two basic types:
– Linear 线性过程
– Iterative 迭代过程
- Existing models:
– Waterfall (Linear, non-iterative) 瀑布过程
– Incremental (non-iterative) 增量过程
– V-Model (for verification and validation) V字模型
– Prototyping (iterative) 原型过程
– Spiral (iterative) 螺旋模型
- Key quality considerations 选择合适的过程模型的依据:
–用户参与程度有多大?--适应变化的能力
–开发效率/管理复杂度
–开发出的软件的质量
瀑布过程:
- 线性推进•阶段划分清楚•整体推进•无迭代•管理简单•无法适应需求增加/变化
增量过程:
- 线性推进•增量式(多个瀑布的串行)(这不是并行???)•无迭代•比较容易适应需求的增加
V-model 代表一个开发过程,可以被认为是瀑布模型的扩展。
– 不是以线性方式向下移动,而是在编码阶段之后向上弯曲工艺步骤,以形成典型的 V 形。
– 展示开发生命周期的每个阶段与其相关的测试阶段之间的关系。
– 横轴和纵轴分别代表时间或项目完整性(从左到右)和抽象级别(最粗粒度的抽象)
原型设计(迭代)
好处:
– 软件设计者和实施者可以在项目早期从用户那里获得有价值的反馈。– 客户端可以比较制作的软件是否与软件规范相匹配,从而构建软件程序。– 它还允许软件工程师深入了解初始项目估算的准确性以及是否可以成功满足最后期限和里程碑。
在原上连续不断的迭代发现用户变化的需求
迭代:开发出来之后由用户试验/评价,发现问题反馈给给开发者,开发者修改原有的实现,继续维持用户验证。
循环往复这个过程,直到用户满意为止。
时间长高,但开发质量也高。
螺旋(迭代)
非常复杂的过程: •多轮迭代基本遵循瀑布模式 •每轮迭代有明确的目标,遵循“原型”过程,进行严格的风险分析,方可进入下一轮迭代
3敏捷开发
敏捷开发:通过快速迭代和小规模 的持续改进,以快速适应变化
Agile = 增量 + 迭代:每次迭代处理一个小规模增量
极限的用户参与 § 极限的小步骤迭代 § 极限的确认/验证
瀑布vs敏捷
eXtreme Programming (XP,极限编程)
Pair Programming:一台电脑两个人,一个看一个写
4 软件配置管理(SCM)和版本控制系统(VCS)
软件配置管理:追踪和控制软件的变化;SCM 是跟踪和控制软件变化的任务;SCM 实践包括修订控制和基线的建立。
配置项(CI)的生命周期:软件的任何组成部分(源代码、数据、文档、硬件、各种环境)都可能随着软件生命周期中的时间而更新。
软件配置项(SCI):软件中发生变化的基本单元(例如:文件)
基线:软件持续变化过程中的“稳定时刻”(例如:对外发布的版本)
VCS
仓库:即于SCM中的CMDB
工作拷贝:在开发者本地机器上的一份项目拷贝
文件:一个独立的配置项
版本Version or revision:在某个特定时间点的所有文件的共同状态
HEAD:程序员正在其上工作的版本
本地版本控制系统:仓库存储于开发者本地机器无法共享和协作
集中式版本控制系统:仓库存储于独立的服务器,支持多开发者之间的协作
分布式版本控制系统:仓库存储于独立的服务器+每个开发者的本地机器
5 Git as an example of SCM tool
每个commit指向一个父亲(commit提交)
多个 commit指向同一个父亲:分支
一个commit 指向两个父亲:合并
分支只是一个指向提交的名称
HEAD 指向当前提交。
– 我们需要记住我们在哪个分支上工作。所以 HEAD 指向当前分支,它指向当前提交
传统VCS存储版本之间的变化(行)
Git存储发生变化的文件(而非代码行),不变化的文件不重复存储
文件未发生变化,则后续多个版本始终指向同一个文件
文件发生变化了,存储两份不同的文件,两个版本指向不同的文件
总结
一般软件开发生命周期 (SDLC)
传统的软件过程模型
– 瀑布式、增量式、原型式、迭代式
敏捷开发
协作软件开发
软件配置管理(SCM)
Git 作为 SCM 工具
(广义的)软件构建的一般过程:设计→编程/重构 → 调试 → 测试 → 构建 → 发布
– 编程/重构
– 审查和静态代码分析
– 调试(转储和日志记录)和测试
– 动态代码分析/剖析
狭义的软件构建(Build)过程:验证→编译→链接→测试→包→安装→部署
– 构建系统:组件和过程
– 构建变体和构建语言
– 构建工具:Make、Ant、Maven、Gradle、Eclipse/IDEA/NetBeans