2017年9月全国计算机等级考试《四级软件工程》专用教材【考纲分析+考点精讲+真题演练】(txt+pdf+epub+mobi电子书下载)


发布时间:2021-03-08 18:19:42

点击下载

作者:圣才电子书

出版社:圣才电子书

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

2017年9月全国计算机等级考试《四级软件工程》专用教材【考纲分析+考点精讲+真题演练】

2017年9月全国计算机等级考试《四级软件工程》专用教材【考纲分析+考点精讲+真题演练】试读:

第1章 软件工程概论

考纲分析

1.软件与软件工程概念。

2.软件工程过程与软件生存周期。

3.软件工程方法学。

4.软件过程模型。

5.软件工具概述。

考点精讲

1.1 软件和软件工程的概念

考点1 软件的概念

(1)软件的定义

①从系统工程角度“软件(Software)”是计算机系统中与计算机硬件相互依存的另一部分。从系统工程角度来看,它作为系统元素,与计算机硬件、人、数据库等共同构成计算机系统。

②GB/T 11457—2006《信息技术软件工程术语》中的定义

软件是与计算机系统的操作有关的计算机程序、规程及可能的相关文档的完整集合:

a.计算机程序(Program)

计算机指令和数据定义的组合,使计算机硬件能够执行计算或控制功能。

b.规程(Procedure)

为执行给定的任务而应采取的一系列动作的描述。

c.文档(Document)

与程序开发、维护和使用有关的图文材料。(2)软件的分类

R.S.Pressman根据计算机软件的应用,将计算机软件分为以下7个大类:

①系统软件

系统软件是一套服务于其他程序的程序:

a.一些系统软件(如编译器、编辑器、文件管理实用程序)处理复杂但确定的信息结构;

b.另一些系统软件(如操作系统构件、驱动程序、网络软件和远程通信处理器)处理的主要是不确定的数据。

②应用软件

应用软件是一些可以满足特定业务需要的独立应用软件:

a.数据处理

应用软件用于处理商务或技术数据,以协助业务操作和管理或技术决策。

b.实时控制

应用软件也被用于业务领域的实时控制(如销售点的交易处理、实时制造过程控制等)。

③工程/科学软件

工程和科学软件涵盖了广泛的应用领域。计算机辅助设计、系统仿真和其他的交互性应用程序呈现出实时和系统软件的特性。

④嵌入式软件

嵌入式软件存在于某个产品或者系统中,可实现和控制面向最终使用者和系统本身的特性和功能。嵌入式软件可以执行有限的功能或者提供重要的功能和控制能力。

⑤产品线软件

产品的设计方向是为多个不同的用户提供特定功能,关注有限的特定市场(如库存控制产品)或大众消费品市场(如文字处理等)。

⑥Web应用软件

最简单的Web应用可以是一组超文本链接文件,仅用文本和有限的图形表达信息。随着电子商务和B2B应用的发展,网络应用演变成为复杂的计算环境与企业数据库和商务应用程序相结合。

⑦人工智能软件

人工智能软件利用非数值算法来解决计算和直接分析无法解决的复杂问题。这个领域的应用程序包括机器人、专家系统、模式识别(图像和语音)、人工神经网络、定理证明和博弈等。(3)软件开发人员需要了解的内容

①遗留软件

即以往的软件开发人员开发并成功使用的软件。为了使它们能够在新的环境下适应新的需要,必须对它们加以改造。

②网络平台

当前,大多数软件开发都是基于网络的,软件开发人员采用适当的开发模式,建立灵活的系统架构,已成为网络软件开发的关键。

③开源软件

即网络上可以下载并使用的免费软件,是允许用户自行修改和利用的各种软件程序。利用开源软件,软件开发人员可以少编或不编程序,将从网络上下载的开源软件直接集成到目标系统中,完成软件开发的任务。

考点2 软件危机

(1)软件危机的爆发

20世纪60年代中期,大容量、高速度计算机的出现,使计算机的应用范围迅速扩大,软件开发急剧增长,软件系统的规模越来越大,复杂程度越来越高,软件可靠性问题也越来越突出。原来的个人设计、个人使用的方式不再能满足要求,迫切需要改变软件生产方式,提高软件生产率,软件危机开始爆发。(2)软件危机的主要表现

①软件开发成本和进度严重失控

软件开发的实际成本在计算机系统总成本中所占的比例居高不下,投资一再追加,实际成本远远超出预算成本。

②软件开发生产率提高速度慢

软件开发生产率提高的速度远远跟不上计算机应用的需要,拖延工期几个月甚至几年的现象也并不罕见,这种现象降低了软件开发组织的信誉。

③软件的可靠性差

尽管耗费了大量的人力和物力,而系统的正确性却越来越难以保证,出错率大大提高,由于软件错误而造成的损失十分惊人。

④软件难以维护

生产出的软件难以维护,很多程序缺乏相应的文档,程序的错误难以定位和改正,有时改正了已有的错误又会引入新的错误。(3)软件危机的解决途径

解决软件危机的途径在于工程化和标准化:

①工程化

使用工程化的原则指导软件产品的开发和维护,作为一个工程学科,软件工程从硬件工程和其他人类工程中吸收了许多成功的经验,明确提出了软件生存周期的模型,发展了许多软件开发与维护阶段适用的技术和方法,并应用于软件工程实践。

②标准化

通过标准化的手段来规范软件产品的开发过程和管理过程。

