软件工程导论复习重点总结很全(第六版)(精)

更新时间:2024-06-29 19:36:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

第1章软件工程学概述 1.1 软件危机 1.1.1 软件危机的介绍

软件危机(软件萧条、软件困扰:是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。

软件危机包含下述两方面的问题:

如何开发软件,满足对软件日益增长的需求; 如何维护数量不断膨胀的已有软件。 软件危机的典型表现:

(1对软件开发成本和进度的估计常常很不准确; (2用户对“已完成的”软件系统不满意的现象经常发生; (3软件产品的质量往往靠不住; (4软件常常是不可维护的; (5软件通常没有适当的文档资料;

(6软件成本在计算机系统总成本中所占的比例逐年上升;

(7软件开发生产率提高的速度,远远跟不上计算机应用迅速普及深入的趋势。 1.1.2 产生软件危机的原因 (1与软件本身的特点有关

(2与软件开发与维护的方法不正确有关

1.1.3 消除软件危机的途径 对计算机软件有正确的认识。

认识到软件开发是一种组织良好、管理严密、各类人员协同配合、共同完成的工程项目。应该推广使用在实践中总结出来的开发软件的成功技术和方法,并继续研究探索。

应该开发和使用更好的软件工具。

总之,为了解决软件危机,既要有技术措施(方法和工具,又要有必要的组织管理措施。

1.2

1.2.1 软件工程的介绍

软件工程:是指导计算机软件开发和维护的一门工程学科。采用工程的概念、原理、技术和方法来开发与维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来,以经济地开发出高质量的软件并有效地维护它,这就是软件工程。(期中考

软件工程的本质特性:

软件工程关注于大型程序的构造 软件工程的中心课题是控制复杂性 软件经常变化

开发软件的效率非常重要 和谐地合作是开发软件的关键 软件必须有效地支持它的用户

在软件工程领域中是由具有一种文化背景的人替具有另一种文化背景的人创造产品

1.2.2 软件工程的基本原理 用分阶段的生命周期计划严格管理 坚持进行阶段评审 实行严格的产品控制 采用现代程序设计技术 结果应能清楚地审查 开发小组的人员应该少而精

承认不断改进软件工程实践的必要性 1.2.3 软件工程方法学

软件工程包括技术和管理两方面的内容。 软件工程方法学3要素:方法、工具、过程

1.传统方法学(生命周期方法学或结构化范型——强调自顶向下 2.面向对象方法学——强调主动地多次反复迭代 面向对象方法学4个要点:对象、类、继承、消息 1.3 软件生命周期(必考

三个时期八个阶段:软件生命周期由软件定义、软件开发和运行维护(也称为软件维护三个时期组成,每个时期又进一步划分成若干个阶段。

三个时期:八个阶段: 软件生命周期软件定义 软件开发 软件维护 问题定义 可行性研究 需求分析 概要设计 详细设计 编码和单元测试 综合测试

运行维护 系统设计 系统实现 1.4 软件过程 1.4.1 瀑布模型

1.4.2 快速原型模型 1.4.3 增量模型 1.4.4 螺旋模型 1.4.5 喷泉模型 第2章可行性研究 2.1可行性研究的任务 可行性研究的目的:

不是解决问题,而是确定问题是否值得去解决。 可行性研究的实质:

进行一次大大压缩简化了的系统分析和设计的过程,也就是在较高层次上以较抽象的方式进行的系统分析和设计的过程。

可行性研究的内容:

首先进一步分析和澄清问题定义,导出系统的逻辑模型;

然后从系统逻辑模型出发,探索若干种可供选择的主要解法(即系统实现方案; 对每种解法都研究它的可行性,至少应该从三方面研究每种解法的可行性。 主要方面:

技术可行性,经济可行性,操作可行性, 其他方面:

运行可行性,法律可行性,

状态转换图是行为建模的基础 3.4实体-联系图

数据模型中包含3种相互关联的信息:数据对象、数据对象的属性、数据对象彼此间相互连接的关系

3.4状态转换图 3.6.1状态 状态图分类:

表示系统循环运行过程,通常不关心循环是怎样启动的。 表示系统单程生命期,需要标明初始状态和最终状态。 3.6.2事件

事件就是引起系统做动作或(和转换状态的控制信息。 3.6.3符号

3.7其他图形工具 3.7.1 层次方框图 3.7.2Warnier图 3.7.3IPO图

3.8验证软件需求(重点

3.8.1 从哪些方面验证软件需求的正确性 一致性完整性现实性有效性 第五章总体设计 5.1设计过程 由两个主要阶段组成:

系统设计阶段,确定系统的具体实现方案:设想供选择的方案选取合理的方案推荐最佳方案

结构设计阶段,确定软件结构:功能分解设计软件结构设计数据库制定测试文档书写文档审查和复查

5.2设计原理 5.2.1 模块化 模块化的作用:

采用模块化原理可以使软件结构清晰,不仅容易设计也容易阅读和理解。 模块化使软件容易测试和调试,因而有助于提高软件的可靠性。 模块化能够提高软件的可修改性。

模块化也有助于软件开发工程的组织管理。 5.2.2抽象 5.2.3逐步求精

5.2.4信息隐藏和局部化 5.2.5 模块独立 尽量使用数据耦合, 少用控制耦合和特征耦合, 限制公共环境耦合的范围, 完全不用内容耦合。 七种内聚的优劣评分结果: 高内聚:功能内聚 顺序内聚 中内聚:通信内聚 过程内聚 低内聚:时间内聚 逻辑内聚 偶然内聚 5.3启发规则

1.改进软件结构提高模块独立性 2.模块规模应该适中

3.深度、宽度、扇出和扇入都应适当

4.模块的作用域应该在控制域之内

5.力争降低模块接口的复杂程度 6. 设计单入口单出口的模块 7. 模块功能应该可以预测 5.4 描绘软件结构的图形工具 5.4.1 层次图和HIPO图 1. 层次图(H图

层次图用来描绘软件的层次结构。很适于在自顶向下设计软件的过程中使用。 2.HIPO图 5.4.2结构图

5.5面向数据流的设计方法

结构化设计方法(简称SD方法,也就是基于数据流的设计方法。 5.5.1概念

面向数据流的设计方法把信息流映射成软件结构,信息流的类型决定了映射的方法。信息流有两种类型:变换流事务流

第6章详细设计 6.1 结构程序设计 经典的结构程序设计:

只允许使用顺序、IF-THEN-ELSE型分支和DO-WHILE型循环这3种基本控制结构;

扩展的结构程序设计:

如果除了上述3种基本控制结构之外,还允许使用DO-CASE型多分支结构和DO-UNTIL型循环结构;

修正的结构程序设计:

再加上允许使用LEAVE(或BREAK结构。 6.2人机界面设计 6.2.1设计问题

A由B、C、D 3个元素顺序组成根据条件A是B或C或D中的某一个 A由B出现N次(N ≥0组成

6.4.2 改进的Jackson图 6.4.3 Jackson方法

6.5 程序复杂程度的定量度量 6.5.1 McCabe方法 1. 流图(程序图

2. 计算环形复杂度的方法 V(G=流图中的区域数 V(G=E-N+2

其中E是流图中的边数,N是结点数 V(G=P+1

其中P是流图中判定结点的数目 6.5.2 Halstead方法

令N1为程序中运算符出现的总次数,N2为操作数出现的总次数,程序长度N定义为:

N=N1+N2

程序中使用的不同运算符(包括关键字的个数n1,以及不同操作数(变量和常数的个数n2。预测程序长度的公式如下:

H = n1 log2n1 + n2 log2n2

预测程序中包含错误的个数的公式如下: E = N log2 (n1+n2/3000 第7章实现

编码和测试统称为实现。 7.1编码

7.1.1 选择程序设计语言 主要的实用标准: 系统用户的要求 可以使用的编译程序 可以得到的软件工具 工程规模 程序员的知识 软件可移植性要求

软件的应用领域 7.1.2 编码风格

1. 程序内部的文档:恰当的标识符适当的注解程序的视觉组织 2. 数据说明 3. 语句构造 4. 输入输出

5. 效率:程序运行时间存储器效率输入输出的效率 7.2软件测试基础 7.2.1 软件测试的目标

测试是为了发现程序中的错误而执行程序的过程;

好的测试方案是极可能发现迄今为止尚未发现的错误的测试方案; 成功的测试是发现了至今为止尚未发现的错误的测试。 7.2.3 测试方法 黑盒测试(功能测试: 把程序看作一个黑盒子;

完全不考虑程序的内部结构和处理过程; 是在程序接口进行的测试。 白盒测试(结构测试:

把程序看成装在一个透明的盒子里;

测试者完全知道程序的结构和处理算法;

按照程序内部的逻辑测试程序,检测程序中的主要执行通路是否都能按预定要求正确工作。

7.2.4 测试步骤 1. 模块测试(单元测试

保证每个模块作为一个单元能正确运行; 发现的往往是编码和详细设计的错误。 2. 子系统测试

把经过单元测试的模块放在一起形成一个子系统来测试; 着重测试模块的接口。 3. 系统测试

把经过测试的子系统装配成一个完整的系统来测试;

发现的往往是软件设计中的错误,也可能发现需求说明中的错误;

不论是子系统测试还是系统测试,都兼有检测和组装两重含义,通常称为集成测试。

4. 验收测试(确认测试

把软件系统作为单一的实体进行测试;

它是在用户积极参与下进行的,而且可能主要使用实际数据(系统将来要处理的信息进行测试;

发现的往往是系统需求说明书中的错误。

5. 平行运行

7.2.5 测试阶段的信息流 输入信息有两类:

软件配置,包括需求说明书、设计说明书和源程序清单等; 测试配置,包括测试计划和测试方案。 7.3 单元测试

单元测试集中检测模块;

单元测试和编码属于软件过程的同一个阶段;

可以应用人工测试和计算机测试这样两种不同类型的测试方法; 单元测试主要使用白盒测试技术,对多个模块的测试可以并行地进行。 7.3.1 测试重点 模块接口 局部数据结构 重要的执行通路 出错处理通路 边界条件 7.3.2 代码审查

由审查小组正式进行测试称为代码审查;

一次审查会上可以发现许多错误,可以减少系统验证的总工作量。

7.3.3 计算机测试

驱动程序是一个“主程序”,它接收测试数据,传送给被测试的模块,并且印出有关的结果。存根程序代替被测试的模块所调用的模块。它使用被它代替的模块的接口,可能做最少量的数据操作,印出对入口的检验或操作结果,并且把控制归还给调用它的模块。

7.4 集成测试

集成测试是测试和组装软件的系统化技术,主要目标是发现与接口有关的问题。

由模块组装成程序时有两种方法: 7.4.3 不同集成测试策略的比较

混合策略:

改进的自顶向下测试方法 混合法 7.4.4 回归测试 7.5 确认测试

确认测试也称为验收测试,它的目标是验证软件的有效性。 7.5.3 Alpha和Beta测试

Alpha测试是在受控的环境中进行的。

Beta测试是软件在开发者不能控制的环境中的“真实”应用。 1.接口测试 2.路径测试 3.功能测试 4. 健壮性测试 5. 性能测试 6. 用户界面测试 7. 信息安全测试 8. 压力测试 9. 可靠性测试

10. 安装/反安装测试确认测试也称为验收测试,它的目标是验证软件的有效性。Alpha测试是在受控的环境中进行的。

Beta测试是软件在开发者不能控制的环境中的“真实”应用。 4.接口测试 5.路径测试 6.功能测试 4. 健壮性测试 5. 性能测试

6. 用户界面测试 7. 信息安全测试 8. 压力测试 9. 可靠性测试 10. 安装/反安装测试 7.6 白盒测试技术

7.6.1 逻辑覆盖 语句覆盖

判定覆盖:比语句覆盖强,但对程序逻辑的覆盖程度仍不高。

条件覆盖:判定覆盖不一定包含条件覆盖,条件覆盖也不一定包含判定覆盖。 判定/条件覆盖:有时判定/条件覆盖也并不比条件覆盖更强。

条件组合覆盖:条件组合覆盖标准的测试数据并不一定能使程序中的每条路径都执行到。

6. 点覆盖(语句覆盖标准相同 7. 边覆盖(判定覆盖一致 8. 路径覆盖

7.6.2 控制结构测试覆盖 1. 基本路径测试

基本路径测试是Tom McCabe提出的一种白盒测试技术。 首先计算程序的环形复杂度;

以该复杂度为指南定义执行路径的基本集合; 2.条件测试

从该基本集合导出的测试用例可保证程序中的每条语句至少执行一次,而且每个条件在执行时都将分别取真、假两种值。

3. 循环测试

循环测试是一种白盒测试技术,它专注于测试循环结构的有效性。 在结构化的程序中通常只有3种循环,即简单循环、串接循环和嵌套循环。 7.7 黑盒测试技术 7.7.1 等价划分 7.7.2 边界值分析 7.7.3 错误推测 7.9 软降可靠性 7.9.1 基本概念 软件可靠性:

程序在给定的时间间隔内,按照规格说明书的规定成功地运行的概率。

软件的可用性:

程序在给定的时间点,按照规格说明书的规定,成功地运行的概率。 第8章维护

软件工程的目的是要提高软件的可维护性,减少软件维护所需要的工作量,降低软件系统的总成本。

8.1 软件维护的定义

软件维护:在软件已经交付使用之后,为了改正错误或满足新的需要而修改软件的过程。可分为4项活动:

改正性维护 适应性维护 完善性维护 预防性维护 8.2软件维护的特点

8.2.1 结构化维护与非结构化维护差别巨大 8.2.2 维护的代价高昂 8.2.3 维护的问题很多 8.3软件维护过程 1.维护组织 2.维护报告

3.维护的事件流 4.保存维护记录 5.评价维护活动 8.4 软件的可维护性

决定软件可维护性的因素主要有7个: 可理解性 可测试性 可修改性 可靠性 可移植性 可使用性 效率

第9章面向对象方法学引论 9.1面向对象方法学概述 9.1.1面向对象方法学要点

(1认为客观世界是由各种对象组成的,任何事物都是对象

(2把所有对象都划分成各种类对象,每个对象类都定义了一组数据和一组方法 (3按照子类和父类的关系,把若干个对象类组成一个层次结构的系统 (4对象彼此之间仅能通过传递消息相互联系

9.1.2 面向对象开发方法 面向对象=对象+类 +继承+通信 9.1.4 面向对象方法组成 面向对象的分析 面向对象的设计 面向对象的程序设计 9.1.6 面向对象方法的优点 1.与人类习惯的思维方式一致 2.稳定性好 3.可重用性好 4.可维护性好

5.较易开发大型软件产品 9.2 面向对象的概念 9.2.1 对象

是客观事物或概念的抽象表述,即对客观存在的事物的描述统称为对象,对象可以是事、物、或抽象概念,是将一组数据和使用该数据的一组基本操作或过程封装在一起的实体。

对象的特点 (1 以数据为中心。

(2 对象是主动的。 (3 实现了数据封装。 (4 本质上具有并行性。 (5 模块独立性好。 9.2.2 类

是一组具有相同属性和相同操作的对象的集合。 9.2.3 实例

由某个特定的类所描述的一个具体的对象。 9.2.4 消息

向对象发出的服务请求(互相联系、协同工作等。一个消息包含3个部分:接收消息的对象,消息名,消息变元

9.2.5 方法

方法就是对象所能执行的操作,也就是类中所定义的服务。 9.2.6 属性

属性就是类中所定义的数据,它是对客观世界实体所具有的性质的抽象。 9.2.7 封装

对象封装了对象的数据以及对这些数据的操作。 9.2.8 继承(I

继承是子类自动地共享基类中定义的数据和方法的机制。

单重继承:子类仅从一个父类继承属性和方法 多重继承:子类可从多个父类继承属性和方法 9.2.9 多态性 9.2.10 重载 9.3 面向对象建模(II

面向对象开发软件,需要建立3种形式的模型。 对象模型。描述系统数据结构—数据结构。 动态模型。描述系统控制结构—执行操作。 功能模型。描述系统功能—数值变化。 9.4 对象模型

9.4.1类图的基本符号(I 1. 定义类

2.定义属性

可见性属性名:类型 = 缺省值 {性质串}

可见性(visibility表示该属性对类外的元素是否可见。 分为:

public(+公有的,即模型中的任何类都可以访问该属性。 private(-私有的,表示不能被别的类访问。

protected(#受保护的,表示该属性只能被该类及其子类访问。如果可见性未申明,表示其可见性不确定。

3. 定义操作

可见性操作名(参数表:返回类型{性质串}

9.4.2 表示关系的符号(I 9.4.2.1 关联(I

关联表示两个类的对象之间存在某种语义上的联系。 (1普通关联

递归关联:一个类与本身有关联关系 (3限定关联

(4关联类

9.4.2.2 聚集(I (1共享聚集

如果在聚集关系中处于部分方的对象可同时参与多个处于整体方对象的构成,则该聚集称为共享聚集。

(2组合聚集

如果部分类完全隶属于整体类,部分与整体共存,整体不存在了部分也会随之消失,则该聚集称为组合聚集。

9.4.2.3 泛化(I

(1普通泛化 (2受限泛化

预定义的约束有4种:多重、不相交、完全和不完全。

9.4.2.4 依赖

本文来源:https://www.bwwdw.com/article/jb63.html

Top