软件工程期末复习——第一章
软件工程期末复习——第一章
一、重要知识点
1. 软件的定义
软件是计算机系统中与硬件相互依存的另一个重要部分,是包括程序、数据及其相关文档的完整集合。其中:
- 程序是依据事先设计的功能和性能要求研制、执行的一组指令序列;
- 数据是使程序能够正常操纵信息的数据结构;
- 文档是与程序开发、维护和使用相关的一系列图文材料。
2. 软件危机的六个表现
所谓软件危机,是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。这些严重问题绝不仅仅是某些失败的软件才具有的,几乎所有软件都不同程度地存在这类问题。具体来说,软件危机主要有以下表现:
- 开发成本和进度的估计常常不准确;
- 用户对交付的软件系统不满意的现象经常发生;
- 软件质量无保证、可靠性差;
- 软件常常是不可维护的;
- 软件通常没有适当的文档资料;
- 软件成本在计算机系统总成本中所占比例逐年上升;
- 软件开发生产率提高的速度,远远跟不上计算机应用迅速普及深入的趋势。
3. 软件工程定义
软件工程本质上是一种应对软件危机的对策,Fritz Bauer首次提出了软件工程的概念,他认为:软件工程是为了经济地获得能够在实际机器上高效运行的可靠软件而建立和使用的一系列好的工程化原则。
而1993年IEEE提出的定义是:软件工程是将系统化、规范化、可度量的方法应用于软件的开发、运行和维护过程,即将工程化应用于软件中的方法的研究。
4. 软件工程三要素
如下图所示,软件工程的三要素分别是:过程、方法和工具。
- 过程:支持软件开发各个环节的控制和管理;
- 方法:完成软件开发任务的技术手段;
- 工具:为软件开发方法提供自动的或半自动的软件支撑环境。
5. 软件开发方法
这里来详细展开方法层的内容,软件工程中的开发方法又称为软件工程方法论,是指软件开发过程中所应该遵循的方法和步骤,既有局部软件开发方法,也有全局软件开发方法。最主要的软件开发方法有以下三种:
(1)结构化方法
结构化方法总的指导思想是自顶向下、逐步求精,基本原则是功能的分解与抽象。具体而言,其采用结构化分析方法对软件进行需求分析,然后用结构化设计方法进行总体设计和详细设计,最后是进行结构化编程。
- 结构化分析(Structured Analysis, SA):按照功能分解的原则,自顶向下、逐步求精,直到实现软件功能为止。在分析问题时,系统分析人员一般利用图表的方式描述用户需求。
- 结构化设计(Structured Design, SD):以结构化分析为基础,将分析得到的数据流图推导为描述系统模块之间关系的结构图。
结构化方法的主要问题是构造的软件系统不够稳定:1)SA阶段以功能分解为基础,但用户的功能是经常改变的,会导致系统的框架不稳定;2)SD阶段需要实现的从数据流图到软件结构图的过渡会产生断层,从而影响从设计到需求的回溯。
(2)面向数据结构的开发方法
面向数据结构的开发方法的基本思想是:从目标系统的输入/输出数据结构入手,导出程序的基本框架结构,在此基础上,对细节进行设计,得到完整的程序结构图。
系统开发面向数据结构的设计方法的最终目标是得出对程序处理过程的描述,这种方法最适合于在详细设计阶段使用,也就是说,在完成了软件结构设计之后,可以使用面向数据结构的方法来设计每个模块的处理过程。
(3)面向对象的开发方法
面向对象的开发方法(Object-Oriented Software Development,OOSD)以对象作为最基本的元素,将其视作分析和解决问题的核心。其基本思想是:对问题领域进行自然分割,以更接近人类通常思维的方式建立问题领域的模型,以便对客观的信息实体进行结构和行为的模拟,从而使设计的软件更直接地表现问题的求解过程。
此外,面向对象的软件系统的结构是根据实际问题域的模型建立起来的,它以数据为中心,而不是基于对功能的分解,因此,当系统功能发生变化时不会引起软件结构的整体变化,往往只需要进行一些局部的修改即可。相对来说,软件的重用性、可靠性和可维护性等特性都较好。
二、次重要知识点
1. 软件的特点
- 是一种逻辑实体,具有抽象性
- 软件的生产不存在明显的制造过程
- 运行和使用的过程中不会存在机械磨损老化问题
- 受限于具体的计算机系统
- 采用手工开发方式,还不能完全采用组装的方式进行软件开发
- 作为提高人类工作效率的逻辑产品,本身是非常复杂的
- 软件成本相当昂贵
- 相当多的软件工作涉及到社会因素
2. 软件的分类
- 按功能特征划分:
- 系统软件
- 支撑软件
- 应用软件
- 按软件规模大小进行划分:
3. 产生软件危机的原因
- 用户对软件需求的描述常常是不精确的
- 开发出来的软件产品不符合用户的要求
- 大型软件项目需要组织一定的人力共同完成
- 软件项目开发人员容易产生一些疏漏和错误
- 缺乏有力的方法学和工具支撑
- 人类智力的局限性,导致人们无力处理“复杂问题”
4. 如何解决软件危机
经过不断的实践和总结,最后得出一个结论:按工程化的原则和方法组织软件开发工作是有效的,是摆脱软件危机的一个主要出路。
5. 软件工程目标
软件工程的目标是组织实施软件工程项目,最终希望得到项目的成功,主要体现为以下几个目标:
- 付出较低的开发成本;
- 达到所需的软件功能;
- 取得较好的软件性能;
- 开发的软件易于移植;
- 需要较低的维护费用;
- 能按时完成开发工作,及时交付使用。
6. 软件工程原则
- 抽象
- 信息隐蔽
- 模块化
- 局部化
- 确定性
- 一致性
- 完备性
- 可验证性
7. 软件工程原理
- 用分阶段的生命周期计划严格管理
- 坚持进行阶段评审
- 实行严格的产品控制
- 采纳现代程序设计技术
- 结果应能清楚地审查
- 开发小组的人员应少而精
- 承认不断改进软件工程实践的必要性