软件工程复习资料

软件工程复习资料

2023年7月16日发(作者:)

一:软件工程导论

软件工程导论主要介绍的内容包括:软件危机、软件工程、软件生命周期、软件过程等。该节内容要点包括:

1. 软件危机的概念以及包含的内容

软件危机是指在计算机软件的开发和维护过程中锁遇到的一系列严重问题。

包含的两方面内容:如何开发软件,以满足对软件日益增长的要求;如何维护数量不断膨胀的已有软件。

2. 软件工程方法学包含的三个要素(p23)

方法、工具和过程。

3. 面向对象方法学具有的4个要点

(1)把对象作为融合了数据及在数据上的操作行为的统一的软件构件。

(2)把所有对象都划分成类。

(3)按照父类与子类的关系,把若干个相关类组成一个层次结构的系统。

(4)对象彼此间仅能通过发送消息互相联系

4. 软件生命周期由软件定义、软件开发、运行维护3个时期组成,每个时期又进一步划分成若干个阶段。不同阶段使用的几个典型软件。

5. 软件工程,或者说软件生命周期包括的内容:可行性分析、需求定义、总体设计、详细设计、编码和测试、维护等阶段。

6. 软件生命周期的3个时期及各个时期的主要阶段(p33)

软件定义时期:问题定义、可行性研究和需求分析。

开发时期:总体设计、详细设计、编码和单元测试。

维护时期:综合测试、软件维护。

二:可行性分析

1. 从三个方面研究可行性:技术可行性、经济可行性、操作可行性

2. 可行性研究的目的是:确定问题是否值得去解决

3. 系统流程图的概念(p16),它是物理数据流图而不是程序流程图

系统流程图是概括地描绘物理系统的传统工具。P38

4. 分层和数据流图的概念(p40)。注意系统流程图和数据流图的概念是不同的。

分层:首先用一张高层次的系统流程图描绘系统总体概貌,表明系统的关键功能。然后分别把每个关键功能扩展到适当的详细程度,画在单独的一页纸上。

数据流图是一种图形化技术,它描绘信息流和数据从输入移动到输出的过程中所经受的变换。

5. 数据字典(DD)的定义和组成(p47)。数据字典是关于数据的信息的集合,也就是对数据流图中包含的所有元素的定义的集合。数据流图和数据字典共同构成系统的逻辑模型。

定义组成:(1)数据流(2)数据流分量(3)数据存储(4)处理。

6. 给出一个案例,能画出它的系统流程图、系统流图、并计算系统流图的环形复杂度。(参考7、实现章节p71-72页内容)

7. P63开始:图书借阅系统的数据流图、层次结构图、模块图和状态图(参见3.需求分析p44)

三:需求分析

1 1. 分析建模及3种模型(p29-30)

模型,就是为了理解事物而对事物做出的一种抽象,是对事物的一种无歧义的书面描述。通常,模型由一组图形符号和组织这些符号的规则组成。

结构化分析实质上是一种创建模型的活动。

需求分析过程应该建立3种模型,它们分别是数据模型、功能模型和行为模型。

2. IPO图是输入、处理、输出图的简称(p58)

3. 需求分析的几种方法:(p9)

 访谈

 面向数据流自顶向下求精

 简易的应用规格说明技术

 快速建立软件原型

四:总体设计

总体设计的基本目的就是回答“概括地说,系统应该如何实现?”这个问题,因此,总体设计又称为概要设计或初步设计。

1. 总体设计过程由两个主要阶段组成(p5)

系统设计阶段,确定系统的具体实现方案

结构设计阶段,确定软件结构

2. 总体设计应该遵循的几个设计原则:模块化、抽象、逐步求精、信息隐藏和局部化、模块独立(p16)

3. 信息隐藏的概念(p31)、模块独立的概念(p33)。模块独立的两个衡量准则及定义:内聚和耦合(p34)。

信息隐藏原理指出:应该这样设计和确定模块,使得一个模块内包含的信息(过程和数据)对于不需要这些信息的模块来说,是不能访问的。实际上,应该隐藏的不是有关模块的一切信息,而是模块的实现细节。

“隐藏”意味着有效的模块化可以通过定义一组独立的模块而实现,这些独立的模块彼此间仅仅交换那些为了完成系统功能而必须交换的信息。

模块独立的概念是模块化、抽象、信息隐藏和局部化概念的直接结果。

耦合衡量不同模块彼此间互相依赖(连接)的紧密程度

内聚衡量一个模块内部各个元素彼此结合的紧密程度

4. 关于独立性的设计原则:在软件设计中应该追求尽可能紧密内聚松散耦合的系统;

