软件工程期末复习.docx
《软件工程期末复习.docx》由会员分享,可在线阅读,更多相关《软件工程期末复习.docx(26页珍藏版)》请在冰豆网上搜索。
软件工程期末复习
一基本概念
1简述1983年IEEE为软件下的定义。
5822926
计算机程序、方法、规则、相关的文档资料以及在计算机上运行程序时所必需的数据。
2简述软件危机的表现有哪些?
以及解决软件危机的途径有哪些?
软件危机的主要表现包括:
(1)软件开发进度难以预测,开发成本难以控制,导致超预算、超时;
(2)产品功能难以满足用户需求;
(3)软件产品质量无法保证;
(4)软件缺少适当的文档资料,维护困难;
(5)软件成本超过硬件成本;
(6)软件开发生产率的提高速度跟不上计算机应用普及深入的趋势;
解决软件危机的途径有:
1管理措施:
项目管理、配置管理、过程管理、质量控制
2技术措施:
开发过程、开发技术与方法和开发工具
3软件工程的定义
1993年IEEE给出的定义:
软件工程是:
①系统的、规范的、可度量的途径应用于软件开发、运行和维护过程,也就是把工程应用于软件;
②研究①中提到的途径。
”
软件工程是围绕软件开发的一门交叉学科:
软件工程=计算机科学+工程学+管理学
4软件工程的10个知识领域
软件工程过程(SoftwareEngineeringProcess)
软件工程工具和方法(SoftwareEngineeringToolsandMethods)
软件需求(SoftwareRequirement)l
软件设计(SoftwareDesign)
软件构造(SoftwareConstruction)
软件测试(SoftwareTesting)
软件维护(SoftwareMaintenance)
软件配置管理(SoftwareConfigurationmanagement)
软件工程管理(SoftwareEngineeringmanagement)
软件质量(SoftwareQuality)
5软件工程的目标是什么,软件工程的三要素都是什么?
软件工程的目标:
软件工程必须以有组织的质量保证为基础,进行全面质量管理,不断地过程改进使软件工程方法走向成熟。
软件工程的三要素包括:
过程、方法和工具
过程为及时合理地开发出满足用户需求的计算机软件而进行一系列有组织的活动。
过程定义了技术方法的采用、工程产品(包括模型、文档、数据、报告、表格等)的产生、里程碑的建立、质量的保证和变更的管理。
方法为软件开发提供“如何做”的技术,它涵盖了项目计划、需求分析、系统设计、程序实现、测试与维护等一系列的开发活动如何来做。
开发方法经历了从面向结构、面向对象、面向组件到面向服务的发展工程。
工具为过程和方法提供自动的或半自动的支持。
这些软件工具被集成起来,建立起一个支持软件开发的系统,称之为计算机辅助软件工程(CASE,ComputerAidedSoftwareEngineering)。
6软件工程的七条基本原理
美国著名的软件工程专家巴利•玻姆(BarryBoehm)提出了软件工程的七条基本原理:
1.用分阶段的生命周期计划严格管理;
2.坚持进行阶段评审;
3.实行严格的产品控制;
4.采纳现代程序设计技术;
5.结果应能清楚地审查;
6.开发小组的人员应少而精;
7.承认不断改进软件工程实践的必要性。
7简述软件过程的定义,软件过程又可以分为那几个类型?
软件过程(SoftwareProcedure)是为获得软件产品,在软件工具支持下由软件工程师完成的一系列软件工程活动。
软件过程可概括为基本过程、支持过程和组织过程等三种类型。
其中,基本过程包括:
获取过程、供应过程、开发过程、运作过程和维护过程。
支持过程包括:
文档编制过程、配置管理过程、质量保证过程、验证过程、确认过程、联合评审过程和问题解决过程等过程。
组织过程包括:
管理过程、基础设施过程、改进过程和培训过程。
8里程碑(MileStone)思想
阶段工作的目标进行总结、评审、调整和部署下一个里程碑。
目的:
合理分配,细化管理“粒度”,降低项目风险。
9基线思想
基线是指一个(或一组)配置项在项目生命周期的不同时间点的一种状态,各阶段有各阶段的基线:
需求基线、设计基线、测试基线等。
基线一旦建立后变化需要受控制。
10简述软件生存周期的概念,说明软件生存周期划分为那几个主要时期?
每个时期有包括哪些主要阶段?
软件生存周期是指软件产品从定义到开发、使用和维护,直到最终被弃用的时期,称为生存周期。
生存周期的可划分为计划时期、开发时期和运行时期等三个主要时期。
其中计划时期包括问题定义和可行性研究两个阶段。
开发时期包括需求分析、总体设计、详细设计和实现等四个阶段。
运行时期的又称为运行和维护阶段。
11简述教材中介绍了那些软件开发模型?
这些模型各有什么特点?
教材中重点介绍了瀑布、原型、增量、螺旋四个传统模型和RUP、XP两个现代模型。
其中,瀑布模型严格按照生存周期开发软件,每个阶段必须完成规定的、完整、准确的合格文档,前一阶段的输出文档就是后一阶段的输入文档。
其主要特点包括:
①活动间具有顺序性和依赖性;②推迟实现的观点;③质量保证的观点;
快速原型模型法是开发人员在一个基本的需求的基础上快速开发出一个软件原型,然后由用户使用和评价原型、开发人员根据用户意见再修改原型,然后再使用评价再修改、直至将原型进化为最终产品。
快速原型模型的特点包括:
①做出系统原型,及早向用户展示系统要实现的界面及功能,增强用户的合作信心;②直观化的表达,容易交流,消除理解上的歧义;③修改集中在前期的原型确认上,较大程度减少后期实施中的返工。
④入手快,加快开发进度;
增量模型是一种演化模型,先完成一个系统子集的开发,再按同样的开发步骤增加子集,如此递增下去直至满足全部系统需求。
每个增量可按快速原型法进行。
增量模型的特点包括:
①无须等待获取完整需求就可入手,尽快见到成果,增强双方信心;②分步开发,降低复杂性和难度,减少技术风险,并可并行开发;③边开发边投入,可及早发现问题,减少投资风险;④各个子集是逐渐并入已有的系统中,加入子集不能破坏已构造好的部分,这需要软件具备开放式的体系结构;⑤适用于需求不完整的软件开发,指的是需求逐渐摸清、逐步完善,并非随意改变,需求改变过大会导致整体性失控。
后面要介绍的XP(极限编程)属于该模型。
螺旋模型(Spiralmodel)是一种融合了瀑布模型、快速原型模型和增量模型的演进模型,并引入风险分析机制。
适合大型复杂的系统开发。
螺旋模型特点包括:
①多种模型结合的一种演进模型,融合了瀑布模型、快速原型和增量模型的所有特点,融进了循环往复、迭代演进的思想;②增加风险分析,一旦风险成立,原方案应终止、修订,力求风险可控③客户始终参与每个阶段的开发,每个阶段的成果需客户确认,避免错误的积累。
统一过程RUP(RationalUnifiedProcess)是由Rational公司在推出统一建模语言UML后,推出的一个软件开发框架RUP,称为软件统一开发过程。
12统一过程RUP定义了那几个主要阶段?
●初始阶段(Inception):
主要完成商业需求,确定项目边界。
里程碑是生命周期目标(LifecycleObjective),评价项目基本的生存能力。
●细化阶段(Elaboration):
主要完成领域问题分析和软件设计。
获取用户需求(功能和非功能需求),建立需求模型;进一步确立体系结构和设计软件结构等工作。
里程碑是生命周期结构(LifecycleArchitecture)。
●构造阶段(Construction):
主要完成系统实现、测试,里程碑是初始功能(InitialOperational),产品版本常被称为“beta”版。
●交付阶段(Transition):
重点是确保软件对最终用户是可用的。
里程碑:
产品发布(ProductRelease)
13统一过程RUP工作流
16个核心过程工作流(CoreProcessWorkflows)
●商业建模(BusinessModeling):
弄清项目边界和约束,做出计划。
●需求(Requirements):
描述系统应做什么,开发人员和用户达成需求基线。
●分析和设计(Analysis&Design):
将需求转化成计算机可以实现的模型。
●实现(Implementation):
用程序设计语言将设计模型组织成可执行的文件、数据。
●测试(Test):
是发现软件中的错误,在实验环境下验证所有的需求是否被正确的实现。
●部署(Deployment):
将软件分发给最终用户,安装在真实的环境下,由用户操作运行。
23个核心支持工作流(CoreSupportingWorkflows)是对核心过程工作流的配套支持和管理,保障核心过程工作流顺畅、高效运行。
●配置和变更管理:
工作文档的管理,在版本更新、需求变更中做到各类文档及时、同步跟踪,保证各文档内容完整、一致。
●项目管理(ProjectManagement):
资源配置、评估监控、风险控制、计划调整等管理工作,目的效益最大化。
●环境(Environment):
软件开发环境,包括人员、设备、过程和工具,以及各种规范、指导手册和保障措施。
14简述rup模型中基线与里程碑的概念,二者之间的关系。
基线,是软件文档或源码(或其它产出物)的一个稳定版本,它是进一步开发的基础,也可以理解成为一个阶段的起点并已经制定了相应的工作标准,并且只有经过授权后才能变更这个标准。
里程碑,是计划中确定的阶段性工作完成目标,要求提交阶段交付物,作为阶段评估的标准。
基线和里程牌的关系:
基线是为了建立参照点,是阶段的起点;里程牌是建立阶段性目标,是阶段终点,最后的里程牌可能是一次迭代的终结。
15简述软件计划的目标和主要工作.
软件计划的目标:
研究项目的可行性,研究合理地运用软件项目开发所需的资源、经费,掌握开发进度,控制项目开发过程按此计划进行。
主要工作包括:
确定项目实施范围、定义递交的工作成果、评估实施过程中主要的风险、制定项目实施的时间计划、成本和预算计划、人力资源计划等。
16软件计划的活动有哪些?
这些活动的内容是什么?
软件计划主要活动包括:
问题定义,可行性研究,项目计划。
这些活动的内容是:
问题定义:
确定项目实施范围,回答项目“做什么?
”的问题。
可行性研究:
项目的必要性和可能性。
制定项目计划:
编制项目开发计划。
17简述问题定义的目的和主要任务。
问题定义的目的:
弄清要计算机解决的根本问题所在(要解决的问题是什么?
),确定新系统的作用域,以及项目所需的资源、工期和经费。
问题定义的主要任务:
编写项目报告提交审查,作为可行性分析的依据。
18简述可行性分析的目的、任务和内容。
可行性分析的目的:
确定项目的必要性和可能性。
可行性分析的任务包括:
可行性分析;写可行性研究报告;编制开发计划。
可行性分析的内容包括:
技术、经济和社会三个方面的可行性:
19简述需求分析的目的、必要性和参与角色
需求分析的目的是:
弄清用户对系统的细节要求,完整、准确、清晰、具体地回答目标系统“做什么”。
准确地理解用户提出的软件功能、性能及其环境的要求。
需求分析的必要性:
用户与开发者的知识领域不同,产生歧义;软件开发失败50%是需求不合理,早期错误易放大。
参与角色:
开发方包括分析师、设计师和架构师。
用户方包括领域专家、用户和部门负责人。
20需求开发的任务有哪些?
需求开发的任务包括
需求获取:
收集用户对目标软件系统在功能、性能、行为、设计约束等方面的期望。
需求分析:
通过符号和文字说明描述系统模型,使用户和开发者间建立共同语言基础,消除理解上的歧义的过程。
需求说明:
既编写需求文档,也称编写需求规格说明书。
需求说明书是需求分析阶段的最终成果,也是需求分析阶段复审的依据;是用户领域专家、软件分析师、软件设计师共同交流的途径和媒介;是交付给用户文档的一部份;
需求验证:
即需求评审。
根据需求说明书,分析师、设计师、客户会审文档,对需求的正确性、一致性、完整性、无二义行进行评审、确认。
21需求的层次
软件需求包括三个不同的层次:
业务需求、用户需求、功能需求,也包括非功能需求。
1.业务需求(businessrequirement)
业务需求是反映企业/组织对软件系统的高层次目标要求,即软件系统的建设目标。
业务需求通常是“问题定义”或“可行性研究”阶段获取的内容;在需求规格说明书中反映在项目背景、系统目标或任务概述的描述中。
获取的主要对象是客户方的高管、专家、部门负责人。
2.用户需求(userrequirement)
用户需求:
用来描述用户使用产品必须要完成的任务;使用业务领域的术语描述,采用开发者与用户都能理解的语言和图形表达。
用户需求是经过调查、归纳后双方认同的结果。
获取的主要对象是部门负责人、软件的操作者或称终端用户。
3.功能需求(functionalrequirement)
功能需求定义了开发人员必须实现的软件功能,结果在需求规格说明书中;功能需求用软件行业术语表达:
通常是需求建模的结果即目标系统的逻辑模型,如结构化的功能模型、数据模型、行为模型,面向对象的类模型等。
4.非功能需求
特性是指一些非功能需求,是满足业务需求的性能要求。
如界面的交互性、数据的安全性、数据的事务性、用户的并发性、响应的快速性、操作的实时性、错误与异常的恢复性、软件的容错性等等。
项目的失败或拖延一般不是在功能上,而恰恰倒是在性能要求上,因为这些性能与软件的体系结构有关,与构成系统的网路与硬件环境等底层技术有关,往往超越一般开发人员的技术能力。
22需求获取的一般方法
①需求获取方法以采访、观察、座谈、对先前的系统版本的测试等。
必要时采用快速原型法。
②先集中在使用者对系统的观点上,以收集用户原始资料,数据、工作方式、工作流程、使用要求等为工作起点,深入到部门、车间、班组,做好原始纪录;
③然后根据对问题及环境的理解与开发经验,改正用户需求的模糊、歧义和不一致性要求,排除用户的不合理要求,挖掘用户尚未提出但具有价值的潜在需求,使用户需求逐步精确化、一致化和完全化;
④需求获取非一次完成:
需要往复进行、逐步深化。
⑤需求获取的内容:
写进“需求规格说明书”,确认。
23需求获取的策略
①循序渐进的策略;
②确定优先级:
先进行重点的需求调研,有助于识别出重大的风险,并为制定迭代计划提供指导;
③不要陷入技术:
需求未明确,应回避对技术问题讨论。
④挖掘用户需求:
“诱导式”就是挖掘用户需求。
客户并非IT专业人士,需求的概念是模糊的、笼统的,而且尺度难以把握,预测潜在需求。
⑤区分不必要的需求:
客户对有些需求提不出来,自然也会提出一些不必要的需求。
24简述概要设计和详细设计的内容。
软件设计包括概要设计和详细设计。
概要设计又分为体系结构设计和领域问题结构设计。
体系结构设计:
是支撑和管理软件运行的环境设计。
由于现代的软件是处在操作系统、网络、各种服务器共同搭建的环境下运行,并且具有并发、安全、事务等多方面的管理,是软件设计优先考虑的问题。
领域问题结构设计:
满足需求的软件功能设计,核心所在。
将领域问题的分析模型细化成软件结构模型,也就是划分软件的模块结构及确定模块之间的关系。
②详细设计又分为如下三个部分:
●对模块内部的过程和数据结构进行设计。
也就是对模块内进行算法分析和程序设计。
●人机交互界面的具体设计,还有与其它外部系统接口设计。
●完成对数据库的物理设计
概要设计是根据需求确定软件和数据的总体框架;详细设计是进一步精化成软件的算法和数据结构。
25
25简述衡量软件模块独立性的度量标准有哪些?
模块独立性是指模块能够完成独立的功能;模块符合信息隐藏和信息局部化原则;模块间关连和依赖程度尽量小。
衡量软件模块独立性的度量标准的指标有取决于模块的内部特征的指标内聚度和取决于模块的外部特征的指标耦合度。
内聚度:
一个模块内部各个元素间(语句和程序段)彼此的紧密程度的度量。
耦合度:
指软件结构中各模块间相互联系紧密程度的一种度量。
26简述内聚度的七个等级?
内聚度表示一个模块内部各成分之间彼此结合的紧密程度。
内聚度按其高低程度可分为七级,高内聚度模块独立性强,设计尽可能提高模块内聚度。
1偶然性内聚:
是指一个模块内各成分为完成一组功能而组合在一起,它们相互之间即使有关系,也很松散。
2逻辑性内聚:
模块内完成的诸任务逻辑上相关。
该类内聚的缺点是执行中要从模块外引入用作判断的开关量,从而增加了块间偶合(控制偶合)。
3时间性内聚:
如果一个模块包含的诸任务必须在同一时间段内执行,则称之为时间性内聚
4过程性内聚:
模块的过程性内聚度是指模块内成份彼此相关,并且必须按特定的次序在本模块内执行;
5通讯性内聚:
是指模块中各组成成分都将对某个数据结构的同一区域进行操作,以达到通信的目的。
6顺序性内聚:
一个模块内的各处理成分均与同一功能相关,且这些处理必须顺序执行,通常,一个处理成分的输出是另一个处理成分的输入。
7功能性内聚:
模块内所有成分形成一个整体,完成单个功能,则称功能内聚,功能内聚是最高程度的内聚形式。
27耦合度的七个等级
耦合度是模块独立性最显著特征。
耦合度按其高低程度可分为七级,松耦合是软件设计一直追求的目标。
1非直接耦合:
模块不依赖另一个模块能独立工作,这是最松的耦合。
2数据耦合:
两模块间通过参数交换数据信息,则称这两模块为数据耦合。
3特征耦合:
模块之间除传递关键数据外还附加公共数据。
4控制耦合:
如果两模块间通过参数交换信息,此时若传递的信息中含有控制信息,则为控制耦合。
5外部耦合:
当若干模块均与同一个外部环境关联,它们之间便存在外部耦合。
6公共耦合:
当若干模块通过全局的数据环境相互作用时,它们之间存在公共耦合。
7内容耦合:
当一个模块使用另一个模块内部的数据或控制信息;一个模块直接转移到另一个模块内部等,模块间的耦合就是内容耦合。
28简述模块的作用域与控制域的概念及其相关设计原则。
模块的作用域:
从功能方面考虑,受模块内一个判定影响的所有模块的集合;
模块的控制域:
从结构方面考虑,包括它自己及其所有下属模块的集合。
相关设计原则是:
模块的作用域应在控制域之内。
29详细设计的表达方式有哪些?
1.伪代码(Pseudocode):
是一种算法描述语言,也称PDL语言(ProgramDesignLanguage)。
伪代码介于自然语言与编程语言之间,用伪代码描述的算法可以容易用任何一种编程语言实现。
伪代码表达算法必须结构清晰、代码简单、可读性好。
2.程序流程图:
用图形符号表达算法,直观表达循环、分支等复杂结构,是喜闻乐见的表现形式。
3.盒图(N-S)(Nassi和Shneiderman):
也是一种图形符号表达方式,同样可以表达各种流向控制,但比程序流程图紧凑、功能域明确。
4.PAD图(PAD-ProblemAnalysisDiagram)[28]:
同样是用图形符号表达算法,但它具有结构化的表达方式,因此结构十分清晰,很容易翻译成程序代码。
PAD支持自顶向下,逐步求精方法的使用。
判定表与判定树:
对于规则较多,判定条件较复杂的情况,宜采用这两种方法表达。
5.判定表与判定树:
对于规则较多,判定条件较复杂的情况,宜采用这两种方法表达。
30简述面向数据流的结构化分析SA方法中,有哪些建模方法?
功能建模:
数据流图DFD(DataFlowDiagram)+数据字典DD(DataDictionary);
数据建模:
实体关系图ERD(EntityRelationDiagram);
行为建模:
状态转换图STD(StateTransformDiagram);
加工说明PESPEC(ProcessSPECification)和判定表等辅助工具。
31简述数据流图(DFD)的图形符号有哪些?
①数据流:
表示数据流的名称和数据的流向(从加工出发或流向加工);
②外部实体:
系统外与系统交互的人或实体;
③数据加工:
数据处理;
④数据存储:
数据进行持久保存的环节;
32简述数据字典的作用、内容和组成元素有哪些?
数据流图描述了数据加工,但没有描述数据的内容。
数据流图必须与描述并组织数据条目的数据字典DD(DataDictionary)配套使用。
数据字典描述的对象:
描述数据流图中出现的所有数据和加工。
这里的数据描述是概念性的,属数据结构的抽象描述;加工采用加工小说明进行概念性的描述。
数据字典的组成元素包括:
数据流条目、数据存储条目、数据项条目;加工条目(也称为小说明);
33简述面向对象的基本概念有哪些?
1.对象与面向对象
对象(Object):
即表示客观世界中的某个具体的事物。
面向对象(ObjectOriented):
是人类的活动,是人类认知、观察客观事物的方法论。
2.面向对象的抽象与分类
3.类的封装与对象的整体性
4.关联性与交互性
客观事物都不是孤立存在的,万物之间相互依存、相互交流。
关联性表达客观事物的社会性、共存性、组织性,是静态的结构描述。
消息机制是对象的交互性,表示对象生存环境的依赖性。
5.继承性
对事物的分类本身就体现继承性。
软件开发利用继承性可对Object更好地分类,软件结构更严谨,代码的复用性更强。
6.多态性
对象在不同的条件下,同样的行为会表现不同的效果,这就是Object的多态(polymorphism)。
面向对象编程语言提供抽象类、接口、重载等技术支持多态的实现。
34面向对象的五大特性有哪些?
面向对象的特性有抽象性、封装性、继承性、多态性和消息机制等五大特性。
35简述面向对象开发过程的内容有哪些?
①需求获取:
开发者以OO的观点(OOV)来观察客观世界的目标即获取需求,然后用自然语言写到需求规格说明(OOS)中,也就是对客观世界的最高层抽象。
②面向对象分析OOA(ObjectOrientedAnalysis)与面向对象设计OOD(ObjectOrientedDesign)。
③面向对象编程ObjectOrientedProgram(OOP)与面向对象测试ObjectOrientedTesting(OOT)是代码实现过程,它依赖于编程语言和工具。
④软件维护ObjectOrientedSoftwareMaintenance(OOSM)。
36与传统的软件开发方法相比较,面向对象开发的主要优点有哪些?
1.自然性即客观性
2.操作数据对象而非数据实体
3.阶段衔接平滑
4.结构性好、复用性强
5.提高扩展性和维护性
37简述UML中定义了那些图形符号?
并简述起作用。
用例图(UseCase)
描述系统参与者与领域问题的功能
类图(Class)
描述系统的逻辑结构,类、接口及它们的协作关系
包图(Package)
描述类的复用组织—分组
对象图(Object)
描述类的实例在某时刻的关系
构件图(Component)
描述系统按构件组成上的关系
配置图(Deployment)
描述系统运行环境的配置情况
时序图(Sequence)
描述某些对象共同合作完成某项功能而按时间顺序进行的消息传递
协作图(Col