分享
第7章 软件工程基础知识.pdf
下载文档

ID:3306841

大小:1.07MB

页数:42页

格式:PDF

时间:2024-02-27

收藏 分享赚钱
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,汇文网负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。
网站客服:3074922707
第7章 软件工程基础知识 软件工程 基础知识
您现在的位置:希赛网 云阅读 软件设计师考前冲刺与考点分析 考点脉络第 7 章:软件工程基础知识作者:希赛教育软考学院 来源:希赛网 2014年05月05日考点脉络上一节本书简介下一节第 7 章:软件工程基础知识作者:希赛教育软考学院 来源:希赛网 2014年05月05日考点精讲软件工程是软件开发的指导思想,方法体系,所以这属于软件设计师需要掌握的核心内容。根据考试大纲,本章要求考生掌握以下几个方面的知识点。(1)软件工程知识:软件生存周期与软件生存周期模型、软件开发方法、软件开发项目管理、软件开发工具与软件开发环境。(2)系统分析基础知识:系统分析的主要步骤、机构化分析方法。(3)系统设计基础知识:概要设计与详细设计的基本任务、系统设计的基本原理、系统模块结构设计、结构化设计方法、面向数据结构的设计方法、系统详细设计。(4)系统实施基础知识:系统实施的基本内容、程序设计方法、程序设计的基本模块、系统测试、系统转换。(5)系统运行和维护基础知识:系统可维护性的概念、系统维护的类型、系统评价的概念和类型(6)软件质量管理基础知识:软件质量特性(ISO/IEC 9126软件质量模型)、软件质量保证、软件复杂性的概念及度量方法(McCabe度量法)、软件评审(设计质量评审、程序质量评审)、软件容错技术。(7)软件过程改进基础知识:软件能力成熟度模型CMM、统一过程(UP)与极限编程(XP)的基本概念。从历年的考试情况来看,本章的考点主要集中以下方面。在软件生命周期与开发模型中,主要考查UP(统一过程)、XP(敏捷方法)以及传统软件开发模型的特点。在系统开发方法论中,主要考查数据流图绘制原则、内聚与耦合。在软件测试中,主要考查测试的阶段、白盒测试、黑盒测试、McCabe环路复杂度。在软件质量保证中,主要考查软件质量特性。在软件过程改进中,主要考查CMM每个阶段的特点及关键过程域在项目管理中,主要考查项目管理相关基本概念、Pert图、风险管理。版权方授权希赛网发布,侵权必究1开发生命周期模型系统开发的生命周期是指一个系统历经计划、分析、设计、编程、测试、维护直至淘汰的整个过程。生命周期阶段的划分通常可以采用以下三种方法:Boehm划分法:计划(问题定义、可行性研究)、开发(需求分析、总体设计、详细设计、编码、测试)、运行(维护)三大阶段。国标(GB8566-1988)划分法:可行性研究与计划、需求分析、概念设计、详细设计、实现、组装测试、确认测试、使用和维护。,并在GB/T8566-1995信息技术软件生存期过程中定义了获取过程、供应过程、开发过程、运行过程、维护过程、管理过程、支持过程七个部分。RUP划分法:分为初始、细化、构造、移交四个主要阶段。为了指导软件的开发,可以用不同的方式将软件生命周期中的所有开发活动组织起来,从而形成不同的软件开发模型。2开发模型软件开发模型是几乎每次考试都会考查的重要知识点,在此,我们主要掌握各种开发模型的特点与其应用场合。瀑布模型:严格遵循软件生命周期各阶段的固定顺序,一个阶段完成再进入另一个阶段。其优点是:可以使过程比较规范化,有利于评审;缺点在于:过于理想,缺乏灵活性,容易产生需求偏差。所以瀑布模型的应用场合为:需求明确的项目、二次开发项目以及与原型法配合使用。快速原型模型:采用了一种动态定义需求的方法,通过快速地建立一个能够反映用户主要需求的软件原型,让用户在计算机上使用它,了解其概要,再根据反馈的结果进行修改,因此能够充分体现用户的参与和决策。原型化人员对原型的实施很重要,衡量他们的重要标准是能否从用户的模糊描述中快速地获取实际的需求。所以快速原型模型很好的弥补了瀑布模型的缺陷,它适合于需求不够明确的项目。演化模型:也是一种原型化开发,但与快速原型不同的是,快速原型模型在获得真实需求时,就将抛弃原型。而演化模型则不然,它将从初始的模型中逐渐演化为最终软件产品,是一种“渐进式”原型法。其应用场合也是需求不明确的项目。增量模型:它采用的是一种“递增式”模型,它将软件产品划分成为一系列的增量构件,分别进行设计、编码、集成和测试。相对于原型法而言,这种模型其实是从系统开发的另一个方面看待问题,原型法关注点是“制作一个原型”,而增量模型的关注点是“系统的功能模块不是一次完成的,而是一块一块开发,以增加的方式进行的”。在现实开发中,我们会发现,一个项目开发过程既用了原型模型也用了增量模型。所以增量模型仍有利于进行需求不明确的项目开发。螺旋模型:结合了瀑布模型和演化模型的优点,最主要的特点在于加入了风险分析。它是由制定计划、风险分析、实施工程、客户评估这一循环组成的,它最初从概念项目开始第一个螺旋。喷泉模型:主要用于描述面向对象的开发过程,最核心的特点是迭代。所有的开发活动没有明显的边界,允许各种开发活动交叉进行。UP:既是一个统一的软件开发过程,是一个通用过程框架,可以应付种类广泛的软件系统、不同的应用领域、不同的组织类型、不同的性能水平和不同的项目规模。UP是基于构件的,这意味着利用它开发的软件系统是由构件构成的,构件之间通过定义良好的接口相互联系。在准备软件系统所有蓝图的时候,UP使用的是统一建模语言UML。与其他软件过程相比,UP具有三个显著的特点:用例驱动、以基本架构为中心、迭代和增量。UP中的软件过程在时间上被分解为四个顺序的阶段,分别是初始阶段、细化阶段、构建阶段和交付阶段。每个阶段结束时都要安排一次技术评审,以确定这个阶段的目标是否已经满足。如果评上一节本书简介下一节第 7 章:软件工程基础知识作者:希赛教育软考学院 来源:希赛网 2014年05月05日一点一练审结果令人满意,就可以允许项目进入下一个阶段。UP一般用于大型软件的开发。敏捷开发:从敏捷开发一词的敏捷可以看出,该方法是一种轻量级的开发方法。这种开发方法的主要思想是:传统的软件工程方法文档量太“重”了,现在需要进行减负,所以将不必要的文档都去掉,这就形成了敏捷开发。具体一点讲,敏捷方法包括:XP(极限编程)、自适应开发、水晶方法、特性驱动开发等。这些方法中,最著名的是XP方法(当然,XP方法最著名,并非因为方法本身很好,而是提出该方法的人,是个牛人)。在XP方法中,提出了四大价值观:沟通、简单、反馈、勇气。五大原则:快速反馈、简单性假设、逐步修改、提倡更改、优质工作。十二个最佳实践:计划游戏、小型发布、隐喻、简单设计、测试先行、重构、结对编程、集体代码所有制、持续集成、每周工作40小时、现场客户、编码标准。版权方授权希赛网发布,侵权必究试题1软件开发的增量模型_(1)_。(1)A最适用于需求被清晰定义的情况B是一种能够快速构造可运行产品的好方法C最适合于大规模团队开发的项目D是一种不适用于商业产品的创新模型试题2假设某软件公司与客户签订合同开发一个软件系统,系统的功能有较清晰的定义,且客户对交付时间有严格要求,则该系统的开发最适宜采用_(2)_。(2)A瀑布模型 B原型模型 CV模型 D螺旋模型试题3以下关于喷泉模型的叙述中,不正确的是_(3)_。(3)A喷泉模型是以对象作为驱动的模型,适合于面向对象的开发方法B喷泉模型克服了瀑布模型不支持软件重用和多项开发活动集成的局限性C模型中的开发活动常常需要重复多次,在迭代过程中不断地完善软件系统D各开发活动(如分析、设计和编码)之间存在明显的边界试题4为了有效地捕获系统需求,应采用_(4)_。(4)A瀑布模型 BV模型 C原型模型 D螺旋模型试题5敏捷开发方法XP是一种轻量级、高效、低风险、柔性、可预测的、科学的软件开发方法,其特上一节本书简介下一节第 7 章:软件工程基础知识作者:希赛教育软考学院 来源:希赛网 2014年05月05日解析与答案性包含在12个最佳实践中。系统的设计要能够尽可能早交付,属于_(5)_最佳实践。(5)A隐喻B重构C小型发布D持续集成版权方授权希赛网发布,侵权必究试题1分析增量模型是一种非整体开发的模型,该模型具有较大的灵活性,适合于软件需求不明确的一种模型。使用该模型开发产品,一般是尽快构造出可运行的产品,然后在该产品的基础上再增加需要的新的构建,使产品更趋于完善。试题1答案(1)B试题2分析瀑布模型严格遵循软件生命周期各阶段的固定顺序:计划、分析、设计、编程、测试和维护,上一阶段完成后才能进入到下一阶段。瀑布模型的优点是:可强迫开发人员采用规范的方法;严格规定了各阶段必须提交的文档;要求每个阶段结束后,都要进行严格的评审。但瀑布模型过于理想化,而且缺乏灵活性,无法在开发过程中逐渐明确用户难以确切表达或一时难以想到的需求。该模型比较适合于需求明确,对交付时间有严格要求的开发。原型模型基于这样一种客观事实:并非所有的需求在系统开发之前都能准确地说明和定义。因此,它不追求也不可能要求对需求的严格定义,而是采用了动态定义需求的方法。它适用于需求不明确的开发环境。螺旋模型综合了瀑布模型和演化模型的优点,还增加了风险分析。螺旋模型包含了四个方面的活动:制订计划、风险分析、实施工程、客户评估。采用螺旋模型时,软件开发沿着螺旋线自内向外旋转,每转一圈都要对风险进行识别和分析,并采取相应的对策。螺旋模型比较适合大规模的开发,它对风险控制有很高的要求。综上所述,要满足题目描述的要求,应该采用瀑布模型开发最适宜。试题2答案(2)A试题3分析喷泉模型主要用于描述面向对象的开发过程。喷泉一词体现了面向对象开发过程的迭代和无间隙特征。迭代意味着模型中的开发活动常常需要多次重复,每次重复都会增加或明确一些目标系统的性质,但却不是对先前工作结果的本质性改动。无间隙是指在开发活动(如分析、设计、编程)之间不存在明显的边界,而是允许各开发活动交叉、迭代地进行。试题3答案(3)D试题4分析上一节本书简介下一节第 7 章:软件工程基础知识作者:希赛教育软考学院 来源:希赛网 2014年05月05日系统开发方法论上一节本书简介下一节第 7 章:软件工程基础知识作者:希赛教育软考学院 来源:希赛网 2014年05月05日考点精讲瀑布模型严格遵循软件生命周期各阶段的固定顺序进行软件开发,其优点是可强迫开发人员采用规范的方法;严格规定了各阶段必须提交的文档;要求每个阶段结束后,都要进行严格的评审;而其缺点是过于理想化,缺乏灵活性,无法在开发过程中逐渐明确用户难以确切表达或一时难以想到的需求。V模型是一种典型的测试模型,该模型强调开发过程中测试贯穿始终。原型模型基于这样一种客观事实:并非所有的需求在系统开发之前都能准确地说明和定义。因此,它不追求也不可能要求对需求的严格定义,而是采用了动态定义需求的方法。原型模型适用于需求不够明确的项目,它能有效地捕获系统需求。螺旋模型综合了瀑布模型和演化模型的优点,还增加了风险分析。采用螺旋模型时,软件开发沿着螺旋线自内向外旋转,每转一圈都要对风险进行识别和分析,并采取相应的对策。试题4答案(4)C试题5分析12个最佳实践分别是:计划游戏,小型发布,隐喻,简单设计,测试先行,重构,结对编程,集体代码所有制,持续集成,每周工作40小时,现场客户及编码标准。其中系统的设计要能够尽可能早交付属于小型发布。小型发布可以使得集成更频繁,客户获得的中间结果越频繁,反馈也就越频繁,客户就能够实时地了解项目的进展情况,从而提出更多的意见,以便在下一次迭代中计划进去,以实现更高的客户满意度。试题5答案(5)C版权方授权希赛网发布,侵权必究系统开发方法包括:结构化方法、原型法、面向对象方法。其中原型法仅用于需求分析阶段,且在上一节已有描述,在此再赘述。版权方授权希赛网发布,侵权必究1.结构化方法结构化方法是一种传统的软件开发方法,它是由结构化分析、结构化设计和结构化程序设计三部分有机组合而成的。它的基本思想:把一个复杂问题的求解过程分阶段进行,而且这种分解是自顶向下,逐层分解,使得每个阶段处理的问题都控制在人们容易理解和处理的范围内。(1)结构化分析基础结构化分析即我们平时所说的需求分析阶段,该阶段的主要任务是:解决“做什么”的问题。结构化分析方法是以自顶向下,逐步求精为基点,以一系列经过实践的考验被认为是正确的原理和技术为支撑,以数据流图(“第11章数据流图技术”将详细论述相关内容),数据字典,结构化语言,判定表,判定树等图形表达为主要手段,强调开发方法的结构合理性和系统的结构合理性的软件分析方法。(2)结构化设计基础结构化设计是以结构化分析阶段所产生的成果为基础,进一步自顶而下、逐步求精和模块化的过程。其主要工作内容是进行概要设计与详细设计(注:在结构化方法诞生时,架构设计还未提出,所以在此没有架构设计相关内容)。概要设计的主要任务是把需求分析得到的数据流图转换为软件结构和数据结构。设计软件结构的具体任务是:将一个复杂系统按功能进行模块划分、建立模块的层次结构及调用关系、确定模块间的接口及人机界面等。数据结构设计包括数据特征的描述、确定数据的结构特性、以及数据库的设计。显然,概要设计建立的是目标系统的逻辑模型,与计算机无关。在概要设计过程中常常会使用结构图(包括模块、调用、数据)、层次图、HIPO(层次图加输入/处理/输出图)来描述程序的结构。详细设计是对概要设计的一个细化,就是详细设计每个模块实现算法,所需的局部结构。经常使用的工具包括程序流程图、盒图、PAD图(问题分析图)、PDL(伪码)。(3)模块设计原则使用结构化设计方法进行设计时,需要遵循一定的原则,总结起来主要是两个方面:信息隐蔽与模块独立。信息隐蔽指在设计和确定模块时,使得一个模块内包含信息(过程或数据),对于不需要这些信息的其他模块来说,是不能访问的。这样做的好处是:让所有的操作都通过标准的接口进行,这样避免了随意调用模块内部变量产生的混乱与错误。通过信息隐蔽可以提高软件的可修改性、可测试性和可移植性。所以不仅在结构化方法中有信息隐蔽原则,在面向对象方法中,也有相应机制进行信息隐蔽。模块独立是指每个模块完成一个相对独立的特定子功能,并且与其他模块之间的联系最简单。保持模块的高度独立性,也是在设计时的一个很重要的原则。通常我们用耦合(模块之间联系的紧密程度)和内聚(模块内部各元素之间联系的紧密程度)两个标准来衡量,我们的目标是高内聚、低耦合。模块的内聚类型通常可以分为7种,根据内聚度从高到低排序如表7-1所示。表7-1模块的内聚类型而此相对应,模块的耦合类型通常也分为7种,根据耦合度从低到高排序如表7-2所示。表7-2模块的耦合类型除了满足以上两大基本原则之外,通常在模块分解时还需要注意:保持模块的大小适中;尽可能减少调用的深度;直接调用该模块的个数应该尽量大,但调用其他模块的个数则不宜过大;保证模块是单入口、单出口的;模块的作用域应该在之内;功能应该是可预测的。2.面向对象基本概念面向对象开发方法与结构化开发有着本质的差异,这种方法引入了“对象”的概念,将数据和方法封装在一起,提高了模块的聚合度,降低了耦合度,更大程度上支持软件复用。是现在最流行和最具有发展前景的软件开发方法。在了解该方法的具体内容之前,需要对面向对象的一系列概念有所了解。下面介绍考试中,经常会考到一系列面向对象的基本概念。(1)对象在计算机系统中,对象是指一组属性及这组属性上的专用操作的封装体,它由对象标识(名称)、属性(状态、数据、成员变量,也可以是另一个对象)和服务(操作、行为、方法)三个要素组成。对象是系统中用来描述客观事物的一个实体,它们被封装为一个整体,以接口的形式对外提供服务。(2)类类是一组具有相同属性和方法的对象的集合。一个类中的每个对象都是这个类的一个实例(instance)。在系统分析和设计时,通常要把注意力集中在类上,而不是具体的对象上。每个类一般都有实例,没有实例的类是抽象类。抽象类不能被实例化(不能用new关键字去产生对象),抽象方法只需声明,而不需实现。是否建立了丰富的类库是衡量一个OO程序设计语言成熟与否的重要标志之一。(3)继承与泛化继承是面向对象方法中重要的概念,用来说明特殊类(子类)与一般类(父类)的关系,通常使用泛化来说明一般类与特殊类之间的关系,它们之间是一对多关系。(4)封装。面向对象系统中的封装单位是对象,对象之间只能通过接口进行信息交流,对象外部不能对对象中的数据随意地进行访问。封装的目的是使对象的定义和实现分离,这样,就能减少耦合,类内部的实现可以自由改变而不会影响其他的类或对象。同时,类具有严密的接口保护,使对象的属性或服务不会随意地被使用,对象的状态易于控制,可靠性随之增强。(5)多态性多态(多种形式)性则是指一般类中定义的属性或服务被特殊类继承后,可以具有不同的数据类型或表现出不同的行为,通常是使用重载和改写两项技术来实现的。(6)模板类模板类也称为类属类,它用来实现参数多态机制。一个类属类是关于一组类的一个特性抽象,它强调的是这些类的成员特征中与具体类型无关的那些部分,而用变元来表示与具体类型有关的那些部分。(7)消息和消息通信消息就是向对象发出的服务请求,它通常包括提供服务的对象标识、消息名、输入信息和回答信息。消息通信则是面向对象方法学中的一个重要原则,它与对象的封装原则密不可分,为对象间提供了唯一合法的动态联系的途径。3.面向对象开发方法面向对象开发方法更接近于人类的自然思维。人类在认识和理解现实世界中普遍运用的三个构造法则是区分对象及其属性、区分整体对象及其组成部分、区分及形成不同对象类。而面向对象正是基于对象及属性、类属及成员、整体及其部分这些概念基础之上的。因而它必然更容易被理解和运用。面向对象的方法将对象的属性及服务视为一个整体。这更符合客观世界的规律,从而使其理解与实现起来更加容易,进一步减少维护的费用。面向对象开发方法的发展经历了一个漫长的周期,先后提出了多个不同的方法。这些方法中,最有影响力的是:OMT方法、Coad/Yourdon方法、OOSE方法,而这些方法又进一步组合,形成了大家所熟知的UML(关于UML在后面的章节将详细论述)。正是由于有多种不同的方法,所以它们强调的重点与方法的特色也各有不同,因此这里我们只对方法中具有代表性的或是都需要完成的一些内容进行论述。(1)OOAOOA即面向对象的分析,它的任务是了解问题域所涉及的对象、对象间的关系和操作,然后构造问题的对象模型。问题域是指一个包含现实世界事物与概念的领域,这些事物和概念与所设计的系统要解决的问题有关。在这个过程中,抽象是最本质和最重要的方法。针对不同的问题,可以选择不同的抽象层次,过简或过繁都会影响到对问题的本质属性的了解和解决。(2)OODOOD即面向对象的设计,它在分析对象模型的基础上,设计各个对象、对象之间的关系(例如,层次关系、继承关系等)和通信方式(例如,消息模式)等,其主要作用是对OOA的结果作进一步的规范化整理,以便能够被OOP直接接受。面向对象的设计需要遵循一系列的设计原则:单一职责原则:设计目的单一的类;开放-封闭原则:对扩展开放,对修改封闭;上一节本书简介下一节第 7 章:软件工程基础知识作者:希赛教育软考学院 来源:希赛网 2014年05月05日一点一练李氏(Liskov)替换原则:子类可以替换父类;依赖倒置原则:要依赖于抽象,而不是具体实现;针对接口编程,不要针对实现编程;接口隔离原则:使用多个专门的接口比使用单一的总接口要好;组合重用原则:要尽量使用组合,而不是继承关系达到重用目的;迪米特(Demeter)原则(最少知识法则):一个对象应当对其他对象有尽可能少的了解。(3)OOPOOP指系统功能的编码,实现在OOD阶段所规定的各个对象所应完成的任务。它包括每个对象的内部功能的实现,确立对象哪一些处理能力应在哪些类中进行描述,确定并实现系统的界面、输出的形式等。版权方授权希赛网发布,侵权必究试题1模块A执行几个逻辑上相似的功能,通过参数确定该模块完成哪一个功能,则该模块具有_(1)_内聚。(1)A顺序 B过程 C逻辑 D功能试题2确定软件的模块划分及模块之间的调用关系是_(2)_阶段的任务。(2)A需求分析 B概要设计 C详细设计 D编码试题3模块A直接访问模块B的内部数据,则模块A和模块B的耦合类型为_(3)_。(3)A数据耦合 B标记耦合 C公共耦合 D内容耦合试题4采用面向对象开发方法时,对象是系统运行时基本实体。以下关于对象的叙述中,正确的是_(4)_。(4)A对象只能包括数据(属性)B对象只能包括操作(行为)C对象一定有相同的属性和行为D对象通常由对象名、属性和操作三个部分组成试题5面向对象分析的第一步是_(5)_。(5)A定义服务 B确定附加的系统约束C确定问题域 D定义类和对象试题6开-闭原则(Open-Closed Principle,OCP)是面向对象的可复用设计的基石。开-闭原则是指上一节本书简介下一节第 7 章:软件工程基础知识作者:希赛教育软考学院 来源:希赛网 2014年05月05日解析与答案一个软件实体应当对_(6)_开放,对_(7)_关闭;里氏替换原则(Liskov Substitution Principle,LSP)是指任何_(8)_可以出现的地方,_(9)_一定可以出现。依赖倒转原则(DependenceInversion Principle,DIP)就是要依赖于_(10)_而不依赖于_(11)_,或者说要针对接口编程,不要针对实现编程。(6)A修改B扩展C分析D设计(7)A修改B扩展C分析D设计(8)A变量B常量C基类对象D子类对象(9)A变量B常量C基类对象D子类对象(10)A程序设计语言B建模语言C实现D抽象(11)A程序设计语言B建模语言C实现D抽象试题7以下关于封装在软件复用中所充当的角色的叙述,正确的是_(12)_。(12)A封装使得其他开发人员不需要知道一个软件组件内部如何工作B封装使得软件组件更有效地工作C封装使得软件开发人员不简要编制开发文档D封装使得软件组件开发更加容易版权方授权希赛网发布,侵权必究试题1分析内聚是指模块内部各元素之间联系的紧密程度,模块的内聚类型通常可以分为7种,根据内聚度从高到低排序分别如下:功能内聚:完成一个单一功能,各个部分协同工作,缺一不可。顺序内聚:处理元素相关,而且必须顺序执行。通信内聚:所有处理元素集中在一个数据结构的区域上。过程内聚:处理元素相关,而且必须按特定的次序执行。瞬时内聚:所包含的任务必须在同一时间间隔内执行(如初始化模块)。逻辑内聚:完成逻辑上相关的一组任务。偶然内聚:完成一组没有关系或松散关系的任务。试题1答案(1)C试题2分析需求分析阶段的任务主要是要解决系统做什么的问题,即弄清楚问题的要求,包括需要输入什么数据,要得到什么结果,最后应输出什么。概要设计的主要任务是把需求分析得到的结果转换为软件结构和数据结构,即将一个复杂系统按功能进行模块划分、建立模块的层次结构及调用关系、确定模块间的接口及人机界面、确定数据的结构特性、以及数据库的设计等。详细设计是在概要设计的基础上更细致的设计,它包括具体的业务对象设计、功能逻辑设计、界面设计等工作。详细设计是系统实现的依据,需要更多地考虑设计细节。编码即编写程序代码,具体实现系统。试题2答案(2)B试题3分析本题主要考查耦合的基本内容。耦合是指两个或两个以上的模块相互依赖于对方的一个量度。它可以分为非直接耦合、数据耦合、标记耦合、控制耦合、外部耦合、公共耦合及内容耦合等。当一个模块直接修改或操作另一个模块的数据或者直接转入另一个模块时,就发生了内容耦合,所以本题的答案选D。试题3答案(3)D试题4分析对象通常由对象名、属性和操作三个部分组成,对象不一定都有相同的属性和行为。试题4答案(4)D试题5分析面向对象分析的任务是了解问题域所涉及的对象、对象间的关系和操作,然后构造问题的对象模型。问题域是指一个包含现实世界事物与概念的领域,这些事物和概念与所设计的系统要解决的问题有关。因此面向对象分析的第一步是要确定问题域。试题5答案(5)C试题6分析开-闭原则要求一个软件实体应当对扩展开放,对修改关闭。也就是说,我们在设计一个模块的时候,应当使这个模块可以在不被修改的前提下被扩展,换句话说就是,应当可以在不必修改源代码的情况下改变这个模块的行为。里氏代换原则要求子类型必须能够替换它们的基类型,所以在里氏代换原则中,任何可基类对象可以出现的地方,子类对象也一定可以出现。依赖倒转原则是:要依赖于抽象,不要依赖于具体。也就是常说的要针对接口编程,不要针对实现编程。试题6答案(6)B(7)A(8)C(9)D(10)D(11)C试题7分析封装是面向对象技术的三大特点之一,封装的目的是使对象的定义和实现分离,这样,就能减少耦合。封装可以使得其他开发人员不需要知道一个软件组件内部是如何工作的,只需要使用该组件提供的接口来完成交互即可,如果在另外一个地方需要完成同样的功能,我们就可以将该组件使上一节本书简介下一节第 7 章:软件工程基础知识作者:希赛教育软考学院 来源:希赛网 2014年05月05日软件测试与维护上一节本书简介下一节第 7 章:软件工程基础知识作者:希赛教育软考学院 来源:希赛网 2014年05月05日考点精讲用在另外一个地方,这样提供了软件的复用性。试题7答案(12)A版权方授权希赛网发布,侵权必究软件测试与维护在每次考试中会考2-4分,考试试题以基本概念为主,本节将介绍相关内容。版权方授权希赛网发布,侵权必究1软件测试基础软件测试是在规定的条件下对程序进行操作,以发现程序错误,衡量软件品质,并对其是否能满足设计要求进行评估的过程。测试的目的是发现尽可能多的缺陷。为了让软件测试更有效率与效果,测试应遵循以下原则:(1)尽早、不断的进行测试;(2)程序员避免测试自己设计的程序;(3)既要选择有效、合理的数据,也要选择无效、不合理的数据;(4)修改后应进行回归测试;(5)尚未发现的错误数量与该程序已发现错误数成正比。2测试阶段软件测试按阶段划分,可分为:单元测试,集成测试,确认测试,系统测试。(1)单元测试单元测试,也称模块测试,通常可放在编程阶段,由程序员对自己编写的模块自行测试,检查模块是否实现了详细设计说明书中规定的功能和算法。单元测试主要发现编程和详细设计中产生的错误,单元测试计划应该在详细设计阶段制定。单元测试期间着重从以下几个方面对模块进行测试:模块接口、局部数据结构、重要的执行通路、出错处理通路、边界条件等。(2)集成测试集成测试,也称组装测试,它是对由各模块组装而成的程序进行测试,主要目标是发现模块间的接口和通信问题。例如,数据穿过接口可能丢失;一个模块对另一个模块可能由于疏忽而造成有害影响;把子功能组合起来可能不产生预期的主功能;个别看来是可以接受的误差可能积累到不能接受的程度;全程数据结构可能有问题等。集成测试主要发现设计阶段产生的错误,集成测试计划应该在概要设计阶段制定。集成的方式可分为非渐增式和渐增式。非渐增式集成是先测试所有的模块,然后一下子把所有这些模块集成到一起,并把庞大的程序作为一个整体来测试。这种测试方法的出发点是可以“一步到位”,但测试者面对众多的错误现象,往往难以分清哪些是“真正的”错误,哪些是由其他错误引起的“假性错误”,诊断定位和改正错误也十分困难。非渐增式集成只适合一些非常小的软件。渐增式集成是将单元测试和集成测试合并到一起,它根据模块结构图,按某种次序选一个尚未测试的模块,把它同已经测试好的模块组合在一起进行测试,每次增加一个模块,直到所有模块被集成在程序中。这种测试方法比较容易定位和改正错误,目前在进行集成测试时已普遍采用渐增式集成。(3)确认测试确认测试(Validation Testing)主要依据软件需求说明书检查软件的功能、性能及其他特征是否与用户的需求一致。确认测试计划应该在需求分析阶段制定。软件配置复查是确认测试的另一项重要内容。复查的目的是保证软件配置的所有成分都已齐全,质量符合要求,文档与程序完全一致,具有完成软件维护所必须的细节。如果一个软件是为某个客户定制的,最后还要由该客户来实施验收测试(acceptancetesting),以便确认其所有需求是否都已得到满足。由于软件系统的复杂性,在实际工作中,验收测试可能会持续到用户实际使用该软件之后的相当长的一段时间。如果一个软件是作为产品被许多客户使用的,不可能也没必要由每个客户进行验收测试。绝大多数软件开发商都使用被称为(Alpha)测试和(Beta)测试的过程,来发现那些看起来只有最终用户才能发现的错误。测试由用户在开发者的场所进行,并且在开发者的指导下进行测试。开发者负责记录发现的错误和使用中遇到的问题。也就是说,测试是在“受控的”环境中进行的。测试是在一个或多个用户的现场由该软件的最终用户实施的,开发者通常不在现场,用户负责记录发现的错误和使用中遇到的问题并把这些问题报告给开发者。也就是说,测试是在“非受控的”环境中进行的。经过确认测试之后的软件通常就可以交付使用了。(4)系统测试系统测试的对象是完整的、集成的计算机系统,系统测试的目的是在真实系统工作环境下,验证完整的软件配置项能否和系统正确连接,并满足系统/子系统设计文档和软件开发合同规定的要求。系统测试的技术依据是用户需求或开发合同,除应满足一般测试的准入条件外,在进行系统测试前,还应确认被测系统的所有配置项已通过测试,对需要固化运行的软件还应提供固件。一般来说,系统测试的主要内容包括功能测试、健壮性测试、性能测试、用户界面测试、安全性测试、安装与反安装测试等,其中,最重要的工作是进行功能测试与性能测试。功能测试主要采用黑盒测试方法,性能测试主要验证软件系统在承担一定负载的情况下所表现出来的特性是否符合客户的需要,主要指标有响应时间、吞吐量、并发用户数和资源利用率等。3白盒测试白盒测试,又称透明盒测试、结构测试等,软件测试的主要方法之一。测试应用程序的内部结构或运作,而不是测试应用程序的功能(即黑盒测试)。在白盒测试时,以编程语言的角度来设计测试案例。测试者了解待测试程序的内部结构、算法等信息,这是从程序设计者的角度对程序进行的测试。白盒测试可以应用于单元测试、集成测试和系统的软件测试流程,可测试在集成过程中每一单元之间的路径,或者主系统跟子系统中的测试。白盒测试主要是从覆盖源程序语句的详尽程度来分析。逻辑覆盖标准包括以下不同的覆盖标准:语句覆盖、判定覆盖、条件覆盖、条件判定组合覆盖、多条件覆盖、路径覆盖。语句覆盖:为了暴露程序中的错误,程序中的每条语句至少应该执行一次。该方法会选择足够多的测试数据,使被测程序中每条语句至少执行一次。语句覆盖是很弱的逻辑覆盖。判定覆盖:比语句覆盖稍强的覆盖标准是判定覆盖。判定覆盖的含义是:设计足够的测试用例,使得程序中的每个判定至少都获得一次“真值”或“假值”,或者说使得程序中的每一个取“真”分支和取“假”分支至少经历一次,因此判定覆盖又称为分支覆盖。条件覆盖:在设计程序中,一个判定语句是由多个条件组合而成的复合判定。为了更彻底地实现逻辑覆盖,可以采用条件覆盖的标准。条件覆盖的含义是:构造一组测试用例,使得每一判定语句中每个逻辑条件的可能值至少满足一次。多条件覆盖:多条件覆盖也称条件组合覆盖,它的含义是:设计足够的测试用例,使得每个判定中条件的各种可能组合都至少出现一次。显然满足多条件覆盖的测试用例是一定满足判定覆盖、条件覆盖和条件判定组合覆盖的。路径覆盖:最全面的覆盖。路径覆盖的含义是,选取足够的测试用例,使得程序的每条可能执行到的路径都至少经过一次(如果程序中有环路,则要求每条环路径至少经过一次)。4McCabe复杂度McCabe复杂度属于白盒测试技术。McCabe复杂度包括环路复杂度(Cyclomaticcomplexity)、基本复杂度、模块设计复杂度、设计复杂度和集成复杂度等。在软件设计师的考试中,要求掌握环路复杂度。McCabe度量标准是将程序的流程图转化为有向图,也就是控制流图,然后以图论的知识和计算方法来衡量软件的质量。如图7-1(a)对于应控制流程图是7-1(b)。(a)程序流程图(b)控制流程图图7-1程序流程图和对应的控制流图将程序流程图转换成控制流程图以后,就可以计算其环路复杂度了。计算有向图G的环路复杂度公式为:V(G)=m-n+2说明:其中V(G)是有向图G中的环路个数,m是G中的有向弧数,n是G中的节点数。在图7-1(b)中,有向弧数为15,结点数为12,所以环路复杂度为:15-12+2=5。5黑盒测试黑盒测试也称功能测试,它是通过测试来检测每个功能是否都能正常使用。在测试中,把程序看作一个不能打开的黑盒子,在完全不考虑程序内部结构和内部特性的情况下,在程序接口进行测试,它只检查程序功能是否按照需求规格说明书的规定正常使用,程序是否能适当地接收输入数据而产生正确的输出信息。黑盒测试着眼于程序外部结构,不考虑内部逻辑结构,主要针对软件界面和软件功能进行测试。常用的黑盒测试法包括:等价类划分、边值分析、错误推测和因果图。(1)等价类划分在设计测试用例时,等价类划分是用得最多的一种黑盒测试方法。所谓等价类就是某个输入域的集合,对于一个等价类中的输入值来说,它们揭示程序中错误的作用是等效的。也就是说,如果等价类中的一个输入数据能检测出一个错误,那么等价类中的其他输入数据也能检测出同一个错误;反之,如果等价类中的一个输入数据不能检测出某个错误,那么等价类中的其他输入数据也不能检测出这一错误(除非这个等价类的某个子集还属于另一等价类)。如果一个等价类内的数据是符合(软件需求说明书)要求的、合理的数据,则称这个等价类为有效等价类。有效等价类主要用来检验软件是否实现了软件需求说明书中规定的功能。如果一个等价类内的数据是不符合(软件需求说明书)要求的、不合理或非法的数据,则称这个等价类为无效等价类。无效等价类主要用来检验软件的容错性。黑盒测试中,利用等价类划分方法设计测试用例的步骤如下。根据软件的功能说明,对每一个输入条件确定若干个有效等价类和若干个无效等价类,并为每个有效等价类和无效等价类编号。设计一个测试用例,使其覆盖尽可能多的尚未被覆盖的有效等价类。重复这一步,直至所有的有效等价类均被覆盖。设计一个测试用例,使其覆盖一个尚未被覆盖的无效等价类。重复这一步,直至所有的无效等价类均被覆盖。应当特别注意,无效等价类用来测试非正常的输入数据,因此每个无效等价类都有可能查出软件中的错误,所以要为每个无效等价类设计一个测试用例。(2)边值分析经验表明,软件在处理边界情况时最容易出错。设计一些测试用例,使软件恰好运行在边界附近,暴露出软件错误的可能性会更大一些。通常,每一个等价类的边界,都应该着重测试,选取的测试数据应该恰好等于、稍小于或稍大于边界值。将等价类划分法和边值分析法结合使用,更有可能发现软件中的错误。(3)错误推测使用等价类划分和边值分析技术,有助于设计出具有代表性的、容易暴露软件错误的测试方案。但是,不同类型不同特征的软件通常又有一些特殊的容易出错的地方。错误推测法主要依靠测试人员的经验和直觉,从各种可能的测试方案中选出一些最可能引起程序出错的方案。(4)因果图因果图法是根据输入条件与输出结果之间的因果关系来设计测试用例的,它首先检查输入条件的各种组合情况,并找出输出结果对输入条件的依赖关系,然后为每种输出条件的组合设计测试用例。6软件维护软件维护主要是指根据需求变化或硬件环境的变化对应用程序进行部分或全部的修改。在修改时应充分利用源程序,修改后应填写程序改登记表,并在程序变更通知书上写明新旧程序的不同之处。软件维护是整个软件生命周期中最长的一个阶段,同时他也花费了整个软件生命周期中最多的成本,20世纪80年代末用于软件维护的花费约为整个软件生命周期总花费的75%,而且还在逐年上升。软件维护通常可分为以下四种类型:改正性维护:是指改正在系统开发阶段已发生而系统测试阶尚未发现的错误。这方面的维护工作量要占整个维护工作量的17%21%。所发现的错误有的不太重要,不影响系统的正常运行,其维护工作可随时进行;而有的错误非常重要,甚至影响整个系统的正常运行,其维护工作必须制定计划,进行修改,并且要进行复查和控制。适应性维护:是指使用软件适应信息技术变化和管理需求变化而进行的修改。这方面的维护工作量占整个维护工作量的18%25%

此文档下载收益归作者所有

下载文档
你可能关注的文档
收起
展开