软件工程复习提纲.docx
《软件工程复习提纲.docx》由会员分享,可在线阅读,更多相关《软件工程复习提纲.docx(19页珍藏版)》请在冰豆网上搜索。
软件工程复习提纲
《软件工程》复习提纲
第1章 软件工程概论
§1.1引言
主要是介绍软件发展的基本情况。
§1.2软件概述
1.什么是软件?
它的特点是什么?
软件是计算机系统中与硬件相互依存的另一部分,它是包括程序、数据及其相关文档组成的完整集合。
可以理解为:
软件=程序+数据+文档
2.软件的特点
(1)软件具有抽象特征。
(2)软件具有无明显制造过程的特征。
(3)软件无备件的特征。
(4)手工制作特征。
(5)成本昂贵特征。
3.软件的分类
4.软件的发展
为了解决软件危机,人们在软件开发中也不断改进和发展,在几十年发展中计算机软件开发经历了四个重要的阶段:
※
☐
(1)程序设计阶段:
40年代中期至60年代中期
☐
(2)程序系统阶段:
60年代中期至70年代年代中期
☐(3)软件工程阶段:
70年代中期到90年代
☐(4)第四代技术阶段:
90年代以后
§1.3软件危机
1.什么是软件危机?
为什么为产生软件危机?
软件危机是指在软件开发和维护中所产生的一系列严重的问题。
一是如何开发软件,满足用户对软件的需求,二是如何维护数量众多的已有软件
在软件开发和维护的过程中存在这么多严重问题,一方面与软件本身的特点有关,另一方面也和软件开发与维护的方法不正确有关。
(1)软件是计算机系统中的逻辑部件,缺乏“可见性”,且软件产品往往规模庞大,给软件的开发和维护带来客观的困难。
(2)软件一般要使用5~10年,在这段时间里,很可能出现开发时没有预料到的问题。
(3)软件开发技术落后,生产方式和开发工具落后。
(4)软件开发人员忽视软件需求分析的重要性,轻视软件维护。
2.软件危机的表现形式
其主要表现如下:
(1)软件发展速度跟不上硬件的发展和用户的需求
(2)对软件成本和进度估计不准确,用户不满意。
(3)软件产品质量差,可靠性不能保证。
(4)软件产品可维护性差。
(5)软件没有合适的文档资料。
3.解决软件危机的途径
(1)应该加强软件开发过程的管理
(2)推广使用开发软件的成功技术与方法
(3)开发和使用好的软件工具
§1.4软件工程
1.什么是软件工程?
它的目标是什么?
软件工程是指导计算机软件开发和维护的工程学科。
它的目标是:
(1)付出较低的开发成本
(2)实现要求的软件功能
(3)取得较好的软件性能
(4)开发的软件易于移植
(5)需要的维护费用较低
(6)能按时完成开发工作,及时交付使用。
2.软件工程学所研究的主要内容
包括:
软件开发技术和软件工程管理两个方面。
其中:
软件开发技术包含:
软件开发方法学、软件工具和软件工程环境;软件工程管理包含:
软件管理学、软件经济学和软件度量学。
※软件工程的方法、工具、过程构成了软件工程的三要素。
☐软件过程
软件过程是为了获得高质量软件所需要完成的一系列任务的框架,它规定了完成各项任务的工作步骤。
※软件开发过程是把用户要求转化为软件需求,把软件需求转化为设计,用代码来实现设计,对代码进行测试,完成文档编制并确认软件可以投入运行使用的过程。
§1.5软件生存周期
1.软件生存周期的概念是什么?
软件也有一个孕育、诞生、成长、成熟、衰亡的生存过程。
我们称其为计算机软件的生存周期。
※软件生存周期由软件定义、软件开发和运行维护三个时期组成,而每个时期又划分为若干个阶段。
2.软件生存周期各阶段的任务
§1.6软件生存周期模型
软件生存周期模型是从软件项目需求定义直至软件经使用后废弃为止,跨越整个生存周期的系统开发、运作和维护所实施的全部过程、活动和任务的结构框架。
※有多种软件生存期模型。
例如:
瀑布模型、快速原型模型、增量模型、螺旋模型等。
第2章 可行性研究与需求分析
§2.1问题的定义与可行性研究
※1.问题定义(ProblemDefinition)是软件定义的第一个阶段,该阶段主要明确“该软件开发项目要解决什么问题”。
2.可行性分析的任务和目标是什么?
可行性研究的主要目的是用极少的代价在最短的时间内决定被开发的软件是否能开发成功。
可行性研究的任务
(1)经济可行性
(2)技术可行性
(3)法律可行性(4)运行可行性
3.可行性研究的步骤是什么?
可行性研究的工具:
在进行可行性研究时,使用的主要工具为系统流程图。
系统流程图是描绘物理系统的传统工具。
其基本思想为:
4.成本/效益分析
软件开发的一个重要目的是为了获得更大的经济利益。
成本/效益分析的目的是从经济角度分析开发一个特定的新系统是否划算,从而帮助客户组织的负责人正确地作出是否投资于某项软件系统开发的决定。
§2.2需求分析的任务。
软件需求分析的目标是深入描述软件的功能和性能,确定软件设计的约束和软件同其他系统元素的接口细节,定义软件的其他有效性需求。
需求分析的基本任务是软件人员和用户一起完全弄清用户对系统的确切要求,通俗地说就是要解决“系统做什么”的问题,但不包括“怎么做”的问题。
§2.3需求获取的常用方法
⏹需求获取的目的:
清楚地理解所要解决的问题、完整地获取用户需求。
1.常用的需求获取方法
(1)访谈和会议
(2)市场调查
(3)访问用户和用户领域的专家
(4)考察现场,跟踪现场业务流程
(5)开发人员和用户共同组成联合小组
2.快速原型方法
在软件工程中,原型是软件的一个早期可运行的版本,它能反映最终系统的一部分重要特性。
§2.4结构化分析方法
SA(StructuredAnalysis,结构化分析方法)是20世纪70年代中期由E.Yourdon等人倡导的一种面向数据流的分析方法。
SA是强调开发方法的结构合理性以及所开发软件的结构合理性的软件开发方法。
结构化分析方法是一种建模的活动,主要是根据软件内部的数据传递和变换关系,自顶向下逐层分解,描绘出满足功能要求的软件模型。
有结构化分析(SA)、结构化设计(SD)和结构化程序设计(SP)等方法。
SA方法的描述工具:
(1)实体-关系图(ERD)
描述数据对象与数据对象之间的关系,代表软件的数据模型。
(2)数据流图(DFD)
描述数据在系统中如何被传送或转换,描述如何对数据流进行转换的功能。
(3)状态-迁移图(STD)
描述系统对外部事件如何响应、如何动作,它表明系统的各种状态及各种状态间的变迁。
⏹实体-联系图
通常使用实体-联系图(Entity-RelationshipDiagram)来建立数据模型。
⏹※数据流图
数据流图(DataFlowDiagram,简称DFD)是用来描绘软件系统逻辑模型的图形工具,用于描绘信息在系统中流动和处理情况。
⏹数据字典
数据字典(DataDictionary,DD)是结构化分析方法的另一种有力工具。
数据字典是关于数据的信息的集合,也就是对数据流图中包含的所有元素的定义的集合。
⏹状态转换图
状态转换图是通过描绘系统的状态及引起系统状态转换的事件来表示系统的行为。
⏹其他图形工具(层次方框图、Warnier图、IPO图)
§2.5需求分析评审
需求规格说明书
软件规格说明书中阐明的需求是经过认真研究和分析后定下来的,是软件开发人员和用户对问题的共同理解,可被当作是双方达成的协议书。
在将需求规格说明书提交给设计阶段之前,必须进行需求评审。
第3章 软件设计
§3.1软件设计的任务
※软件设计是一个把软件需求转换成软件表示的过程,分为两个阶段:
⏹概要设计:
将软件需求转换为软件结构和数据结构,并编写概要设计说明书;
⏹详细设计:
通过对软件结构的细化,得到软件的详细的算法和数据结构,产生描述软件的详细设计文档。
§3.2软件结构设计
1.软件结构设计基本原理(涉及以下几个基本概念)
(1)抽象
(2)逐步求精(3)信息隐蔽(4)局部化
2.模块化
模块是数据说明、语句等程序对象的集合,单独命名而且可通过名字来访问,模块具有3个基本属性:
(※)
(1)功能:
模块实现的功能。
(2)逻辑:
描述模块内部怎么做。
(3)状态:
模块使用时的环境和条件。
※模块化是把程序划分成若干模块,每个模块完成一个子功能,把这些模块集中起来组成一个整体,可以完成指定功能,满足问题的需求。
3.模块独立性(※)
是指软件系统中每个模块只涉及软件要求的具体的子功能,而和软件系统中其他的模块的接口是简单的。
一般采用两个准则度量模块独立性,即模块与模块间的耦合性和模块内部的内聚性。
§3.3描绘软件结构的图形工具(层次图和HIPO图、结构图)
§3.4面向数据流的设计方法
1.变换流(变换分析)
2.事务流(事务分析)
§3.5详细设计
在概要设计阶段完成了软件系统的总体设计,规定了各个模块的功能及模块之间的联系之后,进一步就要考虑实现各个模块规定的功能,也就是进行软件的详细设计,也称为过程设计。
1.程序流程图
2.N-S图(盒图)
3.PAD图问题分析图
4.判定表与判定树
5.PDL设计程序用语言
§3.6人机界面设计
用户界面是软件开发环境的重要组成部分,用户界面的好坏直接影响软件系统的质量。
因此,必须重视软件的用户界面设计,开发出更具竞争力的软件来。
§3.7面向数据结构的设计方法
面向数据结构的设计方法就是用数据结构作为程序设计的基础。
Jackson方法是一种典型的面向数据结构的分析与设计方法。
第4章 编码与测试
4.1编码
※1.编码的目的:
编码的目的,是使用选定的程序设计语言,把模块的过程性描述翻译为用该语言书写的源程序。
2.编码语言的发展
按照软件工程的观点,语言的发展至今已经历了4代。
(1)第一代语言−−机器语言
(2)第二代语言−−汇编语言
(3)第三代语言−−高级程序设计语言
(4)第四代语言(4GL)
3.编码语言的选择
在选择与评价语言时,首先要从问题入手,确定它的要求是什么?
这些要求的相对重要性如何?
再根据这些要求和相对重要性来衡量能采用的语言。
4.编码风格
编码风格又称程序设计风格。
在编程时,着重从以下4个方面入手:
源程序文档化,数据说明,语句结构和输入/输出方法,力图提高程序的可读性,改善程序质量。
※程序的注释分为两种:
序言性注释和功能性注释。
4.2软件测试的基础
※1.软件测试的的定义
软件测试是根据软件开发各阶段的规格说明和程序的内部结构而精心设计一批测试用例(即输入数据及其预期的输出结果),并利用这些测试用例去运行程序,以发现程序错误的过程。
2.软件测试的目标与目的
3.软件测试的原则
4.测试的方法
按照测试过程是否执行程序来分,有静态分析和动态测试。
按照测试数据的设计依据可分为黑盒法与白盒法。
5.测试步骤
测试过程按5个步骤进行:
即模块测试、子系统测试、系统测试、验收测试、平行运行。
6.人工测试
静态分析中进行人工测试的主要方法有桌前检查、代码审查和走查。
4.3软件测试过程
通常,测试过程可以按4个步骤进行,即单元测试、集成测试、确认测试和系统测试。
1.单元测试
又称为模块测试,是针对软件设计的最小单位——程序模块进行正确性检测的测试工作。
其目的在于发现各模块内部可能存在的各种差错。
2.集成测试
集成测试根据设计规定的软件体系结构,把已测试过的模块组装起来,在组装过程中,检查程序结构组装的正确性。
※3.确认测试
确认测试是在软件开发过程结束时对软件进行评价,以确认它和软件需求是否一致的过程,也称为验收测试,其目标是验证软件的有效性。
4.系统测试
系统测试把已经经过确认的软件纳入实际运行环境中,与其它系统成份组合在一起进行测试。
4.4黑盒测试技术
黑盒测试是依据软件的需求规格说明书,检查程序的功能是否符合用户要求。
这种测试不需要考虑程序内部的逻辑结构和内部特性,完全把测试对象看作一个黑盒子。
⏹黑盒测试主要有以下几种技术:
●等价划分
●边界值分析
●错误推测法
4.5白盒测试
软件的白盒测试是把测试对象看作一个透明的盒子,它允许测试人员利用程序内部的逻辑结构及有关信息,设计或选择测试用例,对程序所有逻辑路径进行测试。
白盒测试又称为结构测试或逻辑驱动测试。
4.6软件调试
※1.软件调试的定义:
软件调试则是在进行了成功的测试之后才开始的工作。
它是查找、分析和纠正程序中错误的过程,也称为纠错。
2.常用的调试方法
调试的关键在于推断程序内部的错误位置及原因。
为此,可以采用以下方法:
(1)强行排错
(2)回溯法
(3)原因排除法
3.调试原则
(1)确定错误的性质和位置的原则
(2)修改错误的原则
第5章 软件维护
§5.1软件维护概述
1.软件维护的概念
把软件运行/维护阶段对软件产品所作的修改称为软件维护。
进行软件维护的原因有很多,主要有以下几个方面:
2.软件维护的种类
软件维护的最终目的是为了满足用户对已开发产品的性能与运行环境不断提高的需要,进而达到延长软件寿命的目的。
按照软件维护的目标,软件维护可分为如下几类:
(1)改正性维护(CorrectiveMaintenance)
为了识别和纠正软件错误、改正软件性能上的缺陷、排除实施中的误使用,而应当进行的诊断和改正错误的过程,就叫做改正性维护。
(2)适应性维护(AdaptiveMaintenance)
外部环境或数据环境可能发生变化,为了使软件适应于各种变化,而去修改软件的过程叫做适应性维护。
※(3)完善性维护(PerfectiveMaintenance)
为了满足用户要求,需要修改或再开发软件,以扩充软件功能、增强软件性能、改进加工效率、提高软件的可维护性,这种情况下进行的维护活动叫做完善性维护。
(4)预防性维护(PreventiveMaintenance)
“把今天的方法学用于昨天的系统以满足明天的需要”。
这是为了提高软件的可维护性、可靠性等,为以后进一步改进软件打下良好基础。
3.影响软件维护工作量的因素
(1)系统的大小
(2)程序设计语言
(3)系统年龄(4)数据库技术的应用
(5)先进的软件开发技术(6)其他方面
4.软件维护的策略
5.修改程序的副作用
(1)程序修改的步骤:
(分析和理解程序、修改程序)
(2)修改程序的副作用
所谓副作用是指因修改软件而造成的错误或其它不希望发生的情况,有三种副作用:
(修改代码的副作用修改数据的副作用修改文档的副作用)
§5.2软件维护的过程
为了有效地进行软件维护,应事先就开始做组织工作。
首先需要建立维护的机构,说明提出维护申请报告的过程及评价的过程;为每一个维护申请规定标准的处理步骤;还必须建立维护活动的登记制度以及规定评价和评审的标准。
§5.3软件的可维护性
※1.可维护性的定义
软件可维护性是指纠正软件系统出现的错误和缺陷,以及为满足新的要求而进行修改、扩充或压缩的容易程度。
2.可维护性的度量
用如下的七个特性来衡量程序的可维护性:
(1)可理解性
(2)可靠性(3)可测试性
(4)可修改性(5)可移植性(6)效率(7)可使用性
※3.软件文档
文档是影响软件可维护性的决定因素。
软件系统的文档可以分为用户文档和系统文档两类。
⏹用户文档主要描述系统功能和使用方法,不关心这些功能是怎样实现。
⏹系统文档描述系统设计、实现和测试等各方面的内容。
§5.4提高可维护性的途径
如何提高软件的可维护性,需要从以下5个方面着手:
(1)建立明确的软件质量目标和优先级
(2)使用提高软件质量的技术和工具
(3)进行明确的质量保证审查
(4)选择可维护的程序设计语言
(5)改进程序的文档
§5.5逆向工程和再工程
1.逆向工程和再工程的概念
软件的逆向工程是分析程序,力图在比源代码更高抽象层次上建立程序表示的过程。
逆向工程是设计恢复的过程。
再工程,也叫做复壮(修理)或再生。
它不仅能从已存在的程序中重新获得设计信息,而且还能使用这些信息来改建或重构现有的系统,以改进它的综合质量。
2.为什么要实施软件再工程?
再工程组合了逆向工程的分析和设计抽象的特点,具有对程序数据、体系结构和逻辑的重构能力。
执行重构可生成一个设计,它产生与原来程序相同的功能,但具有比原来程序更高的质量。
(1)再工程可帮助软件机构降低软件演化的风险
(2)再工程可帮助软件机构补偿软件的投资
(3)再工程可使得软件易于进一步变更
(4)再工程有着广阔的市场
(5)再工程是推动自动软件维护发展的动力
(6)再工程能力扩充了CASE工具集
3.软件再工程的风险有哪些?
(1)过程风险
(2)人员风险(3)应用风险
(4)工具风险(5)技术风险(6)策略风险
第6章 面向对象技术
6.1面向对象的概念
※1.对象
对象是封装了数据结构及可以施加在这些数据结构上的操作的封装体,这个封装体有可以唯一标识它的名字,而且向外界提供一组服务。
2.类
3.面向对象
4.继承
5.消息
6.多态性
7.封装性
6.2面向对象方法学
1.面向对象方法学概述
2.面向对象的软件过程
3.面向对象方法学的主要优点
6.3面向对象的开发模型
1.面向对象方法的开发模型
2.面向对象软件开发方法
(1)面向对象技术(OMT)方法
(2)面向对象的分析与设计(OOAD)方法
(3)面向对象设计方法(OOD)
3.面向对象建模
☐用面向对象方法开发软件,通常需要建立3种形式的模型:
(1)描述系统数据结构的对象模型
(2)描述系统控制结构的动态模型
(3)描述系统功能的功能模型
6.4UML统一建模语言
1.UML语言的产生
2.UML的定义
※UML是UnifiedModelingLanguage(统一建模语言)的简称。
是一种可视化的、用于绘制软件蓝图的标准建模语言。
(1)UML的特点:
(2)UML和程序设计语言的区别
3.UML的目标
4.UML语言的应用
6.5UML语言概述
按照层次结构来划分,UML的基本构造块包含:
☐视图(View)
☐图(Diagram)
☐模型元素(ModelElement)
1.视图
视图是用来显示系统的不同方面。
视图并不是图形(Graph),而是由多个图(Diagram)构成的,是在某一个抽象层上对系统的一个抽象表示。
※UML的视图主要有以下5种:
(1)用例视图
(2)逻辑视图(3)并发视图
(4)组件视图(5)部署视图
2.图
图用来描述一个特定视图的内容。
UML中的图由各种图形构成,图形就是各种模型元素符号。
UML提供了静态图和动态图两大类共9种图,用来描述系统的所有视图。
3.UML的模型元素及表示方法
4.UML的通用机制和扩展机制
※UML的通用机制有:
(1)规格说明
(2)修饰(3)注解
UML的扩展机制
(1)构造型
(2)标记值(3)约束
5.UML的规则
UML就是一种由符号和一套指示如何使用这些符号的规则组成的建模语言。
其中,符号就是在模型中使用的符号,规则包含语法规则、语义规则和实用规则。
6.6静态建模
6.6.1用例模型
6.6.2类和对象模型
6.6.3类之间的关系
6.7 动态建模
1、消息
2、状态图和时序图
3、协作图和活动图
6.8物理架构建模
6.8.1逻辑架构与物理架构
6.8.2组件图与部署图
第7章面向对象软件开发方法
§7.1面向对象分析
面向对象分析的目的是对客观世界的系统建立对象模型、动态模型和功能模型。
§7.2面向对象设计
面向对象设计是把分析阶段得到的需求,转变为符合成本和质量要求的、抽象的系统实现方案的过程。
§7.3面向对象系统的实现
主要任务就是把面向对象设计的结果翻译成用某种程序设计语言书写的面向对象程序,而且要对软件进行必要的测试和调试,以确保该软件的质量。
§7.4面向对象测试
●面向对象分析的测试(OOATest)
●面向对象设计的测试(OODTest)
●面向对象编程的测试(OOPTest)
●面向对象单元测试(OOUnitTest)
●面向对象集成测试(OOIntegrateTest)
●面向对象系统测试(OOSystemTest)
第8章 软件工程管理与质量保证
§8.1软件工程管理概述
软件工程管理的对象是软件工程项目,它所涉及的范围覆盖了整个软件工作过程。
§8.2软件规模估算
1.什么是软件度量?
软件度量的目的是什么?
软件度量主要是指生产率与质量的度量,即以投入工作量为依据的软件开发活动的度量和开发成果质量的度量。
软件度量的目的在于:
(1)表明软件产品的质量;
(2)弄清软件开发人员的生产率;
(3)给出使用了新的软件工程方法和工具所得到的(在生产率和质量两方面)的效益;
(4)建立项目估算的“基线”;
(5)帮助调整对新的工具和附加培训的要求。
8.2.1代码行度量技术
以LOC(LinesofCode,代码行)表示的软件规模是最基本的度量,它直接关系到软件的成本、开发工作量和完成时间。
软件质量通常以每千行代码中存在的错误数来衡量。
8.2.2功能点度量
该方法的关注点在于程序的“功能性”,其依据在于,任何软件是由若干功能组成的,每种功能可划分为复杂程度不同的若干功能点,利用功能的一些计算度量和功能复杂性估计的经验关系式,得出功能点度量数据,以代替原来常用的LOC度量法。
8.2.3静态单变量模型
通过对大量历史数据的统计和分析,建立资源估算模型,提供在一定精确度范围内的估算结果。
工作量是软件规模(KLOC或FP)的函数,
8.2.4动态多变量模型
⏹动态多变量模型把工作量看做是软件规模和开发时间这两个自变量的函数。
8.2.5COCOMO2模型
结构型成本估算模型(ConstructiveCostModel),简称COCOMO模型,由W_Boehm于1981年提出。
基本COCOMO模型是一个静态单变量模型,它以一个已计算出来的代码行数(LOC)为自变量的函数公式,计算软件开发工作量、进度等数据。
COCOMO2模型是基本COCOMO模型的修订版。
§8.3进度计划
⏹软件项目进度计划安排的主要任务是:
根据估算出完成给定项目所需的总工作量,把总工作量分配给项目的各个子任务,并规定完成各项子任务的起止日期,从而将总工作量分布于计划好的项目工作持续期内。
一般来说,软件开发项目的进度安排有以下两种考虑方式:
(1)已确定系统的最终交付日期,软件开发部门必须在规定的日期内完成。
(2)系统的最终交付日期只确定了大致的年限,最终交付日期由软件开发部门确定。
⏹进度计划安排实现技术
Gantt图、工程网络技术(PERT技术叫做计划评审技术,CPM方法叫做关键路径法)
§8.4人员组织
如何合理地配备人员也是成功完成软件项目的切实保证。
下面介