a.在软件开发过程中使用软件工具,以辅助进行软件项目管理与产品的生产。

b.将软件生存周期各阶段使用的软件工具有机地集成为一个整体,形成集成化软件支援环境。

考点3 软件工程的概念

(1)软件工程的定义

①软件工程的第一个定义

NATO举行的学术会议上,德国人Fritz Bauer第一次为软件工程下了定义:“软件工程是为了经济地获得能够在实际机器上有效运行的可靠软件而建立和使用的一系列完善的工程化原则。”

②GB/T 11457—2006《信息技术软件工程术语》中的定义

软件工程是“应用计算机科学理论和技术以及工程管理原则和方法,按预算和进度,实现满足用户要求的软件产品的定义、开发、发布和维护的工程或进行研究的学科”。(2)软件工程框架

①软件工程框架模型

软件工程框架模型如图1-1所示,见于《计算机科学与技术大百科全书》。图1-1  软件工程框架

②软件工程的目标

软件工程的目标:“生产具有正确性、可用性及开销适宜的产品”,这些目标形成了对过程、过程模型及工程方法选取的约束:

a.正确性表明软件产品达到预期功能的程度;

b.可用性表明软件基本结构、实现和文档为用户所接受的程度;

c.合算性表明软件开发、运行的整个开销满足用户要求的程度。

③软件工程活动

软件工程活动:“生产一个最终满足需求并达到工程目标要求的软件产品所需要的一系列步骤”,主要包括需求分析、设计、实现、V&V(验证与确认)以及支持等活动。支持活动又包括修改和完善。伴随以上活动的还有管理过程、支持过程和培训过程等。围绕工程设计、工程支持和工程管理,应注意遵守以下4条基本原则。

a.选取适宜的开发范型

也称为开发方法学,软件需求、硬件需求及其他因素间是相互制约、相互影响的,必须认清需求定义的易变性,采用适当的开发范型予以控制。

b.采用合适的设计方法

在软件设计中,通常需要考虑软件的模块化、抽象和信息隐蔽、局部化、一致性、适应性等特征。选取合适的设计方法有助于这些特征的实现。

c.提供高质量的工程支持

在软件工程中,软件工具与环境对软件过程的支持非常重要。软件工程项目的质量与开销直接取决于支撑软件工程的工具的质量与效用。

d.重视开发过程的管理

软件工程的管理工作直接影响到能否有效利用可用资源,生产满足要求的软件产品以及提高软件组织的生产能力等问题。因此,只有当软件过程得到有效管理时,才能实现软件工程的有效运用。

④软件工程——一种层次化的技术

从技术角度来看,R.S.Pressman认为软件工程是一种层次化的技术,如图1-2所示。图1-2  软件工程层次图

a.质量关注点

合格的产品要在规定的时间和成本内交付。

b.过程

软件过程的作用就是把各个技术层次结合在一起,合理地组织所有相关活动、人员、规程、方法,高效地开发计算机软件。

c.方法

软件工程方法为构建软件产品提供了技术上的解决方法。方法覆盖面很广,包括沟通、需求分析、设计建模、编程、测试和技术支持。

d.工具

软件工具为过程和方法提供了自动化或半自动化的支持。这些工具可以集成起来,使得一个工具产生的信息可被另外一个工具使用,即建立了软件开发的支撑系统,称为计算机辅助软件工程(Computer-Aided Software Engineering,CASE)。【真题演练】

程序能够满足规格说明和完成用户业务要求的质量特性称为(  )。[2015年3月真题]

A.可靠性

B.适应性

C.正确性

D.可移植性【答案】C【解析】A项,可靠性是指程序在规定的条件下使用时保持规定性能水平的能力;B项,适应性是指程序适应不同的环境而不须采用额外手段来保证其实现功能的能力;C项,正确性是指程序满足软件规格说明和用户需求的能力;D项,可移植性是指程序从一个环境应用于另一个环境的能力。

1.2 软件工程方法

软件工程方法又称为软件开发范型(Paradigm),目前使用最广泛的软件工程方法是面向过程方法、面向对象方法和形式化方法。

考点1 面向过程方法

(1)概念

该方法从功能角度出发,把软件视为处理流,并定义成由一系列步骤构成的程序过程。每一个步骤都是带有预定输入和特定输出的一个过程,把这些步骤串联在一起可产生合理的、稳定的、贯通于整个程序的控制流,最终产生一个简单的具有静态结构的体系结构,如图1-3所示。图1-3  面向过程方法所构造系统的基本架构(2)处理流

面向过程方法侧重于建立解决问题的处理流。数据结构根据程序算法步骤的要求开发,贯穿于整个过程中,提供过程所要求操作的信息。系统当前状态用一组值保存在全局变量中,可从一个过程传送到另一个过程。(3)软件结构

用面向过程方法建立起来的软件结构是由一系列程序模块组成的,解决问题的每一步都必须用一条条程序语句写在程序里。

考点2 面向对象方法

(1)概念

面向对象方法在考虑问题解决方法时优先考虑问题域中的实体。该方法把标识和模型化问题领域中的主要实体作为系统开发的起点,主要考虑实体对象的行为而不是必须执行的一系列动作。(2)基本单位——对象

