《软件工程》复习大纲.docx
《《软件工程》复习大纲.docx》由会员分享,可在线阅读,更多相关《《软件工程》复习大纲.docx(13页珍藏版)》请在冰豆网上搜索。
《软件工程》复习大纲
第一章
1.软件:
是能够完成预定功能和性能的可执行的计算机程序。
包括使程序正常执行所需的数据,以及有关描述程序操作和使用的文档。
即:
软件=程序+文档
2.软件的特征:
软件的开发不同于硬件设计、不同于硬件制造、不同于硬件维修。
3.软件危机出现的原因:
软件维护费用的急剧上升,直接威胁计算机应用的扩大;
4.软件生产技术进步缓慢,是家居软件危机的重要原因。
5.软件工程学的范畴:
软件开发技术(软件开发方法学、软件工具、软件工程环境)、软件工程管理(软件管理学、软件经济学、度量学)。
6.软件工程:
是指导计算机软件开发和维护的工程学科。
它采用工程的概念、原理、技术和方法来开发与维护软件,目的是为了实现按照预期的进度和经费完成软件生产计划,同时提高软件的生产率和可靠性。
7.软件的发展:
大体经历了程序、软件、软件产品3个阶段。
8.工具和方法是软件开发技术的两大支柱。
9.三种编程范型:
过程式编程范型、面向对象编程范型、基于构件技术的编程范型。
10.三代软件工程:
①传统软件工程②面向对象软件工程③基于构件的软件工程。
第二章
1.软件生存周期:
计划、开发、运行3个时期。
2.软件生存周期的主要活动:
需求分析—》软件分析—》软件设计—》编码测试—》软件测试—》运行维护
注:
需求分析(用户视角):
功能需求、性能需求、环境约束、外部接口描述。
软件分析(开发人员视角):
建立与需求模型一致的,与实现无关的软件分析模型。
软件设计:
总体设计/概要设计、详细设计(确定软件的数据结构和操作)。
单元测试通常与编码同时进行。
软件测试:
单元测试、集成测试、系统测试。
3.软件过程:
围绕软件开发所进行的一系列活动。
4.瀑布模型是一种基于软件生存周期的线性开发模型。
5.瀑布模型特点:
阶段间的顺序性和依赖性、推迟实现的观点、保证质量的观点。
6.瀑布模型存在的问题:
只有在需求分析准确的前提下,才能得到预期的结果。
7.常见的演化模型(渐增式、迭代式):
增量模型、螺旋模型。
8.增量模型:
结合瀑布模型的顺序特征与快速原型法的迭代特征。
增量:
小而可用的软件
9.一般情况下,第一个增量是软件的核心部分。
如(增量一:
需求-设计-实现和集成-交付客户)
10.螺旋模型(目前最常用):
当项目按照顺时针方向沿螺旋线移动时,每轮螺旋包含:
计划、风险分析、建立原型、用户评审4种活动。
(高风险的大型软件采用此方法)
第三章
1.结构化设计SD;结构化分析SA;软件需求规格说明书SAS;结构图SC;数据字典DD;状态转换图STD;数据流图DFD
2.SA需求分析的两项基本任务:
建立系统分析模型、编写软件需求规格说明书。
3.分析模型组成:
功能模型、数据模型、行为模型3种。
4.抽象和分解是结构化分析的主要指导思想,细化的实质是分解。
分解和细化是软件设计的策略。
5.需求分析的步骤:
需求获取、需求提炼、需求描述、需求验证。
6.SA模型的组成:
如下图
7.SA模型的描述:
a)DFD、DD、PSPEC。
(它们是早期SA模型的基本组成部分)
b)CFD、CSPEC和STD。
(它们是早期SA模型的扩展部分)
c)E-R图(适用于描述具有复杂数据结构的软件数据模型)
8.画分层数据流图:
★例题3-8
9.模块设计(详细设计)的主要任务是编写软件的模块设计说明书。
目的是确定模块采用的算法和块内数据结构。
10.模块设计的原则:
清晰第一的设计风格、结构化的控制结构、逐步细化的实现方法
11.“结构化”保证程序的清晰、易读,“逐步细化”实现程序的正确、可靠。
结构化程序设计原理和逐步细化的实现方法是完成模块设计的基础。
第四章
1.面向对象是以问题空间中出现的物体为中心进行模型化的一种技术。
面向对象技术通过抽象化现实世界中的物体,来描述一个系统。
2.对象是客观世界的实体或概念在计算机中的表示。
一个对象是具有唯一对象名和固定对外接口的一组属性和操作集合,用来模拟组成或影响现实世界的一个或一组因素。
3.面向对象的基本特征:
抽象、封装、集成、多态。
4.面向对象开发的优点:
提高软件系统的可复用性、可扩展性、可维护性。
5.类与对象的关系:
可看成是抽象与具体的关系。
组成类的每个对象都是该类的实例,实例是类的具体事务,类是各个实例的综合抽象。
通过类还可以生成许多同类型的对象。
6.UML的组成:
UML的模型元素、UML的元模型结构、图和视图。
7.UML的4个抽象层次:
用户模型、模型、元模型、元元模型。
8.UML的2类图:
静态图(用例图、类图、对象图、构件图、部署图);
动态图(状态图、时序图、协作图、活动图)
5种视图:
用例视图、逻辑视图、进程视图、构件视图、部署视图。
9.UML的特点:
同意标准、面向对象、表达能力强,可视化。
10.用例图就是由主角、用例以及它们之间的关系构成的图。
该图说明了用例模型中的关系。
用例模型由一组用例图组成,其基本组成部件是用例、参与者和系统。
11.类图:
是显示了模型的静态结构,特别是模型中存在的类、类的内部结构以及它们与其他类的关系等。
类图最基本的元素是类或者接口。
12.对象图是显示了一组对象和他们之间的关系。
使用对象图来说明数据结构,类图中的类或组件等的实例的静态快照。
对象图和类图一样反映系统的静态过程,但它是从实际的或原型化的情景来表达的。
13.状态图是描述一个实体基于事件反应的动态行为,显示了该实体如何根据当前所处的状态对不同的事件做出反应的。
14.时序图用来描述对象之间的动态交互,着重体现对象间消息传递的时间顺序。
15.协作图用来描述相互协作的对象间的交互和链接。
16.构件图显示软件构件之间的依赖关系。
17.部署图描述系统硬件的物理拓扑结构以及在此结构上执行的软件。
第五章
1.软件需求主要指一个软件系统必须遵循的条件或具备的能力。
2.软件需求的3个层次:
业务需求、用户需求、功能需求。
软件项目中40%~60%的问题源自软件需求阶段。
3.软件需求的6个特性:
功能性、可用性、可靠性、性能、可支持性、设计约束。
4.需求工程与需求分析之间的区别:
Ø需求工程是指应用已证实有效的技术、方法进行需求分析,确定客户需求,帮助分析人员理解问题并定义目标系统的所有外部特征的一门学科。
它通过合适的工具和记号系统地描述待开发系统及其行为特征和相关约束,形成需求文档,并对用户不断变化的需求演进给予支持。
Ø所谓"需求分析",是指对要解决的问题进行详细的分析,弄清楚问题的要求,包括需要输入什么数据,要得到什么结果,最后应输出什么。
5.需求分析的步骤:
需求获取、需求建模、需求描述(编写SRS)、需求验证。
6.需求分析的主要任务:
建立需求模型。
需求分析是迭代过程。
第六章
1.面向对象分析的任务是:
将需求阶段产生的需求模型转换为软件分析模型。
面向对象设计的任务是:
将分析阶段建立的分析模型转换为软件设计模型。
2.面向对象分析OOA的建模步骤:
需求理解、定义类和对象、标识对象的属性和操作、标识类的结构和层次、建立对象-关系模型、建立对象-行为模型、评审OOA模型。
3.OOA的优点:
同时加强了对问题空间和软件系统的理解;改进包括用户在内的软件分析有关的各类人员之间的交流;对需求的变化具有较强的适应性;很好的支持软件复用;确保从需求模型到设计模型的一致性。
4.分析模型(是一种概念模型)的特点:
全面覆盖软件的功能需求;分析模型与软件的实现无关;分析模型的表述方法与所采用的分析技术有关。
5.典型的五层次模型:
建立类/对象层(抽象出类和对象)、建立属性层(设计静态属性和关系)、建立服务层(定义动态属性和消息通信)、建立结构层(定义层次结构关系)、建立主题层(每个主题构成一个子系统)。
第七章
1.软件设计的基本概念:
模块(定义输入、输出和特性的程序实体)与构件、抽象与细化、信息隐藏、软件复用。
2.软件设计的基础:
分析阶段对目标系统的数据、功能、行为建模。
3.软件设计包括:
数据设计、体系结构设计、接口设计、过程设计。
4.模块的独立性从2个方面度量:
模块本身的内聚、模块之间的耦合。
5.内聚分类:
低内聚(偶然性内聚、逻辑性内聚、时间性内聚)、中内聚(过程性内聚、通讯性内聚)、高内聚(顺序性内聚、功能性内聚)。
6.耦合分类:
弱耦合(非直接耦合、数据耦合、特征耦合)、中耦合(控制耦合)、较强耦合(外部耦合、公共耦合)、强耦合(内容耦合)。
7.OO设计模型由系统架构层、类和对象层、消息层、责任层4个层次组成。
8.面向对象设计中,数据和过程被封装为类/对象的属性和操作;接口被封装为对象间的消息,而体系结构的设计则体现为系统的技术基础设施和具有控制流程的对象间的协作。
9.OOD的软件设计可划分为2个层次:
系统架构设计、系统元素设计。
10.系统架构设计的内容:
系统高层结构设计、确定设计元素、确定任务管理策略、实现分布式机制、设计数据存储方案、人机界面设计。
系统元素设计的内容:
子系统设计、分包设计、类/对象设计。
11.层次架构的基本原则:
将系统划分不同的层次。
确定设计元素的主要工作是:
确定设计类、子系统、子系统接口。
第八章
1,编码的目的:
使用选定的程序设计语言,把设计模型翻译为用该语言书写的源程序(或源代码)。
2,编码的风格:
清晰的前提下追求效率。
3.编码风格的要求:
使用标准的控制结构、实现源程序的文档化、满足用户友好的输入输出风格。
4.测试的特性:
挑剔型、复杂性、不彻底性、经济型。
5.测试分类:
静态分析(静态分析器分析、代码评审(代码会审、走查、办公桌检查));动态测试(黑盒测试(功能测试)、白盒测试(结构测试))。
6.测试文档内容:
测试计划、测试报告。
测试计划的主体是测试内容说明:
测试项目名称、测试目的、步骤和进度、测试用例设计。
测试报告的主题是测试结果:
测试项目名称、实测结果和期望结果的比较、发现问题、测试效果。
7.黑盒测试:
根据被测试程序功能来进行测试,也称功能测试。
白盒测试:
以程序结构为依据,又称结构测试。
8.黑盒测试分类:
等价类法、边界值法、错误猜测法。
9.白盒测试分类:
路经测试(点覆盖、边覆盖、路径覆盖)、逻辑覆盖测试(语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、条件组合覆盖)。
10.测试的层次性:
单元测试、集成测试、确认测试、系统测试。
(确认测试和系统测试都是对整个程序的测试,二者都属于高级测试)。
第九、十、十一、十二章
1.软件维护:
在一个软件产品交付使用后对其进行修改,以纠正故障、改进其性能和其他属性,或使产品适应改变了的环境。
目的:
满足用户对已开发产品的性能与运行环境不断提高的要求,进而延长软件的寿命。
分类:
完整性维护、适应性维护、纠错性维护等。
2.软件复用的定义:
利用工程知识或方法,由一已存在的系统,来建造一新系统。
目的:
这种技术,可改进软件产品质量和生产率。
还有软件检查、软件计量、软件可靠性、软件可维修性、软件工具评估和选择等。
软件复用能更快、更好、成本更低地生产软件制品。
3.软件可靠性:
在给定的时间内,程序按照规定的条件成功的运行的概率。
软件工程复习大纲
第一章
1.软件危机概念
指软件在开发和维护过程中所遇到的一系列严重问题。
两方面问题:
如何开发软件,以满足对软件日益增长的需求;如何维护数量不断膨胀的已有软件。
2.软将危机有哪些现象
典型表现:
对软件开发成本和进度的估计常常很不准确;
经常出现用户对“已完成的”软件产品不满意的情况;
软件产品的质量往往达不到需求;
难维护;
没有适当的文档资料;
软件成本在计算机系统总成本中所占的比列逐年上升;
软件开发生产效率提高的速度远远不能满足社会对软件产品的日益增长的需求。
3.软件工程概念
软件工程是指导计算机软件开发和维护的一门工程学科。
采用工程的概念、原理、技术和方法来开发与维护软件,把经过实践考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来,以经济地开发出高质量的软件并有效的维护它,这就是软件工程。
4.软件工程7条基本原理
用分阶段的生命周期计划严格管理;
坚持进行阶段评审;
实行严格的产品控制;
采用现代程序设计技术;
结果应能清楚的审查;
开发小组的人员应该少而精;
承认不断改进软件工程实践的必要性。
5.软件工程方法学包含3个基本要素是什么
方法、工具、过程;
方法:
完成软件开发的各项任务的技术方法,回答怎么样做的问题;
工具:
为运用方法而提供的自动的或半自动的软件工程支撑环境;
过程:
为了获得高质量的软件所需要完成的一系列任务的框架,它规定了完成各项任务的工作。
6.软件生命周期划分哪些阶段
3个时期:
软件定义、软件开发和运行维护
软件定义:
确定软件开发工程必须完成的总目标;确定工程的可行性;导出实现工程目标应该采用的策略及系统必须完成的功能;估计完成该项工程需要的资源和成本,并且制定工程进度表。
7.各阶段的任务是什么
1.问题定义必须确定要解决的问题是什么。
2.可行性研究对于上一个阶段所确定的问题有行得通的解决方法?
可行性研究的结果是客户做出是否继续进行这项工程的决定的重要依据。
3.需求分析为了解决这个问题,目标系统必须做什么确定目标系统必须具备的功能
4.总体设计怎样实现目标系统(抽象)提出方案(低成本,中成本,高成本)
5.详细设计把解法具体化。
应该怎样具体实现这个系统。
设计出程序的详细规格说明(包含必要的细节)
6.编码和单元测试写出正确的容易理解、容易维护的程序模块
7.综合测试通过过程类型的测试使软件达到预定的要求
8.软件维护通过各种必要的维护活动使系统持久地满足用户的需要。
改正性维护,适应性维护,完善性维护,预防性维护。
8.软件过程概念
软件过程描述为了开发出客户需要的团建,什么人、在什么时候、做什么事以及怎样做这些事以实现某一个特定的具体目标。
过程定义了运用方法的顺序、应该支付的文档资料、为保证软件质量和协调变化所需要采取的管理措施,以及标志软件开发各个阶段任务完成的里程碑。
9.软件过程模型都有哪些(瀑布模型……)
瀑布模型
快速原型模型(快速建立一个能反映客户需求的原型模型,让用户在计算机上试用,然后提出修给意见,开发人员再此基础上不断修改,用户不断测试,知道确定能做所需要的工作,开发人员便根据此书写规格说明文档。
根据这份文档开发出的软件便可以满足用户的真实需求)
增量模型(分批逐步向用户提交产品,整个软件产品被分解成许多个增量构件,开发人员一个构件接着一个构件的向用户提交产品)
螺旋模型(可看做在每个阶段之前都增加了风险分析过程的快速原型模型。
适用于内部开发的大规模软件项目)
喷泉模型
10.画图说明瀑布模型
11.瀑布模型有什么特点
1.阶段间具有顺序性和依赖性:
必须等前一段的工作完成之后,才能开始后一阶段的工作;前一阶段的输出文档就是后一阶段的输入文档。
前一段的输出文档正确,后一阶段的工作才能获得真正的结果。
2.推迟实现的观点:
在编码之前设置了系统分析与系统设计的各个阶段,分析与设计阶段的基本任务规定,在这两个阶段主要考虑目标系统的逻辑模型,不涉及软件的物理实现。
3.质量保证的观点:
坚持两个重要做法:
每个阶段都必须完成规定的文档,没有交出合格的文档就是没有完成该阶段的任务(运行时期对软件进行维护的重要依据);每个阶段结束前都要对所完成的文档进行评审,以便尽早发现问题,改正错误。
优点:
可强迫开发人员采用规范的方法;严格地规定了每个阶段必须提交的文档;要求每个阶段交出的所有产品都必须经过质量保证小组的仔细检查。
12.在软件生产中为什么强调管理(项目管理中介绍)
所谓的管理就是通过计划、组织和控制等一系列活动,合理配置和使用各种资源,以达到既定目标的过程。
软件项目管理过程从一组项目计划活动开始,而制定计划的基础是工作量估计和完成期限估计。
很多项目的失败都是因为管理不善。
第二章
1.可行性研究的目的
用最小的代价在尽可能短的时间内确定问题是否能够解决。
(基本目的是用较小的成本在较短的时间内确定是否存在可行的解法,忽略许多细节)
2.从哪些方面进行可行性研究
技术可行性;经济可行性;操作可行性。
3.系统流程图的作用
4.数据流图的作用;
数据流图是一种图形化技术,它描绘信息流和数据从输入移动到输出的过程中所经受的变换。
在数据流图中没有任何具体的物理部件,它只是描绘数据在软件中流动和被处理的逻辑过程。
只需考虑系统必须要完成的基本逻辑功能。
5.数据字典的作用,数据字典要定义哪些组成,画出仓库定货系统的组成
数据字典是关于数据的信息的集合,也就是对数据流图中包含的所有原色的定义的结合。
作用:
在软件分析和设计的过程中给人提供关于数据的描述信息。
有助于分析员和用户之间的通信。
定义组成:
顺序选择重复可选
第三章
1.需求分析任务
是软件定义时期的最后一个阶段,它的基本任务是准确的回答“系统必须做什么“这个问题。
(仅确定系统必须完成哪些工作,对目标系统提出完整、准确、清晰、具体的要求)
2.系统综合需求
功能需求:
制定系统必须提供的服务
性能需求:
系统必须满足的定时约束或容量约束
可靠性和可用性需求:
可靠性需求定量地指定系统的可靠性;可用性量化了用户可以使用系统的程度
出错处理需求:
说明系统对环境错误应该如何响应(错误不是由系统本身造成)
接口需求:
描述应用系统与它的环境通信的格式
约束:
设计约束或实现约束描述在设计或实现应用系统时应遵守的限制条件
逆向需求:
说明软件系统不应该做什么
将来可能提出的要求:
应该明确的列出那些虽然不属于当前系统开发范畴,但是据分析将来很可能会提出来的要求
3.什么叫模型,在需求分析中要建立哪些模型
模型,就是为了理解事物而对事物作出的一种抽象,是对事物的一种无歧义的书面描写。
数据模型、功能模型、行为模型
4.一些图的作用(E-R图,状态转换图,层次方框图,warnier图,IPO图)
实体-联系图(ER图):
为了把用户的数据要求清楚、准确的描述出来(描述数据模型)
状态转换图:
通过描绘系统的状态及引起系统状态转换的事件(动态模型)
层次方框图:
(数据的层次结构)
Warnier图:
数据的层次结构
IPO图:
描述输入、处理和输出之间的关系
5.从那些地方验证软件需求
一致性:
所有需求必须是一致的,任何一条需求不能和其他需求互相矛盾。
完整性:
需求必须是完整的,规格说明书应该包括用户需要的每一个功能或性能
现实性:
制定的需求应该是用现有的硬件技术和软件技术基本上可以实现的。
有效性:
必须证明需求是有效的,确实能解决用户面对的问题。
第五章
1.总体设计主要任务是什么
总体设计(概要设计,初步设计)的基本目的就是回答“概括地说,系统应该如何实现”这个问题。
设计过程首先寻找实现目标系统的各种不同的方案,需求分析阶段得到的数据力图是设想各种可能方案的基础。
2.什么是模块化,有什么优点
模块是由边界元素限定的相邻程序元素的序列,而且有一个总体标识符代表它。
模块化就是把程序划分成独立命名且可独立访问的模块,每个模块完成一个子功能,把这些模块集成起来构成一个整体,可以完成指定的功能满足用户的需求。
优点:
可以使软件结构清晰,不仅容易设计也容易阅读和理解;模块化使软件容易测试和调试,因而有助于提高软件的可靠性;因为变动往往只涉及少数几个模块,所以模块化能够提高软件的可修改性;也有助于软件开发工程的组织管理。
3.什么是耦合,有哪些类型
耦合是对一个软件结构内不同模块之间互连程度的度量。
模块间无任何连接,耦合程度最低。
两个模块彼此间通过数交换信息,交换的信息仅仅是数据,这种耦合称为数据耦合(低耦合)。
如果传递的信息中有控制信息,这种耦合称为控制耦合(中等程度耦合,增加系统的复杂程度)。
当把整个数据结构作为参数传递而被条用的模块只需要使用其中一部分数据元素时,就出现了特征耦合。
当两个或多个模块通过一个公共数据环境相互作用时,它们之间的耦合称为公共环境耦合。
内容耦合(避免使用)
4.什么是内聚,有哪些类型
内聚标志着一个模块内各个元素彼此结合的紧密程度,它是信息隐藏和局部化概念的自然扩展。
高内聚往往意味着模块间的松耦合。
5.软件设计有哪些启发式原则
改进软件结构提高模块的独立性(低耦合高内聚)
模块规模应用适中
深度、宽度、扇出(直接控制)和扇入(被直接调用数量)都应适当
模块的作用域应该在控制域之内
力争降低模块接口的复杂程度
设计单入口单出口的模块
模块功能应该可以预测
6.描述软件?
图:
结构图,层次图和HIPO
层次图:
描绘软件的层次结构(方框间连线表示调用关系,适用于自顶向下设计软件的过程中使用)
HIPO:
层次图加输入、处理、输出图(与层次图不同的是,在每个框里增加了编号)
第六章
1.详细设计的主要任务
根本目标是确定应该怎样具体地实现所要求的系统,应该得出对目标系统的精确描述,从而在编码阶段可以把这个描述直接翻译成用某种程序设计语言书写的程序(详细设计的结果基本上决定了最终的程序代码的质量)。
2.结构程序设计基本原理
结构程序设计是尽可能少用GOTO语句的程序设计方案。
最好尽在检测出错误时才使用GOTO语句,而且应该总是使用向前GOTO语句。
3.详细设计的工具:
程序流程图,盒图,判定表,判定树,问题分析图
第七章
1.在代码中加注释的作用是什么
使程序代码的逻辑简明清晰,易读易懂,便于后期的维护和修改的方便。
2.测试的目标是什么,有哪些测试方法,有哪些类型或步骤
目标:
测试是为了发现程序中的错误而执行程序的过程;
好的测试方案是极可能发现迄今为止尚未发现错误的测试方案;
成功的的测试是发现了至今为止尚未发现的错误的测试。
方法:
黑盒测试已经知道了产品应该具有的功能,可以通过测试来检验是否每个功能都能正常使用。
白盒测试知道产品的内部工作过程,可以通过测试来检验产品内部动作是否按照规格说明书的规定正常进行。
步骤:
模块测试子系统测试系统测试验收测试平行运行
3.单元测试的重点是什么
模块接口:
对通过模块接口的数据流进行测试,数据能否正确的进出
局部数据结构:
数据说明、初始化、默认值
重要的执行通路:
选择最有代表性、最有可能发现错误的执行通路
出错处理通路:
着重测试可能发生的错误P127
边界条件:
最重要的任务
4.什么是存根模块,什么是驱动模块
存根模块:
一个虚拟的子程序
驱动模块:
用于测试的控制模块
5.什么是黑盒,有什么方法
黑盒测试法把程序看作一个黑盒子,完全不考虑程序的内部结构和处理过程。
也就是说,黑盒测试是在程序接口进行的测试,它只检查程序功能是否能按照规格说明书的规定正常使用,程序是否能适当地接受输入数据并产生正确的输出信息,程序运行过程中能否保持外部信息的完整性。
也称为功能测试。
方法:
等价划分、边界值分析、错误推测
6.什么是白盒,有什么方法
7.
白盒测试把程序看成装在一个透明的白盒子里,测试者完全制单程序的就够和处理算法。
这种方法按照程序内部的逻辑测试程序,检测程序中的主要执行通路是否都能按预定要求正确工作。
又称为结构测试。
方法:
逻辑覆盖、控制结构测试
8.测试与调试的区别测试是为了发现错误,调试是在成功测试后纠正错误
第八章
1.维护的类型
结构化维护和非结构化维护、预