第一章 软件工程的范畴
软件工程
软件工程是一门学科 目的是生产出没有错误的软件 以工程学的思维去进行软件设计、软件开发、软件软件运维的一种方法论,按时并且在预算范围内交付,满足用户的需求。
软件危机
软件危机指软件产品的质量低得通常不能接受,并且不能够满足交付和预算限制。
传统的生命周期模型的六个阶段
-
需求阶段
对概念进行细化,提取客户的需求
-
分析阶段
分析客户的需求并以规格说明文档的形式给出
-
设计阶段
- 结构设计:将整体分成各个模块
- 详细设计:设计每一个具体的模块
-
实现阶段
对各个部分独立进行代码编写和测试
-
交付后维护
- 纠错型性维护
- 增强性维护
- 完善性维护
- 适应性维护
-
退役
交付后维护的重要性
维护成本远大于开发成本
三个为什么
上述三个阶段在软件开发的过程中是贯穿始终的,因此不能单独拿出来作为一个独立的阶段而存在
面向对象的范型
面向对象的生命周期模型
- 需求工作流
- 面向对象分析工作流
- 面向对象设计工作流
- 面向对象实现工作流
- 交付后维护
- 退役
和传统范型的主要区别
在面向对象分析工作流中 面向对象的设计方法需要确定产品要做什么的前提之下还需要进行类的提取
第二章 软件生命周期模型
核心工作流
- 需求工作流
- 分析工作流
- 设计工作流
- 实现工作流
- 测试工作流
核心概念
迭代-递增、米勒法则
各种生命周期模型的比较
生命周期模型 | 长处 | 短处 |
---|---|---|
进化树模型 | 与迭代-递增模型等价,与现实世界软件开发最接近的模型 | |
迭代-递增生命周期模型 | 与现实世界软件开发最接近的模型,蕴含统一过程和方法 | |
编码-修补生命周期模型 | 适用于不需要任何维护的小程序 | 不适合于重要的软件程序的开发 |
瀑布生命周期模型 | 纪律性强的方法,文档驱动 | 交付后的产品可能不符合客户的要求 |
快速原型开发生命周期模型 | 确保交付后的产品符合客户的要求 | 还没有证明无懈可击 |
开源生命周期模型 | 在少量实例中工作的很好 | 实用性有限 |
敏捷过程 | 客户的需求模糊时能够很好的工作 | 只适用于小型项目 |
同步-稳定生命周期模型 | 能够满足未来用户的哎哟求,确保各个组件能够成功的集成 | 出了微软公司,还没有广泛的应用 |
螺旋生命周期模型 | 风险驱动 | 只能用于大型的内部产品,开发者必须精通风险分析和风险排除 |
第三章 软件过程
软件过程的定义
软件过程是我们生产软件的方式。它包括方法学和隐含的生命周期模型,技术、所使用的工具,以及建造这些软件的人。
核心工作流
- 需求流
- 分析流
- 设计流
- 实现流
- 测试流
需求流
目标是让开发组织确定客户的需求
分析流
分析和提取需求,让需求以一种更为精确的方式进行描述,解决语言中的可能的歧义性问题。
设计流
细化分析流的制品,直至材料处于程序员可实现的形式。
实现流
用选择的语言实现目标软件产品
测试流
- 每个开发者和维护者都要负责确保自己的工作是正确的。
- 一旦软件人员确信要给制品是正确的,就将它交个软件质量保证小组进行独立测试。
- 对所有制品都至关重要的一个特性是可追踪性
统一过程的各个阶段
-
开始阶段
- 第一次递增 目标是决定是否值得开发目标软件产品 明确提出软件产品是否经济上可行
-
细化阶段
- 第二次递增 细化最初需求 细化体系结构,监控风险和细化它们的属性,细化商业案例,以及生成软件项目管理计划
-
构建阶段
- 第三次递增 生产软件产品的第一个可行工作版本
-
转换阶段
- 第四次递增 确保客户的需求切实得到满足