河南农业大学软件工程考点.docx
《河南农业大学软件工程考点.docx》由会员分享,可在线阅读,更多相关《河南农业大学软件工程考点.docx(33页珍藏版)》请在冰豆网上搜索。
河南农业大学软件工程考点
第一章软件工程概论
1.软件工程定义
软件工程是开发、运行、维护和修复软件的系统方法。
是一门指导计算机软件开发和维护的工程学科。
软件工程学科是一门指导计算机软件开发和维护的工程学科。
软件工程是一类求解软件的工程。
2,软件工程包括三个要素:
方法、工具和过程。
方法:
“如何做”工具:
CASE,是软件开发环境中最重要的组成部分。
过程:
将方法和工具综合起来以达到合理、及时的进行计算机软件开发的目的。
3,软件危机指在计算机软件开发和维护过程中所遇到的一系列问题:
1、不能正确地估计软件开发成本和进度,致使实际开发成本往往高出预算很多。
2、软件产品不可靠,满足不了用户的需求,甚至无法使用。
3、交付使用的软件不易演化,以至于人们不得不重复开发类似的软件。
4、软件生产率低下,远远满足不了社会发展的需求。
4,软件工程是为了解决软件危机而产生的。
5,软件工程目标:
生产具有正确性、可用性以及开销合算的产品。
第二章软件开发模型
1.软件生存周期:
软件生命周期实质上是大型系统开发过程中各项目阶段的一种表示方法,如同任何事物一样,软件也有一个孕育、诞生、成长、成熟、衰亡的生存过程。
根据这一思想,把上述基本的过程活动进一步展开,可以得到软件生命期的6个步骤,即制定计划、需求分析、设计、程序编码、测试及运行维护。
软件生命期模型是从软件项目需求定义直至软件经使用后废弃为止,跨越整个生命周期的系统开发、运作和维护所实施的全部过程、活动和任务的结构框架。
2,软件开发过程模型(软件生存周期模型),是把软件生存周期中软件生产活动的有序流程用一个合理的框架——开发模型规范描述。
软件开发模型是软件开发全部过程、活动和任务的结构框架。
软件开发过程模型是一种软件过程的抽象表示法,它从一个特定的角度表现一个开发过程。
软件过程模型主要是根据软件的类型、规模,特别是软件的开发方法、开发环境等多种因素确立模型。
主要有:
原型模型、演化模型、增量模型、瀑布模型。
3,软件过程各阶段任务(了解)
各种软件过程模型虽然有所不同,一般都由软件定义、软件开发和软件维护三个时期组成,每个时期又可由多个阶段(子阶段)组成。
软件定义时期的活动是弄清软件“做什么”,软件开发时期的活动是集中解决软件“怎样做”,软件维护时期的活动是聚焦于软件的“修改/完善”,它们的主要活动特征可以概括为“What-How-Change”。
1,软件定义时期是了解用户(或客户)提出的需求、确定项目的总目标、考察和分析项目的可行性、导出实现项目目标应该采用的策略,系统的功能,并估计该项目需要的资源和成本,制定工程进度表等。
软件定义时期可以划分成问题定义、可行性研究、需求分析和开发计划四个阶段,其中,最核心的是需求分析阶段,所以,软件定义时期也可以称为需求分析时期。
2,软件开发时期的任务是设计和实现已定义的,并经过需求分析的软件系统。
软件开发时期通常划分成软件设计、软件实现和软件测试三个阶段。
软件测试也可以分解到软件实现的各个活动中,可重新划分成编码和单元测试、集成测试、系统测试三个阶段。
甚至,还可以认为软件测试不是一个独立的阶段,因为它应该和所有软件生产活动并行进行。
3,件维护时期(阶段)任务是在整个软件运行时期内,当发现错误时加以改正,以确保运行正常;当环境改变时修改软件,以适应新的环境;当用户有新要求时及时改进软件,以满足需求等一系列维护活动。
每一项维护活动一般都经过提出(或报告)维护问题、分析维护要求、提出维护方案、审批维护方案、确定维护计划、修改软件设计、修改程序、测试/验收、维护报告等一系列环节(维护活动实质是一次压缩和简化了的软件定义和开发过程)。
4,瀑布模型(WaterfallModel)也称线性顺序模型。
瀑布模型把开发过程分成固定的、相对独立的各个阶段,每个阶段都有确定的、有限的任务,而且在各个阶段采用一些规范的开发方法和管理手段,力求保证软件质量和提高软件生产率。
该模型适用于需求非常清楚的软件开发环境。
图5.瀑布模型
5,原型模型可分为:
快速原型模型、抛弃式原型模型、演化式原型模型
1,
图8.抛弃式原型模型
抛弃式原型模型建立原型的目的是,评价目标系统的某一个或某一些特性,以便更准确地确定需求,或者更严格地验证设计方案。
使用完之后就把该原型系统抛弃掉,然后再重新构造正式的目标系统。
抛弃式原型模型本质上仍属于瀑布模型,建立原型系统只不过是“需求分析”和“有效性验证”的一种辅助手段,需求分析阶段结束时原型系统的生存周期也就终止。
6,增量模型(IncrementalModel)把软件描述、设计、实现活动分解成一系列相互有联系的增量构件的迭代开发,是瀑布模型顺序特征和快速原型模型迭代特征相结合的一种软件构件化的模型。
增量式的开发过程,首先根据客户需要提供的服务的优先次序,确定一系列交付增量,每个增量提供系统功能的一个子集。
随着开发过程的进展,每次迭代产生一个可发布的(可执行的)软件增量构件。
增量模型是一种非整体开发的模型。
是一种进化式的开发过程。
7,螺旋模型将开发过程分为几个螺旋周期,每个螺旋周期可分为4个工作步骤:
第一,确定目标、方案和限制条件;
第二,评估方案、标识风险和解决风险;
第三,开发确认产品;
第四,计划下一周期工作。
对大型软件,需要多个原型描述系统的生存期,适于螺旋模型开发方法,将瀑布模型与原型化模型结合起来,并加入风险分析讨论。
图11.螺旋模型结构
第三章需求分析
1.软件需求说明书是用户验证的一个标准。
2.需求获取的内容分为:
(了解)
●物理环境:
对系统运行时所处的环境的要求。
●界面:
软件与用户界面的友好性。
●用户或人的因素:
对用户的要求。
●功能:
你的系统什么的干活?
●文档:
文字说明等。
●数据:
对数据的各种要求。
●资源:
软件运行时所需的数据、软件、内存空间等各项资源。
●安全性:
******
●质量保证:
可靠性和如何对付出错等。
3,需求工程的基本活动包括:
●获取需求;深入实际,在充分理解用户需求的基础上,获取系统需求。
●需求分析与建模;进行需求建模、对模型或原型进行分析。
●确认需求;确保需求说明准确、完整地表达系统的主要特性。
●进化需求。
客户的需要总是不断(连续)增长的,进化需求是必要的。
4,需求分析方法
1.结构化分析方法
是一种以数据、数据的封闭性为基础,从问题空间到某种表示的映射方法,由数据流图(DFD图)表示。
2.信息建模法
是从数据的角度对现实世界建立系统的信息模型,基本工具是ER图。
是由实体、属性和关系组成的网络图。
E-实体,是一个或一组对象;R-关系,实体之间联系或交互作用。
3.面向对象的分析方法
面向对象分析方法(OOA)的关键是识别问题域内的对象,分析它们之间的关系,并建立起三类模型。
5,结构化需求分析方法
在结构化需求分析方法中模型表示工具有:
数据流图、数据字典、小说明。
●数据流图:
是一种描述数据变换的图形工具,系统接受输入的数据,经过一系列的变换(加工),最后输出结果。
●数据字典:
以一种准确的和无二义的方式定义所有被加工引用的数据流和数据存储。
●小说明:
用于集中描述一个加工“做什么”。
●数据流图在数据流图中,加工、数据流、数据存储、数据源和数据谭是数据流图的基本成分。
6,数据字典
以一种准确的和无二义的方式定义所有被加工引用的数据流和数据存储。
包含:
●数据流条目;数据存储条目;数据项条目
7,实施步骤结构化分析从本质上说是一种抽象和分解技术,“自顶向下、逐步求精”的过程。
有了工具后(数据流图、数据字典、小说明),我们来看看如何进行结构化分析:
1确定系统边界,画出系统环境图。
2自顶向下,画出各层数据流图。
3定义数据字典。
4定义小说明。
5汇总前面各步骤的结果。
8,需求的可变性必须进行验证。
9,需求验证的内容1有效性检查—指功能需求是否符合用户所提出的需求。
2一致性检查—系统功能描述及约束是否一致。
3完备性检查—是否包含所有系统用户的需求和约束。
4可检验性检查—是否能设计出一组验证方法,确定了检验的标准。
10,需求分析规格说明书是需求分析阶段产生的一份最重要的文档,它以一种一致的、无二义的方式准确的表达用户的需求。
有如下作用:
1、作为软件开发机构和用户之间一份事实上的技术合同书。
2、作为软件开发机构下一步进行设计和编码的基础。
3、作为测试和验收目标系统的依据。
第四章软件设计
1,软件设计任务涉及多方面,可分为总体设计和详细设计。
2,软件设计的目标(如下图所示)就是构造一个高内聚低耦合的软件模型。
3,软件体系结构确定了系统的组织结构和拓扑结构。
体系结构设计是软件设计的第一个阶段,该阶段侧重于系统宏观结构的设计,而不关心模块的内部算法。
4,软件设计分为总体设计和详细设计两个阶段。
其工作流程可用下图表示:
设计阶段结束要交付的文档是设计说明书,根据设计方法的不同,有不同的设计文档。
图33.软件设计工作流程
每个设计步骤完成后,都应进行复审。
5,以下经过长期考验的设计准则:
软件结构的准则;模块化准则;软件独立性准则。
1.软件结构的准则:
软件结构表示软件的系统结构,是软件模块间关系的表示,均表示为层次关系。
图34.软件结构示意图
有关指标:
①深度:
表示软件结构中从顶层模块到最底层模块的层数;
②宽度:
表示控制的总分布;
③扇出数:
指一个模块直接控制下属的模块个数;
④扇入数:
指一个模块的直接上属模块个数。
一个好的软件结构的形态准则是:
顶部宽度小,中部宽度最大,底部宽度次之;在结构顶部有较高的扇出数,在底部有较高的扇入数。
2,模块化准则:
所谓模块化就是将系统划分成若干模块,每个模块完成一个子功能,把这些模块集中起来组成一个整体,以满足所要求的整个系统的功能。
我们利用模块化来降低软件复杂度。
注意选择分解的最佳模块数。
3,软件独立性准则:
软件独立性的含义是指开发具有功能专一,模块之
无过多相互作用的模块。
又称为模块独立性准则。
这种类型的模块可以并行开发,开发容易,能减少错误的影响,使模块容易组合、修改及测试。
软件独立性的度量标准是两个定性指标:
耦合性和内聚性。
(1)耦合性
用于描述模块之间联系的紧密程度。
耦合性的几种类型:
图35.耦合性的几种类型
从三个方面衡量块间联系大小:
●方式(直接或间接)
●类型(数据型、控制型、混合型)
●数量(数量越大,块间联系越紧密。
图36.三个方面间的联系
(1)内聚性用于描述模块内部联系的紧密程度。
内聚性的几种类型:
图37.内聚的类型
6,从系统设计的角度出发,软件设计方法可分为3大类:
1,面向数据流的设计;2,面向数据结构的设计,3,面向对象的设计。
7,结构化设计方法分为两部分:
总体设计和详细设计。
●总体设计:
确定系统的整体模块结构。
任务:
解决系统的模块结构,即分解模块,确定模块功能及系统模块的层次结构。
文档:
模块结构图及其模块功能说明。
1.总体设计的目标:
是把系统的功能需求分配给软件结构,形成软件的模块结构图。
如图38所示:
2.总体设计的表示形式
层次图:
总体设计常用的表示方法,用来描绘软件的层次结构。
HIPO图:
H图+IPO图。
结构图:
精确表达程序结构的图形表示方法。
(模块之间上下的联系是调用关系)
图38.软件的模块结构图
3,结构化设计方法可以把数据流图变换成软件结构。
⑴从DFD图导出初始的模块结构图(SC):
中心变换型(transformcenter)_变换分析;事务处理型(transaction)_事务分析。
⑵按照SD法设计总则,改进模块结构图。
注意:
模块结构图不同于“框图”。
软件层次性:
反映软件整体的性质(结构图)
过程性:
反映局部的性质(框图)
4,中心变换型的DFD图:
这类数据流图可看成是对输入数据进行转换而得到输出数据的处理。
DFD图可以明显分为“输入—处理—输出”三部分。
,
5,设计的准则:
(1)好的设计的准则:
模块化;抽象;耦合;内聚
耦合性是程序结构中各个模块之间相互关联的度量,他取决于各个模块之间接口的复杂程度、调用模块的方式以及那些信息通过接口。
模块化设计的目标是希望建立模块间耦合尽可能松散的系统。
(耦合性最松散的是数据耦合)
内聚是模块内部各成分之间相互关联的强度。
应尽量增加内聚性,它比减少耦合性更重要,应当把更多的注意力集中到提高模块的内聚程度上来。
(内聚最强的是功能内聚)
(2).启发式规则
1改进软件结构提高模块独立性2模块规模应该适中3深度、宽度、扇出和扇入应适中
4模块的作用域应该在控制域之内5力争降低模块接口的复杂性6模块功能应该可以预测
6,结构图的描述能力比层次图更强,图中的每一个方框代表一个模块,框内注明模块的名字或主要功能。
方框之间的直线表示模块的调用关系。
1、模块:
在结构图中,模块用矩形框表示,并用模块的名字标记它。
2、模块的调用关系和接口:
两个模块之间用单向箭头联结。
3、模块间的信息传递:
用尾端带有空心圆的短箭头表示数据信息,用尾端带有实心圆的短箭头表控制信息。
4、两个辅助符号:
当模块M有条件的调用另一个模块时在箭头尾部标以一个菱形符号。
当一个模块反复的调用模块A、B、C时,在调用箭头尾部标以一个弧形符号。
结构图例
图48.生产最佳解的一般结构
●详细设计:
给出软件模块结构中各模块的内部过程描述(算法)。
对模块图中每个模块的过程进行描述,常用的描述的方式有:
伪代码,流程图,N-S图,PAD图等。
(一)详细设计的任务
结构化程序设计的第二阶段,详细设计阶段的任务是开发一个可以直接转换为程序的软件表示,即对系统中每个模块的内部过程进行设计和描述。
给出软件模块结构中各模块的内部过程描述(算法),包含实现对应的总体设计的模块所需的处理逻辑,主要有:
1、详细的算法。
2、数据表示和数据结构。
3、实施的功能和使用的数据之间的关系。
详细设计的主要任务是给出软件模块结构中各个模块的内部过程描述,也就是模块内部的算法设计。
而我们接下来看看这些算法的表示形式
(二)详细设计工具
1.程序流程--程序流程也称程序框图,使用最为普遍。
有五种基本控制结构:
●顺序型:
几个连续的加工步骤依次排列构成。
●选择型:
有某个逻辑判断是的取值决定选择两个加工中的一个。
●先判定型循环:
在循环控制条件成立时,重复执行特定的加工。
●后判定型循环:
重复执行某些特定的加工,直到控制条件成立。
●多情况型选择:
列举多种加工情况,根据控制变量的取值,选择执行其一。
程序流程图基本结构如图50所示。
2.标准程序流程图的规定符号
标准程序流程图的规定符号如图51所示.
图50.程序流程图基本结构
图51.标准程序流程图的规定符号
3,盒图(N-S)图盒图是70年代由Nassi和Shneiderman提出的。
又称N-S图。
也有五种基本控制结构:
●顺序型:
几个连续的加工步骤依次排列构成。
●选择型:
有某个逻辑判断是的取值决定选择两个加工中的一个。
●先判定型循环:
在循环控制条件成立时,重复执行特定的加工。
●后判定型循环:
重复执行某些特定的加工,直到控制条件成立。
●多情况型选择:
列举多种加工情况,根据控制变量的取值,选择执行其一。
N-S图基本结构如图52所示。
图52.N-S图基本结构
4,PAD图
PAD图是1973年由日本日立公司发明的,PAD图又称问题分析图(problemAnalysisDiagram)用二维树型结构的图表示的控制流,将这种图转换为程序代码比较容易。
其基本控制结构如下:
例:
对数组X进行排序。
“自顶而下,逐步求精”
1、循环一次,排好一个X[h]
H:
=1,n-1排好第h个X[h]
2、细化
3、连接各图,构成完整的PAD图
一、名词解释:
1.软件工程
2.软件开发模型
3.数据流图
4.软件设计评价准则
5.结构图
6.模块耦合
7.模块内聚
二、选择填空
1.结构设计是一种应用最广泛的系统设计方法,是以()为基础、自顶向下、逐步求精和模块化的过程。
A、数据流B、数据流图C、数据库D、数据结构
2.()的内容不应当包括对算法的详细过程性描述。
A、需求规格说明书B、总体框图C、软件确认准则 D、软件的性能
3.()是一种传统的程序设计表示工具。
A、程序流程图B、数据流图C、结构图D、HIPO图
4.()的三种基本控制结构的共同特点是只有一个入口和一个出口。
A、程序B、高级语言C、文档 D、数据字典
5.模块在同一段时间内完成各种初始化工作,这属于()。
A、偶然内聚B、逻辑内聚C、时间内聚D、过程内聚
6.在详细设计的图示工具中,()的形状象一个盒子。
A、HIPO图B、流程图C、N-S图D、PAD图
三、填空
1.软件开发是,一个错误发现的越晚,为改正它所付出的代价就。
2.从系统设计的角度出发,软件设计方法分为、
、三大类。
3.总体设计阶段所使用的表示工具有、、
。
4.详细设计的根本目标是。
5.详细设计的工具有、、。
四、判断1..程序流程图只反映数据的流向,不反映处理逻辑的先后
2.模块的内聚性程度与该模块在分层结构中的位置有关系
3.HIPO图是由一组H图和一张IPO图组成
五、简答说明“软件生存周期”的概念
1.软件工程的基本原则和目标
2.模块的内聚性程度与该模块在分层结构中的位置有关系吗?
说明原因。
6.PAD图设置的基本控制结构?
7.模块的独立性是什么?
8.结构图是什么?
9.从系统设计的角度出发,软件设计方法分为?
10.模块耦合衡量?
11.模块内聚衡量?
六、画出下面程序的流程图、N-S图和PAD图。
ORG2000H
MOVR0,#0AH
DL2:
MOVR1,#7DH
DL1:
NOP
NOP
DJNZR1,DL1
DJNZR0,DL2
END
七、把下面程序的流程图转换为N-S图和PAD图
开始
N
A
Y
B
NCY
NY
G
八、把下面程序的流程图转换为N-S图和PAD图
九,把下面程序的流程图转换为N-S图和PAD图。
软件复用技术
1,软件复用就是将已有的软件成分用于构造新的软件系统,以达到提高软件系统的开发质量与效率,降低开发成本的目的。
可复用的软件成分,也称为可复用构件(ReusableComponent)可从旧软件中提取,也可以专门为复用而开发。
软件复用不仅是对程序的复用,它包括对软件生产过程中任何活动所产生的制成品的复用。
如:
项目计划、可行性报告、需求定义、分析模型、详细说明、源程序和测试用例等等。
2,软件复用的级别
●测试信息的复用(主要包括测试用例的复用和测试过程信息的复用)。
●分析结果的复用(可被复用的分析结果是针对问题域的某些事物或某些问题的抽象程度更高的解法)
●设计结果的复用(受实际环境影响小,可复用机会多,所需修改少。
)
●代码的复用(包括目标代码,也包括文本形式的源代码。
)
软件复用抽象的程度由高到低。
3,构件库用于对可复用构件进行存储和管理。
它是支持软件复用的必要设施。
构件库必须有大量的可复用构件。
构件库系统应提供的主要功能:
构件的存储、管理、检索以及库的浏览与维护等。
5,软件构架是一种由特定领域的软件体系结构所决定的软件构造框架。
软件构架不是解决软件的某个局部问题,而是描述了软件的总体结构。
它描述了一类软件的总体构成情况,包括该软件有哪些主要部件以及各部件之间的关系,但是不涉及每个部件的细节。
可复用的软件构架给出一类应用系统在总体构造上的共性或相似性,忽略了各个系统的局部差异。
第七章软件测试
1,软件测试定义:
按照特定规程,发现软件错误的过程。
(为了发现错误而执行程序的过程。
)在软件投入生产性运行前,对软件需求分析、设计规格说明和编码的最终复审,是软件质量保证的关键步骤。
因为开发工作的前期不可避免地会引入错误,测试的目的是为了发现和改正错误,这对于某些涉及人的生命安全或重要的军事、经济目标的项目显得尤其重要。
2,软件测试的目标:
1、预防错误;2、发现错误。
3,软件测试的基本原则1、尽量不由程序设计者进行测试。
2、关键是注重测试用例的选择。
输入数据的组成(输入数据、预期的输出结果)既有合理输入数据,也有不合理的输入数据。
用例既能检查应完成的任务,也能够检查不应该完成的任务。
长期保存测试用例。
3、充分注意测试中的群集现象。
4,软件测试方法分为两类:
静态分析(白盒法)、动态测试(黑盒法)
1,静态分析指以人工的、非形式化的方法对程序进行分析和测试。
桌前检查代码会审步行检查
步行检查时,还常使用以下分析方法:
2,动态测试:
通过选择适当的测试用例,执行程序。
5,常用的方法:
●白盒法:
分析程序的内部逻辑结构,注意选择适当的覆盖标准,设计测试用例,对主要路径进行尽可能多的测试。
●黑盒法:
不考虑程序的内部结构与特性,只根据程序功能或程序的外部特性设计测试用例。
1.白盒法:
白盒法又称为逻辑覆盖法,其测试用例选择,是按照不同覆盖标准确定的。
见图61。
图61.不同覆盖标准
2.白盒法常用的覆盖标准:
①语句覆盖:
选择足够的测试用例,使得程序中每个语句至少都能被执行一次。
②判定覆盖:
执行足够的测试用例,使得程序中每个判定至少都获得一次“真”值和“假”值。
③条件覆盖:
执行足够的测试用例,使得判定中的每个条件获得各种可能的结果。
④判定/条件覆盖:
执行足够的测试用例,使得判定中每个条件取到各种可能的值,并使每个判定取到各种可能的结果。
⑤条件组合覆盖:
执行足够的例子,使得每个判定中条件的各种可能组合都至少出现一次。
3.白盒法步骤:
1选择逻辑覆盖标准。
2按照覆盖标准列出所有情况。
3选择确定测试用例4验证分析运行结果与预期结果。
例:
用白盒法测试以下程序段:
Procedure(VARA,B,X:
REAL);
BEGIN
IF(A>1)AND(B=0)
THENX:
=X/A;
IF(A=2)OR(X>1)
THENX:
=X+1
END;
白盒法举例:
Procedure(VARA,B,X:
REAL);
BEGIN
IF(A>1)AND(B=0)
THENX:
=X/A;
IF(A=2)OR(X>1)
THENX:
=X+1
END;
图62.白盒法
4.语句覆盖
语句覆盖:
使得程序中每个语句至少都能被执行一次。
例:
满足语句覆盖的情况:
执行路径:
ace
用例格式:
[输入(A,B,X),输出(A,B,X)]
选择用例:
[(2,0,4),(2,0,3)]
5.判定覆盖
使得程序中每个判定至少为TRUE或FALSE各一次。
覆盖情况:
应执行路径
ace∧abd或:
acd∧abe
图63.路径流程图
选择用例(其一):
⑴[(2,0,4),(2,0,