软件工程自考复习资料总结1.docx
《软件工程自考复习资料总结1.docx》由会员分享,可在线阅读,更多相关《软件工程自考复习资料总结1.docx(26页珍藏版)》请在冰点文库上搜索。
软件工程自考复习资料总结1
第1章
●软件:
计算机程序及说明程序的各种文档。
“程序”是计算任务的处理对象和处理规则的描述; “文档”是有关计算机程序功能、设计、编制、使用的文字或图形资料。
●软件的特点:
(1)软件是一种逻辑产品,具有无形性,以程序和文档的形式出现
(2)(软件产品)的生产主要是研制(3)~不会用坏,不存在磨损、消耗问题
(4)~的生产主要靠脑力劳动,还未摆脱手工开发方式(5)费用不断增加,成本昂贵
●软件生产的发展:
a程序设计时代45~56生产方式是个体手工劳动,机器语言、汇编语言,方法是追求编程技巧,追求程序运行效率b程序系统时代(56~68)作坊式的小集团合作生产,工具高级语言,方法:
个人技巧开始提出结构化方法c软件工程时代(68至今)
工程化的生产,使用数据库、开发工具及环境,网络,分布式,面向对象技术来开发软件
●“软件危机”硬件技术进步 ,软件不能满足发展的要求,在软件开发中遇到的问题找不到解决的办法,使问题积累起来,形成了尖锐的矛盾,因而导致了软件危机。
危机表现a经费预算经常突破,完成时间一再拖延b开发的软件不能满足用户要求、可维护性差、可靠性差
●危机原因a软件的规模越来越大,结构越来越复杂b软件开发管理困难而复杂、费用不断增加、技术落后、生产方式落后、开发工具落后,生产率提高缓慢
●软件工程68北大西洋公约组织用科学知识和技术原理来定义、开发、维护软件的一门学科。
●~性质:
它涉及计算机科学、工程科学、管理科学、数学等领域,计算机科学着重于原理和理论,而~着重于如何建造一个软件系统。
~要用工程科学中的观点来进行费用估算、制定进度、制定计划和方案。
~要用管理科学中的方法和原理进行软件生产的管理。
~要用数学的方法建立~中的各种模型和各种算法,如可靠性模型,说明用户需求的形式化模型等。
●~目标:
付出较低的开发成本、达到要求的软件功能、取得较好的软件性能、开发的软件易移植、需要的较低的维护费用、能按时完成开发任务,及时交付使用、开发的软件可靠性高
●软件工程内容:
软件开发技术、~管理。
软件开发技术,主要研究软件开发方法、过程、工具和环境。
(软件)开发管理中 研究~管理学、~经济学、~心理学。
面临问题:
~费用~可靠性~维护~生产率~重用 ~工程(过程):
获取~供应~开发~操作~维护~管理过程;支持过程
●软件生存周期:
可行性分析和项目开发计划;需求分析;概要设计;详细设计;编码;测试维护。
软件生存周期模型是描述软件开发过程中各种活动如何执行的模型。
●瀑布模型是将软件生存周期各个活动规定为依线性顺序连接的若干阶段的模型。
是一种整体开发的模型 增量模型是一种非整体开发的模型。
●螺旋模型将瀑布模型与增量模型结合起来,加入了风险分析,用于复杂的大型软件开发;分为几个螺旋周期一,制定计划二,风险分析三,开发实施四,用户评估。
●喷泉模型是一种以用户需求为动力,以对象作为驱动的模型,适合于面向对象的开发方法。
使开发过程具有迭代性和无间隙性。
基本知识的模型又称智能模型,它把瀑布模型和专家系统结合在一起。
●变换模型是一种适合于形式化开发方法的模型。
从软件需求形式化说明开始,经过一系列变换,最终得到系统的目标程序。
●软件开发方法:
一种使用早已定义好的技术集及符号的表示习惯来组织软件生产的过程
(结构化)方法由~分析、~设计、~程序设计构成。
它是一种面向数据流的开发方法。
~方法总的指导思想是自顶向下、逐步求精。
它的基本原则是功能的分解与抽象,它是软件工程中最早出现的开发方法,特别适合于数据处理领域的问题。
●Jackson方法是一种面向数据结构的开发方法。
维也纳开发方法(VDM)是一种形式化的开发方法,软件的需求用严格的形式语言描述。
● 面向对象的开发方法包括面向对象分析、面向对象设计、面向对象实现。
面向对象开发方法有 Booch方法、Coad方法
第2章
●软件(可行性研究)的目的就是用最小的代价在尽可能短的时间内确定该软件项目是否能够开发,是否值得去开发。
●~的目的不是去开发一个软件项目,而是研究这个软件项目是否值得去开发,其中的问提能否解决。
~实质上是要进行一次简化、压缩了的需求分析、设计过程,要在较高层次上以较抽象的方式进行需求分析和设计过程。
●可行性研究的任务:
技术可行性:
对要开发项目的功能、性能、限制条件进行分析,确定在现有的资源条件下,技术风险有多大,项目是否能实现。
包括:
开发的风险;资源的有效性;技术;开发人员在评估技术可行性时,一旦估计错误,将会出现灾难性后果。
经济可行性包括成本――效果分析、公司经营长期策略、开发所需的成本和资源、潜在的市场前景。
社会可行性包括:
合同、责任、侵权、用户组织的管理模式及规范,其他一些技术人员常常不了解的陷阱等。
●可行性研究有步骤:
确定项目规模和目标、研究正在运行的系统、建立新系统的高层逻辑模型、导出和评价各种方案、推荐可行的方案、编写可行性研究报告。
●可行性研究内容:
引言、可行性研究前提、对现有系统的分析、所建议系统的技术可行性分析、所建议系统的经济可行性分析、社会因素可行性分析、其他可供选择方案、结论意见。
●成本――效益分析首先是估算将要开发的系统的开发成本,然后与可能取得的效益进行比较和权衡。
效益分有形效益和无形效益两种。
有形效益可以用货币的时间价值、投资回收期、纯收入等指标进行度量;无形效益主要从性质上、心理上进行衡量,很难直接进行量的比较。
●投资回收期就是使累计的经济效益等于最初的投资费用所需的时间。
●项目的纯收入,也就是在整个生存周期之内的累计经济效益(折合成现在值)与投资之差。
●项目开发计划:
项目概述;实施计划;人员组织及分工;交付期限。
●在进行可行性研究和软件计划以后,如果确认开发一个新的软件系统是必要的而且是可能的,那么就进入需求分析阶段。
● 需求分析指,开发人员要准确理解用户的要求,进行细致的调查分析,将用户非形式的需求陈述转化为完整的需求定义,再由需求定义转换到相应的形式功能规约(需求规格说明)的过程。
●难点:
问题的复杂性;交流障碍;不完备性和不一致性;需求易变性。
任务是要准确地定义新系统的目标,为了满足用户需要,回答系统必须“做什么”的问题。
本阶段的工作:
问题识别:
功能需求;性能需求;环境需求;用户界面需求
分析与综合:
导出软件的逻辑模型
编写文档:
需求规格说明书;初步用户使用手册;确认测试计划;修改完善软件开发计划。
●结构化分析(SA)是面向数据流进行需求分析的方法。
SA方法利用图形等半形式化的描述方式表达需求,简明易懂,用它们形成需求说明书中的主要部分。
SA描述工具:
a数据流图(DFD)描述的分解,即描述系统由哪几部分组成,各部分之间有什么联系等
●→数据流数据在系统内传播的路径,因此由一组成分固定的数据项组成。
○加工(又称数据处理)。
对数据流进行某些操作或变换。
〓数据存储又称文件)指暂时保存的数据,它可以是数据库文件或任何形式的数据组织
□数据的源点或终点是本软件系统外部环境中的实体,统称外部实体。
b数据字典;DD”定义了数据流图中每一个图形元素。
c描述加工逻辑的结构化语言,判定表、判定树则详细描述数据流图中不能被再分解的每一个加工。
● 数据字典(DD)就是用来定义数据流图中的各个成分的具体含义的,他以一种准确的、无二义性的说明方式为系统的分析、设计及维护提供了有关元素的一致的定义和详细的描述。
它和数据流图共同构成了系统的逻辑模型,是需求规格说明书的主要组成部分。
●DD四条目:
数据流、数据项(组成数据流和数据存储的最小元素)、数据存储、基本加工
●加工条目数据字典中的加工逻辑主要描述该加工“做什么”,即实现另工的策略,而不是实现加工的细节,它描述如何把输入数据流变换为输出数据流的加工规则。
●加工逻辑也称为“小说明”,描述加工逻辑一般用以下工具:
结构化语言、判定表、判定树。
●结构化语言是介于自然语言和形式语言之间的一种半形式语言。
它的结构可分成外层和内层两层:
外层来描述控制结构,采用顺序、选择、重复三种基本结构;内层对于顺序执行和循环执行的动作,用结构化语言描述。
存在多个条件复杂组合的判断问题,用判定表和判定树
IDEF0:
用来描述系统的功能活动及其联系,建立系统的功能模型。
IDEF1:
用来描述系统的信息及其联系,建立系统的信息模型。
IDEF2:
用来进行系统模拟,建立系统的动态模型。
●建立功能模型的基本方法:
1,确定建模的范围、观点及目的3.建立顶层图A0图
2..建立系统的内外关系图A--0图4.建立低层次的图形
●传统的SA方法主要用于数据处理方面的问题,主要工具DFD体现了系统“做什么”的功能,但它仅是一个静态模型,没有反映处理的顺序,即控制流程。
形式化方法是将需求规格说明用形式规约语言来描述。
典型的有基于模型的Z语言及VDM开发方法。
第3章
●1.设计软件系统结构(简称软件结构)采用某种设计方法,将一个复杂的系统按功能划分成模块;确定每个模块的功能;确定模块之间的接口,即模块之间传递的信息;评价模块结构的质量。
软件结构设计是以模块为基础的,在需求分析阶段,已经把系统分解为层次结构。
设计阶段,以需求分析的结果为依据,从实现的角度进一步划分为模块,并组成模块的层次结构。
2.数据结构及数据库设计
数据库的设计指数据存储文件的设计(概念设计、逻辑设计、物理设计)
数据库的“概念设计”、“逻辑设计”分别对应于系统开发中的“需求分析”与“概要设计”,而数据库的“物理设计”与模块的“详细设计”相对应。
3.编写概要设计文档(概要设计说明书;数据库设计说明书;用户手册;修订测试计划,对测试策略、方法、步骤提出明确要求。
)
4.评审:
对设计部分是否完整地实现了需求中规定的功能、性能等要求,设计方案的可行性,关键的处理及内外部接口定义正确性、有效性,各部分之间的一致性等等都一一进行评审。
●模块的基本属性:
接口:
指模块的输入与输出;功能:
指模块实现什么功能;
逻辑:
描述内部如何实现要求的功能及所需的数据;
状态:
该模块的运行环境,即模块的调用与被调用关系。
功能、状态与接口反映模块的外部特性,逻辑反映它的内部特性。
●模块化是指解决一个复杂问题时自顶向下逐层把软件系统划分为若干模块的过程。
模块完成一个特定的子功能,所有的模块按某种方法组装起来,成为一个整体,完成整个系统所要求的功能。
模块化的依据:
开发一个大而复杂的软件系统,将它进行适当的分解,不但可降低其复杂性,还可减少开发工作量,从而降低开发成本,提高软件生产率
●抽象是认识复杂现象过程中使用的思维工具,即抽出事物本质的共同的特性而暂不考虑它的细节,不考虑其他因素。
通过抽象,可以确定组成软件的过程实体。
通过信息隐蔽,可以定义和实施对模块的过程细节和局部数据结构的存取限制。
●信息隐蔽指在设计和确定模块时,使得一个模块内部包含的信息(过程或数据),对于不需要这些信息的其他模块来说,是不能访问的。
●模块独立性指每个模块只完成系统要求的独立子功能,并且与其他模块的联系最少且接口简单,两个定性的度量标准――耦合性和内聚性。
●耦合性也称块间联系。
指软件系统结构中各模块间相互联系紧密程度的一种度量。
模块之间联系越紧密,其耦合性就越强,模块的独立性则越差。
模块间耦合高低取决于模块间接口的复杂性、调用的方式及传递的信息。
●无直接耦合数据耦合标记耦合控制耦合公共耦合内容耦合(低――高)
1无直接耦合
2数据耦合指两个模块之间有调用关系,传递的是简单的数据值,相当于高级语言的值传递。
3标记耦合指两个模块之间传递的是数据结构,如高级语言中的数组名、记录名、文件名等这些名字即标记,其实传递的是这个数据结构的地址。
4控制耦合指一个模块调用另一个模块时,传递的是控制变量(如开关、标志等),被调模块通过该控制变量的值有选择地执行块内某一功能。
5公共耦合指通过一个公共数据环境相互作用的那些模块间的耦合。
公共耦合的复杂程序随耦合模块的个数增加而增加。
6内容耦合:
这是最高程度的耦合,也是最差的耦合。
当一个模块直接使用另一个模块的内部数据,或通过非正常入口而转入另一个模块内部。
●内聚性又称块内联系。
指模块的功能强度的度量,即一个模块内部各个元素彼此结合的紧密程度的度量。
若一个模块内各元素(语名之间、程序段之间)联系的越紧密,则它的内聚性就越高。
●偶然内聚逻辑内聚时间内聚通信内聚顺序内聚功能内聚(低――高)
1偶然内聚指一个模块内的各处理元素之间没有任何联系。
2逻辑内聚指模块内执行几个逻辑上相似的功能,通过参数确定该模块完成哪一个功能。
3时间内聚:
把需要同时执行的动作组合在一起形成的模块为时间内聚模块。
4通信内聚指模块内所有处理元素都在同一个数据结构上操作(有时称之为信息内聚),或者指各处理使用相同的输入数据或者产生相同的输出数据。
5顺序内聚指一个模块中各个处理元素都密切相关于同一功能且必须顺序执行,前一功能元素输出就是下一功能元素的输入。
6功能内聚:
这是最强的内聚,指模块内所有元素共同完成一个功能,缺一不可。
与其他模块的耦合是最弱的。
●耦合性与内聚性是模块独立性的两个定性标准,将软件系统划分模块时,尽量做到高内聚低耦合,提高模块的独立性,为设计高质量的软件结构奠定基础。
软件结构图主要内容有:
模块、模块的控制关系;模块间的信息传递、两个附加符号
●构图的形态特征:
1深度指结构图控制的层次;2宽度指一层中最大的模块个数;3扇出指一个模块直接下属模块的个数;4扇入指一个模块直接上属模块的个数。
●软件结构设计优化准则:
1.划分模块时,尽量做到高内聚,低耦合,保持模块相对独立性,并优化初始软件结构
a如果若干模块之间耦合强度过高,每个模块内功能不复杂,可将它们合并,以减少信息的传递和公共区的引用。
b若有多个相关模块,应对它们的功能进行分析,消去重复功能。
2.一个模块的作用范围应在其控制范围这内,且判定所在的模块应与受其影响的模块在层次上尽量靠近。
一个模块的作用范围指受该模块内一个判定影响的所有模块的集合。
一个模块的控制范围指模块本身以及其所有下属模块(直接或间接从属于它的模块)的集合。
●结构化设计SD面向数据流的设计是以需求分析阶段产生的数据流图为基础,按一定的步骤映射成软件结构,与结构化分析SA衔接,构成完整的结构化分析与设计技术
数据流图分为变换型和事务型
变换型DFD由输入、变换(或处理)、输出组成
变换型DFD基本思想:
取得数据、变换数据和给出数据
●面向数据流设计过程:
(1)精化DFD
(2)确定DFD类型
(3)分解上层模块,设计中下层模块结构
(4)根据优化准则对软件结构求精
(5)描述模块功能、接口及全局数据结构
(6)复查,入错转到2修善,否则进入详细设计
●变换分析设计:
(1)确定DFD中的变换中心、逻辑输入和逻辑输出
(2)设计软件结构的顶层和第一层——变换结构
这一层有3中功能模块:
输入、输出和变换模块
(3)设计中下层模块
●综合DFD的映射(既有变换流也有事务流)设计方法:
(1)确定DFD整体上的类型
(2)标出局部的DFD范围,确定其类型
(3)按整体的局部的DFD特征,设计出软件结构
分层DFD映射(主图变换型和子图事务型或相反)
第5章
●详细设计是软件设计的第二阶段,主要确定每个模块具体执行过程,故也称“过程设计”
●详细设计的基本任务:
1.为每个模块进行详细的算法设计;
2.为模块内的数据结构进行设计;
3.对数据库进行物理设计,即确定数据库的物理结构;
4.其他设计(代码设计、输入输出格式设计、人机对话设计)
5.编写详细设计说明书6.评审
●处理过程设计中采用的典型方法是结构化程序设计(SP)方法。
详细设计的目标不仅是逻辑上正确地实现每个模块的功能,还应使设计出的处理过程清晰易读。
结构化程序设计是实现该目标的关键技术之一,它指导人们用良好的思想方法开发易于理解、易于验证的程序。
●构化程序设计方法的基本要点是:
1采用自顶向下、逐步求精的程序设计方法
2使用三种基本控制结构构造程序
任何程序都可由顺序、选择、重复三种基本控制结构构造。
这三种基本结构的共同点是单入口、单出口。
3主程序员组的组织形式。
详细描述处理过程常用三种工具:
图形、表格和语言。
●程序流程图又称为程序框图,都应由三种基本控制结构顺序组合和完整嵌套而成,不能有相互交叉的情况,这样的流程图是结构化的流程图。
●程序流程图优点:
直观清晰、易于使用,是开发者普遍采用的工具
缺点:
1.可以随心所欲地画控制流程线的流向,容易造成非结构化的程序结构
2.流程图不易反映逐步求精的过程,往往反映的是最后的结果
3.不易表示数据结构
●PAD图指问题分析图,它是一种自左往右展开的二维树型结构。
控制流程为自上而下、从左到右的执行。
由机器自动通过走树的办法生成相应的源代码,大大提高了软件的生产率。
●PAD优点:
1..清晰的反映了程序的层次结构2.支持逐步求精的设计方法,左边层次中的内容可以抽象,然后由左到右逐步细化3.易读易写,使用方便
4.支持结构化的程序设计原理5.可自动生成程序
●过程设计语言(PDL),也称程序描述语言,又称伪码。
它是一种用于描述模块算法设计和处理细节的语言。
伪码的结构一般分为内外两层,外层语法应符合一般程序设计语言常用的语法规则,而内层语法则用一些简单的句子、短语和通用的数学符号,来描述程序应执行的功能,具有严格的关键字外层语法,用于定义控制结构、数据结构和模块接口,而它表示实际操作和条件的内层语语法又是灵活自由的,使用自然语言的词汇。
●PDL程序结构:
顺序结构、选择结构、重复结构、出口结构、模块定义与调用、模块调用输入、输出
●JACKSON方法是面向数据结构的设计方法,70年代中期出了“面向数据结构”的设计方法,其中有代表性的是由英国M.JACKSON提出的JACKSON方法和由法国人J.WARNIER提出的WARNIER方法。
●JACKSON在JSP的基础上扩展成了一种系统的开发方法,简称JSD。
JSD主要以活动事件为中心,通过由一串活动顺序组合构成的进程,建立系统模型,最后实现该模型。
JSP方法定义了一组以数据结构为指导的映射过程,它根据输入、输出的数据结构,按一定的规则映射成软件的过程描述,即程序结构,而不是软件的体系结构,因此该方法适用于详细设计阶段。
●JACKSON方法提供了自己的描述工具――-JACKSON结构图。
无论数据结构还是程序结构,都限于三种基本结构(顺序结构、选择结构、重复结构)及它们的组合。
●JACKSON结构图的特点:
1能对结构进行自顶向下分解,因此可以表示层次结构。
2结构易读,形象直观。
3既能表示数据结构也能表示程序结构,且表示的是组成关系。
●JSP方法一般通过以下五个步骤来完成设计:
1分析并确定输入数据和输出数据的逻辑结构,并用JACKson结构图表示这些数据结构。
2找出输入数据结构和输出数据结构中有对应关系的数据单元。
“对应关系”指这些数据单元在数据内容上、数量上和顺序上有直接的因果关系,对于重复的数据单元,重复的次序和次数都相同才有对应关系。
3按一定的规则由输入、输出的数据结构导出程序结构
4列出基本操作与条件,并把它们分配到程序结构图的适当位置。
5用伪码写出程序。
第6章
●源程序代码:
将详细设计得到的处理过程的描述转换为基于某种计算机语言的程序
●程序设计语言特性:
1心理特性:
指影响程序员心理的语言性能,许多这类特性是作为程序设计的结果而出现
歧义性:
有些语法规则容易使人用不同的方式来解释语言,这就产生了心理上的二义性。
简洁性:
人们必须记住的语言成分的数量越多,简洁性越差。
局部性和顺序性:
局部性是指语言的联想性,在编码过程中,由语句组合成模块,由模块组装成系统结构,并在组装过程实现模块的高内聚,低耦合,使局部性得到加强。
传统性:
传统性容易影响人们学习新语种的积极性。
2工程特性:
可移植性(指程序从一个计算机环境移植到另一个计算机环境的容易程度)、
开发工具的可利用性、软件的可重用性、可维护性
3技术特性
●程序设计语言:
为开发一个特定项目选择程序设计语言时,必须从技术特性、工程特性和心理特性几方面考虑。
●考虑选用语言的因素有:
1项目的应用领域:
a科学工程计算(需要大量的标准库函数,以便处理复杂的数值计算,可供选用的语言有:
FORTRANPascalCPL/1)b数据处理与数据库应用(CoBolSQL4GL);实时处理(汇编语言Ada);系统软件(汇编语言C语言Pascal语言和Ada语言);人工智能(Lisp是一种函数型语言Prolog是一种逻辑型语言)
2软件开发的方法:
有时编程语言的选择依赖于开发的方法,如果要用快速原形模型来开发,要求能快速实现原形,宜采用4GL。
如果是面向对象方法,宜采用面向对象的语言编程(C++JAVA)
3软件执行的环境4算法和数据结构的复杂性5软件开发人员的知识
●程序设计风格指一个编制程序时所表现出来的特点、习惯、逻辑思想等。
语句构造的原则是:
简单直接,不能为了追求效率而使代码复杂化。
●效率指处理机时间和存储空间的使用(处理时要注意):
a效率是一个性能要求,目标在需求分析给出
b追求效率建立在不损害程序可读性或可靠性基础之上
c提高程序效率的根本途径在于选择良好的设计方法、良好的数据结构与算法,而不是靠编程时对程序语句做调整
第7章
●软件测试的目的:
1.软件测试是为了发现错误而执行程序的过程;
2.一个好的测试用例能够发现至今尚未发现的错误;
3.一个成功的测试是发现了至今尚未发现的错误的测试。
●测试阶段的基本任务应该是根据软件开发各阶段的文档资料和程序的内部结构,精心设计一组“高产”的测试用例,利用这些实例执行程序,找出软件中潜在的各种错误和缺陷。
●软件测试中,应注意以下指导原则:
1.测试用例应由输入数据和预期的输出数据两部分组成
2.测试用例不仅选用合理的输入数据,还要选择不合理的输入数据。
这样能更多的发现错误,提高程序的可靠性。
对不合理的输入数据,程序应拒绝接受,并给出相应提示。
3.除了检查程序是否做了它该做的事,还检查是否做了不应该做的事
4.应制定测试计划并严格执行,排除随意性
5.长期保持测试用例
6.对发现错误较多的程序段,应进行回归测试
7.程序员避免测试自己的程序
●软件测试方法一般分为两大类:
动态测试方法与静态测试方法
静态测试指被测试程序不在机器上运行,而是采用人工检测和计算机辅助静态分析的手段对程序进行检测。
动态测试指通过运行程序发现错误,分为黑盒测试法和白盒测试法。
黑盒法:
把被测试对象看成一个黑盒子,测试人员完全不考虑程序的内部结构和处理过程,只在软件的接口处进行测试,依据需求规格说明书,检查程序是否满足功能要求。
因此,黑盒测试又称为功能测试或数据驱动测试。
●黑盒测试主要测试以下错误:
(1)是否有不正确或遗漏了的功能
(2)在接口上,能否正确的接受输入数据,能否产生正确的输入信息
(3)访问外部信息是否有错
(4)性能上是否满足要求等
●白盒法:
把测试对象看作一个打开的盒子,测试人员须