第1章 软件工程学概述
1.1 软件危机
1.1.1 软件危机简介
软件危机: 指在计算机软件开发和维护过程中所遇到的一系列严重问题。
包含以下两个方面的问题
- 如何开发软件,以满足社会对软件日益增长的需求。
- 如何更有效地维护数量不断膨胀的已有软件。
1.1.2 产生软件危机的原因
- 软件是计算机的逻辑部件,缺乏“可见性”
- 软件规模庞大,程序复杂性指数速度上升
1.1.3
- 软件是程序、数据及文档的完整集合。
- 程序是能够完成预定功能和性能的可执行的指令序列。
- 数据是使程序能够适当地处理信息的数据结构。
- 文档是开发、使用和维护程序所需要的图文资料。
1.2 软件工程
1.2.1 软件工程简介
- 软件工程是指导计算机软件开发和维护的一门工程学科,该学科的目的是生产出能按期交付的、在预算范围内的、满足用户需求的、质量合格的软件产品。
1.2.2 软件工程的基本原理
- 用分阶段的生命周期计划严格管理。
- 坚持进行阶段评审。
- 实行严格的产品控制。
- 采用现代程序设计技术。
- 结果应能清楚地审查。
- 开发小组的人员应该少而精。
- 承认不断改进软件工程实践的必要性。
1.2.3 软件工程方法学
通常把在软件生命周期全过程中使用的一整套技术方法的集合称为方法学,也称为范型。
- 传统方法学(结构式范型)
- 采用结构化技术完成软件开发任务
- 把软件生命周期划分为若干阶段,顺序完成任务
- 开始结束都有严格标准,前一阶段的结束标准就是下一阶段的开始标准
- 每个阶段结束前要进行严格的技术审查和管理复查
- 开始结束都有严格标准,前一阶段的结束标准就是下一阶段的开始标准
- 把软件生命周期划分为若干阶段,顺序完成任务
- 面向对象方法学(面向对象范型)
- 用对象分解取代了传统方法的功能分解
- 把所有对象都划分成类
- 按照父类与子类,把若干类组织成层次结构的系统
- 对象彼此间仅能通过发送信息互相联系
- 按照父类与子类,把若干类组织成层次结构的系统
- 把所有对象都划分成类
1.3 软件生命周期
软件生命周期由软件定义、软件开发、运行维护(也称软件维护)3个时期组成。
-
软件定义时期
问题定义 -> 可行性研究 -> 需求分析
-
软件开发时期
总体设计 -> 详细设计 -> 编码和单元测试 -> 综合测试
-
运行维护时期
通过必要维护活动使系统持久满足用户需求。
1.4 软件过程
1.4.1 瀑布模型
瀑布模型图:
特点:
- 阶段具有顺序性和依赖性;
- 推迟实现特点;
- 质量保证观点(每个阶段必须提交文档,每阶段结束前对文档评审);
带反馈环的瀑布模型图:
优点:
- 提高软件质量,降低维护成本,缓解软件危机。
缺点:
- 模型缺乏灵活性,无法解决需求不明确问题。用户不经过实践提出完整准确需求不切实际。
1.4.2 快速原型模型
快速建立反映用户主要需求的原型系统,反复由用户评价修正需求,开发出最终产品。
快速原型模型图:
优点:
- 确定需求上优于瀑布模型(通过原型与用户交互);
- 提供学习手段,通过开发原型和演示原型对开发者和使用者了解系统的积极作用;
- 有的软件原型可以成为最终产品的一部分;
缺点:
- 快速建立的系统结构加连续修改可能导致产品质量底下
- 原型系统的内部结构可能不好
1.4.3 增量模型
开发软件时将软件产品作一系列增量构件设计、编码、集成和测试。(各构件并行开发,分批向用户提交产品)
增量模型图:
优点:
- 较短时间向用户提交可完成有用工作产品;
- 用户有充裕时间学习适应产品;
- 软件结构必须开放,方便向现有产品加入新构件;
缺点:
- 做到第三个优点比较困难
1.4.4 螺旋模型
加入风险分析,常指导大型软件项目。
螺旋模型图:
优点:
- 大型软件开发项目有较好的风险控制
缺点:
- 需要风险评估的经验;
- 契约开发通常需要事先指定过程模型和发布产品;
- 普及不如前述模型;
1.4.5 喷泉模型
面向对象生命周期模型,体现迭代和无缝特性。
迭代: 求精,系统某部分常呗重复工作多次,相关功能在每次迭代中逐渐加入演进系统。
无缝: 分析、设计、编码各阶段间不存在明显边界。
喷泉模型图:
优点:
- 无缝,可同步开发,提高开发效率,节省开发时间,适应面向对象软件。
缺点:
- 可能随时加各种信息、需求与资料,需严格管理文档,审核的难度加大。