面向对象软件中的基本单位是对象,它是数据抽象与过程抽象的综合体。数据抽象是对象中的属性,过程抽象是对象中操作属性值的一系列方法。软件系统在运行中的状态用各个对象的属性值来表述。完成系统功能所涉及的控制流是由包含在各个对象中的方法,以及各个方法之间传送的消息组成的,可以在将来修改软件系统时使得整个系统的架构保持稳定。(3)面向对象体系结构

如图1-4所示,给出一个draw程序的面向对象体系结构。图中的箭头描述了从一个对象传送到另一个对象的消息。这个体系结构中包括:

①外部的物理实体,如鼠标、键盘和显示器等;

②数据实体,如事件、图形、队列等;

③控制实体,如事件处理器等;

4继承关系,描述了一般和特殊的关系,如图形可具体化为矩形、椭圆形和三角形等。图1-4  一个draw程序的面向对象体系结构(4)优点

用面向对象方法开发软件的过程是多次反复迭代的演化过程。面向对象方法在概念和表示方法上的一致性,保证了各项开发活动之间的平滑过渡。对于大型、复杂及交互性比较强的系统,使用面向对象方法更有优势。

考点3 形式化方法

(1)概念

形式化方法是一种基于形式化数学变换的软件开发方法,它可将系统的规格说明转换为可执行的程序。过程的描述如图1-5所示。过程的迭代在图中没有画出。图1-5  形式化方法(2)特点

①软件需求规格说明被细化为用数学记号表达的详细的形式化规格说明。

②设计、实现和单元测试等开发过程由一个变换开发过程代替。通过一系列变换将形式的规格说明细化成为程序。

1.3 软件过程与软件生存周期

考点1 软件生存周期

软件生存周期是软件产品的一系列相关活动的整个生命期,即从形成概念开始,经过开发、交付使用,在使用中不断修改和演进,直到最终被废弃,被新的软件产品代替的整个时期。根据软件工程实践,人们把软件生存周期划分为软件定义、软件开发和交付后运行维护3个时期,每个时期又进一步划分为若干阶段:(1)软件定义时期的基本任务

软件定义时期的主要任务是解决“做什么”的问题:

①确定工程的总目标和项目范围

a.目标

弄清到底要软件干什么,初步确立软件应提供给客户什么样的功能或服务,应达到什么样的性能,有哪些质量要求。

b.范围

为完成确立的目标,需要进行哪些活动。

②开展可行性研究

a.进行成本-效益分析,探讨在成本和时间的限制条件下项目是否值得做。

b.进行技术解决方案分析和开发组织(或团队)技术实力评估,探讨能否解决客户要求解决的问题。

c.进行法律、用户操作方面的可行性研究。

d.最后撰写可行性研究报告,提交给用户和上级管理部门供其决策用。

③需求获取

继续开展调查研究,明确待开发软件的用户需求、功能需求和非功能需求,并通过需求描述或快速原型与客户沟通。

④制订项目计划

对项目活动和产品需求做进一步分解,细化工作分解结构(WBS),同时,对可利用的计算机硬件、软件、人力、成本、开发的进度做出估算,初步制订出完成开发任务的实施计划。(2)软件开发时期的基本任务

软件开发时期的主要任务是解决“如何做”的问题。给出待开发软件的设计方案并构造出待开发软件。这一时期又可分为概念设计、概要设计、详细设计、编码和测试等阶段:

①概念设计

这个阶段包括两大任务:

a.建立分析模型,从功能、数据、行为等方面细致地描述系统的静态特性和动态特性,引入软件的各种需求细节。

b.基于分析结果,编写软件需求规格说明,确认测试计划和初步的用户手册。

②概要设计

从系统的输入/输出入手,搭建系统的体系结构和全局数据结构,同时对软件的人机交互界面和运行控制机制建模。

③详细设计

对软件体系结构中的每一成分(构件)进行算法和局部数据结构设计,同时设计人机交互界面的细节、构件内部的处理细节和构件在实际运行环境下的部署。

④编码

使用某种编程语言把设计结果转换为程序代码,同时进行单元测试,发现差错需进行调试(排错),还可能要执行回归测试。

⑤测试

通过集成测试组装系统;通过系统测试检查系统的实现是否与软件需求规格说明保持一致,通过接受测试检验软件产品的实用性。(3)交付后维护时期的基本任务

交付后维护时期的主要任务是使软件持久地满足用户的需要。通常有4类维护活动:

①改正性维护:诊断和改正在使用过程中发现的软件错误所做的维护。

②适应性维护:修改软件以适应环境的变化所做的维护。

③完善性维护:根据用户的要求改进或扩充软件使其更完善所做的维护。

④预防性维护:修改软件为将来的维护活动预先做准备。

考点2 软件过程

(1)软件开发时需执行的活动

在从事软件开发工作时需执行的最基本活动的集合构成了软件过程,这些活动可归为以下4种:

①软件规格说明:定义软件产品的功能和操作约束。

②软件设计与实现:生产满足规格说明的软件产品。

③软件确认:确认软件产品的有效性,确保该软件产品所做的是用户所需要的。

④软件演进:改进软件产品,满足用户新的需要。(2)软件过程的定义

通常定义软件过程为软件生存周期中一系列相关软件工程活动的集合,它是由一组工作任务、软件阶段里程碑、工作制品和交付物以及质量保证检查点组成的。(3)过程框架

一个软件开发组织应有一个过程框架,如图1-6所示。这个过程框架定义了少量可用于所有软件项目的活动,针对各个项目的具体特点和项目组的需求,可以选取和构建适合于该项目的过程活动。其中,保护伞活动,如软件质量保证、软件配置管理等,独立于任何一个框架活动并将贯穿于整个过程中。图1-6  软件过程的框架

