软件工程 软件工程学概论
替具有另一种文化背景的人
软件 = 知识 + 程序 + 数据 + 文档
1.2.2软件工程的基本原理(I)
Boehm于1983年提出: 1. 用分阶段的生命周期计划严格管理 2. 坚持进行阶段评审 3. 实行严格的产品控制 4. 采用现代程序设计技术 5. 结果应能清楚地审查 6. 开发小组的人员应该少而精 7. 承认不断改进软件工程实践的必要性
1.2.3 软件工程方法学
➢ 软件工程包括技术和管理两方面的内容
✓ 管理—— 对 人、财、物的合理使用和配置 ✓ 技术—— 软件开发中采用的方法、过程、工具
➢ 软件工程方法学:
通常把在软件生命周期全过程中,使用的一整套技术 方法的集合,称为方法学(Methodology),也称 为范型(Paradigm)。
几个软件危机的案例
1.1.2 产生软件危机原因
➢ 两个主要原因:
✓ 与软件本身的特点有关, ✓ 和软件开发与维护的方法不正确有关。
1.1.3 消除软件危机的途径
1. 消除“软件就是程序”的错误观念
软件=程序+文档+数据
2. 软件开发应该是一种组织良好、管理严密、各类人 员协同配合、共同完成的工程项目。非个人英雄主 义
➢ 需求经常变化的软件开发 ➢ 市场急需而开发人员和资金不能在设定的市场期限之
前实现一个完善的产品的软件开发
➢ 能有计划地管理技术风险,如早期增量版本中,避免 采用尚未成熟的技术
增量模型
在软件开发过程中,必须及时识别和分析风险, 并且采取适当措施,以消除或减少风险的危害。
螺旋模型
➢ B.Boehm于1988年提出 ➢ 使用原型等技术方法来降低风险 ➢ 螺旋模型沿着螺线旋转,在四个象限上分别表达四个
1.1.1 软件危机介绍
➢ 什么是软件危机?
在计算机软件的开发和维护过程中, 所遇到的一系列严重问题。
这些问题绝不仅仅是不能正常运行的软件才具有的, 实际上,几乎所有软件都不同程度地存在这些问题。
➢ 包含两方面的问题: 如何开发软件,以满足对软件日益增长的需求; 如何维护软件,数量不断膨胀。
软件危机表现
软件工程方法学3个要素
➢ 方法 完成软件开发的各项任务的技术方法, 回答“怎样做”的问题;
➢ 工具 为运用方法,而提供的自动的或半自动的 软件工程支撑环境;
➢ 过程 为了获得高质量的软件,所需要完成的一系列任务的 框架,它规定了完成各项任务的工作步骤。
软件工程方法学思想
1. 传统方法学 2. 面向对象方法学。
1. 开发成本和进度难以估算和控制,大大超过预期 2. 用户对已完成的软件不满意,需求分析不够充分 3. 软件产品的质量难以保证 4. 软件维护困难
➢ 难以改正错误 ➢ 难以增加新功能
5. 软件通常没有合适的文档资料 6. 软件成本在计算机系统总成本中比例逐年上升 7. 软件开发生产率提高的速度,跟不上计算机普及速度。
方面的活动,即:
➢ 制定计划:确定软件目标,选定实施方案,弄清项目开发的 限制条件
➢ 风险分析:评价所选的方案,识别风险,消除风险 ➢ 工程实施:实施软件开发,验证工作产品 ➢ 客户评估:评价开发工作,提出修正建议
1.4.5 喷泉模型
➢ 喷泉模型体现了面向对 象软件开发过程,迭代 和无缝的特性,图中代 表不同阶段的圆圈相互 重叠,表示两个活动之 间存在交迭。
1.1 软件危机
软件危机介绍 产生危机的原因 消除危机的途径
1.2 软件工程 1.3 软件生命周期 1.4 软件过程
1.1 软件危机
➢ 20世纪60年代中期软件需8年北大西洋公约组织的计算机专家召开国 际会议,讨论软件危机问题,首次提出软件工 程概念
1.4.6 RUP
经验证的、最有效的软件开发经验,
称为最佳实践:
1. 迭代式开发 2. 管理需求 3. 使用基于构件的体系结构 4. 可视化建模 5. 验证软件质量 6. 控制软件变更
•渐进的认识 •需求会不断变化 •提高重用 •更易理解沟通 •全程质保 •确保迭代成功
RUP软件开发生命周期
4个连续工作阶段
3. 使用实践中总结出来的成功的技术和方法 4. 开发和使用更好的软件工具。
思考问题
➢ 只要是编程高手,不懂软件工程,也能编出很 好的软件?
➢ 只要一套好的软件工程书籍,就可以解决软件 开发过程的任何问题?
➢ 只要有最好的开发工具、就能做出优秀的软件? ➢ 软件开发进度慢于计划,增加程序员来解决? ➢ 软件运行较慢,换一台机器?换一种算法?
瀑布、原型、增量、螺旋、喷泉 RUP XP MSF
1.4.3 增量模型
➢ 将软件的开发过程,分成若干个日程时间交错的线性 序列,每个线性序列,产生软件的一个可发布的“增 量”版本,后一个版本是对前一版本的修改和补充, 重复增量发布的过程,直至产生最终的完善产品。
➢ 强调每一个增量都发布一个可运行的产品 ➢ 特别适用于:
目录
1.1 软件危机 1.2 软件工程
1.2.1 软件工程定义 1.2.2 软件工程原理 1.2.3 软件工程方法学
1.3 软件生命周期 1.4 软件过程
软件工程的本质特性
1. 软件工程关注于大型程序/系统的构造 2. 软件工程的中心课题是控制复杂性
逻辑—>文档 分而治之 可管理
3. 软件经常变化 4. 开发软件的效率非常重要 5. 和谐地合作是开发软件的关键 6. 软件必须有效地支持它的用户 7. 在软件工程领域中,是由具有一种文化背景的人,
目录
1.1 软件危机 1.2 软件工程 1.3 软件生命周期
1.3.1 软件定义 1.3.2 软件开发 1.3.3 软件维护
1.4 软件过程
1.3 软件生命周期
目录
1.1 软件危机 1.2 软件工程 1.3 软件生命周期 1.4 软件过程
✓ 什么是软件过程 ✓ 软件开发模型/过程模型/软件工程范型
核心过 程工作 流程
核心支 持工作 流程
1.4.7 敏捷过程与极限编程(I)
敏捷过程
团队高效工作、快速响应变化
开发宣言
1. 个体和交互 胜过 过程和工具 2. 可以工作的软件 胜过 面面俱到的文档 3. 客户合作 胜过 合同谈判 4. 响应变化 胜过 遵循计划