1软件工程概述
1.1 软件危机
1.1.1 软件危机的介绍
软件危机的定义
软件危机是指在计算机软件的开发和维护过程中所遇到的一系列严重问题
软件危机的典型表现
- 对软件开发成本和进度的估计常常很不准确
- 用户对“已完成的”软件系统不满意的现象经常发生
- 软件产品的质量往往靠不住
- 软件常常是不可维护的
- 软件通常没有适当的文档资料
- 软件成本在计算机系统总成本中所占的比例逐年上升
- 软件开发生产率提高的速度,远远跟不上计算机应用的迅速普及深入的趋势
1.1.2 产生软件危机的原因
一方面与软件本身的特点有关,另一方面也和软件开发和维护的方法不正确有关
1.1.3 消除软件危机的途径
软件的定义
软件是程序、数据及相关文档的完整集合
软件的特性
- 复杂性
- 一致性
- 可变性
- 不可见性
1.2 软件工程
1.2.1 软件工程的介绍
软件工程的定义
软件工程是指导计算机软件开发和维护的一门工程学科
软件工程的本质特性
- 软件工程关注于大型程序的构造
- 软件工程的中心课题是控制复杂性
- 软件经常变化
- 开发软件的效率非常重要
- 和谐地合作是开发软件的关键
- 软件必须有效地支持它的用户
- 在软件工程领域中通常由具有一种文化背景的人替另一种具有文化背景的人创造产品
1.2.2 软件工程的基本原理
7条基本原理
- 用分阶段的生命周期计划严格管理
- 坚持进行阶段评审
- 实行严格的产品控制
- 采用现代程序设计技术
- 结果应能清楚地审查
- 开发小组的人员应该少而精
- 承认不断改进软件工程实践的必要性
1.2.3 软件工程方法学
定义
把软件生命周期全过程中使用的一整套技术方法的集合成为方法学,也成为范型
软件工程方法学3要素
- 方法
- 工具
- 过程
最广泛的软件工程方法学分类
- 传统方法学
- 面向对象方法学
##1.3 软件生命周期
组成
- 软件定义
- 软件开发
- 运行维护
生命周期阶段
- 问题定义
- 可行性研究
- 需求分析
- 总体设计
- 详细设计
- 编码和单元测试
- 综合测试
- 软件维护
1.4 软件过程
1.4.1 瀑布模型
模型特点
- 阶段间具有顺序性和依赖性
- 推迟实现的观点
- 质量保证的观点
优点
- 可强迫开发人员采用规范的方法
- 严格规定每个阶段必须提交的文档
- 每个阶段交出的产品都经过质量保证小组的验证
缺点
- 瀑布模型由文档驱动
1.4.2 快速原型(Rapid application)
原型被建造仅是为了定义需求,之后就被抛弃了(或至少部分被抛弃)
分类
- 抛弃型原型
- 进化型原型
优点
- 适用于用户驱动的系统
缺点
- 用户有时会误解原型的角色
- 缺少项目标准,进化原型方法有点像编码修正
- 缺少控制,用户可能不断提出新要求,因而迭代周期很难控制
- 为了尽快实现原型 采用不合适的技术 运行效率可能会受到影响
1.4.3 增量模型
增量模型侧重于每个增量都可提交一个可以运行的产品
优点
- 整个产品被分解成若干个构件逐步交付 用户可以不断地看到所开发软件可运行的中间版本
- 将早期增量作为原型有助于明确后期增量的需求
- 降低开发风险
- 重要功能首先被交付 得到更多测试
缺点
- 需要软件具备开放式的体系结构
- 需求难以在增量实现之前详细定义,因此增量与需求的准确映射以及所有增量的有效集成可能比较困难
- 容易退化为边做边改方式,是软件过程的控制失去整体性
软件开发的基本策略
- 分而治之
- 逐步演进
1.4.4 螺旋模型(The Spiral)
特点
- 在瀑布模型的每一个开发阶段前引入非常严格的风险识别、分析和控制,
- 综合原型实现模型的迭代特征和顺应模型的优点
- 增加了风险分析
- 分为4个步骤
优点
- 强调严格的全过程风险管理
- 强调各开发阶段的质量
- 提供机会检讨项目是否有价值继续下去
缺点
- 对风险管理的技能水平提出了很高的要求
- 需要人员资金和时间的投入比较复杂 需要相当的风险评估技术
1.4.5 敏捷过程与极限编程(XP)
产生背景
####敏 捷开发过程的价值观
- 个体和交互胜过过程和工具
- 可以工作的软件胜过面面俱到的文档
- 客户合作胜过合同谈判
- 响应变化胜过遵循计划
敏捷开发特点
高度迭代,有周期性,能够及时、持续的相应客户的频繁反馈`
用户故事
- 用户故事在软件开发中被作为描述需求的一种表达形式
XP核心实践:持续集成(CI)
敏捷过程与Scrum
- Scrum是迭代式增量软件开发过程 一个短的迭代周期成为一个Sprint 建议长度是2到4周
- 使用产品Backlog来管理产品的需求
Scrum流程
Scrum优点
快速迭代 对于快速发展的互联网产品来说是十分必要的
Scrum特点
- 团队自我管理
- 以sprint为迭代周期进行开发
- 以一系列“产品Backlog(待处理任务)”记录了产品需求
- 没有特定的工程实践规则