1.4 软件过程模型

软件过程模型也称为软件生存周期模型,每个过程模型从某个特定视点描述了一个生存周期过程,从而提供了有关该过程的特定信息。以下为一些常用的过程模型:

考点1 编码-修补模型

(1)概念

实现产品时没有需求规格说明,也没有设计,开发者只是简单地将代码拼凑在一起。为了满足客户要求,需多次改写该软件。该过程模型的描述如图1-7所示。图1-7  编码-修补模型(2)缺点

①这种方法可以成功地开发100行或200行的小程序,但对于规模较大的软件来说,编码-修补模型则完全不能令人满意。

②编码-修补方法的实际花费远远大于有正确的规格说明、经过仔细设计的产品所需的花费。

③对没有规格说明和设计文档的产品进行维护相当困难。

考点2 瀑布模型

(1)概念

规定了需要进行的各项软件工程活动,以及这些活动自上而下、相互衔接的固定次序,如同瀑布流水,逐级下落。如图1-8所示。图中用虚箭头表明产品在开发时期维护的反馈环和交付后维护的反馈环。图1-8  完整的瀑布模型(2)具体要求

瀑布模型要求在任何阶段所得到的可交付物被认可之前,不能认为该阶段已完成。只有当该阶段的可交付物(包括文档)经过技术评审得到认可,并成为里程碑后,才能认为该阶段结束,并可进入下一阶段。(3)优点

瀑布模型的阶段划分清晰,对每个阶段需要交付哪些文档做了清楚的规定,并且对每个阶段的活动坚持进行阶段评审,确保每个阶段可能发生的差错不会遗留到后续阶段。(4)缺点

①各阶段的划分固定,缺乏灵活性,阶段间产生大量文档,极大地增加了工作量。

②由于开发模型基本上是线性的,用户只有等到整个过程的末期才能见到开发成果,从而增加了开发风险。

③早期的错误可能要等到开发后期的测试阶段才能发现,进而会产生严重的后果。【真题演练】

在下列软件生存周期模型中,规定了由前至后、相互衔接的固定次序的模型是(  )。[2014年9月真题]

A.瀑布模型

B.增量模型

C.喷泉模型

D.螺旋模型【答案】A【解析】瀑布模型规定了需要进行的各项软件工程活动,以及这些活动自上而下、相互衔接的固定次序。

考点3 快速原型开发模型

(1)概念

快速原型又称为演化模型,是先做试验开发探索可行性,弄清软件需求,然后在此基础上获得较为满意的软件产品。通常把第一次得到的试验性产品称为“原型”。(2)步骤

如图1-9所示给出快速原型开发模型的步骤:

①建造一个快速原型,并让客户和未来的用户试用此原型。

②一旦客户认为原型确实满足了他们的要求,开发人员就可以编写规格说明文档,并确信计划中的产品能够满足客户的实际要求。

③当原型得到确认后,就可以参照它继续进行软件产品的开发。图1-9  快速原型开发模型(3)优点

使用快速原型开发模型的好处是可以减少返工,原因是:

①开发组成员使用快速原型与客户沟通,可快速确认需求规格说明;

②通过快速原型的实际运行,软件设计人员可以从中了解哪些事情应该做,哪些事情不能做;

③由于初步的工作模型已经建造出来,可作为后续设计和实现的参考。【真题演练】

1.演化型原型是用原型过程来代替(  )。[2014年3月真题]

A..设计阶段

B.全部开发阶段

C.需求分析阶段

D.维护阶段【答案】B

2.相对于螺旋模型,演化模型缺少(  )。[2014年9月真题]

A.制定计划

B.客户评估

C.实施工程

D.风险分析【答案】D

考点4 增量模型

(1)概念

增量式开发方法又称为迭代-递增开发模型,如图1-10所示。使用增量式开发方法开发软件时,把软件产品作为一系列的增量来设计、实现和确认。然后把增量集成到系统中,最后可得到一个完整的软件系统。图1-10  增量模型(2)优点

每个增量可以是一个子系统,也可以是一个或多个相关的模块,能够完成特定的功能。使用增量开发模型,客户不必等到整个系统全部完成就能得到他们所需要的功能。优先级最高的服务首先交付,然后再将其他增量逐次集成进来。最重要的系统服务将接受最多的测试,意味着系统最重要的部分一般不会遭遇失败。

考点5 快速应用开发模型

(1)概念

快速应用开发模型(Rapid Application Development Model,RAD)也是一种增量式软件过程模型,它强调采用极短的开发周期(如2~3个月),在基于可复用构件的编程环境中构造应用程序。RAD模型的框架活动如图1-11所示。(2)模型各阶段的主要活动

①沟通:与客户和领域专家协同,理解相关业务和待开发软件应具有的各种特性。图1-11  快速应用开发模型(RAD)

②策划:进行任务分解,安排开发过程,确保各个开发组依次完成增量的开发。

③建模:包括以下3个主要步骤。

a.业务建模

对业务功能中的信息流进行建模,用以明确:驱动业务过程的信息、生成的信息、谁生成了这些信息、信息的流向、谁处理了这些信息。

b.数据建模

对作为业务建模一部分的信息流进行进一步求精而得到一组数据对象。

c.流程建模

