软件工程每章复习重点.docx
《软件工程每章复习重点.docx》由会员分享,可在线阅读,更多相关《软件工程每章复习重点.docx(39页珍藏版)》请在冰豆网上搜索。
![软件工程每章复习重点.docx](https://file1.bdocx.com/fileroot1/2023-2/21/78443030-7653-46cb-90ae-36b9988ae886/78443030-7653-46cb-90ae-36b9988ae8861.gif)
软件工程每章复习重点
考试题型:
选择20`填空20`简答30`分析30`
第一章概述
1.软件危机
软件危机是指在计算机软件的开发和维护过程中遇到的一系列严重问题,如软件费用、软件可靠性、软件维护、软件生产、软件重用等。
2.软件生存周期
软件生存周期是指一个软件从提出需求开始直到该软件报废为止的整个时期。
通常,软件生存周期包括可行性分析和项目开发计划、需求分析、概要设计、详细设计、编码、测试、维护等活动,可以将这些活动以适当方式分配到不同阶段去完成。
3.软件开发过程模型
a)瀑布模型
瀑布模型将软件开发过程划分为需求定义及分析、软件设计、软件实现、软件测试和运行维护等一系列基本活动,并且规定这些活动自上而下、相互衔接的固定次序。
b)快速原型模型
快速原型模型需要迅速建造一个可以运行的软件原型,以便理解和澄清问题,使开发人员及用户达成共识,最终在确定的客户需求基础上开发客户满意的软件产品。
c)增量模型
增量模型是一种非整体开发的模型,在增量模型中,软件被作为一系列的增量构件来设计、编码、集成和测试,从而适应用户逐步细化需求的形成过程。
d)喷泉模型
喷泉模型是一种以用户需求为动力,以对象作为驱动的模型,适合于面向对象的开发方法。
e)螺旋模型
螺旋模型将瀑布模型和快速原型模型结合起来,将软件过程划分为若干个开发回线,每一个回线表示开发过程的一个阶段。
f)型式化方法模型
型式化方法模型又称变换模型。
该模型结合了形式化软件开发方法和程序自动生成技术,采用形式化需求规格说明和变化技术等技术手段,生产目标程序系统。
g)基于构件的开发模型
基于构件的开发过程模型是使用可重用的构件或商业组件建立复杂的软件系统,即在确定需求描述的基础上,开发人员首先进行构件分析和选择,然后设计或者选用已有的体系结构框架,复用所选择的构件,最后将所有的组件集成在一起,并完成系统测试。
4.软件开发的方法
a)结构化方法
结构化方法由结构化分析,结构化设计和结构化程序设计组成,是一种面向数据流的开发方法。
该方法采用自顶向下、逐步求情的指导思想,应用较广,技术成熟。
b)Jackson方法
Jackson方法是一种面向数据结构的开发方法。
Jackson方法是以数据结构为驱动的,适合于小规模的项目。
c)维也纳开发方法
维也纳开发方法是一种形式化的开发方法,软件的需求用严格的形式语言描述,然后把描述模型逐步变换成目标系统。
d)面向对象开发方法
面向对象开发方法包括面向对象分析、面向对象设计和面向对象实现。
面向对象开发方法有Booch方法、Coad方法和OMT(ObjectModelingTechnology)方法等。
为了统一各种面向对象方法的术语、概念和模型,1997年推出了统一建模语言,即UML语言。
它是面向对象的标准建模语言,通过统一的语义和符号表示,使各种方法的建模过程和表示统一起来,将成为面向对象建模的工业标准。
第二章需求分析
1.可行性研究的任务
a)技术可行性
对要开发的项目的功能、性能和限制条件进行分析,确定在现有的资源条件下,技术风险有多大,项目是否能够实现。
b)经济可行性
进行开发成本的估算以及了解取得效益的评估,确定要开发的项目是否值得投资开发。
c)社会可行性
要开发的项目是否存在任何侵犯、妨碍等责任问题,要开发项目的运行方式在用户组织内是否行得通,现有管理制度、人员素质、操作方式是否可行。
2.成本估算方法
a)自顶向下估算方法
估算人员参照以前完成的项目所耗费的总成本,来推算将要开发的软件总成本,然后把它们按阶段、步骤和工作单元进行分配。
b)自底向上估算方法
将待开发的软件细分,分别估算每一个子任务所需要的开发工作量,然后将它们加起来,得到软件的总开发量。
c)差别估算方法
将开发项目及一个或多个已完成的类似项目进行比较,找到及某个相类似项目的若干不同之处,并估算每个不同之处对成本的影响,导出开发项目的总成本。
d)专家判断技术
一个或多个专家根据所具有的专业知识和丰富经验,通过近似的猜测估计出项目成本。
Delphi方法是最流行的专家评估技术。
e)类比估算法
一种比较科学的传统估算方法,它通过新项目及历史项目的比较得到规模估算。
3.成本估算模型
COCOMO模型(理解)书本P27
4.常用的需求分析的方法
面向数据流的结构化分析方法(SA)
面向数据结构的Jackson方法(JSD)
面向数据结构的结构化数据系统开发方法(DSSD)
面向对象的分析方法(OOA)等
5.结构化分析方法
结构化分析方法适合于数据处理类型软件的需求分析。
具体来说,结构化分析方法就是用抽象模型的概念,按照软件内部数据传递、变换的关系,自顶向下逐层分解,直到找到满足功能要求的所有可实现的软件为止。
a)数据流图
i.定义
数据流图(DataFlowDiagram,简称DFD)描绘系统的逻辑模型,是结构化系统分析的主要工具。
数据流图(DFD)是描述软件系统中数据处理过程的一种有力的图形工具。
由于它只反映系统必须完成的逻辑功能,所以它是一种功能模型。
ii.数据流图中的主要图形元素
iii.画数据流图步骤
1.首先画系统的输入输出,即先画顶层数据流图。
顶层流图只包含一个加工,用以表示被开发的系统,然后考虑该系统有哪些输入数据,这些输入数据从哪里来;有哪些输出数据,输出到哪里去。
2.画系统内部,即画下层数据流图。
一般将层号从0开始编号,采用自顶向下,由外向内的原则。
iv.注意事项
1.命名。
不论数据流、数据存储还是加工,合适的命名使人们易于理解其含义。
2.一般不画物质流。
数据流反映能用计算机处理的数据,并不是实物,因此对目标系统的数据流图一般不要画物质流
3.父图及子图的平衡。
子图的输入输出数据流和父图相应加工的输入输出数据必须一致,此即父图及子图的平衡。
4.局部数据存储。
当某层数据流图中的数据存储不是由图中相应加工的外部接口,而只是本图中某些加工之间的数据接口,则称这些数据存储为局部数据存储。
5.提高数据流图的易理解性。
注意合理分解,要把一个加工分解成几个功能相对独立的子加工,这样可以减少加工之间输入、输出数据流的数目,增加数据流图的可理解性。
v.数据流图的层次结构
为了表达数据处理过程的数据加工情况,需要采用层次结构的数据流图。
按照系统的层次结构进行逐步分解,并以分层的数据流图反映这种结构关系,能清楚地表达和容易理解整个系统。
vi.结构化分析方法步骤示例
●这个数据流图只是一个高层的系统逻辑模型,它反映了目标系统要实现的功能
●数据流图绘制步骤
1.首先确定系统的输入和输出
2.根据商店业务,画出顶层数据流图,以反映最主要业务处理流程
3.经过分析,商店业务处理的主要功能应当有销售、采购、会计三大项。
主要数据流输入的源点和输出终点是顾客和供应商。
4.然后从输入端开始,根据商店业务工作流程,画出数据流流经的各加工框,逐步画到输出端,得到第一层数据流图。
vii.检查和修改数据流图的原则
1.数据流图上所有图形符号只限于前述四种基本图形元素。
2.数据流图的主图必须包括前述四种基本元素,缺一不可。
3.数据流图的主图上的数据流必须封闭在外部实体之间。
4.每个加工至少有一个输入数据流和一个输出数据流。
5.在数据流图中,需按层给加工框编号。
编号表明该加工所处层次及上下层的亲子关系。
6.规定任何一个数据流子图必须及它上一层的一个加工对应,两者的输入数据流和输出数据流必须一致。
此即父图及子图的平衡。
7.可以在数据流图中加入物质流,帮助用户理解数据流图。
8.图上每个元素都必须有名字。
9.数据流图中不可夹带控制流。
10.初画时可以忽略琐碎的细节,以集中精力于主要数据流。
b)数据字典
i.定义
数据字典(DataDictionary)是关于数据的信息的集合,通过数据字典对数据流程图中的各个元素作精确的定义及说明。
它是数据流图的补充工具。
数据字典及数据流图配合,能清楚地表达数据处理的要求。
二者构成需求规格说明书的主要部分。
词条描述——对于在数据流图中每一个被命名的图形元素,均加以定义,其内容有:
名字,别名或编号,分类,描述,定义,位置,其它等。
ii.数据字典的内容及格式
数据字典是为分析人员和用户查找数据流图中有关名字的详细定义而服务的,因此也像其他任何字典一样,要把所有条目按一定次序排列起来,以便查阅。
数据字典有以下四类条目:
数据流、数据项、数据存储、基本加工。
其中,数据项是组成数据流和数据存储的最小元素。
1.数据流条目给出了DFD中数据流的定义,主要部分是列出该数据流的各组成数据项。
在定义数据流及数据存储组成时,通常要用到表2.4给出的符号。
2.数据存储条目是对数据文件内容的定义,主要内容举例如下:
数据存储名称:
学生成绩库
别名:
无
组成:
学生学号+课程编码+成绩+备注
组织方式:
以学号为记录关键字升序排列。
3.数据项条目给出某个数据单项的定义,内容通常为数据项的值类型、允许取值范围等,其定义结构及数据流条目类似。
4.加工条目是用来说明DFD中基本加工的处理逻辑,对其他非基本加工则不必进行加工说明。
加工条目主要由输入数据、加工逻辑和输出数据等部分组成,加工逻辑描述把输入数据转换为输出数据的过程,是加工条目的主体。
为了使加工逻辑直观易读,有几种常用的描述方法,它们是结构化语言、判定表和判定树。
加工条目内容举例如下:
加工名称:
查阅库存
编号:
1.2
输入:
合格订单
输出:
供货订单或缺货订单
加工逻辑:
根据库存记录
IF订单项目数量<该项目库存量的临界值
THEN可供货处理
ELSE
此订单缺货,登记,待进货后再处理
ENDIF
iii.数据字典的实现
数据字典的建立可以用手工和自动两种方式实现。
手工方式是指把每一个字典条目写在卡片上,由专人管理和维护。
自动方式是借助数据字典处理程序,把字典条目输入到计算机中,用计算机对它进行检索和维护。
第三章系统设计
1.概要设计
a)基本任务
i.设计软件系统结构:
1.采用某种设计方法,将一个复杂的系统按功能划分成模块。
2.确定每个模块的功能。
3.确定模块之间的调用关系。
4.确定模块之间的接口,即模块之间传递的信息。
5.评价模块结构的质量.
ii.数据结构设计:
采用“逐步细化”的方法,如采用数据字典描述逐步细化。
设计有效的数据结构(如队列,线性表,链表等),大大简化软件模块处理过程的设计。
b)编写概要设计文档:
i.概要设计说明书。
ii.数据库设计说明书:
主要给出所使用的DBMS简介、数据库的概要模型、逻辑设计、结果。
iii.用户手册:
对需求分析阶段编写的用户手册进行补充。
iv.修订测试计划,对测试策略、方法、步骤提出明确要求。
c)模块的独立性
i.模块独立性,是指软件系统中每个模块只涉及软件要求的具体的子功能,而和软件系统中其它的模块的联系最小且接口是简单的.
ii.一般采用两个准则度量模块独立性。
即模块间耦合和模块内聚
iii.耦合是模块之间的互相连接的紧密程度的度量。
iv.内聚是模块功能强度(一个模块内部各个元素彼此结合的紧密程度)的度量。
v.模块独立性比较强的模块应是高内聚低耦合的模块。
d)软件系统设计技术
2.详细设计
a)任务
i.确定每个模块的具体算法。
ii.确定每个模块的内部数据结构及数据库的物理结构。
iii.确定模块接口的具体细节。
(即确定模块接口的详细信息,包括模块之间的接口信息、模块及系统外部的接口信息及用户界面等。
)
iv.为每个模块设计一组测试用例。
v.编写文档,参加复审。
b)详细设计可采用的工具
i.(传统的)程序流程图
程序流程图是最早出现且使用较为广泛的算法表达工具之一,能够有效地描述问题求解过程中的程序逻辑结构。
程序流程图中经常使用的基本符号如图所示。
ii.N-S图
N-S图又称为盒图,它是为了保证结构化程序设计而由Nassi和Shneiderman共同提出的一种图形工具。
在N-S图中,所有的程序结构均使用矩形框表示,它可以清晰地表达结构中的嵌套及模块的层次关系。
N-S图中,基本控制结构的表示符号如图所示。
由于N-S图中没有流程线,不可能随意转移控制,因而表达出的程序结构必然符合结构化程序设计的思想,有利于培养软件设计人员的良好设计风格。
但当所描述的程序嵌套层次较多时,不仅影响可读性而且不易修改。
iii.PAD图
PAD(ProblemAnalysisDiagram,问题分析图)是继程序流程图和N-S图后,由日立公司在20世纪70年代提出的又一种用于详细设计的图形表达工具。
它只能用于结构化程序的描述。
PAD图采用了易于使用的树型结构图形符号,既利于清晰地表达程序结构,又利于修改。
PAD图中所经常使用的基本符号如图所示。
PAD图具有的主要优点如下:
1.使用PAD图描述的程序结构层次清晰,逻辑结构关系直观、易读、易记、易修改。
2.PAD图为多种常用高级语言提供了相应的图形符号,每种控制语句都及一个专门的图形符号相对应,易于PAD图向高级语言源程序转换。
3.支持自顶向下、逐步求精的设计过程。
4.既能够描述程序的逻辑结构,又能够描述系统中的数据结构。
iv.PDL语言
PDL(ProcessDesignLanguage)语言即过程设计语言,是一种用于描述程序算法和定义数据结构的伪代码。
PDL语言的构成及用于描述加工的结构化语言相似,是一种兼有自然语言和结构化程序设计语言语法的“混合型”语言。
PDL语言及结构化语言的主要区别在于:
由于PDL语言表达的算法是编码的直接依据,因此其语法结构更加严格并且处理过程描述更加具体详细。
PDL语言的主要特点如下:
1.各种定义语句及控制结构的表达都具有严格的语法形式,使程序结构、数据说明等更加清晰。
2.提供了数据说明机制,可用于定义简单及复杂的数据结构。
3.提供了模块的定义和调用机制,方便了程序模块化的表达。
4.用PDL写出的程序,既可以很抽象,又可以很具体。
因此,容易实现自顶向下逐步求精的设计原则。
5.PDL描述可以直接作为注释插在源程序中,成为程序的内部文档。
这对提高程序的可读性是非常有益的。
6.PDL描述及程序结构相似,故PDL语言便于将详细设计的结果转换为源程序。
PDL的缺点是不如图形描述形象直观,因此常常将PDL描述及一种图形描述结合起来使用。
PDL语言的主要定义语句及基本控制结构的表达如下所示:
1.定义语句
1)数据定义:
DECLARE属性变量名,…
属性包括:
整型、实型、双精度型、字符型、指针、数组及结构等类型。
2)模块定义:
PROCEDURE模块名(参数)
……
RETURN
END
2.基本控制结构
v.判定表
当算法中包含多重嵌套的条件选择时使用。
表示复杂的条件组合及相应的动作适宜。
vi.判定树
比判定表直观。
第四章系统实施
1.McCabe度量法
McCabe度量法是由ThomasMcCabe提出的一种基于程序控制流的复杂性度量方法。
McCabe复杂性度量又称环路度量。
它认为程序的复杂性很大程度上取决于程序的复杂性。
单一的顺序结构最为简单,循环和选择所构成的环路越多,程序就越复杂。
这种方法以图论为工具,先画出程序图,然后用该图的环路数作为程序复杂性的度量值。
程序图是退化的程序流程图。
也就是说,把程序流程图的每一个处理符号都退化成一个结点,原来连接不同处理符号的流线变成连接不同结点的有向弧,这样得到的有向图就叫做程序图。
根据图论,在一个强连通的有向图G中,环的个数V(G)由以下公式给出:
V(G)=m-n+2p
其中,V(G)是有向图G中环路数,m是图G中弧数,n是图G中结点数,p是图G中强连通分量个数。
在一个程序中,从程序图的入口点总能到达图中任何一个结点,因此,程序总是连通的,但不是强连通的。
为了使图成为强连通图,从图的入口点到出口点加一条用虚线表示的有向边,使图成为强连通图。
这样就可以使用上式计算环路复杂性了。
以图11-4所给出的例子示范,其中,结点数n=6,弧数m=9,p=1,则有V(G=m-n+2p=9-6+2=5。
即McCabe环复杂度度量值为5。
这里选择的5个线形无关环路为(abefa),(beb),(abea),(acfa),(abcfa),其他任何环路都是这5个环路的线性组合。
第五章软件测试
1.软件测试的方法
a)静态测试
指被测试程序不在机器上运行,而是采用人工测试和计算机辅助静态分析的手段对程序进行测试。
包括:
人工测试和计算机辅助静态分析测试.(发现30%~70%逻辑和编码错误)
b)动态测试
指通过运行程序发现错误。
大多测试采用动态测试。
包括白盒测试法和黑盒测试法。
2.白盒测试
白盒测试属于结构测试,所以被测对象基本上是源程序,以程序的内部逻辑为基础来设计测试用例。
白盒测试(White-boxTesting,又称逻辑驱动测试,结构测试)是把测试对象看作一个打开的盒子。
利用白盒测试法进行动态测试时,需要测试软件产品的内部结构和处理过程,不需测试软件产品的功能。
a)逻辑覆盖
以程序内部逻辑为基础的测试技术,属白盒测试。
这一测试考虑测试用例对程序内部逻辑覆盖的程度。
语句、判定、条件、条件|判定、条件组合、路径
i.单循环
其中n为可允许执行循环的最大次数。
设计以下情况的测试用例:
1.跳过循环。
2.只执行循环一次。
3.执行循环m次,其中m4.执行循环n-1次,n次,n+1次。
ii.嵌套循环
1.置外循环处于最小循环计数值,对于内层进行单循环测试。
2.由里向外,进行下一层的循环测试。
b)基本路径测试
基本路径测试是在程序流程图的基础上,通过分析由控制构造的环路复杂性,导出基本路径集合,设计测试用例保证这些基本路径至少通过一次。
i.程序图
反映控制流程的有向图,其小圆圈称为结点,代表流程图中的处理,有向箭头代表控制流向,称为边或路径。
1.一个边必须终止于一个结点,在选择分支的汇合处即使没有语言也应该有汇聚点。
2.如果判断中的条件表达式是由一个或多个逻辑运算符(OR,AND,NAND,NOR)连接的复合条件表达式,则需要改为一系列只有单个条件的嵌套的判断。
ii.基本路径测试步骤
1.导出程序流程图的拓扑结构——程序图
2.计算程序图的环路复杂性:
平面图中区域的个数+1
3.确定只包含独立路径的基本数据集;
4.设计测试用例,确保基本路径集合中每条路径至少执行一次。
3.黑盒测试
黑盒测试(Black-boxTesting,又称为功能测试或数据驱动测试)是把测试对象看作一个黑盒子。
利用黑盒测试法进行动态测试时,需要测试软件产品的功能,不需测试软件产品的内部结构和处理过程。
黑盒测试注重于测试软件的功能性需求,也即黑盒测试使软件工程师派生出执行程序所有功能需求的输入条件。
黑盒测试并不是白盒测试的替代品,而是用于辅助白盒测试发现其他类型的错误。
a)等价类划分法
它将输入数据域按有效的或无效的(也称合理的或不合理的)划分成若干个等价类,测试每个等价类的代表值就等于对该类其他值的测试。
使用这一方法时,完全不考虑程序的内部结构,只依据程序的规格说明来设计测试用例。
使用这一方法设计测试用例要经历划分等价类(列出等价类表)和选取测试用例两步。
b)边界值分析法
经验表明:
程序往往在处理边界情况时发生错误。
边界情况指输入等价类和输出等价类边界上的情况。
使用边界值分析法设计测试用例时,一般及等价类划分结合起来,将测试边界情况作为重点目标,选取正好等于、刚刚大于或刚刚小于边界值的测试数据。
c)错误推测法
错误推测法:
根据经验或直觉推测程序中可能存在的各种错误,从而有针对性地编写检查这些错误的测试用例。
d)因果图
通过画因果图,把用自然语言描述的功能说明转换为判定表,然后为判定表的每一列设计一个测试用例。
它能有效的检测输入条件的各种组合可能会引起的错误。
e)综合策略
通常先用黑盒法设计基本的测试用例,然后用白盒法补充一些必要的测试用例。
1.在任何情况下都应使用边界值分析法。
2.必要时用等价类划分法补充一些测试用例。
3.再用错误推测法补充测试用例。
4.检查上述测试用例的逻辑覆盖程度,如未满足所要求的覆盖标准,再添加测试用例。
5.如需求说明中含有输入条件的组合情况,则一开始就可使用因果图法。
4.测试过程
a)软件测试过程概述
i.软件测试过程中的工作流
ii.软件测试步骤及及各开发阶段的关系
驱动模块(driver)──相当于所测模块的主程序,主要用来接收测试数据,启动被测模块,打印测试结果。
桩模块(stub)──又称为存根模块,用来代替所测模块调用的子模块,接收被测试模块的调用和输出数据。
b)单元测试
单元测试的目的在于发现各模块内部可能存在的各种差错。
单元测试又称模块测试、逻辑测试或结构测试。
测试的方法一般采用白盒法。
单元测试需要从程序的内部结构出发设计测试用例,以路径覆盖为最佳准则,且系统内多个模块可以并行地进行测试。
模块并不是一个独立的程序,在考虑测试模块时,同时要考虑它和外界的联系,用一些辅助模块去模拟及被测模块相联系的其它模块。
单元测试的内容:
模块接口、局部数据结构、重要的执行路径、错误处理、边界测试
c)集成测试
集成测试,也叫组装测试或联合测试。
在单元测试的基础上,将所有模块按照设计要求(如根据结构图〕组装成为子系统或系统,进行集成测试。
实践表明,一些模块虽然能够单独地工作,但并不能保证连接起来也能正常的工作。
程序在某些局部反映不出来的问题,在全局上很可能暴露出来,影响功能的实现。
集成测试常用方法:
非渐增式测试和渐增式测试
i.非渐增式测试:
首先对每个模块分别进行单元测试,然后再把所有模块按设计要求组装在一起,再进行整体测试,也称为一次性组装测试。
ii.渐增式测试:
逐个把未经过测试的模块组装到已经测试过的模块上去,进行集成测试。
每加入一个新模块进行一次集成测试,重复此过程直至程序组装完毕。
1.自顶向下集成:
自顶向下集成是构造程序结构的一种增量式方式。
它从主控模块开始,按照软件的控制层次结构,以深度优先或广度优先的策略,逐步把各个模块集成在一次。
该方法不需要写驱动模块,只需编写桩模块。
2.自底向上集成:
自底向上集成是从软件结构最底层的模块开始组装测试,因测试到较高层模块时,所需的下层模块功能均已具备,所以该方法仅需编写驱动模块,不需编写桩模块。
d)确认测试
确认测试又称有效性测试。
任务是验证软件的功能和性能及其它特性是否及用户的要求一致。
对软件的功能和性能要求在软件需求规格说明书中已经明确规定。
它包含的信息就是软件确认测试的基础。
确认测试阶段有两项工作:
有效性测试测试、软件配置审查。
e)系统测试
系统测试,是将通过确认测试的软件,作为整个基于计算机系统的一个元素,及计算机硬件、外设、某些支持软件、数据和人员等其它系统元素结合在一起,在实际运行环境下,对计算机系统进行一系列的组装测试和确认测试。
系统测试的目的在于通过及系统的需求定义作比较,发现软件及系统的定义不符合或及之矛盾的地方。
测试类型:
功能测试、性能测试、压力测试、安全性测试、恢复测试、安装测试
第六章系统运行及维护
1.软件维护的定义
软件维护是指在软件运行或维护