软件工程总复习简略版.docx
《软件工程总复习简略版.docx》由会员分享,可在线阅读,更多相关《软件工程总复习简略版.docx(18页珍藏版)》请在冰豆网上搜索。
软件工程总复习简略版
软件工程绪论
第1章软件工程绪论
1.软件的认识(小题)
定义:
软件是计算机系统中与硬件相互依存的另一部分。
它包括程序、数据及其相关文档的完整集合。
特点:
软件是无形的、不可见的逻辑实体
–它的正确与否,一直到程序在机器上运行才能知道
–这就给设计、生产和管理带来许多困难
软件是设计开发的,而不是生产制造的
软件在使用过程中没有磨损、老化的问题
软件是定制开发的
–虽然整个工业向着基于构件的构造模式发展
–然而大多数软件仍是根据实际的顾客需求定制的
软件是复杂的:
–软件涉及人类社会的各行各业
–软件开发常常涉及其他领域的专业知识,这对软件工程师提出了很高的要求
软件的开发成本高
软件易于复制
系统维护,计划,单元测试,系统测试,编码开发占据的成本有高到低
硬件:
任何机械、电子设备在运行和使用期间其失效率大都遵循以下的U型曲线。
因为在刚刚投入使用时,各部位都都尚未做到配合良好、运转灵活,常常容易出现问题。
经过一段时间的运行,就可以稳定下来。
当设备经历了相当长的时间的运转,就会出现磨损、老化等问题。
使失效率越来越大,达到一定的程度,则就到达了寿命的终点。
软件:
它没有U型曲线的右半翼,因为它不存在磨损和老化问题。
在软件生存期中,了使它能够克服以前没有发现的故障、使它能够适应硬件、软件环境的变化以及用户新的要求,必须要多次修改(维护)软件,而每次修改必不免地引入新的错误,就这样一次次修改,从而导致软件的失效率升高,如下图所示,以至造成软件退化。
因此说,软件的维护要比硬件的维护要复杂的多,与硬件的维修有着本质上的差别。
分类:
(小题)
按照软件的功能划分:
系统软件、支撑软件和应用
按照软件的规模划分:
微型,小型,中型,大型,甚大型,极大型
在信息产业中,微电子是基础,计算机和网络是载体,软件是核心。
开发过程:
个人程序时期(1947年-1950年代末),机器语言和汇编语言,负责从
程序的开发、运行和维护的全过程,这是一种私人化的软件环境。
软件作坊时期(1960年代初-1960年代末)
软件工程时期(1970年代初至今)
2.软件的危机(简答题)表现:
–对软件开发成本以及进度的估计常常很不准确
–用户对已完成的软件系统不满意的现象经常发生
–软件产品的质量往往难以保证
–软件常常是不可维护的
–软件通常没有适当的文档资料
–软件成本在计算机系统总成本中所占的比例逐年上升
软件开发生产率提高的速度,远远比不上计算机应用技术的迅速普及
3.软件工程:
定义:
所谓软件工程,就是研究大规模程序设计的方法、工具和管理的一门工程科学,指导计算机软件开发和维护的工程科学。
目的:
软件工程是为了解决“软件危机”而提出来的,实现生产高质量的软件产品。
“采用工程化的原理与方法对软件进行计划、开发和维护”。
工程化的基本原则:
分解,计划,规范。
开发技术:
方法/工具/环境:
软件开发方法:
软件工程的方法提供了建造软件在技术上需要“如何做”。
方法涵盖了一系列的任务----需求分析、设计、编程、测试和维护。
在不同的软件开发阶段对应有不同的方法,例如在软件的设计阶段有“结构化分析与设计”方法,在软件测试阶段有“黑盒”与“白盒”测试技术,等等。
目前又有一种更新的技术“面向对象的程序设计方法”。
在这一方法中,数据和数据的操作是被封闭在一个个称为“对象(Object)“的统一体中,对象之间则是通过”消息”(message”)进行相互联系的。
不仅提高了软件的可修改性与可维护性,同时也提高了软件的可重用性,从结构程序设计到面向对象程序设计,是程序设计方法的又一次飞跃。
软件工具:
所谓工具,在这里泛指是开发一切帮助开发软件的软件。
为了提高软件设计的质量和生产效率,现已经发展了许多的帮助开发和维护软件的软件。
例如,我们要用某种语言来开发一个应用软件,这就要涉及到“编辑程序、编译程序、连接程序等,另外在软件测试阶段还要用到“测试数据产生器、排错程序、跟踪程序、静态分析工具和覆盖监视工具等。
也就是说在不同的时期要用到不同的软件开发工具。
目前,软件工具发展迅速,许多用于软件分析和设计的工具正在建立,其目标就是要实现软件生产自动化。
软件工程环境:
软件方法提出了明确的工作步骤和标准的文档格式,这是设计软件工具的基础,而软件工具的实现又将促进软件方法的推广和发展。
“环境”一词,对不同用户有着不同的含义。
对最终用户(enduser)而言,环境就是他们运行程序所使用的计算机系统。
这类用户对环境的要求,主要是运行可靠,操作方便,容易学习和使用。
而对于软件开发人员来说,则就不同了,可以说环境就是他们进行软件开发活动动的舞台。
如,Algo-60,或者资料管理系统(DbaseIIDbaseIII),例如界面只能采用菜单来完成各种功能现在生产数据库管理的软件的环境有:
大型数据库软件Sybase,还有能帮助进行程序设计的PB软件。
过程管理:
质量管理,项目管理
4.软件生命周期(选,填,简,描述每个阶段大体做什么)
(问题定义/可行性分析/需求分析/概要设计/详细设计/程序编码/软件测试/运行维护)
4.1、问题定义:
这是计划时期的第一步,它主要是要弄清“用户要计算机解决什么问题”该阶段是软件生存周期中最短的阶段,一般它只需要一两天左右。
4.2、可性行研究:
这一阶段主要是论证解决问题的方案是否可行,由此确定出工程规模和目标。
然后再由系统分析员更准确地估算出系统的成本和效益。
4.3、需求分析:
这个阶段的主要任务是确定系统必须具备那些功能。
并设计出由用户确认的系统的逻辑模型,这里面包括有数据流图、数据字典、和简要的数据描述。
所以这一阶段要产生的文档资料比较多
4.4、概要设计:
这一阶段主要是建立起系统的总体结构并画出由模块组成的“软件结构图”
4.5、详细设计:
就是把问题具体化,也就是把概要设计阶段所产生出的模块图进一步细化,设计出系统的详细规格说明书
4.6、编码:
这个阶段是由程序员来完成的,主要是把设计阶段所产生的各种图解和一些的文字描述利用指定的语言来翻译成源程序,
4.7、测试:
它是开发时期的最后一个阶段,通常是先进行每个模块的测试,在软件工程中称它为单元测试,然后再进行将模块装配在一起进行测试,通常把它称为综合测试或者叫集成测试。
4.8、运行时期:
是软件生存周期的最后一个时期,这个时期的主要任务就是对已实现的软件进行维护,其维护的目的就是为了延长软件的使用寿命和提高软件的效益。
因为软件在运行期间会由于潜在的问题而发生错误;用户在使用后也会提出一些改进或扩充一些软件的要求;另外,对软件运行的硬件、软件环境有时也会发生变化等,所以这些情况使软件需要不断地进行维护才能继续使用而不至于废弃。
可以说,软件维护是生存周期比较长的一个阶段
软件开发过程模型:
计划/开发/维护,
计划时期可分为:
问题定义、可性行研究两个阶段
开发时期可分为:
需求分析,概要设计,详细设计,编码,测试,运行维护
运行时期可分为:
运行维护
5.软件生命周期模型:
(瀑布模型/原型模型/螺旋模型/喷泉模型){简答题}
模型示意图+思想阐述+优缺点分析
瀑布模型
思想阐述:
将软件生命周期各活动规定为依线性顺序连接的若干阶段的模型。
瀑布模型是把软件生存周期分为计划时期、开发时期、运行时期。
在每个时期里又可划分为若干个阶段。
计划时期可分为问题定义、可性行研究两个阶段。
优点:
瀑布模型在软件工程中占有很重要的地位,它提供了软件开发的基本框架,非常有利于大型软件开发过程中人员的组织、管理,有利于软件开发方法和工具的研究与使用,从而大大提高了大型软件项目开发的质量和效率。
缺点:
是一种理想的线性开发模式,缺乏灵活性,特别是无法解决软件需求不明确的问题
原型模型
思想阐述:
通过快速分析构造出一个小型的软件系统,满足用户的基本要求。
使得用户可在试用原型系统的过程中得到亲身感受和受到启发,以做出反映和评价,然后开发者根据用户的意见对原型加以改进。
随着不断试验、纠错、使用、评价和修改,获得新的原型版本,如此的周而复始,逐步减少分析和和通信中的误解,从而提高了最终产品的质量。
优点:
大大避免瀑布模型冗长的开发过程中看不见产品雏形的现象。
缺点:
所选用的开发技术和工具不一定符合主流的发展;
快速建立起来的系统结构加上连续的修改可能导致产品质量低下。
螺旋模型:
思想阐述:
它将瀑布模型和快速原型模型结合起来,强调了其他模型所忽视的风险分析,特别适合于大型复杂的系统。
优点1.设计上的灵活性,可以在项目的各个阶段进行变更;
2.以小的分段来构建大型系统,使成本计算变得简单容易
3.客户始终参与每个阶段的开发,保证了项目不偏离正确方向以及项目的可控性;
4.随着项目推进,客户始终掌握项目的最新信息,从而他或她能够和管理层有效地交互。
缺点:
1,采用螺旋模型需要具有相当丰富的风险评估经验和专门知识,在风险较大的项目开
发中,如果未能够及时标识风险,势必造成重大损失;
2,过多的迭代次数会增加开发成本延迟提交时间螺旋模型只适合于大规模的软件项目。
喷泉模型 :
以面向对象的软件开发方法为基础,以用户需求为动力,以对象作为驱动的模型。
它适合于面向对象的开发方法。
它克服了瀑布模型不支持软件重要和多项开发活动集成的局限。
喷泉模型使开发过程具有迭代性和无间隙性。
优点:
该模型的各个阶段没有明显的界限,开发人员可以同步进行开发。
其优点是可以提高软件项目开发效率,节省开发时间,适应于面向对象的软件开发过程。
缺点:
由于喷泉模型在各个开发阶段是重叠的,因此在开发过程中需要大量的开发人员,因此不利于项目的管理。
此外这种模型要求严格管理文档,使得审核的难度加大,尤其是面对可能随时加入各种信息、需求与资料的情
第2章可行性研究
计划阶段:
问题定义(系统目标规范说明书)+可行性研究(可行性研究报告)
可行性研究的流程
可行性研究:
技术/经济/社会因素(填空题),技术是最难的,经济(大题)
可行性研究:
技术/经济/社会因素(填空题),技术是最难的,经济(计算题)
Eg:
假设开发某个计算机应用系统的投资额为3000元,该计算机应用系统投入使用后,每年可以节约1000元,5年内可能节约5000元。
3000元是现在投资的钱,5000元是5年内节省的钱,假定年利率为12%,请计算该系统的纯收入,投资回收期,投资回收率。
目的:
弄清楚用户要求计算机解决什么问题
任务:
编写系统目标与规范说明书
可行性研究的目的不是去开发一个软件项目,而是研究这个项目是否值得去开发,问题能否得到解决。
在书写计划任务书时,此任务书应包括系统概述,可行性分析,拟订开发计划,结论意见
第3章软件的需求分析
目的:
在软件工程当中的“需求分析”就是确定要计算机“做什么”,要达到什么样的效果。
可以说需求分析是做系统之前必做的。
任务:
软件人员和用户一起完全弄清用户对系统的确切要求。
确定目标系统的具体要求:
1、确定系统的运行环境要求,硬件环境和软件环境
2、系统的性能要求
3、系统功能:
确定目标系统具备的所有功能
特点:
1.需求易变性2.问题的复杂性3.交流障碍4.不完备性和不一致性
分析方法:
结构化分析法
模型:
系统流程图+数据流图(DFD)[图形和表示意义](填空题)/数据字典(DD)
数据字典的任务是:
对于数据流图中出现的所有被命名的图形元素在字典中作为一个词条加以定义,使得每一个图形元素的名字都有一个确切的解释。
输出:
需求规格说明书(内容纲要+作用)
作用:
作为用户和软件开发人员双方对开发的软件系统共同理解的成果;
作为开发人员进行设计和编程的根据;
作为软件开发完成后验收的依据
第4章软件总体设计
目的:
回答“概括地说,系统应该如何实现”,这个问题,总体设计又称为概要设计。
任务:
以软件需求规格说明说为依据,着手实现软件的需求,并将设计的结果反映在“设计规格说明书”文档中。
1.软件系统结构设计
2.数据结构与数据库设计
(1)软件需求规格说明说
(2)设计规格说明书
3.网络系统设计
4.软件总体设计文档
5.评审
设计内容:
系统结构、数据结构、
数据库,网络系统
设计原则:
抽象、细化、模块化
模块化:
解决一个复杂的问题时自顶向下逐层把软件系统划分成若干个模块的过程,每个模块完成一个特定的子功能。
采用抽象和分解
耦合(模块间的依赖关系)
低耦合、数据耦合/内容耦合
内聚(模块内部元素关系)
高内聚、功能内聚/偶然内聚
关于设计准则
1、高内聚、低耦合(独立性)
2、顶层高扇出、底层高扇入(形态)
3、接口简单清晰(结构)
如果两个模块之间没有直接关系,它们之间的联系完全是通过主模块的控制和调用来实现的,这就是非直接耦合。
如果一个模块访问另一个模块时,彼此之间是通过数据参数来交换输入、输出信息的,则称这种耦合为数据耦合。
通过数据结构加以联系称为特征耦合。
一个模块通过传送开关、标志、名字等控制信息明显地控制选择另一模块的功能。
控制耦合
允许一组模块访问同一全局性的数据结构。
公共耦合
1.软件设计阶段产生的最重要的文档是软件概要设计说明书。
2.2.软件结构是以_模块_为基础而组成的一种控制层次结构。
3.3.反映软件结构的基本形态特征是深度、宽度、扇入、
4.扇出。
5.4.一个模块把数值作为参数送给另一个模块,这种耦合方式称为数据耦合。
6.5.两个模块通过全程变量相互作用,这种耦合方式称为公共耦合。
7.6.将与同一张年报表有关的所有程序段组成一个模块,该模块的内聚性为通信内聚
深度:
模块的层数
宽度:
指一层中最大的模块个数
扇入:
指一个模块直接下属模块的个数
扇出:
指一个模块直接上属模块的个数
作用范围:
是指受这个模块中的判定所影响的模块,模块的作用范围尽可能地在控制范围之内
控制范围:
指它本身及其所有下属模块的集合
模块大小:
可以用模块中所含语句的数量的多少来衡量。
第6章详细设计
1、详细设计阶段的目的(小题)和任务(大题):
2、
详细设计阶段的主要任务:
(1)为每一模块确定算法,
(2)确定每一模块使用的数据结构(3)确定模块的外部接口和用户界面,(4)为每一模块设计一组测试用例
3、模型:
程序流程图(三大结构)填空(顺序,选择,循环)
N-S图、PAD图、判定树、判定表,JSP
4、输出:
详细设计说明书
第7章程序编码
1、环路复杂度的计算(小题)
V(G)是有向图G中环路数
2、GOTO语句的使用原则
(1)向前不向后的规则
(2)goto的目的地最好在同一控制结构内部,或者离本结构出口相近的地方。
3、从流程图导出程序图
第9章软件测试
1、基础概念:
测试的定义:
软件(程序)测试是为了发现错误而执行程序的过程。
目的:
发现程序的错误。
成功的测试:
能够找到至今尚未发现的错误
失败的测试:
没有找到至今尚未发现的错误
测试用例:
测试用例(TestCase)=测试数据+期望的结果(填空题)
测试完成对象:
一般情况下,应该由非程序员或非程序开发机构来完成。
单元测试(逻辑)、集成测试(单元)
2、测试与调试的区别和联系
纠错的目的和任务:
根据测试所发现的错误,确定错误发生的位置、性质,并纠正这些错误。
纠错的过程就是程序调试的过程。
测试是纠错/排错/调试的基础和依据;纠错需要测试所发现的错误现象,才能确定错误发生的性质、位置,并纠正这些错误。
查错是纠错的基础。
3、软件测试信息流
4、静态测试:
基本特征是在对软件进行分析、检查和审阅,不实际运行被测试的软件。
5、动态测试:
设计一组输入数据,然后通过运行程序来发现错误。
5、黑盒测试、白盒测试的区别,使用场景,优劣
黑盒测试(用户规格说明书、外部特征)集成测试
功能测试、数据驱动测试、基于规格说明书的测试
白盒测试(内部逻辑结构)单元测试
开盒测试、结构测试、玻璃盒测试、基于覆盖的测试
根据逻辑结构设计测试用例;力求提高覆盖率;
6、单元测试、集成测试、系统测试、综合测试(测试内容、参与者、对应的软件开发阶段)
单元测试:
主要对模块的五个基本特性进行评价(错误处理,重要的执行路径,模块接口,局部数据结构,边界条件),(参与者是程序员,或专业人员)
集成测试:
也叫组装测试或联合测试。
在单元测试的基础上,将所有模块按照设计要求组装成为子系统或系统,(多个接口),(参与者程序员,或专业人员)
系统测试:
将已经确认的软件、计算机硬件、外设、网络等其他元素结合在一起,进行信息系统的各种组装测试和确认测试,系统测试是针对整个产品系统进行的测试,目的是验证系统是否满足了需求规格的定义,找出与需求规格不符或与之矛盾的地方,从而提出更加完善的方案。
(独立的测试小组)
确认测试:
检查软件功能与性能是否与需求说明书中规定的指标相符合。
(用户执行)
第10章软件质量
1、软件质量的特性(填空)
1.功能性:
由功能及与其指定的性质有关的一组属性组成,包括
(1)适合性
(2)准确性(3)互用(4)依从性(5)安全性
2.可靠性:
由与在规定的一段时间和条件下,软件维持其性能水平的能力有关的一组属性组成,包括:
(1)成熟性
(2)容错性(3)易恢复性
3.易用性:
由与一组规定或潜在的用户为使用软件所需作的努力和对这样的使用所作的评价有关的一组属性组成,包括:
(1)易理解性
(2)易学性(3)易操作性
4.效率:
在规定的条件下,软件的性能水平与所使用资源之间存在一定的关系,与这个关系有关的一组属性,是衡量效率的标准,这些属性包括:
(1)时间特性
(2)资源特性
5.可维护性由与为进行指定的修改而所需的努力有关的一组属性组成,包括:
易分析性易改变性)稳定性易测试性
6.可移植性:
由与软件可从某一环境转移到另一环境的能力有关的一组属性组成,包括:
(1)适应性
(2)易安装性(3)遵循性(4)易替换性
McCall模型的3个层次与11个特性
2如何保证软件质量?
主要手段(评审)
所谓软件质量保证,就是建立一套有计划、有系统的方法,来向管理层保证拟定出的标准、步骤、实践和方法能够正确地被所有项目所采用。
软件质量保证的主要手段,是对软件产品和活动进行评审和审计,以此来验证软件是合乎标准的。
在软件开发的各个阶段实施的软件质量保证检验项目如下:
1.需求分析阶段
主要检测开发目的、目标值、开发量(程序、文档)、所需资源、各阶段的产品和作业内容、开发体制等的合理性。
2.设计阶段
检验项目包括产品的量(计划量、实际量)、评审量、差错数、检出差错的内容、评审方法和覆盖性、出错原因、处理情况及对该阶段的影响、评审结束和阶段结束的判断标准等。
3.实现阶段
检验项目包括设计阶段的所有检验项目,另外还包括:
计算机使用时间、测试环境、测试项目设定种类、测试用例的设计方法等。
4.验收阶段
检验项目主要是说明书检查(检查与被检查程序有关的用户文档等)和程序检查(为了评价和保证程序质量,采用各种黑盒测试或白盒测试手段进行检查)。
5.运行维护阶段
主要是掌握用户使用产品的质量情况,并反馈给开发部门。
2、软件可靠性
软件可靠性的定义是:
“软件可靠性是软件系统在规定的时间内及规定的环境条件下,完成规定功能的能力”。
(1)规定的时间
(2)规定的环境条件
(3)规定的功能
3、软件的容错
容错软件的定义为:
规定功能的软件,在一定程度上对自身错误的作用(软件错误)具有屏蔽能力,或在一定程度上能从错误状态自动恢复到正常状态,或在因错误而发生错误时,仍然能在一定程度上完成预期的功能,或在一定程度上具有容错能力,则称之为容错软件。
第11章软件维护
1、维护的定义:
软件维护是指软件系统交付使用以后,为了改正错误或满足新的需求而修改软件的过程。
2、为什么要进行软件维护—>维护类型(完善性、纠错性、适应性、预防性)
(1)完善性维护
扩充原有系统的功能,提高系统的性能,提高软件运行的效率,满足用户的实际需要而进行的维护活动。
当一个软件系统投入使用和成功地运行时,用户会根据业务发展的实际需要,提出增加新功能、修改已有功能以及性能的改进要求等。
(2)纠错性维护
软件测试不可能找出一个软件系统中所有潜伏的错误,所以当软件在特定情况下运行时,这些潜伏的错误可能会暴露出来。
对在测试阶段未能发现的,在软件投入使用后才逐渐暴露出来的错误的测试、诊断、定位、纠错以及验证、修改的回归测试过程,称为纠错性维护。
(3)适应性维护
计算机的软、硬件环境,数据环境在不断的变化,使运行的软件能适应运行环境或者数据的变动而修改软件的过程称为适应性维护。
(4)预防性维护
为了进一步改善软件的可靠性和易维护性,或者为预见的将来软件运行和维护打下更好的基础而对软件进行修改。
3、维护类型:
结构化维护与非结构化维护
4、维护技术:
面向维护的技术(涉及到软件开发的所有阶段)、维护支援技术(支持软件维护阶段的技术)
5、维护的副作用
维护的副作用是指由于修改程序而导致新的错误或者新增加一些不必要的活动。
(1)修改代码的副作用
在修改源代码时,可能引起的错误。
(2)修改数据的副作用
在修改数据结构时,有可能造成软件设计与数据结构不匹配因而导致软件出错。
数据副作用就是修改软件信息结构导致的结果。
(3)修改文档的副作用
对软件的数据流、软件结构、模块逻辑等进行修改时,必须对相关技术文档进行相应修改。
但修改文档过程会产生新的错误导致文档与程序功能不匹配,缺省条件改变等错误,产生文档的副作用。
6、重要文档:
软件问题报告(所有软件维护申请报告要按规定方式提出,该报告也称____软件问题__报告。
)
第12章项目管理
1、项目的定义:
项目是为了提供一个独特的产品或服务而暂时承担的任务。
项目的特征是临时性和唯一性。
☐项目是指在一定的约束条件下(主要是限定时间、限定资源),具有明确目标的一次性任务。
☐项目是一系列具有特定目标,有明确开始和终止日期,资金有限,消耗资源的活动和任务。
☐分辨:
2、项目管理的三要素:
时间、成本、质量
3、项目管理知识领域:
综合管理、范围管理、时间管理/进度管理,成本管理,质量管理,沟通管理,人力资源管理,采购管理、风险管理、
4、软件开发中的资源:
人、软件构件、软硬件
5.各类人员在项目开发过程的参与度规律
6.甘特图的作用:
☐甘特图也称时间表(Timelinechart),用来建立项目进度表
☐在甘特图中,每项任务的完成以必须交付的文档和通过评审为标准
☐因此在甘特图中,文档编制与评审是软件开发进度的里程碑
☐优点:
是标明了各任务的计划进度和当前进度,能动态地反映软件开发进展情况。
☐缺点:
是难以反映多个任务之间存在的复杂的逻辑关系。