从数据建模中的数据对象出发,根据每一个要实现的业务功能的需要,给出对每一个数据对象操作的过程化描述。

④构建

以RAD模型为基础,构造待开发的软件系统,能够快速地完成整个应用系统的开发:

a.从已有的可复用软件构件中选择适用的构件,必要时也可建立新的软件构件。

b.使用代码自动生成技术构造待开发的软件系统。

c.对于已有的可复用构件只需要进行确认测试,但是新开发的构件必须进行测试,对所有的用户界面程序也必须进行测试。

考点6 螺旋模型

(1)概念

该模型将瀑布模型与快速原型模型结合起来,并且加入了风险分析。在螺旋模型中,软件过程被表示成一条螺线,螺线每转一圈表明软件过程的一个阶段完成。最内层的一圈是项目启动时进行需求获取和可行性研究活动,第二圈是进行软件需求建模和编写需求规格说明,再外一圈是进行系统设计等,如图1-12所示。(2)螺旋模型的活动

螺线上的每一圈可划分为4个象限,分别表达了4个方面的活动:

①目标设定

定义该阶段的阶段目标,弄清对过程和产品的限制条件,制订详细的管理计划,识别项目风险,可能还要计划与这些风险有关的对策。

②风险评估与弱化

针对每一个风险进行详细分析,设想弱化风险的步骤。

③开发与确认

评价风险之后再选择系统开发模型。图1-12  螺旋开发模型

④计划

评价开发工作,确定是否继续进行螺线的下一圈。如果确定要继续,则计划项目下一个阶段的工作。

软件开发中总会有风险。为了保全产品的价值,软件人员应尽力把这些风险减到最小。

考点7 同步-稳定模型

(1)概念

模型要求在需求分析阶段访问软件包的多个潜在客户,提取对客户具有最高优先级的特性列表,拟制规格说明文档。之后将工作分为3或4个构建(Build),第一个构建包含最重要的特性,第二个构建包含次重要的特性,如此处理下去。每个构建都由多个小组并行开发完成。每天工作结束前,所有小组进行工作同步(Synchronize),也就是把完成的部分构建放在一起,测试和调试得到的产品。在每个构建结束时进行稳定化(Stabilization)工作。修补目前检测到的遗留差错,将该构建冻结(Freeze),也就是不再修改规格说明。(2)规则

①每天软件人员必须把他们的代码输入到产品数据库中,以便同步当天的工作。

②如果一个开发人员的代码阻碍了该产品当天的同步编译,则必须立刻解决问题,这样才能由小组的其他人测试和调试当天的工作。(3)优点

①重复的同步步骤保证各个构建总能一起工作。

②开发人员能够及时掌握产品的工作状态,必要时在构建生成的过程中修改规格说明。

考点8 开源过程模型

几乎所有成功的开源软件项目都经历过两个阶段:(1)初始阶段

一个软件从业人员把他的一个编程构想付诸实践,并建立了一个初始版本,然后把这个程序免费上传到网络上供别人下载。如果有网友下载了他的这个初始版本并认为该程序能够满足他们的需求,这个程序就会被这些网友使用。(2)成熟阶段

①网友的合作与参与

成熟阶段网友变成了合作开发者,参与合作的人都是利用业余时间在开源项目上自愿工作的,他们不索取报酬:

a.一些网友会报告程序中可能存在的缺陷,而另一些网友则会提出修复这些缺陷的建议。

b.一些网友会提出扩充该程序的想法,而另一些网友则会实现这些想法。

c.随着程序在功能上的扩充,另一些网友还会将该程序的接口进行转换,以便能够运行在其他的操作平台上。

②主要活动

与交付后的维护活动类似,主要分为3类:改正性维护(报告并纠正程序中的缺陷)、完善性维护(增加新的功能)、适应性维护(为该程序建立一个向新环境转换的接口)。

考点9 极限过程

(1)概念

极限编程(eXtreme Programming,XP),要求软件开发组首先确定客户希望产品支持的各种特性(用户故事)。对于每个特性,开发组应向客户通报实现这个特性需要的时间和花费。然后客户使用成本-效益分析方法选择每个后续的构建所应包含的特性,即根据开发组提供的时间、成本估算和该特性给客户带来的潜在收益来进行选择。(2)步骤

①在软件开发过程中,把将要执行的构建分解为更小的部分,称为任务(Task)。

②一个程序员首先应设计该任务的测试用例再做开发,这种工作方式称为测试驱动开发(TDD)。

③然后两个程序员在一台计算机前一起工作,以结对编程的方式完成任务,并确保全部测试用例都能正确工作。(3)特性

与通常开发软件所使用的方法相比,极限编程有许多不同的特性:

①XP小组的所有成员在一个大房间中工作,大房间中有许多彼此相连的小隔间。

②一个客户代表一直与XP小组一起工作。

③没有一个人能够连续两周超时工作。

④没有规格说明,而是XP小组的所有成员一同完成规格说明、分析、设计、编码和测试。

⑤在构建出各种构件之前没有概要设计步骤。在构建产品的过程中设计会被不断地调整,这个过程称为重组(Refactoring)。(4)原则

极限编程的原则是最小化特性的数量;不必生产客户实际上不需要的产品。(5)极限编程和敏捷软件的共性

极限编程是一些新的统称为敏捷过程(Agile Process)的开发方法中的一个。敏捷过程的两个基本原则是:交流与尽可能快地满足客户的需要。敏捷软件开发方法除了极限编程外还有其他方法。它们的共性有以下几点:

