软件工程复习大纲 2.docx
《软件工程复习大纲 2.docx》由会员分享,可在线阅读,更多相关《软件工程复习大纲 2.docx(14页珍藏版)》请在冰豆网上搜索。
软件工程复习大纲2
第一章软件工程学概述
1.什么是软件危机?
软件危机表现在哪些方面?
软件危机是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。
(1)软件开发成本和进度难以控制
(2)用户需求不明确、变更过多(3)软件质量差(4)软件维护困难(5)软件成本日益增长(6)开发进度难以控制(7)软件产品“供不应求”
2.软件工程是指什么?
软件工程的性质是什么?
软件工程就是为了经济地获得可靠的且能在实际机器上有效地运行的软件,而建立和使用完善的工程原理。
或者:
①把系统的、规范的、可度量的途径应用于软件开发、运行和维护过程;②研究①中提到的研究。
1)软件工程关注于大型程序的构造
2)软件工程的中心课题是控制复杂性
3)软件经常变化
4)开发软件的效率非常重要
5)和谐地合作是开发软件的关键
6)软件必须有效地支持它的用户
7)在软件工程领域中是由具有一种文化背景的人替具有另一种文化背景的人
3.软件工程面临的问题有哪些?
4.什么是软件工程过程?
它包含哪些过程?
5.什么是软件生存周期,它包括哪些活动?
软件生存周期由定义、开发、运行维护三个时期组成,每个时期又进一步可划分为若干个阶段。
问题定义,可行性研究,需求分析,总体设计,详细设计,编码和单元测试,综合测试,共七个。
6.什么是软件生存周期模型?
它有哪些主要模型,各个的含义及适用场合是什么?
软件生命周期模型是从软件项目需求定义直至软件经使用后废弃为止,跨越整个生存周期的系统开发、运作和维护所实施的全部过程、活动和任务的结构框架。
目前常见的模型有瀑布模型(历史悠久、广为人知,它的优势在于它是规范的
文档驱动的方法;这种模型的问题是,最终开发出的软件产品可能不是哟偶那个湖真正需要的)、快速原型模型(为了克服瀑布模型的缺点而设计,通过一个快速构建起来起一个可在计算机上运行的原型系统,让用户使用原型并收集用户反馈意见的办法,获取用户的真正需求)、增量模型(具有可在软件开发的早期阶段使投资获得明显回报的较易维护的优点,但是要求软件具有开放的结构是使用这种模型时固有的困难)、螺旋模型(适用于内部开发的大型软件项目,但是只有在开发人员具有风险分析和排除分先的经验及专门知识时,使用这种模型才会取得成功)等。
7.结构化方法总的指导思想是什么?
8.软件开发的目标是什么?
第二章可行性研究
1、可行性研究的任务有哪些?
可行性研究的主要任务是“了解客户的要求及现实环境,从技术、经济和社会因素等三方面研究并论证本软件项目的可行性,编写可行性研究报告,制定初步项目开发计划。
”
可行性研究的最根本任务:
对软件开发以后的行动方针提出建议。
2、可行性研究包括哪些步骤?
1)复查系统规模和目标
2)研究目前正在使用的系统
3)导出新系统的高层逻辑模型
4)进一步定义问题
5)导出和评价供选择的解法
6)推荐行动方针
7)草拟开发计划
8)书写文档提交审查
3、可行性研究报告包括哪些主要内容?
引言(编写目的、背景、定义、参考资料),可行性研究的前提(要求、目标、条件、假定和限制、进行可行性研究的方法、评价尺度),对现有系统的分析(数据流程和处理流程、工作负荷、费用开支、人员、设备、局限性),所建议的系统(对所建议系统的说明、数据流程和处理流程、改进之处、影响、局限性、技术条件方面的可行性),可选择的其他方案,投资和收益分析,社会条件方向的可能性
4、什么是数据流图?
其作用是什么?
通过什么完成其细化操作?
其中的基本符号各表示什么含义?
数据流图是一种图形化技术,它描绘信息流和数据从输入移动到输出的过程中所经受的变换。
在数据流图中没有任何具体的物理部件,它只是描绘数据在软件中流动和被处理的逻辑过程,是系统逻辑功能的图形表示,即使不是专业的计算机技术人员也容易理解它,因此是分析员与用户之间极好的通信工具。
设计数据流图时只需考虑系统必须完成的基本逻辑功能,完全不需要考虑怎样具体地实现这些功能,所以它也是今后进行软件设计的很好的出发点。
细化:
为了表达数据处理过程的数据加工情况,需要采用层次结构的数据流图。
按照系统的层次结构进行逐步分解,并以分层的数据流图反映这种结构关系,能清楚地表达和容易理解整个系统。
4种基本符号:
正方形(或立方体)表示数据的源点或终点;圆角矩形(或圆形)代表变换数据的处理;开口矩形(平行线)代表数据存储;箭头表示数据流,即特定数据的流动方向。
5、什么是数据字典?
其作用是什么?
它有哪些条目?
和数据流图之间有什么关系?
数据字典是关于数据的信息的集合,也就是对数据流图种包含的所有元素的定义的集合。
作用是在软件分析和设计的过程中给人提供关于数据的描述信息。
数据流图和数据字典共同构成系统的逻辑模型,没有数据字典数据流图就不严格,没有数据流图数据字典也难于发挥作用。
6、建立数据字典的形式是什么?
一般说来,数据字典应该由对下列4类元素的定义组成:
(1)数据流
(2)数据流分量(即数据元素)(3)数据存储(4)处理
CASE结构化分析与设计工具(大型软件)来实现
7、结构化语言的结构由哪些部分组成?
8、结构化分析方法的描述工具有哪些?
第三章需求分析
1、需求分析的基本任务是什么?
目标是什么?
基本任务不是确定系统怎样完成它的工作,而是确定系统必须完成哪些工作,也就是对目标系统提出完整、准确、清晰、具体的要求。
目的是确定目标系统必须具备哪些功能。
具体如下:
(1)确定对系统的综合要求
功能需求、性能需求、可靠性和可用性需求、出错处理需求、接口需求、约束、逆向需求、将来可能提出的要求,共8项
(2)分析系统的数据要求
(3)导出系统的逻辑模型
(4)修正系统开发计划
2、需求分析的难点主要表现在哪些方面?
Ø需求获取和分析有一定的难度,因为:
1)项目相关人员通常并不真正知道希望计算机做什么,让他们清晰的表达出需要系统做什么是件困难的事,他们或许提出不切实际的要求。
2)项目相关人员用自己的语言表达需求,这些语言包含很多工作中的专业术语和专业知识。
系统分析员没有这些知识和经验,而他们又必须了解这些需求。
3)不同的项目相关人员有不同的需求,可能以不同的方式表达,分析人员必须发现所有潜在的需求资源,而且能发现这些需求的相容或冲突之处。
)经济和业务环境决定了分析是动态的,需求在分析过程中会发生变更。
个别需求的重要程度会改变,新的需求会从新的项目相关人员那里得到。
3、ER图的含义及绘制方法。
ER图----是用来建立数据模型的工具。
ER图中包含了实体(即数据对象)、关系和属性等3种基本成分。
通常用矩形框代表实体;用连接相关实体的菱形框表示关系;用椭圆形或圆角矩形表示实体(或关系)的属性;并用直线把实体(或关系)与其属性连接起来。
4、状态转换图的含义及描制方法。
状态转换图(简称为状态图):
通过描绘系统的状态及引起系统状态转换的事件,来表示系统的行为。
此外,状态图还指明了作为特定事件的结果系统将做哪些动作(例如,处理数据)。
初态用实心圆表示,终态用一对同心圆(内圆为实心圆)表示。
中间状态用圆角矩形表示,可以用两条水平横线把它分成上、中、下3个部分。
上面部分为状态的名称,这部分是必须有的;中间部分为状态变量的名字和值,这部分是可选的;下面部分是活动表,这部分也是可选的。
活动表的语法格式:
事件名(参数表)/动作表达式
其中,“事件名”可以是任何事件的名称。
在活动表中经常使用下述3种标准事件:
entry,exit和do。
entry事件指定进入该状态的动作,exit事件指定退出该状态的动作,而do事件则指定在该状态下的动作。
需要时可以为事件指定参数表。
活动表中的动作表达式描述应做的具体动作。
状态图中两个状态之间带箭头的连线称为状态转换,箭头指明了转换方向。
状态变迁通常是由事件触发的,在这种情况下应在表示状态转换的箭头线上标出触发转换的事件表达式;如果在箭头线上未标明事件,则表示在源状态的内部活动执行完之后自动触发转换。
事件表达式的语法:
事件说明[守卫条件]/动作表达式
事件说明的语法为:
事件名(参数表)。
守卫条件是一个布尔表达式。
如果同时使用事件说明和守卫条件,则当且仅当事件发生且布尔表达式为真时,状态转换才发生。
如果只有守卫条件没有事件说明,则只要守卫条件为真状态转换就发生。
动作表达式是一个过程表达式,当状态转换开始时执行该表达式。
第五章总体设计
1、什么是软件总体设计?
软件总体设计的基本任务是什么?
总体设计又称概要设计或初步设计,目的是回答“概括地说,系统应该如何实现?
”这个问题。
基本任务:
(1)系统方案设计
首先以数据流图为基础寻找实现目标系统的各种不同的方案,为每个合理的方案准备一份系统流程图,列出组成系统的所有物理元素(程序、文件、数据库、人工过程和文档等等,每个物理元素仍然处于黑盒子级),进行成本/效益分析,制定实现这个方案的进度计划。
(2)综合分析比较这些合理的方案,从中选出一个最佳方案。
(3)体系结构设计
设计软件的结构,确定系统中每个程序是由哪些模块组成的,以及这些模块相互间的关系。
2、衡量模块独立的两个标准是什么?
它们各表示什么含义?
模块独立程度的度量标准:
内聚和耦合。
耦合:
模块间互相依赖(连接)的紧密程度。
耦合强弱取决于模块间接口的复杂程度,进入或访问一个模块的点,以及通过接口的数据。
内聚:
模块内部各个元素彼此结合的紧密程度,是信息隐藏和局部化概念的自然扩展。
3、什么是软件结构?
结构图的主要内容有哪些?
软件结构(SoftwareStructure)是指一种层次表况,由软件组成成分构造软件的过程、方法和表示。
结构图和层次图类似,也是描绘软件结构的图形工具。
不仅能够表示软件结构,而且还能够表示出模块接口间信息的传递关系,是一种较好的开发与维护人员通信的工具
结构图基本符号:
方框——模块,框内注明模块的名字或或主要功能
方框间连线——模块调用关系(上方的模块调用下方的模块)
带注释的箭头——模块间传递的信息
箭头尾部空心圆——数据信息
箭头尾部实心圆——控制信息
还有一些附加的符号,可以表示模块的选择调用或循环调用。
4、什么是面向数据流的设计方法?
它有哪些策略?
面向数据流的设计方法:
把数据流图中的信息流映射成软件结构。
信息流包括:
变换流和事物流。
(1)变换分析:
把数据流图按预先确定的模式映射成软件结构的一系列设计步骤的总称。
(2)事物分析在数据流具有明显的事务特点时,也就是有一个明显的“发射中心”(事务中心)时,还是以采用事务分析方法为宜。
(3)设计优化:
模块功能的完善化;消除重复功能,改善软件结构。
5、软件设计的基本原理是什么?
模块化、抽象、逐步求精、信息隐蔽和局部化、模块独立。
6、画结构图应该注意的事项是什么?
画结构图应注意的事项如下:
①同一名字的模块在结构图中仅出现一次.
②调用关系只能从上到下.
③不严格表示模块的调用次序,习惯上从左到右.有时为了减少连线的交叉,适当地调整同一层模块左右位置,以保持结构图的清晰性.
7、衡量模块独立性的两个定性的度量标准是什么?
模块独立:
具有独立功能而且和其他模块之间没有过多的相互作用的模块。
模块独立程度的度量标准:
内聚和耦合。
8、什么是耦合性?
模块的耦合性有哪些内容?
各种耦合性的排列顺序是什么?
耦合:
模块间互相依赖(连接)的紧密程度;
影响耦合强度的因素:
1)一个模块对另一个模块的引用;
2)一个模块向另一个模块传递的数据量;
3)一个模块施加到另一个模块的控制的数量;
4)模块之间接口的复杂程度。
在软件设计中应该追求尽可能松散耦合。
对模块的测试或维护时,不需要对系统的其他模块有很多了解。
此外,由于模块间联系简单,发生在一处的错误传播到整个系统的可能性就很小。
因此,模块间的耦合程度强烈影响系统的可理解性、可测试性、可靠性和可维护性。
内容耦合、公共耦合、控制耦合、标记耦合、数据耦合,由强到弱
9、什么是内聚性?
模块的内聚性有哪些内容?
各种内聚性的排列顺序是什么?
内聚:
模块内部各个元素彼此结合的紧密程度。
偶然内聚、逻辑内聚、时间内聚、过程内聚、通信内聚、顺序内聚、功能内聚,由弱到强
软件结构中应多使用功能内聚类型的模块。
1)一个模块一个功能,是软件设计人员模块化设计的一条准则。
2)中内聚模块可以使用
3)低内聚模块因为组成部分松散,可维护性和可重用性都比较差,应避免使用。
低内聚:
偶然内聚,逻辑内聚,时间内聚
中内聚:
过程内聚,通信内聚
高内聚:
顺序内聚,功能内聚;
内聚度高,耦合弱,标志着模块的独立性强;反之,内聚度低,耦合就强,标志着模块的独立性差。
内聚和耦合是密切相关的,模块的高内聚往往意味着模块间的松耦合。
内聚和耦合都是进行模块化设计的有力参考指标。
实践证明,内聚比耦合更重要,应该把更多注意力集中到提高模块的内聚度上来。
10、何谓模块独立性?
模块独立:
具有独立功能而且和其他模块之间没有过多的相互作用的模块。
模块独立的重要性:
第一,具有独立模块的软件比较容易开发。
第二,独立模块比较容易测试和维护。
11、什么是“变换流”?
信息沿输入通路进入系统,同时由外部形式变换成内部形式,进入系统的信息通过变换中心,经加工处理以后再沿输出通路变换成外部形式离开软件系统。
当数据流图具有这些特征时,这种信息流叫做变换流。
12、什么是“事务流”?
事务流:
数据沿输入通路到达一个处理T,这个处理根据输入数据的类型在若干个动作序列中选出一个来执行。
这种数据流叫做事物流。
第六章详细设计
1、软件详细设计的基本任务包括那些?
详细设计的目标:
得出对目标系统的精确描述,从而在编码阶段可以把这个描述直接翻译成用某种程序设计语言书写的程序。
详细设计的任务:
是对总体设计阶段划分出的每个模块进行明确的算法描述。
模块的内部过程描述就是模块内部的算法设计。
2、结构化程序设计的定义,进行结构化程序设计的基本要点有哪些?
结构化程序设计:
如果一个程序的代码块仅仅通过顺序、选择和循环这3种基本控制结构进行连接,并且每个代码块只有一个入口和一个出口,则称这个程序是结构化的。
经典的结构程序设计:
只允许使用顺序、IF-THEN-ELSE型分支和DO-WHILE型循环这3种基本控制结构;
扩展的结构程序设计:
除了3种基本控制结构之外,还允许使用DO-CASE型多分支结构和DO-UNTIL型循环结构;
结构程序设计是尽可能少用GOTO语句,仅在检测出错误时才使用GOTO语句,而且总是使用前向GOTO语句。
3、过程设计的工具有哪些?
各种工具的实现原理及优缺点是什么?
描述程序处理的过程的工具称为过程设计的工具,它们可以分为图形、表格和语言三类。
程序流程图、盒图、pad图、判定表、判定树、过程设计语言。
程序流程图:
通过一些常用的控制结构和基本符号实现
优点:
对控制流程的描绘很直观,便于初学者掌握。
缺点:
(1)不是逐步求精的好工具,它诱使程序员过早地考虑程序的控制流程,而不去考虑程序的全局结构。
(2)用箭头代表控制流,程序员不受任何约束,可以完全不顾结构程序设计的精神,随意转移控制。
(3)不易表示数据结构。
使用对策:
只用结构程序设计允许的五种图示结构
N-S图的特点:
一种不允许违背结构程序设计精神的图形工具。
又称为N-S图。
(1)一个特定控制结构的功能域(作用域)明确。
(2)盒图没有箭头,不可能任意转移控制。
(3)很容易确定局部和全程数据的作用域。
(4)很容易表现嵌套关系,也可以表示模块的层次结构。
灵活性较差。
Pad图:
PAD是问题分析图(problemanalysisdiagram)。
它用二维树形结构的图来表示程序的控制流。
PAD图的主要优点如下:
(1)使用PAD符号设计的程序必然是结构化程序。
(2)PAD图所描绘的程序结构十分清晰。
最左面的竖线是程序的主线,即第一层结构。
每增加一个层次,PAD图形向右扩展一条竖线。
图中竖线的总条数就是程序的层次数。
(3)PAD图表现的程序逻辑,易读、易懂、易记。
程序从图中最左竖线上端的结点开始执行,自上而下,从左向右顺序执行,遍历所有结点。
(4)容易将PAD图转换成高级语言源程序,这种转换可用软件工具自动完成。
判定表:
适于表示复杂的条件组合与应做的动作之间的对应关系。
一张判定表由以下四部分组成:
(1)左上部列出所有条件。
(2)左下部是所有可能的动作。
(3)右上部是表示各种条件组合的一个矩阵。
(4)右下部是和每种条件组合相对应的动作。
判定表右半部的每一列实际上就是一个规则,规定了与特定的条件组合相对应的动作。
判定表能够简洁而又无歧义地描述处理规则。
但是判定表并不适于作为一种通用的设计工具,没有一种简单的方法使它能同时清晰地表示顺序和重复等处理特性。
判定树:
判定树是判定表的变种,也能清晰地表示复杂的条件组合与应做的动作之间的对应关系。
判定树的优点:
形式简单到不需任何说明,一眼就可以看出其含义,易于掌握和使用。
简洁性差,可能有重复。
过程设计语言:
过程设计语言(PDL)也称为伪码,它是用正文形式表示数据和处理过程的设计工具。
语言的正文用基本控制结构进行分割,处理过程中的操作用自然语言短语来表示。
因此,PDL是一种“混杂”语言,它使用一种自然语言的词汇表示处理,使用结构化的程序设计语言表示语法。
PDL的优点:
(1)可以作为注释直接插在源程序中间。
促使维护人员在修改程序代码的同时也相应地修改PDL注释,因此有助于保持文档和程序的一致性,提高了文档的质量。
(2)可以使用普通的正文编辑程序或字处理系统,完成PDL的书写和编辑工作。
(3)可利用自动处理程序,由PDL生成程序代码。
PDL的缺点:
不如图形工具形象直观,描述复杂的条件组合与动作间的对应关系时,不如判定表清晰简单。
4、熟悉运用程序流程图、N-S盒图、PAD工具进行程序的描述设计。
第七章实现
1、软件测试的基本任务?
测试阶段的根本目标是尽可能多地发现并排除软件中潜藏的错误,最终把一个高质量的软件系统交给用户使用。
2、测试与调试的主要区别?
1,软件测试是找出软件已经存在的错误,而调试是定位错误,修改程序以修正错误.
2,软件测试从一个已知的条件开始,有预知的结局而调试从未知的条件开始,其结局不可预知
3,软件测试可以计划,可以预先制定测试用例和过程,工作进度可以度量.而调试不能计划,进度不可度量.
4,调试是在测试之后,在方法,思路,策略上都有所不同.
5,测试的对像可以是文档和代码而调试的对像只能是代码
6.调试是随机性的由程序员完成为了程序可运行
测试是有目的性的由测试人员完成为了程序可完成指定功能
3.什么是黑盒测试?
黑盒测试主要采用的技术有哪些?
如果已经知道了产品应该具有的功能,可以通过测试来检验是否每个功能都能正常使用----称为黑盒测试。
技术:
(1)等价划分
(2)边界值分析
(3)错误推测
4.什么是白盒测试?
白盒测试主要采用的技术有哪些?
如果知道产品的内部工作过程,可以通过测试来检验产品内部动作是否按照规格说明书的规定正常进行----称为白盒测试。
技术:
(1)逻辑覆盖:
有选择地执行程序中某些最有代表性的通路是对穷尽测试的唯一可行的替代方法。
(语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、条件组合覆盖、点覆盖、边覆盖、路径覆盖)
(2)控制结构测试:
根据程序的控制结构设计测试数据(基本路径测试、条件测试、循环测试)
5.路径测试技术中几种主要覆盖的含义?
举例说明?
6.等价分类法的测试技术采用的一般方法?
举例说明?
掌握根据测试技术进行用例设计的方法。
第八章维护
1、软件的维护的定义及分类。
软件维护----就是在软件已经交付使用之后,为保证软件在相当长的时期能够正常运作所进行的软件活动。
维护的类型有四种:
改正性维护
适应性维护
扩充与完善性维护
预防性维护
第九章-第十一章面向对象方法学
1、试述面向对象方法的开发过程是怎样的?
●面向对象方法是一种新的思维方法,它是把程序看作是相互协作而又彼此独立的对象的集合。
●这样就减小了语义断层:
系统中解空间对象可以直接模拟问题空间的对象,解空间与问题空间的结构十分一致。
面向对象方法具有下述4个要点:
(1)认为客观世界是由各种对象组成的,任何事物都是对象,复杂的对象可以由比较简单的对象以某种方式组合而成。
因此,面向对象的软件系统是由对象组成的。
(2)类(class)是对一组对象的抽象,集中了该组对象的共同特性(一组数据和一组方法)。
对象是类的实例。
(3)按照子类(或称为派生类)与父类(或称为基类)的关系,把若干个对象类组成一个层次结构的系统(也称为类等级)。
在这种结构中,下层的派生类自动具有和上层的基类相同的特性,这种现象称为继承(inheritance)。
(4)对象彼此之间仅能通过传递消息互相联系。
一切局部于该对象的私有信息,都被封装在该对象类的定义中,就好像装在一个不透明的黑盒子中一样,在外界是看不见的,更不能直接使用,这就是“封装性”。
●面向对象的方法学可以用下列方程来概括:
OO=objects+classes+inheritance+communicationwithmessages
●面向对象就是既使用对象又使用类和继承等机制,而且对象之间仅能通过传递消息实现彼此通信。
●也可以说,只有同时使用对象、类、继承和消息的方法,才是真正面向对象的方法。
2、简述对象、类、类结构、消息、方法的基本概念。
对象是封装了数据结构及可以施加在这些数据结构上的操作的封装体,这个封装体有可以唯一地标识它的名字,而且向外界提供一组服务(公有的操作)。
类:
对具有相同数据和相同操作的一组相似对象的定义。
消息:
就是要求某个对象执行定义它的那个类中所定义的某个操作的规格说明。
方法:
就是对象所能执行的操作,也就是类中所定义的服务。
3、面向对象的定义是什么?
4、功能模型的特征有哪些?
5、继承性和多态性的好处是什么?
继承性:
使得相似的对象可以共享程序代码和数据结构,从而大大减少了程序中的冗余信息。
使得用户在开发新的应用系统时不必完全从零开始,可以继承原有的相似系统的功能或者从类库中选取需要的类,在派生类中实现一个新的方法。
多态性:
增加了面向对象软件系统的灵活性,进一步减少了信息冗余,而且显著提高了软件的可重用性和可扩充性。
6、简述三种面向对象模型的主要功能,以及三者之间的关系。
面向对象建模技术所建立的3种模型,分别从3个不同侧面描述了所要开发的系统。
功能模型指明了系统应该“做什么”;
动态模型明确规定了什么时候(即在何种状态下接受了什么事件的触发)做;
对象模型则定义了做事情的实体。
关系:
(1)针对每个类建立的动态模型(状态转换图),描述了类实例的生命周期或运行周期。
(2)状态转换图中,事件引发行为,行为可改变状态并产生事件,这些行为在数据流图中被映射成处理,在用例图中被映射成用例,它们同时与类图中的服务相对应。
行为者与系统的交互常为事件。
(3)功能模型中的处理(或用例)对应于对象模型中的类所提供的服务。
复杂的处理(或用例)对应于复