软件工程期末复习
说明:制作此文档目的是总结知识,明确复习重点,减轻复习和备考的负担。
一、考试范围
1. 软件工程学概述 2. 可行性研究
3. 需求分析 5. 总体设计 6. 详细设计 7. 实现 8. 维护
9. 面向对象方法学引论 10.面向对象分析 13.软件项目管理
考试内容以课本为依据。本次考试重点是第1,2,5,6,7、9、10章。
二、考试内容
第一章 软件工程学概述
1、 软件危机(产生原因、克服途径) 理解 2、 软件工程(定义、基本原理、方法学) 理解 3、 软件过程(软件生命周期、软件生存期模型) 理解 4、 主要知识点
1.1 .1软件危机:是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。 软件危机的典型表现:
1.对软件开发成本和进度的估计常常很不准确
2. 用户对“已完成的”软件系统不满意的现象经常发生 3.软件产品的质量往往靠不住 4.软件常常是不可维护的 5. 软件通常没有适当的文档 6.软件成本在计算机系统总成本中所占的比例逐年上升 7.软件开发生产率提高的速度,远远跟不上计算机应用迅速普及深入的趋势
1.1.2产生危机的原因:
(1) 与软件本身的特点有关
(2) 与软件开发与维护的方法不正确有关。 1.1.3 消除软件危机的途径
软件定义由以下三部分组成:程序、数据结构、文档
软件工程是从管理和技术两方面研究如何更好地开发和维护计算机软件的一门新兴学科。
1.2.1软件工程的介绍
软件工程是指导计算机软件开发和维护的一门工程学科。采用工程的概念、原理、技术和方法来开发和维护软件。把经过时间考验而证明正确的管理技术和当前能够得到的最好技术方法结合起来,以经济地开发出高质量的软件并有效的维护它,这就是软件工程。
软件工程7个本质特征:
(1) 软件工程关注与大型程序的构造 (2) 软件工程的中心课题是控制复杂性 (3) 软件经常变化
(4) 开发软件的效率非常重要
(5) 和谐地合作是开发软件的关键 (6) 软件必须有效的支持它的用户
(7) 在软件工程领域中通常由具有一种文化背景的人替另一种文化背景的人创造产品 1.2.2 软件工程的基本原理
(1)用分阶段的生存周期计划严格管理; (2)坚持进行阶段评审; (3)实行严格的产品控制; (4)采用现代程序设计技术; (5)结果应能清楚地审查结果; (6)开发小组的人员应该少而精。
(7)承认不断改进软件工程实践的必要性。 1.2.3 软件工程方法学
软件工程方法学:在软件生命周期全过程中使用的一整套技术方法的集合称为软件工程方法学。 软件工程方法学的三个要素:方法、工具和过程。 1.3 软件生存周期
软件生命周期的3个时期:软件定义、 软件开发和软件维护 (1) 软件定义时期:①问题定义;②可行性研究;③需求分析。
(2) 软件开发时期:①总体设计;②详细设计;③编码和单元测试;④综合测试。 (3) 软件维护时期:主要任务是是软件持久地满足用户的需要。
1) 问题定义——“要解决的问题是什么” 2) 可行性研究——“有解决方案吗”
3) 需求分析——“为解决问题,必须做什么?” 4) 总体设计——“如何做?” 5) 详细设计——“如何做?”
6) 编码和单元测试——“做得怎样” 7) 综合测试——“做得怎样”
8) 软件维护——“有新的问题吗?”
1.4.1瀑布模型
特点:阶段间具有顺序性和依赖性;推迟实现的观点;质量保证的观点; 1.4.2快速原型模型
快速建立起来的可以在计算机上运行的程序,“快速原型”所能完成的功能往往是最终产品的一个子集。 1.4.3增量模型
增量模型属于非整体开发模型,它推迟某些阶段或所有阶段小的细节,从而较早地产生工作软件 1.4.4螺旋模型
增加了风险分析。
1.4.5喷泉模型
认为软件生命周期的各个阶段是相互重叠和多次反复的。
第二章 可行性研究
1、 可行性研究的任务 熟悉理解 2、 可行性研究的过程 一般了解 3、 系统流程图 一般了解 4、 数据流图 掌握应用 5、 数据字典(内容、定义数据的方法) 理解 6、 主要知识点
2.1可行性研究的任务
用最小的代价在尽可能短的时间内确定问题是否能够解决。一般说来,应从经济可行性、技术可行性、运行可行性、法律可行性和开发方案等方面研究可行性。
可行性研究的3个方面:
(1) 技术可行性:使用现有的技术是否能实现这个系统。
(2) 经济可行性:这个系统的经济效益能否超过它的开发成本。
(3) 操作可行性:这个系统的操作方式在这个用户组织内是否可行。 2.3系统流程图
系统流程图:是描绘物理系统的传统工具。 2.4数据流图(会画)
数据流图是一种图形化技术,它描绘信息流和数据从输入移动到输出的过程中所经受的变换,是系统逻辑功能的图形表示。 2.4.1 符号
数据流图有4种元素:正方形(或立方体)表示数据的源点或终点;圆角矩形(或圆形)代表变换数据的处理;开口矩形(或两条平行横线)代表数据存储;箭头表示数据流,即特定数据的流动方向。 2.4.2例子(看懂) 2.5数据字典
数据字典是关于数据的信息的集合,即对数据流图中包含的所有元素的定义的集合。 数据字典的内容:由四类元素的定义组成 (1) 数据流;
(2) 数据流分量(即数据元素); (3) 数据存储; (4) 处理。
第三章 需求分析
1、需求分析的任务 熟悉理解 2、需求分析模型(数据模型、功能模型、行为模型) 掌握 3、 状态转换图 掌握应用 4、 其他图形工具 (层次方框图、Warnier图、IPO图) 一般了解 5、面向数据流的分析方法 理解 6、 主要知识点 3.1需求分析的任务
它的基本任务是准确地回答“系统必须做什么?”这个问题。需求分析的任务不是确定系统如何完成它的工作,
而是确定系统必须完成哪些工作,也就是对目标系统提出完整、准确、清晰、具体的要求。 3.2.2面向数据流自顶向下求精
结构化分析方法就是面向数据流自顶向下逐步求精进行需求分析的方法。 3.3分析建模与规格说明
需求分析过程应该建立3种模型:数据模型、功能模型、行为模型 3.7 其他工具:层次方框图、warnier图、IPO图
第五章 总体设计
1、 总体设计的任务 熟悉理解 2、 设计原理(模块化、抽象、逐步求精、信息隐藏) 熟悉理解 3、 模块独立性(耦合、内聚) 熟悉理解 4、 启发规则 熟悉理解 5、 描述软件结构的图形工具(层次图、HIPO图、结构图) 一般了解 6、 面向数据流的设计方法 掌握应用 7、 主要知识点
总体设计任务:决定系统“怎样做”。 5.2设计原理
模块化:模块是由边界元素限定的相邻程序元素的序列,而且有一个总体标识符代表它。模块化就是把程序划分成独立命名且可独立访问的模块,每个模块完成一个子功能,把这些模块集成起来构成一个整体,可以完成指定的功能满足用户的需求。
抽象:就是抽出事物的本质特性而暂时不考虑它们的细节。
逐步求精:为了能集中精力解决主要问题而尽量推迟对问题细节的考虑。 信息隐蔽:模块中所包括的信息不允许其它不需要这些信息的模块调用。 信息局部化:是指把一些关系密切的软件元素物理地放得彼此靠近。 5.2.5模块独立性
模块独立性:是软件系统中每个模块只涉及软件要求的具体子功能,而和软件系统中其他的模块接口是简单的。模块独立的概念是模块化、抽象、信息隐蔽和局部化概念的直接结果。
模块独立性的两个定性标准:耦合和内聚。
模块独立性比较强的模块应是高内聚低耦合的模块。
耦合:衡量不同模块彼此间互相依赖(连接)的紧密程度的度量。耦合强弱取决于模块间接口的复杂程度,调用模块的方式,以及通过接口的信息。
(1) 非直接耦合:两个模块中的每一个都能独立工作而不需要另一个模块,那么它们彼此完全独立。 (2) 数据耦合:两个模块间彼此通过参数交换信息,而且交换带信息仅仅是数据。(数据耦合是低耦合,系统
中必须存在这种耦合)
(3) 标记耦合(也称为特征耦合):当把整个数据结构作为参数传递而被调用的模块只需要使用其中一部分数
据元素,出现了特征耦合。 (4) 控制耦合:传递的信息中有控制信息(控制耦合是中度耦合,它增加了系统的复杂程度,它往往是多余的) (5) 外部耦合:一组模块都访问同一全局简单变量而不是同一全局数据结构,而且不是通过参数表传递该全局
变量的信息。
(6) 公共耦合:当两个或多个模块通过一个公共数据环境互相作用时,它们之间的耦合称为公共耦合。 (7) 内容耦合:最高程度耦合是内容耦合。出现下列情况之一就出现了内容耦合
a) 一个模块访问另一个模块的内部数据。
b) 一个模块不通过正常入口而转到另一个模块内部。
c) 两个模块有一部分程序代码重叠(只可能出现在汇编中) d) 一个模块有多个入口(意味着一个模块有多种功能)
内聚:衡量一个模块内部各个元素彼此结合的紧密程度,它是信息隐蔽和局部化概念的自然扩展。
(1) 巧合内聚:如果一个模块完成一组人物,这些人物彼此间即使有关系,关系也是松散的,这就是巧合内聚。 (2) 逻辑内聚:如果一个模块完成的人物在逻辑上属于相同或类似的一类,则称为逻辑内聚。 (3) 时间内聚:如果一个模块包含的人物必须在同一段时间内执行,则称为时间内聚。
(4) 过程内聚:如果一个模块内的处理元素是相关的,而且必须以特定次序执行,则称为过程内聚。 (5) 通信内聚:如果模块中的所有元素都使用同一个输入数据和(或)产生同一个输出数据,则称为通信内聚。 (6) 顺序内聚:如果一个模块内的处理元素和同一个功能密切相关,而且这些处理必须顺序执行,则称为顺序
内聚。
(7) 功能内聚:如果模块内所有处理元素属于一个整体,完成一个单一的功能,则称为功能内聚。 5.3启发规则
(1) 改进软件结构提高模块的独立性。 (2) 模块规模应该适中。
(3) 深度、宽度、扇出、扇入都应适当。 (4) 模块作用域应该在控制域之内 (5) 力争降低模块接口的复杂程度 (6) 设计单入口单出口的模块 (7) 模块功能可以预测
5.4描述软件结构的图形工具:层次图 、HIPO图 、结构图 5.5面向数据结构的分析设计方法
面向数据流的设计方法把信息流映射成软件结构,信息流的类型(包括变换流和事务流)决定了映射的方法(变换分析和事务分析)。面向数据流的设计要解决的任务,就是上述需求分析的基础上,将DFD图映射为软件系统的结构。
变换流:信息沿输入通路进入系统,同时由外部形式变换成内部形式,进入系统的信息通过变换中心,经加工处理以后再沿输出通路变换成外部形式离开软件系统
事务流:数据沿输入通路到达一个处理T,T根据输入数据的类型在若干个动作序列中选出一个来执行。这类数据流称为事务流。
第六章 详细设计
1、 详细设计的任务 熟悉理解 2、 结构程序设计 一般了解 3、 人机界面设计 一般了解 4、 过程设计的工具 掌握应用 5、 面向数据结构的设计方法 理解 6、 程序复杂程度的定量度量 熟悉理解 7、 主要知识点
详细设计阶段的根本目标:确定应该怎样具体的实现所要求的系统。 6.3过程设计的工具(会画):程序流程图、盒图、PAD图、判定表、判定树。
程序流程图:程序流程图又称之为程序框图,它是软件开发者最熟悉的一种算法表达工具。 N-S图(盒图):是一种符合结构化程序设计原则的图形描述工具。在N-S图也能表示五种基本控制结构。