①不强调分析和设计。在开发过程中很早就开始编程和测试,因为能工作的软件比具体的文档更重要。

②强调与客户的协作,并响应需求变化。

③频繁交付可运行的软件,最好每2或3周一次。在敏捷过程中为每个迭代设定的典型时间为3周。即敏捷过程要求固定的时间,而不是固定的特性。

④每日上班前有一个站立会议,进行交流。每个小组成员要依次回答5个问题:从昨天的会议到现在我做了什么?今天我要做什么?完成今天的工作将遇到什么问题?我们忘记了什么?我可以与小组成员分享的经验是什么?【真题演练】

一个项目是否值得开发,从经济上来说是否可行,归根结底是取决于(  )。[2015年3月真题]

A.成本估算

B.项目计划

C.工程管理

D.工程网络图【答案】A

考点10 Rational统一开发过程

(1)概念

Rational统一开发过程(RUP)是用例驱动的、以体系结构为核心的、迭代的、增量的过程。它从3个视角来描述:

①动态视角:给出模型随时间所经历的各个阶段。

②静态视角:给出所规定的过程活动。

③实践视角:建议在过程中采用最佳软件工程实践。(2)迭代开发的概念

RUP将一个大型项目分解为可连续应用瀑布模型的几个小部分。在对一部分进行需求分析和风险、设计、实现并确认之后,再对下一部分进行需求分析、设计、实现和确认。以此进行下去,直到整个项目完成,这就是迭代式开发。(3)RUP的动态视角

RUP的动态视角聚焦在产品的迭代开发上。

①开发周期

在RUP中迭代过程分为4个阶段。这4个阶段构成一个开发周期,周期结束时产生一代新的软件产品。各阶段中的过程活动与业务紧密关联。如图1-13所示给出了RUP中的阶段划分。图1-13  RUP中的阶段

a.初始阶段(Inception)

此阶段的目标是建立系统业务的用例。标识所有与系统交互的外部实体(人、事或相关系统),并定义它们与系统的所有交互。

b.细化阶段(Elaboration)

此阶段的目标是增进对问题域的理解,计划需完成的活动和资源,详细说明产品特性并识别关键风险,然后建立系统体系框架。这个阶段结束时可得到系统的需求模型、软件系统的体系结构描述和开发计划。

c.构造阶段(Construction)

此阶段将构造完整的产品,逐步完成系统各个部分的并行开发,再逐步集成。在这个阶段结束时可得到一个能工作的软件系统以及相关文档。

d.移交阶段(Transition)

此阶段关注如何将系统从开发部门移交给用户,并使之在实际环境中工作,包括制造、交付、培训、支持及维护产品。此阶段结束时可得到在实际操作环境下能正常工作的软件系统及相关文档。

②进化周期

软件产品产生于初始开发周期,随着同样的过程重复执行,软件发展到下一代,这一时期即为软件的进化周期。迭代周期如图1-14所示。用户需求的变更、基础技术的变化、竞争都可能激活新的进化周期。周期之间在时间上会有重叠。后一个周期的初始与细化阶段与前一个阶段的移交阶段可能同时进行。在各阶段内也包含有一个或几个迭代过程。图1-14  RUP的迭代周期(4)RUP的静态视角

RUP的静态视角聚焦在开发过程中活动的组织方面。在RUP描述中,用工作流来描述能够生成有用结果的活动序列,用以描述工作人员之间的交互。

在RUP的每一个迭代周期中涉及6个核心工程工作流,3个核心支持工作流。RUP是结合UML设计的,UML是一个面向对象建模语言,所以工作流描述围绕着UML模型给出。核心工程工作流和支持工作流的描述如表1-1所示。表1-1  RUP中的工作流工作流描述业务建模使用业务用例对业务过程进行建模找出与系统进行交互的参与者并开发用例,完成对

需求系统需求的建模分析和设使用体系结构模型、构件模型、对象模型和交互模计型来创建并记录设计模型实现系统中的构件并将它们合理安排在子系统中。

实现从设计模型自动生成代码有助于加快此过程测试是一个反复过程,它的执行是与实现紧密相关

测试的。系统测试紧随实现环节的完成

部署创建和分发产品版本并安装到它们的工作场所配置和变支持工作流管理对系统的变更更管理项目管理支持工作流管理系统开发

环境用于提供软件开发团队可用的合适的软件工具(5)RUP的实践视角

RUP的实践视角描述的是系统开发中所需要的最佳软件工程实践。RUP主张的6个最佳软件工程实践:

①迭代式地开发软件

基于螺旋模型组织一个迭代的和增量的开发过程,并根据客户的轻重缓急来规划系统的增量,在开发过程中先开发和交付最高优先权的系统特征。

②管理需求

管理需求包括3种活动:

a.需求获取并记入文档;

b.估计生存周期的需求变化并评估它们的影响;

c.跟踪、记录和权衡所做出的各种决策。

③使用基于构件的软件体系结构

使用构件可以创建有弹性的体系结构,如使用模块化方法,开发人员可以区分和关注系统中易变的元素;使用标准化框架(如CORBA、EJB、COM+)和其他商品化构件可以提供软件的可复用性。

④建立可视化的模型

模型是现实的简化,用于从特定的视角完整地描述一个系统。通过模型化,可将系统体系结构的结构和行为可视化、具体化;可以提供一系列方案,用以解决软件开发所遇到的问题;还可以帮助开发人员提高管理软件复杂性的能力。