5. 耦合的设计原则(p40):数据耦合是低耦合,内容耦合是高耦合,应该尽量使用数据耦合,少用特征耦合和控制耦合,不使用内容耦合;高内聚有两种,顺序内聚和功能内聚,功能内聚是最高的程度的内聚。

6. 深度、宽度、扇入和扇出的概念。(p51-53)

深度表示软件结构中控制的层数,它往往能粗略地标志一个系统的大小和复杂程度。

宽度是软件结构内同一个层次上的模块总数的最大值。一般说来,宽度越大系统越复杂。对宽度影响最大的因素是模块的扇出。

扇出是一个模块直接控制(调用)的模块数目,扇出过大意味着模块过分复杂,需要控制和协调过多的下级模块;扇出过小(例如总是1)也不好。经验表明,一个设计得好的典型系统的平均扇出通常是3或4(扇出的上限通常是5~9)。

一个模块的扇入表明有多少个上级模块直接调用它,扇入越大则共享该模块的上级模块数目越多,这是有好处的,但是,不能违背模块独立原理单纯追求高扇入。

2 7. 面向数据流的设计方法(p72)

概念

变换流

事务流

设计过程

变换分析

事务分析

设计优化

五:详细设计

1. 过程设计的工具有:程序流程图、盒图、PAD图、判定表、判定树、过程设计语言

2. 判定表和判定树的定义和表示方法(p51-54),根据给定的案例,可以画出判定表或者判定树。

3. UI设计的工具;第一个设计出GUI的公司(施乐)。

六:实现

这部分主要关注测试方面的内容。

1. 软件测试的目标(p20)

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

(2)好的测试方案是极可能发现迄今为止尚未发现的错误的测试方案;

(3)成功的测试是发现了至今为止尚未发现的错误的测试。

2. 两种测试方法:黑盒测试、白盒测试(p22)。白盒测试中测试用例的含义(p58)

3. 测试的几个步骤:模块测试(或者说单元测试)、子系统测试、集成测试(或者叫系统测试)、验收测试(也叫确认测试)

4. 回归测试的概念(p52)

回归测试是指重新执行已经做过的测试的某个子集,以保证上述这些变化没有带来非预期的副作用。

5. Alpha测试和Beta测试(p57)

lpha测试由用户在开发者的场所进行,并且在开发者对用户的“指导”下进行测试。开发者负责记录发现的错误和使用中遇到的问题。总之,Alpha测试是在受控的环境中进行的。

Beta测试由软件的最终用户们在一个或多个客户场所进行。与Alpha测试不同,开发者通常不在Beta测试的现场,因此,Beta测试是软件在开发者不能控制的环境中的“真实”应用。

6. 白盒测试中的路径覆盖含义(p68)。你会设计路径覆盖吗?上课时我已讲过案例。白盒测试中的覆盖标准包括:语句覆盖(最弱)、判定覆盖、条件覆盖等等。。

路径覆盖的含义是,选取足够多测试数据,使程序的每条可能路径都至少执行一次(如果程序图中有环,则要求每个环至少经过一次)。

7. 基本路径测试技术设计测试用例(p70-73),,,要求会画流图,会计算环形复杂度。

基本路径测试是Tom McCabe提出的一种白盒测试技术。

使用这种技术设计测试用例时,首先计算程序的环形复杂度,并用该复杂度为指南定义执行路径的基本集合,从该基本集合导出的测试用例可以保证程序中的每条语句至少执行一次,而且每个条件在执行时都将分别取真、假两种值。

第一步,根据过程设计结果画出相应的流图。

3 第二步,计算流图的环形复杂度。

环形复杂度定量度量程序的逻辑复杂性。

第三步,确定线性独立路径的基本集合。

独立路径是指至少引入程序的一个新处理语句集合或一个新条件的路径,用流图术语描述,独立路径至少包含一条在定义该路径之前不曾用过的边。

使用基本路径测试法设计测试用例时,程序的环形复杂度决定了程序中独立路径的数量,而且这个数是确保程序中所有语句至少被执行一次所需的测试数量的上界。

8. 黑盒测试力图发现下述类型的错误(p79)

黑盒测试力图发现下述类型的错误:

①功能不正确或遗漏了功能;

②界面错误;

③数据结构错误或外部数据库访问错误;

④性能错误;

⑤初始化和终止错误。

9. 等价划分的概念和理解(p82)

等价划分是一种黑盒测试技术,这种技术把程序的输入域划分成若干个数据类,据此导出测试用例。一个理想的测试用例能独自发现一类错误。

