软件工程与项目管理案例教程 第1章 软件危机与软件工程

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
16
(4)瀑布模型的优点
在瀑布模型中,各个阶段之间的关系清晰、易懂。
该模型原理简单,易于掌握;每个阶段中都有验证和确 认环节,以便进行质量管理;
在下一阶段开始前,该模型会通过项目管理来控制本阶 段工作的完成。
(5)瀑布模型的缺点
瀑布模型中并没有引入工程计划、进度控制和风险管理 等措施。
缺乏灵活性,特别是在阶段反馈和工作修改上还不是很 灵活。 没有很好的解决软件需求定义不确切这一问题,而该问 题恰恰是导致软件开发失败的一个重要原因。
17
演化模型 (1) 演化模型概述
演化模型是瀑布模型的一种演变。演化模型主要针对事 先不能完整定义需求的软件开发。
(2) 演化模型的工作过程
用户给出软件的核心需求,开发人员根据需求进行问题 定义和分析; 经过设计、编码和测试,开发核心系统交付使用; 用户试用软件,并对其进行评价;
根据用户反馈意见,开发人员实施新一轮的开发活动;
22
(3) 原型模型的工作过程
软件开发者和用户以较小的代价,快速确定用户最基 本的需求,开发者对核心需求进行抽取、精简和描述。
然后,开发者在较短的时间内,采用一些适当的开发 工具设计一个可以运行的原型系统,交付用户试用;
用户根据试用情况,提出修改意见; 开发者采用迭代法或者增量法反复修改、完善产品的 功能,最终形成令用户满意的完整的软件产品。
第1章 软件危机与软件工程
1
前言
• 如同盖一座大楼时所做的工作不仅仅是砌砖和垒墙一样, 软件开发过程所涉及到的环节和活动也不仅仅是编写代码 这样简单。比如:在编码之前,我们要了解编写的程序是 为了解决什么样的问题,即实现何种功能;对软件的系统 要进行规划、架构工作;编码完成之后,要采用特定的方 法和途径来减少软件系统中存在的错误;软件产品交付给 用户后,还要对软件系统进行维护。另外,在这个过程中, 要保证软件产品的质量。 • 软件工程就是一门将所有与软件开发相关的活动归纳在一 起,并形成系统的方法和理论的学科。 • 在第一章中,我们就来学习什么是软件,什么是软件工程, 以及如何运用软件工程的理论和方法来开发软件。
5
2、软件的表现 (1) 软件开发费用和进度难以控制; (2) 软件不能满足用户的需求 ; (3) 软件可靠性差 ; (4) 软件产品缺乏相应的文档资料; (5) 软件可维护性差 ; (6) 软件开发的速度与计算机应用的普及速度不 相适应;
6
3、软件危机的原因 (1) 软件危机的一个重要成因是其本身的复杂性; 软件是人智力活动的成果。在整个软件系统完成之 前,软件开发过程的进度难以衡量和控制,软件质量也 较难评价。 (2) 软件危机与软件开发和维护的技术方法有关; 软件的开发方法不恰当,开发技术落后 - 忽略了开发人员和用户之间的矛盾 - 缺乏有力的开发管理方法,有序的工作流程 - 软件从业人员的技术水平停滞不前 开发过程缺乏统一的规范; 软件开发管理困难而复杂 ; 开发工具落后,生产率提高缓慢;
23
24
(4) 原型模型的优点 增强了开发者和用户之间的交流,用户有更多机会参与 到开发过程中去; 用户可以尽早的接触和使用产品的原型,有利于今后的 产品使用和维护。 对于系统规模弹性较大的软件产品,原型模型可以降低 其开发风险。 原型模型降低了软件开发费用,缩短了软件开发时间。
(3) 常见的开发模型 瀑布模型、演化模型、原型模型、螺旋模型等。
13
瀑布模型
(1) 瀑布模型概述
瀑布模型是由Winston W. Royce于1970年提出的一种 软件开发模型。 该模型将整个系统开发过程划分成若干个线性的、顺序 的阶段,每个阶段既相互区别,又彼此联系。
(2) 瀑布模型的工作原理
27
制定计划:确定软件目标,选定实施方案,弄清项目开 发的限制条件; 风险分析:分析评估所选方案,考虑如何识别和消除 风险; 实施开发:实施软件开发; 客户评价:评价软件功能和性能,提出修改建议,制 定下一步计划。
28
(3) 螺旋模型的工作过程 每个阶段首先从左上象限开始,确定该阶段的目标, 为完成该目标选定合适的方案。 进入风险分析活动后,在第一步的基础上,对各个方 案潜在的风险进行识别。如果风险不能被排除,则终止 该方案。 如果风险可以被排除,则进入右下象限,具体实施软 件开发。 评价该阶段的工作成果,并进行下一个阶段的工作计 划。 开发从原点开始,螺旋线每旋转一周,都要经历同样 的四个活动,而每一个阶段所开发出的产品都较上一 个阶段更加完善。
21
原型模型
(1) 原型模型的产生背景
原型模型是为了解决软件系统需求不能一次完整的提出, 以及用户经常变更需求等一系列影响软件开发效率的问 题
(2) 什么是原型?
原型,原本是工程设计中的概念,指的是样品或者试 制品,其目的是为了模拟某种产品的原始模型。
软件工程中的“原型”,是指系统或者软件最终产品 的一个早期可运行的版本;是在较短工期和较少成本下, 生产的能够反映最终产品的重要特性的样品。
12
3、软件开发的几个模型
(1) 软件开发模型 “软件开发模型”(Software Development Model),用 来描述软件开发各个阶段之间的关系,以及说明和表示复 杂的软件开发过程。 (2) 软件开发模型的作用 给出软件开发活动中各阶段之间的关系。 清晰、直观的表达软件开发全过程, 明确的规定要完成的主要活动和任务, 是软件项目工作的基础。
2
本章要点 :
什么是软件危机
软件危机的表现及其产生原因
软件工程的基本原理 软件生命周期与软件生命周期模型 项目管理与软件项目管理 影响软件项目成功的因素
3
§1.1 软件危机
1、软件危机
(1) 早期软件的特点(20世纪60年代以前)
使用机器代码或汇编语言编写软件
软件的规模比较小
软件的编写者和使用者是同一人,
29
(4) 螺旋模型的特点
每一个周期的产品都较前一周期的产品更细化更完善。 螺旋模型强调风险分析。整个开发过程的主要风险都 得到识别和控制该模型特别适用于规模大,风险高的软 件项目。 用户可以有更多机会参与到开发过程中,有助于提供 关键决策。
30
4、软件生命周期
(1) 软件生命周期
又称作软件生存周期、系统开发生命周期,是指从提 出开发软件产品开始,直到软件报废为止的全过程。
26
螺旋模型
(1) 螺旋模型概述 是Barry Boehm在1988年所发表的一种软件开发模型, 它是瀑布模型和演化模型的结合体。 不仅体现了两个模型的优点,而且还强调了其他模型 中所缺少的风险分析。 (2) 四类活动 螺旋模型将开发过程划分为四类活动:制定计划、风险分 析、实施开发和客户评价
瀑布模型将软件生命周期划分为6个阶段,各个阶段之 间如同瀑布流水,自上而下,逐级下落,形成相互衔接 的固定次序。 每一个阶段的工作都以上一个阶段工作的结果为依据, 同时现阶段的工作也为下一个阶段的工作提供前提和基 14 础。
15
(3)瀑布模型的特点 前一阶段的工作结果作为输入传送给当前阶段, 当前阶段的工作根据该输入来开展。 当前阶段的工作结果需要进行评审和验证。 若该结果验证通过,方可作为下一个阶段的输入, 软件生命周期的执行转入下一个阶段。若验证不通过, 则返回到前一阶段进行错误分析和修改。 在当前阶段的工作未完成前,不允许开展下一个 阶段的工作。 瀑布模型中各阶段活动结束后,都要进行严格的 验证和评审,不允许出现未经审核就进行下一阶段活 动的工作方式。
(2)软件生命周期的三个阶段:
① 软件的定义
② 软件的开发 ③ 软件的维护
31
5、软件工程的目标
目标是在一定的成本和进度下,生产具有正确性、 可靠性、容错性、易用性、灵活性、可扩充性、 可理解性、可维护性的软件产品;
20
(4) 演化模型的缺点
需求定义不是一次完成的,若开发人员对整个软 件系统的需求没有一个完整的定义,会破坏软件结构 设计的完整性和一致性,影响软件质量。 生产过程中如果缺乏有效的过程管理、协调, “演化模型”可能会退化成 “试验-出错-修改-试验出错-修改”模式; 初期就生产出可见的阶段性产品,会令开发者盲目 乐观, 如果用户接触到开发过程中未经测试的软件,会给 开发人员和用户带来负面影响;
25
(5) 原型模型的缺点 开发者对待开发软件应用领域缺乏了解,在分析原型需 求时,不能正确定义系统核心特性,导致设计出不能真 正体现软件主要功能的“样品”。 原型模型过于“模式化”,阻碍开发人员的创新和突破。 用户不断提出修改意见,导致开发者注重修改原型, 而忽略对系统主体功能的开发。 频繁更新相关文档资料,容易遗漏,影响文档资料的 一致性与完整性。
软件产品除了源代码清单外,几乎没有其他文档 资料
软件开发方式随意,采用“手工作坊”的开发方 式Βιβλιοθήκη Baidu
4
(2) 软件危机的产生 • 60年代中后期,软件开发需求急剧增长; • 高级语言开始出现,软件系统的规模越来越大, 复杂程度越来越高,软件数量急剧膨胀; • “手工作坊”式的单打独斗的软件生产方式已经 不能够适应日益增长的软件需求; • 软件供求关系严重失调,最终形成了不可调和的 尖锐矛盾,软件危机开始爆发。 (3) 软件危机的定义 “手工作坊”式的生产方式无法满足迅速增长的计算 机软件需求,从而导致了软件开发和维护过程中的 一系列严重问题,这一现象叫做软件危机 (Software Crisis)。
2、软件工程的范畴 软件开发方法学 软件开发技术 软件工具 软件工程环境
软件管理学 软件工程管理 软件经济学 软件度量学
10
(1) 软件开发方法学
指导软件开发的某种标准规程,它告诉开发人员“什么时 候做以及怎样做”
(2) 软件工具
辅助和支持软件开发全过程的一系列软件。从定义、分析、 设计、编码、测试、归档和管理等各方面,提供各种帮助 的一类软件。
再次交付用户试用。周而复始。
18
19
(3) 演化模型的优点
早期就可以快速的生产出可以运行的软件;
开发过程灵活,当需求或者目标改变时,可以及时 的调整软件实施方案;
有助于在早期进行软件测试、进度控制、缺陷跟踪 和文档管理,有利于平衡整个开发过程的负荷; 在每个迭代过程中,易于捕获风险信息和收集风险 数据; 开发过程中的经验教训能及时的反馈应用于下一个 循环过程中,从而提高软件质量和生产率;
7
4、软件危机的解决途径
1968年,北大西洋公约组织成员国召开会议,讨 论软件危机问题,并共同商讨和制定缓解或解决 “软件危机”的对策。 第一次提出了“软件工程”(Software Engineering)的概念。其主要思想是,运用工程学 的基本原理和方法来组织和管理软件生产。 尽管“软件危机”至今尚未被彻底解决,但在40 年的发展中,经过不断的实践和总结,人们得到一 个结论:
按照工程化的原则和方法组织软件开发,是摆脱软 件危机的一个主要出路。
8
§1.2 软件工程概述
1、软件工程的定义 (1) 运用现代科学技术知识来设计并构造计算机程序 及为开发、运行和维护这些程序所必需的相关文件资 料。 --- Barry.W.Boehm (2) 软件工程是开发、运行、维护和修复软件的系统 方法。 --- IEEE (3) 软件工程是指导软件开发和维护的工程学科。其 核心思想是采用工程的概念、原理、技术和方法来开 发和维护软件,把经过实践考验而证明是正确的管理 技术和当前能够得到的最好的技术方法结合起来,从 而大大提高软件开发的成功率和生产率。 9
(3) 软件工程环境
指以软件工程为依据,支持软件生产的技术和管理工具系 统,通常被集成到一个固定的平台上
(4) 软件工程管理
包括管理风险、平衡冲突目标、克服各种限制、合理配置 和使用资源等一系列活动。 11
软件工程常用技术
软件架构 软件复用
软件测试 计算机辅助设计工具CASE 面向对象软件工程 实时软件工程 软件成本估算 软件工程经济学 软件演化 软件维护 软件规范 软件文档编写
相关文档
最新文档