⑤不断地验证软件质量

在软件实施之后再查找和发现软件问题,比在早期就进行这项工作需多花10~100倍的费用。因此,必须不断地对软件质量进行评估。

⑥控制对软件的变更

为使软件开发人员、开发组的活动和产品协调一致,必须建立管理软件变更的工作流,在迭代过程中,持续监控变更,动态地发现问题并及时反映。每次迭代过程结束时需建立和发布经过测试的基线,保证迭代过程与发布版本协调一致。

1.5 软件工具概述

软件工程师需要两种类型的工具。一是用于软件开发的分析工具,如逐步求精法和成本-效益分析;二是软件工具,即辅助软件工程师开发和维护软件产品的工具软件,这些软件工具统称为CASE(Computer Aided Software Engineering,计算机辅助软件工程)工具:

考点1 逐步求精法

(1)概念

逐步求精是一种解决问题的技术,是许多软件工程技术的基础。逐步求精可定义为“尽可能将细节的定义推延到最后,以便集中精力在重要的事项上”的一种方法。(2)应用

在软件开发过程中,在每一个开发阶段都需要使用逐步求精法,建立需求规格说明、设计方案和程序的源代码。通过迭代和增量,不断改进和完善软件的各种制品。

考点2 成本-效益分析法

(1)概念

成本-效益分析法是对软件产品的未来收益和成本做出估计和对比,以确定开发一个软件工程项目是否合算。对于有形的收益,可以直接计算,对于无形的收益则很难直接量化。为了确定无形的收益,通常的做法是通过一些假设来估算无形的收益。(2)应用

成本-效益分析法用于确定客户是否应当实现计算机化来完成他们的业务工作。一旦确定要使用计算机系统处理他们的业务,还要比较各种可能解决方案的成本和收益,选择收益和成本之间差异最大的方案作为最佳方案。

考点3 软件度量

(1)概念

软件度量主要分为产品度量和过程度量:

①产品度量是测量产品的某些特性,如规模或可靠性;

②过程度量是推断有关软件开发过程的某些信息,如开发过程中错误检测的有效性,可用开发过程中检测出的错误数与在产品整个生存周期检测出的错误数之比度量。(2)目的

进行软件度量的目的是根据已有的度量数据预测类似项目产品或过程可能存在的问题。只有度量软件过程,才能控制软件过程。基本度量有以下5方面:

①规模:软件产品的源代码行数或功能点数。

②成本:开发过程的实际费用,按人民币、港币或美元计。

③时间:开发持续时间,按月计。

④工作量:开发实际花费的工作量,按人月计。

⑤质量:在开发期间检测到的错误数。

考点4 软件工具与CASE

在软件开发的每一阶段都可以借助一些软件工具完成与软件开发有关的大部分繁重的工作:(1)早期的软件工具

如编辑程序、编译程序、排错程序等,主要用于辅助程序员编程。(2)软件工程阶段的软件工具

在进入软件工程阶段以后,软件工具涉及软件开发、维护、管理过程中的各项活动,并辅助这些活动高质量地进行,这些软件工具统称为CASE(计算机辅助软件工程)工具。CASE工具的作用如下:

①支持各种软件开发方法,辅助软件工程方法和过程的实施。

②提高软件开发、维护和管理效率。

⑤提供检测机制,提高软件质量。

考点5 CASE的分类

(1)Fuggertta对CASE工具的分类

1993年Fuggertta对CASE工具进行了分类,如图1-15所示。图1-15  CASE工具分类

①工具

支持软件开发单个活动或任务的软件工具。

②工作台

支持某一软件过程或一个过程中一组活动的工具集。

③环境

支持某些软件过程以及相关的大部分活动的工具集,它集成了若干工作台,有两个作用:

a.集成化环境提供对数据集成、控制集成、表示集成机制的基本支持;

b.以过程为中心的环境则利用过程模型和过程引擎提供对软件开发活动的导引。(2)按软件过程的活动进行分类

①支持软件开发的工具

主要有分析和设计工具、编程工具、调试工具、测试工具等。此外,还可以根据工具所支持的开发方法进行细分,如可将分析工具分为结构化分析工具及面向对象分析工具。

②支持软件维护过程的工具

主要有版本控制工具、文档分析工具、信息库开发工具、逆向工程工具、再工程工具等。

③支持软件管理过程和支持过程的工具

主要有项目管理工具、配置管理工具、软件评价工具等。

考点6 版本工具

软件产品开发的每一个阶段都会生成一些可交付物,如各种文档、表格、代码等,这些可交付物称为软件制品。对于这些软件制品,只要修改过它们,就会产生这些软件制品的新版本,因此需要进行软件制品的版本控制。需要进行版本控制的有两种类型的版本:(1)修订版本

假设软件产品交付后已在多个不同的地点进行了安装,如果在某一制品中发现了错误,就需要修复它。然而经过修改后,该制品就会有两个版本,即老版本和新版本(也称为修订版)。按照常理,这些新老版本都应保留。理由是:

①即使测试了新版本,但仍不能保证新版本比老版本更正确。

②产品可能已经被分发到许多地方,但在这些地方并没有都安装新版本。(2)变种版本

为了支持不同的设备,需要开发同一制品的不同版本。例如,当计算机系统既要支持喷墨打印机,又要支持激光打印机时,操作系统的打印机驱动程序针对每一种打印机,都需要有一个变种版本。

