软件工程基础期末复习资料完整版
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2.文档有何作用?程序代码属不属于文档?
答:文档指的是在软件开发和维护过程中形成的文字记录。
从软件计划、分析、设计、实现(编码和测试)、维护等开发活动中形成的各种文件。
文档属于软件的一部分,是软件维护和升级的重要依据,并且文档内容要与代码同步更新。
没有文档的软件维护不但不能延长反而会缩短软件寿命。
文档包括需求规格说明书、设计说明书、用户使用说明书、在线帮助等,当然程序代码是必不可少的一种软件文档。
3.什么是软件危机?什么原因产生了软件危机?
答:软件危机指的是在计算机软件的开发和维护过程中所遇到的一系列严重问题。
产生的原因是主客观不相适应。
见书图1-2。
●客观上:软件规模增大、功能要求越来越复杂,需求不断变化等;
●主观上:传统的个体化开发观念和方法,无开发过程指导,无开发过程管理;
由于主客观矛盾,必然产生软件质量差、开发超期、超预算、维护困难等现象。
5.软件工程三要素是什么?
答:软件工程三要素是从计算机科学观点看软件工程,即从软件开发的技术层面应该有过程、方法和工具。
见图1-4。
(2)“过程”是软件产品加工所经历的一系列有组织的活动,保证能够合理、高质量和及时地开发出软件。
过程定义的活动集合及其序列见第2章。
(3)“方法”为软件开发提供“如何做”的技术,它涵盖了项目计划、需求分析、系统设计、程序实现、测试与维护等一系列活动的做法。
如经常说的面向结构、面向对象、面向组件等开发方法,项目管理中估算、度量、计划等管理方法。
软件工程以介绍方法为主,本书从第3章开始逐步介绍开发过程所用到的方法。
(4)“工具”为过程和方法提供自动的或半自动的支持。
这些工具既包括软件也有硬件。
软件工具包括编程、建模、管理等开发工具。
通过网络环境把这些软件工具集成起来搭建一个支持团队开发的平台,称之为计算机辅助软件工程 (Computer Aided Software Engineering,CASE)。
CASE集成了软件、硬件和一个存放开发过程信息的软件工程数据库,形成了一个软件工程环境。
6.软件工程的目标、过程和原则是什么?
答:目标、过程、原则是一切工程的三维框架,它是以工程的观点来看待软件开发。
见书1.5.2节
(1)软件工程的目标:降低成本,及时交付高质量的软件产品(高质量、高效率、高效益)。
(2)实现目标的过程:完成产品加工的过程。
它包括:基本过程、支持过程和组织过程。
(3)进行过程应遵守的原则:原则就是过程中的轨道约束。
它包括:选取适宜开发范型、采用合适的设计方法、提供高质量的工程支持、重视开发过程的管理。
7.软件工程原理有哪几条?
答:软件工程的基本原理是指导软件工程实践的思想方法,一共有7条,这7条原理相互支撑,保证软件产品的质量和开发效率。
见书1.5.4节。
(1)用分阶段的生命周期计划严格管理;
(2)坚持进行阶段评审;
(3)实行严格的产品控制;
(4)采纳现代程序设计技术;
(5)结果应能清楚地审查;
(6)开发小组的人员应少而精;
(7)承认不断改进软件工程实践的必要性;
2.软件过程与软件工程有什么区别和联系?
答:(1)过程与工程是两个层面的问题,过程是加工高质量软件产品的活动集合和顺序,具体的投入产出过程,关注在技术层面;工程是对过程的投入进行资源协调,是向过程要效益的管理层面。
(2)软件过程是软件工程的子集。
在软件工程的过程、方法和工具三要素中,它是底层要素;在软件工程的目标、原则和过程三维全景图中,通过软件过程才能实现软件工程的目标。
3.什么是软件生命周期?与软件过程有何区别和联系?
答:
(1)软件生存周期:软件产品从定义到开发、经过使用和维护,直到最终被弃用;
(2)两者指同一个事情,只是表达问题的角度不同:
●软件过程:关注产品加工的活动集合、顺序和方法论;
●生命周期:关注软件产品从诞生到消亡的生命历程,实质内容也就是软件过程;
因此软件过程=软件生存周期,“软件生存周期模型”也称为“软件过程模型”或“软件开发模型”。
5.软件生命周期划分哪些阶段?每个阶段有哪些基本活动?
答:生存周期的基本划分:分成三个大的阶段也称三个时期,即计划时期、开发时期和运行时期。
每个时期又由若干活动组成。
●计划时期:是软件项目的初始阶段。
主要活动及顺序是问题定义和可行性研究;活动内容是搞清软件的开发目的、规模、约束条件和技术方案,属论证阶段;目标是获取软件开发项目。
●开发时期:软件开发的第二阶段。
包括的活动及顺序是分析、设计和实现;活动内容是逐步细化软件模型、经过编码和测试,最终得到可运行的软件。
开发时期属实质性开发阶段;目标是构建高质量的软件。
●运行时期:软件生存周期的最后阶段,软件处在运行中,往往也是最长阶段。
主要活动就是维护;活动内容是治疗和进化软件;目标是延长软件的寿命。
6.介绍了哪四种传统开发模型?各有何特点?
答:瀑布、原型、增量、螺旋四个传统模型:
(1)瀑布模型:主要体现了分阶段、有控制的思想。
活动间强调按顺序、文档化;存在的问题是:过于理想化,每一步的工作必须完整准确,否则无法进行下一步工作。
(2)原型模型:需求分析入手快速、表达直观、容易交流。
重点解决瀑布模型需求分析入手难的问题。
(3)增量模型:对于需求复杂的系统,采用分块开发,逐步集成的开发策略。
增量体现了演进、迭代思想,每一块就是一个增量。
每个增量是一次迭代。
增量模型的新版本叫做“极限编程”(XP)。
(4)螺旋模型:融合了上述三种模型,融进了循环往复、强化了演进迭代的思想,增加风险控制环节。
但风险分析的正确性是左右软件演进的关键因素。
7.当需求不能一次搞清,且系统要求比较复杂时应选用哪种开发模型较适合?
答:开发模型不是孤立或排斥的,相互借鉴和参考。
在上述四种古典螺旋模型中,螺旋模型是一种综合性的模型,适应于较复杂的系统。
8.RUP模型有哪些优越性?为何得到如此广泛的应用?
答:RUP采用了时间与过程的二维表达方式,全面贯穿了软件开发分段、分层、细化、往复、循环、迭代、并发、重叠、演进、基线、里程碑、评审、控制等方法论。
(1)生命周期模型分为初始、细化、构造和交付四个阶段,比三个时期的传统模型更为合理。
因为各种活动不是随阶段的划分而戛然截止,每个阶段多种活动是重叠、
并发、延续、主次分明;
(2)阶段控制采用了基线与里程牌,工作有起点、有目标、有计划;
(3)模型反映了软件开发需要团队合作,因此RUP是一个团队模型;
(4)双重迭代,大迭代(周期迭代)完成一个新版本,小迭代(阶段内迭代)完成里程牌目标;
(5)RUP并不是不讲究维护,维护只是一个新的增量迭代(周期迭代)过程,在过程集合中有“配置和变更管理”活动来管理软件的维护;
1.软件计划时期有哪些工作活动?目标是什么?
答:
软件计划是基本生命周期模型中的的第一个阶段,作为项目的起点,多数活动处在商务层面,面向决策层。
主要活动有三项:
(1)问题研究;
(2)可行性研究;
(3)项目计划。
该阶段目标就是完成产品立项,中心工作是确定开发什么样的软件、是否值得去开发、继而作出初步的安排。
在RUP模型中属于“初始阶段”,它的里程牌就是“软件目标”。
2.问题定义阶段的目的、任务是什么?
答:
●问题定义阶段的目的:弄清要计算机解决的根本问题所在(目的),确定新系统的
作用域(范围与规模),以及项目所需的资源、工期和经费。
就是搞清解决问题的
题意和约束条件。
●主要任务:在向用户调查研究的基础上,编写项目报告提交审查,并作为下一次工作可
行性分析的依据。
3.可行性研究的目的、任务是什么?
答:
●可行性研究的目的:确定项目以最小的代价在尽可能短(限定)时间里是否能够开
发,是否值得去开发。
即在约束条件下问题是否有解。
●可行性分析的主要任务: 可行性分析,写可行性报告,作出开发计划。
在了解客户的
要求及现实环境基础上,从技术、经济和社会因素等三方面研究并论证本软件项目
的可行性,编辑可行性研究报告,制定初步项目开发计划。
4.从哪几个方面研究可行性?分别考虑什么问题?
答:可行性研究从技术可行性,经济可行性,社会可行性三个方面研究;
●技术可行性包括开发风险分析,资源分析,技术分析;
分析利用现有的技术能否实现,能否解决系统中的技术难题,所开发的系统能否达
到所要求的功能和性能,系统对技术人员的要求,现有的技术人员能否胜任,开发
所需的软件与硬件能否如期得到等;
●经济可行性包括一次性开发费用的估算,年运行费用的估算,效益估算;
上述估算的基础是正确估算出软件的规模,进而才能估算出工期、资源和成本。
●社会可行性主要考虑市场,政策和法律方面问题;
5.技术可行性分析的步骤?
答:
●复查确认系统目标、规模;
●研究目前正在使用系统工作流程;
●导出要实现的新系统高层逻辑模型;
●重新定义问题;
●导出和评价供选择的方案;
●推荐可行的方案;
6.技术可行性研究中可用什么图形工具表达现有系统的模型?
答:可行性研究中也需要建立一些模型,如业务模型、数据模型、需求模型等。
一般表达现有系统可采用物理模型,如表达现有工作流程可采用SFD,它不需要专用的建模工具,用Office的Word或Visio就可画SFD,并且SFD没有专业的语法要求,其表达含义双方都可理解,容易交流。
7.经济可行性研究的内容?
答:
1)一次性开发费用的估算:主要是硬件设备,人员工资,培训,材料消耗;
2)年运行费用估算:主要是维护人员,软件硬件升级,消耗品;
3)效益的估算:经济效益与社会效益;
8.可行性分析阶段最终提交什么分析成果?
答:最终要提交可行性研究报告:将可行性分析的结果写在报告里,这是立项的基础文件;一旦项目确立实施,项目组进一步编制“项目计划书”
3.讨论:问题定义和可行性研究之间的传承关系
参考:问题定义和可行性研究之间的传承关系如同解决一个数学问题一样:
●问题定义是搞清软件的性质、规模、工期、投资等给定的约束条件。
这相当于给出
一道文字描述的数学应用题,解题前首先要清楚这是一个解决天文的、电磁学的、
热学的还是化学的等哪方面问题?是离散的还是连续的?给定的条件有哪些?搞
清问题的边界。
●可行性分析相当于找出解题的思路:首先看这个题是否在自己的解题能力范围之内,
根据自己的能力(基础和经验)确定问题是否可解,若问题难度远远超过自己的能
力,就不存在下一步。
若可解,进一步考虑解题的方案及模型。
因此软件可行性分
析,就是研究在现有掌控的技术和人力资源下,在限定的工期、经费条件下,是否
做到所要求的功能和质量要求。
这就是教材中讲述的“可行性研究是确定项目用最
小代价在尽可能短的时间内是否能够开发,是否值得去开发”。
这也就是涉及到技
术、经济和法律上的问题。
4.讨论:技术可行性分析的业务模型有何作用?
参考:在现代的软件开发中,业务建模越来越受到重视。
但是在“软件工程”的教材和教学中几乎都忽略了这个过程。
商业建模是针对整个企业或部分业务的组织结构、工作流程、人员职责、基础数据的全面描述。
业务建模是分析要实行的软件部分在企业中的地位、关系和功能,业务建模是“软件模型”的上一个层面,是商务层面使用的模型,也是理解和建立软件“需求模型”的基础,它促使软件模型边界清晰、关系明确、需求完整。
5.讨论:计划时期是基本软件生命周期模型的第一个时期,请与RUP模型的生命周期模
型比较,进一步理解RUP中的“初始”和“细化”两个工作阶段;
参考:软件基本生命周期模型的“计划时期”主要有“问题定义”和“可行性研究”两个活动,这两个活动对应在RUP模型的“初始阶段”,无论用哪个模型这个阶段都是要确定“软件目标”,搞清软件“干什么”。
至于软件“怎么干”和“如何做出”软件,在RUP 模型中就是“细化阶段”,它对应软件基本生命周期模型中的“开发时期”的分析和设计两个活动,通过细化得到“软件结构”。
但是RUP的二维表达模型更为合理,阶段间的各种活动不是戛然而止,而是延续、并行、交互,主次分明,充分体现重叠、迭代、里程牌等思想。
6.讨论:这个阶段要做很多估算和计划,比如规模估算、工期估算、成本估算等,你会
做吗?这说明你还需要进一步学习什么方面的知识?
参考:这些技术将在软件的项目管理中来学习,在本书的第10章介绍。
软件工程知识体系的一个重要部分就是工程化管理,然而软件工程的教育依然集中在技术方面,主要还是放在分析、设计、实现和维护的技术层面,而忽视管理方面的知识。
管理知识是工科教育的短板,教学内容少,学生对此学习也缺乏兴趣。
4.讨论:RUP表示的软件生命周期与图2-2的生命周期模型有何进步?
参考答案:
●图2-2是基本的生命周期模型,分为计划、开发、维护三个时期,每个时期活动的安排是
顺序、单一、非此即彼,属于早期的“个体模型”,它不能反映团队开发的真实状况;
●RUP的生命周期模型,分为初始、细化、构造、交付四个阶段,每个阶段活动的安排是
主次重叠、渐进展开、往复迭代,并且有基线和里程牌。
因此,它能反映团队并行合作的工作状况,因此可以更好地做好时间和资源规划,更好地做好控制。
1.需求分析与需求工程是什么关系?
答:参见4.1.2节和图4-4。
从图4-4中可知,需求分析只是需求工程所进行的众多活动当中的一项主要活动,它的活动属于技术层面。
有的教材和课堂教学中只是提及“需求分析”,没有从需求工程的角度去介绍需求分析。
在当代的软件工程中,应当建立完整的需求工程概念,而不仅仅是需求分
析。
当今“需求管理”与“需求开发”同样重要,有关需求的变更管理、版本控制等应用原理、技术和工具越来越受到重视,因为它比起开发初期的工作时间更长,难度更大。
甲方考察软件承制单位一项重要的能力成熟度内容就是“需求管理”能力,而不仅仅是开发能力。
2.为什么必须进行需求分析?
答:参见4.1.1节。
1)需求分析是进入软件开发的第一步工作,万事开头难;
2)需求分析是用户与开发者共同参与的结果,用户与开发者对需求达到理解一致所必须经过的“磨合期”;
3)需求分析的结果相当于技术合同,开发方以此提供功能,用户以此验收;
3.需求分析的目的和工作目标是什么?
1)目的是:弄清用户对系统的细节要求,完整、准确、清晰、具体地回答目标系统“做什么”。
2)目标是:是对用户提出的软件功能、性能等应用问题及其环境进行分析与理解,采用一系列的分析方法和技术,把系统可行性分析阶段产生的系统规格说明和项目规划逐步精确化、完全化、一致化,借助于当前系统的逻辑模型导出目标系统逻辑模型,最终形成需求规格说明文档的过程。
4.需求开发经过哪些步骤?每个步骤有何作用?
答:通过4项具体活动达目标:需求获取、需求分析、编写文档、需求验证。
(1)需求获取即调查软件需求,需求是用户对目标软件系统在功能性能行为设计约束等方面的期望。
(2)需求分析分析建模也称需求建模,建模是对现实世界进行抽象的过程;通过符号和文字说明来描述系统模型,使用户和开发者之间建立共同的语言基础,消除理解歧义。
(3)需求说明编写需求文档,也称编写需求规格说明书,或称需求说明需求描述。
需求说明书是需求阶段的最终成果,也是需求分析阶段复审的依据;是用户领域专家软件分析师软件设计师共同交流的途径和媒介;是交付给用户文档的一部分。
(4)需求验证即需求评审。
根据需求说明书,分析师设计师客户会审文档,对需求的正确性一致性完整性五二义性进行评审确认。
6.什么是需求模型?需求模型的承上启下是什么意义?
答:参见4.3.1节。
需求模型:是根据用户需求建立的目标软件的逻辑模型。
需求模型起到承上启下的作用:
●承上:面向用户,指与领域专家的沟通,反映用户的需求。
●启下:面向设计,指需求模型作为设计阶段的输入,反映系统要实现的功能。
7.模型的表达有哪些形式?
答:参见4.3.3节。
需求建模有两大方法:
1)非形式化的方法,如用自然语言、半形式化语言、图形符号、表格等方式对需求规格进行描述;
2)形式化的方法,采用严格的数学模型,这种方法目前常见的是Z语言和petri网。
8.需求分析和需求说明的质量要求有哪些?
答:参见4.4.2节。
需求分析和需求说明要达到:
●正确性;
●无歧义性;
●完整性;
●一致性;
●重要性/稳定性分级;
●可验证性;
●可修改性;
●可追踪性;
1.理解应用软件开发是一个从“抽象”到“具体”的求精过程。
答:参见5.1.2节和图5-1。
应用软件开发就是将“客观世界”表达在“计算机世界”里由“抽象”到“具体”的求精过程。
软件的最高级抽象用面向领域问题的语言叙述“问题”,通常就是用自然语言概括。
具体化就是计算机语言编制的程序。
软件过程本身的每一步都是对较高一级抽象作一次具体化的处理,即利用不同的语言对模型进行逐步细化,模型从“分析模型”到“设计模型”再到“编码模型”。
这三段模型对应的是三种描述语言,分别是“自然语言”、“建模语言”和“计算机语言”。
建模语言就是把自然语言转换成计算机语言的过渡性语言。
2.过程与数据的求精是怎样逐步具体化的?
答:参见5.1.3节。
结构化的精化过程主要是针对过程和数据进行:
过程抽象:把用文字形成的功能描述演变成代码。
数据抽象:文字表达的数据结构演变成数据库表。
3.软件设计与需求分析有何关系?
答:参见5.2.1节和图5-3。
软件设计可看作将需求规格说明逐步转换为软件源代码的中间过渡过程。
–活动输入:需求规格说明书;
–活动输出:设计规格说明书;
–活动目标:需求模型转换成设计模型;
–活动过程:层层分解,逐步求精;
4.软件设计的任务和工作目标是什么?
答:参见5.2.2节。
目标:将需求模型细化成设计模型,形成“设计规格说明书”。
任务:总体设计和详细设计。
概要设计是根据需求确定软件和数据的总体框架,详细设计是将其进一步精化成软件的算法表示和数据结构。
5.概要设计中的体系结构设计与领域问题结构设计有什么区别?
答:参见5.2.2节。
概要设计也称总体设计即为结构设计。
要完成两大结构:
●体系结构:软件总体架构、运行环境的设计。
如同建筑结构中的基础结构、主体梁
柱、空间分层、房间布局、通道布置、水电基础设施等设计,是优先考虑的设计。
当然不同的需求所采用的体系结构不同,如民居和宾馆、厂房和商场、学校和火车
站等都是不同的建筑体系。
桌面软件、Web软件、嵌入式软件等等到具有不同的软
件体系;
●领域结构;是满足需求的软件功能设计,是对分析结果进行细化,划分出软件的模
块结构及确定模块之间的关系。
领域结构的划分是基于体系结构框架内的设计。
比
如按“学校”建筑体系设计好之后,才能够进一步按课堂教学、实验教学、院系等
模块结构设计每层、每个房间的结构和功能。
如果按火车站体系安排学校的功能,
其效果可想而知。
6.什么是模块、模块化?软件设计为什么要模块化?
答:参见5.3.1和5.3.2节。
1)模块:是完成特定功能的程序实体。
模块是构成程序的基本构件。
2)模块化:指解决一个复杂问题时自顶向下逐层分解成若干模块的过程。
每个模块完成一个特定的子功能,所有模块按系统结构组装起来,完成整个系统所要求的功能。
3)模块化设计
①将问题简化,划分模块可使每一个模块完成单一功能;
②可以独立地进行模块的编码测试,便于软件开发工作的组织;
③把每一个模块要解决的问题局限在有限的范围,减少出错机会;
④便于纠错;
⑤便于对特定的模块进行优化处理;
⑥一个模块可被重复使用,提高软件产品的复用率;
⑦程序易于理解;
⑧利于估计工作量和开发成本。
7.模块的信息为什么要隐藏?
答:参见5.3.3节。
信息隐藏就是模块内部的信息私有化,减少模块间的耦合。
有利于并行开发、独立测试、模块复用、功能扩展和维护。
8.用什么衡量模块是否是独立的,如何区分模块独立的程度?
答:参见5.3.4节。
采用内聚度、耦合度衡量模块的独立性:
●内聚度:模块内部各个元素间(语句和程序段)的紧密程度,模块的内部特征。
●耦合度:模块之间相互联系紧密的程度,模块的外部特征。
在内外两个特征上,模块的独立程度以外部特征(耦合度)为主要特征。
耦合度的分级见表5-2。
9.为什么要进行模块优化?模块优化有哪些概念?
答:参见5.3.5节。
模块优化的这些概念起源于结构化设计,但对面向对象设计仍有指导意义。
从分析模型到设计模型要经过映射,把功能表达要映射成软件的结构,初始的结构划分不一定完善,模块优化就是对初始结构的划分做一些调整。
主要的概念有:
1)模块的作用域与控制域
●模块的作用域:受该模块内一个判定影响的所有模块的集合(从功能方面考虑);
●模块的控制域:包括它自己及其所有下属模块的集合(从结构方面考虑)。
优化原则是:模块的作用域应在控制域之内。
2)深度/宽度与扇入/扇出
●一个软件结构的深度(depth)—表示控制的层数;
●一个软件结构的宽度(width)—表示控制的跨度;
●一个模块的“扇出数”(fan-out)—指该模块直接控制的其他模块数(依赖性);
●一个模块的“扇入数”(fan-in)—指能直接控制该模块的上级模块数(复用性);
优化原则是:宽度和深度适中,扇入和扇出要适当。
3)模块要单入口单出口、大小要适中,尽量松耦合。
1.什么是软件结构化?
答:参见6.1节。
软件结构化是以程序模块化为基础建立起来的软件机体,结构的基本单元是模块,模块的相互作用实现功能,模块的组合构成系统。
结构化开发是一种软件开发方法学,它是从分析、设计及实现的软件生命周期遵循结构化思想。
结构化的核心思想是对领域问题模块化,模块具有独立性,采用自定向下、逐层分解、层层细化的开发过程。
2.结构化开发有哪两种方法?通常所说的结构化指的是哪一个?
答:结构化开发方法有:面向数据结构的方法和面向数据流的方法。
通常介绍的结构化方法是面向数据流的方法。
3.结构化分析的需求模型由哪三部分组成?
答:参见6.2节。
结构化建立的需求模型由功能模型、数据模型和行为模型组成。
4.数据流图DFD用来做什么?数据字典DD做什么?DFD+DD是表达什么?
答:参见6.2.1节和6.2.4节。
DFD+DD是表达系统的功能模型。
数据流图DFD采用数据被加工的流向来描述系统功能;而数据字典DD是对DFD图的补充说明:①说明数据流和数据存储的数据结构;②说明数据加工的逻辑。
5.画DFD分析法有哪三条基本原则?
答:参见6.2.2节。
基于数据流技术的分析思想,遵循三条基本原则:抽象、分解、投影。
1)问题抽象:归纳复杂现象达到高度聚类。
2)问题分解:分解能降低问题的复杂程度。
3)多视角分析:即事物的投影,从不同侧面对问题全面理解。