等价划分法力图设计出能发现若干类程序错误的测试用例,从而减少必须设计的测试用例的数目。

七:维护

维护的工作量是软件工程中最多的,比开发时间还要多。软件工程的目的是要提高软件的可维护性,减少软件维护所需要的工作量,降低软件系统的总成本。

1. 4项软件维护工作(p4)

有4项活动,具体地定义软件维护:

改正性维护

适应性维护

完善性维护

预防性维护

2. 软件的可维护性(p23)

决定软件可维护性的因素主要有下述5个:

(1). 可理解性(2). 可测试性(3). 可修改性

(4). 可移植性 (5). 可重用性

八:面向对象方法学引论

1. 面向对象方法学的4个要点(p5-8)

(1)认为客观世界是由各种对象组成的。

面向对象方法:对象分解 传统方法:功能分解

(2) 把所有对象都划分成各种对象类(简称为类,class),每个对象类都定义了一组数据和一组方法。

4 数据专有,方法共享

(3) 按照子类(或称为派生类)与父类(或称为基类)的关系,把若干个对象类组成一个层次结构的系统(也称为类等级)。

继承(inheritance)

(4) 对象彼此之间仅能通过传递消息互相联系。

对象与传统的数据有本质区别,它不是被动地等待外界对它施加操作,相反,它是进行处理的主体,必须发消息请求它执行它的某个操作,处理它的私有数据,而不能从外界直接对它的私有数据进行操作。

封装性

2. 面向对象的一些概念:对象、类、实例、消息、属性、方法、封装、继承、多态、重载

3. 面向对象建模,需要建立3种模型(p31)

描述系统数据结构的对象模型;

描述系统控制结构的动态模型;

描述系统功能的功能模型。

4. 用例图的概念(p59-60)

一幅用例图包含的模型元素有系统、行为者、用例及用例之间的关系。

系统

系统被看作是一个提供用例的黑盒子。

代表系统的方框的边线表示系统的边界,用于划定系统的功能范围,定义了系统所具有的功能。

描述该系统功能的用例置于方框内,代表外部实体的行为者置于方框外。

5. 用例(p61)和行为者(p64)的概念。能根据给定的图判断出用例和行为者。设计一个银行存储系统的用例图

一个用例是可以被行为者感受到的、系统的一个完整的功能。

用例具有下述特征:

用例代表某些用户可见的功能,实现一个具体的用户目标;

用例总是被行为者启动的,并向行为者提供可识别的值;

用例必须是完整的。

行为者是指与系统交互的人或其他系统,它代表外部实体。使用用例并且与系统交互的任何人或物都是行为者

九:面向对象分析

不论采用哪种方法开发软件,面向对象分析的过程都是提取系统需求的过程。

1.三个子模型(p6)

静态结构(对象模型)、交互次序(动态模型)和数据变换(功能模型)

2. 对象模型的5个层次(p7)

主题层 类与对象层 结构层 属性层 服务层

3. 建立动态模型的步骤(p47)。建立动态模型时,通常使用能够描述事件序列的脚本。

第一步,是编写典型交互行为的脚本。

第二步,从脚本中提取出事件,确定触发每个事件的动作对象以及接受事件的目标对象。

第三步,排列事件发生的次序,确定每个对象可能有的状态及状态间的转换关系,并用

状态图描绘它们。

最后,比较各个对象的状态图,检查它们之间的一致性,确保事件之间的匹配。

5 4. 脚本的概念:脚本是指系统在某一执行期间内出现的一系列事件。

十:面向对象设计

1. 面向对象设计的准则(p2)

优秀设计,就是权衡了各种因素,从而使得系统在其整个生命周期中的总开销最小的设计。

优秀软件设计的一个主要特点就是容易维护(60%以上的软件费用都用于软件维护)

2. 软件重用级别(p17)

(1) 代码重用

源代码剪贴

源代码包含

继承

(2) 设计结果重用

重用某个软件系统的设计模型(即求解域模型)。

这个级别的重用有助于把一个应用系统移植到完全不同的软硬件平台上。

(3) 分析结果重用

重用某个系统的分析模型。

这种重用特别适用于用户需求未改变,但系统体系结构发生了根本变化的场合。3. UML

1 2 6 4 2 5 6

1 2 6 1 5 5 6

6 6 3 4 6 6 7

1 1 3 4 2 5 7

2 2 6 2 5 6 6

5 5 3 5 5 6 3

6 6 3 4 6 3 7

5 5 7 5 5 6 7

6

5

5

7

5

8

8

8

8

发布者:admin,转转请注明出处:http://www.yc00.com/web/1689458176a251544.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信