如图1-16所示为修订版本和变种版本的例子。如果每个变种版本又有多个修订版本。这时,为了避免陷入多个版本的泥潭,软件开发组织需要使用CASE工具。图1-16  软件制品的多个版本示意图

考点7 配置控制

(1)软件制品的代码

每个软件制品的代码通常以3种形式存在:源代码、目标代码(也称编译代码)、编译代码与运行时例程结合形成的可执行载入映像,如图1-17所示。图1-17  可执行载入映像的构件(2)配置的概念

程序员可以使用每个制品的多种不同的版本。某个特定版本的软件产品由这些制品的指定版本构建而成的,称这些选定版本的软件制品为该软件产品的配置。(3)版本控制工具的作用

版本控制工具是管理各个软件制品或产品的版本的工具,它的作用有以下几个:

①管理所有经过评审认定合格的软件制品或产品的各种修订版本和变种版本。

②一旦发现软件问题,可以查出可执行载入映像包含了哪些制品及其版本号。

③可自动管理变种版本。对最初的变种版本的任何修改都可以自动应用到所有其他相关的变种版本上。

④可以帮助用户区分源代码制品的不同版本,从产品配置库中选择各个制品的多个变种版本和修订版本。

考点8 建造工具

(1)作用

建造工具与版本控制工具一同使用,可以帮助选择要链接的每个编译代码制品的正确版本,从而形成该产品的一个特定版本。(2)UNIX建造工具——make

编译代码在编译后版本信息可能缺失,可以使用UNIX工具make来解决这个问题。UNIX利用makefile给每个文件标附上日期和时间标记,可以检验载入映像是否体现了每个制品的当前版本:

①如果是,就不用再做什么,也不会在不需要的编译和链接上浪费CPU时间。

②如果不是,则make将调用相关的系统软件生成产品的最新版。

第2章 面向对象的基本概念与UML

考纲分析

1.面向对象系统的基本概念。

2.统一建模语言UML概述。

3.UML的模型元素。

4.UML的图。考点精讲

2.1 面向对象系统的基本概念

面向对象(Object-Oriented,OO)方法以客观世界中的实体为中心,其分析和设计思想符合人们的思维方式,分析和设计的结果与客观世界的实际比较接近。

考点1 面向对象系统的概念

(1)定义

面向对象=对象+类+继承+消息通信。如果一个系统是使用这样4个概念设计和实现的,则可认为这个系统是面向对象的。一个面向对象的程序系统的每一个组成部分应是对象,计算是通过新的对象的建立和对象之间的通信来执行的。(2)特点

①系统的定义从问题领域的实体出发,与人类习惯的思维方式一致。

②搭建的系统结构稳定性好,修改可以局部化。

③系统及体系结构可以使用构件组装,可复用性好。

④软件系统容易理解,容易修改,容易测试,适合于开发大型的软件产品。

⑤软件体系结构严格按照信息(细节)隐蔽的原则设计,产品可维护性好。

考点2 对 象

(1)对象的定义

对象(Object)是系统中用来描述客观事物的实体,是构成系统的基本单位。每个对象可用它的名字、对象本身的一组属性和可以执行的一组操作来定义。如图2-1所示给出了对象的表示方法。

对象名要加下画线,有下列3种表示格式:

①有名对象。形如:对象名:类名。

②无名对象。形如::类名。

③默认类型对象。形如:对象名。这种格式不带类名,对象的类由其上下文决定。如图2-1所示的对象名采用的即是此格式。图2-1  对象的图形表示(2)对象两个层次的概念

①在系统模型中对象指的是系统模型所涉及的实体。可以是有形对象;也可以是抽象的逻辑对象。

②程序中的对象是一组变量和相关操作(或方法)的集合,其中变量表明对象的状态,操作表明对象所具有的行为。(3)对象的分类

可以将系统中的对象分为5类:物理对象、角色、事件、交互、规格说明。每个应用系统可以拥有某几种或所有各种对象,但也不必特意对每个对象进行分类。(4)对象的特点

①对象是消息处理的主体

在面向对象系统中,每个对象不是消息的发送者,就是消息的响应者,不存在既不发送消息也不接收消息的对象。

②对象是以数据为中心的

所有操作都与对象的属性相关,而且操作的结果往往与当时所处的状态(属性的值)有关。

③实现了数据封装

对象是一个黑盒,其属性值对外不可见,被完全封装在盒子内部,对属性值的访问只能通过界面中定义的(公有)操作进行。

考点3 类与封装

(1)基本概念

①类(Class)

是一组具有相同属性、相同操作、相同语义的对象的集合。类的定义包括类名、一组数据属性和在这组属性上的一组合法操作。类名不加下画线。

②实例(Instance)

属于一个类的各个对象都是类的实例(Instance),它们的数据结构都与类定义的属性相同,但各个实例具有不同的属性值,都可以使用在类中定义的操作。

③实例变量

一个实例的属性在面向对象的程序中称为该实例的实例变量,实例变量的值一旦确定,该实例的状态也就确定下来。(2)类与封装

①封装的定义

类的定义应遵循抽象数据类型(ADT)的原则,按照使用与实现分离的要求,封装类的属性和操作定义。为此,必须把可提供给外部使用的操作定义在类的接口部分。封装的定义如下。

试读结束[说明:试读内容隐藏了图片]

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载