软件危机与软件工程教材
软件开发过程
▪ 计算机软件的数量以惊人的速度急剧 膨胀。
▪ 计算机硬件的性能/价格比,每10年提高 2个数量级,且质量稳步提高。
▪ 软件生产跟不上计算机应用的要求,开 发成本增加,质量没有保证,已成制约 计算机发展的关键因素。
2021/2/7
6
软件危机的产生
软件危机
▪ 软件危机(crisis):是指在计算机软 件开发和维护过程中所遇到的一 系列的严重问题。
2021/2/7
17
软件工程基本原理
解决软件危机的途径
6.开发人员应少而精
软件开发小组的人员应该是素质高, 人员不宜过多。人员素质低和人员过多, 都会导致软件的错误率高,且开发效率下 降,成本增加。
2021/2/7
7.承认不断改进软件工程的必要性
软件工程是一门不断迅速发展的学科,
必须学习和跟踪先进的技术和方法,也要
2021/2/7
7
软件危机的产生
软件危机的具体表现
① 对软件开发成本和进度估计不准确。 ② 用户对已完成的“软件系统”不满意。 ③ 软件产品的质量不可靠。 ④ 软件维护困难,维护的人员与费用不断 增加。 ⑤ 缺乏完整、正确的文档资料。 ⑥ 软件成本在计算机系统 中所占比例逐年上升。 ⑦ 软件的发展跟不上硬件的发展和用户的要求。
软件维护的任务是,通过各种必
要的维护活动使系统持久地满足用户 的需要。
通常有4类维护活动:改正性维护; 适应性维护;完善性维护;预防性维 护。
每一项维护活动都应该准确地记
录下来,作为正式的文档保存。
2021/2/7
35
软件过程
▪ 软件过程:为了获得高质量软件所需要完 成的一系列任务的框架,它规定了完成各 项任务的工作步骤。
骤。
2021/2/7
20
软件工程方法学
1.传统方法学 ▪ 也称为生命周期方法学或结构化范型。 ▪ 把 软件生命周期的全过程依次划分为若干
阶段,然后顺序地完成每个阶段的任务。 ▪ 传统方法学应用十分广泛。
2021/2/7
21
软件工程方法学
▪ 2.面向对象方法学 ▪ 该方法把数据和行为看成同等重要,它是
2021/2/7
39
软件工程开发模式
➢ 推迟实现的观点:
不要急于求成,对于规模较大、较复杂 的系统,过早地急于编程实现,往往导 致大量返工,甚至开发失败。应该把前 面几个阶段的工作做得比较扎实,再进 行后续的工作。
2021/2/7
40
软件工程开发模式
➢质量保证的观点:
(1)每个阶段都必须交出合格的文档。这 是下一阶段开发设计的依据和开发交互的 媒介,也是对软件进行维护的重要依据。
2021/2/7
3.需求分析
本阶段确定为解决该问题,目标系统必 须应具备哪些功能。
系统分析员在本阶段必须与用户密切配
合,充分交流,得到经用户确认的系统逻辑 模型,用数据流图、数据字典等描述系统的 逻辑模型。
需求分析阶段所确定的系统逻辑模型是
以后设计和实现目标系统的基础,必须准确、
完整的体现用户的需求。
软件工程
(Software Engineering)
第一章 绪论
——软件危机与软件工程
2021/2/7
1
本章主要内容
▪ 软件开发过程 ▪ 软件危机的产生 ▪ 解决软件危机的途径 ▪ 软件工程
2021/2/7
2
计算机硬件与软件
软件开发过程
▪ 任何计算机系统都包含硬件(hard)和软件 (software)两大部分。
前述含义下的软件所涉及的理论、方法、技术所 构成的学科。
2021/2/7
4
软件开发过程的演化
软件开发过程
▪ 第一个时期:40—60年代,个体时期 (程 序时期)
▪ 第二个时期:60—70年代,软件作坊时 期(程序+文档)
▪ 第三个时期:70年代以后,软件工程时 期。
2021/2/7
5
软件开发过程的演化
▪ 硬件只是提供了计算的可能性 ▪ 必须有支持和管理计算机的软件,系统才能
实现计算
2021/2/7
3
软件的三层含义
软件开发过程
▪ 个体含义:指计算机中的程序及其文 档。
▪ 整体含义:指在特定计算机系统中所有上述
个体含义下的软件的总称,即计算机系统中硬件 除外的所有成分。
▪ 学科含义:指在研究、开发、维护以及使用
30
生命周期各阶段的任务
2021/2/7
4.总体设计
本阶段 确定目标系统的主要功能如何完 成。采用流程图或其他工具描述出每种可能 的系统,推荐出一个最佳的方案,并制定出 实现该系统的详细计划。
本阶段的另一个主要任务是设计软件的 结构,确定软件应由哪些模块构成,以及模 块之间的关系。
还应考虑系统的开发和应用环境,如计 算机系统的配置,计算机网络等。
在不同的阶段对软件修改而付出的 代价是不同的!在后期引入一个变动的 代价比在早期引入要高的多,甚至高达 2─3个数量级。
2021/2/7
27
生命周期各阶段的任务
1.问题定义
本阶段需要明确回答:“要解决的 问题是什么?”。
系统分析员应该提出问题的性质、 目标和规模的书面报告。通过对实际用 户和使用部门的调查、研究,以及讨论、 交流,得出一份双方都满意的文档。
2.坚持进行阶段评审 设计的错误占软件错误的63%,编码错
误只占37%。而且在后期纠正错误的代价 非常高。因此,必须严格坚持阶段评审, 及早发现和纠正错误。
2021/2/7
15
解决软件危机的途径
软件工程基本原理
3.实行严格的产品质量控制 在现实中由于外部原因要求对需
求等进行修改是难免的。但必须有严 格的管理制度和措施,其中主要是实 行基准配置管理。
2021/2/7
16
解决软件危机的途径
软件工程基本原理
4.采用现代程序设计技术和软件工程技术 如结构化程序分析(Structured Analysis)
和结构化设计(Structured Design)等。 5.结果应能清楚地审查
由于软件是一种看不见摸不着的逻辑 产品,对它的检验和审查很困难。因此, 应提供可视化的检验标准和方法。
(2)每个阶段完成前都要对完成的文档进 行评审,以便及时发现和改正错误。对错 误的修改越早越好,越晚代价越高。
2021/2/7
41
软件工程开发模式
▪ 瀑布模型的优缺点: ▪ 优点:强迫采用规范化的方法;每个阶段
必须提交文档;产品都要经过验证。 ▪ 缺点:该模型几乎完全依赖书面的规格说
2021/2/7
11
软件工程的本质特性
解决软件危机的途径
① 软件工程关注于大型程序的构造。 ② 软件工程的中心课题是控制复杂性。 ③ 软件经常变化。 ④ 开发软件的效率非常重要。 ⑤ 和谐地合作是开发软件的关键。 ⑥ 软件必须有效的支持他的用户。 ⑦ 在软件工程领域中通常由具有一种文化背景的
人替具有另一种文化背景的人创造产品。
2021/2/7
28
生命周期各阶段的任务
2 .可行性分析
本阶段需要回答的是:“上一阶段 确定的问题有无可行的解决方案,是 否值得解决?”。
更进一步明确项目的规模和目标, 从技术可行性、经济可行性、操作可 行性、法律可行性、社会可行性等方 面进行研究,确定是否开发本项目。
2021/2/7
29
生命周期各阶段的任务
传统的生命周期方法学可以用瀑 布模型来模拟,犹如瀑布,各个阶段 从上到下,奔流不息。
2021/2/7
37
软件工程开发模式
2021/2/7
38
软件工程开发模式
按照传统的瀑布模型来开发软件, 有如下几个特点:
▪ 各阶段具有顺序性和依赖性,必须 等上一阶段结束后,才能开始下一阶段; 前一阶段的输出文档就是下一阶段的输 入。
▪ 每个阶段都要形成详尽、规范、完整的文档,提 供下一阶段以及本阶段评审之用。
2021/2/7
19
软件工程方法学
▪ 通常把在软件生命周期全过程中使用的一整套 技术方法的集合称为方法学(Methodology)
▪ 软件工程方法学3要素: a. 方法:完成开发的技术,解决“怎样做”; b. 工具:为运用方法提供的软件工程环境; c. 过程:任务的框架,规定了完成各项任务的步
件下,能否完成指定的任务?包括:技
术可行性、经济可行性、法律可行性、
社会可行性。
2021/2/7
25
软件的生命周期
解决软件危机的途径
软件开发(development)阶段
▪ 需求分析
▪ 总体设计
▪ 详细设计
▪ 编码
▪ 测试
▪ 运行
2021/2/7
26
解决软件危机的途径
软件的生命周期
软件维护(maintenance)阶段
发。
2021/2/7
9
解决软件危机的途径
软件工程
软件工程
是一门指导计算机软件开发和维 护 的工程学科,是一类求解软件包的工程。 它应用计算机科学、数学及管理科学等原 理,借鉴传统工程的原则、方法,创建软 件以达到提高质量、降低成本的目的。
2021/2/7
10
解决软件危机的途径
软件工程
计算机科学、数学用于构造模型与 算法,工程科学用于制定规范、设计范 型、评估成本及确定权衡,管理科学用 于计划、资源、质量、成本等管理。
▪ 过程定义了运用方法的顺序、应交付的文 档资料、为保证软件质量和协调变化所需 要采取的管理措施,以及标志软件开发各 个阶段任务完成的里程碑。
▪ 使用生命周期模型简洁地描述软件过程。
2021/2/7
36