第二章 软件过程

2.1 软件生命周期的基本任务

软件过程也称为软件生命周期,是软件生命周期内为达到一定目标而必须实施的一系列相关过程的集合。它是围绕软件的活动序列,不包括财务、市场等活动。
在传统的软件工程中,软件生命周期一般可以划分为以下6个阶段


1. 可行性研究
可行性研究阶段为后续的软件开发做必要的准备工作。在该阶段要完成的工作有:确定待开发的软件产品所要解决的问题使软件开发人员和用户对待开发软件产品的目标达成一致?确定总体的开发策略与开发方式,并对开发所需要的资金、时间和各种资源做出合理的估计;对开发软件产品进行可行性分析,并制定初步的开发计划;完成可行性分析报告


2.需求分析 
需求分析阶段要确定目标系统需要做什么,它是一个很复杂的过程,其成功与否直接关系到后续软件开发的成败。在需求分析阶段,开发人员与用户之间的交流与沟通是非常重要的。需求分析的结果最终要反映到软件需求规格说明书中。


3.软件设计
简单地说,软件设计就是把需求文档中描述的功能可操作化它可以分为概要设计详细设计两个阶段。概要设计旨在建立系统的总体结构,而详细设计关注每个模块的内部实现细节,为后续的编码工作提供最直接的依据。


4.编码
编码就是编写程序代码 即把详细设计文档中对每个模块实现过程的算法描述转换为能用某种程序设计语言实现的程序。在规范的软件开发过程中,编码必须遵守一定的标准,这样有助于工作时,无论与客团队开发,同时能够提高代码的质量。

5.软件测试 
软件测试旨在发现软件产品中存在的软件缺陷,进而保证软件产品的质量。按照测试点的不一致,这将导致同,软件测试可以分为单元测试 、集成测试、 系统测试和验收测试 。


6. 软件维护  

在软件产品被交付后,其生命周期并未结束。随着用户需求的增长或改变,以及市场环境的变化,软件产品的功能需要不断更新,版本需要不断升级。所以为了保证软件产品的正常运行,软件维护是必需的。一般来说,软件产品的质量越高,进行维护的工作量就会越小

2.2 软件过程模型

    ISO 12207标准将软件生命周期模型(软件过程模型)定义为:一个包括软件产品开发、运行和维护中有关过程、活动和任务的框架,其中这些过程、活动和任务覆盖了从该系统的需求定文到系统的使用终止的全过程。
   软件生命周期模型有很多种,它们有各自的特色、优缺点和适用场景。一般来说,采用不同模型开发的软件产品,其生命周期也有所不同。

  常见的软件生命周期模型包括瀑布模型 、快速原型模型、增量模型、螺旋模型、喷泉模型(统一软件开发过程模型,以及敏捷模型等。

2.2.1 瀑布模型

   瀑布模型是20世纪80年代之前最受推崇的软件开发模型,它是一种线性的开发模型,具有不可回溯性。开发人员必须等前一阶段的任务完成后,才能开始后一阶段的工作,并且前一阶段的输出往往就是后一阶段的输入。由于它的不可回溯性,如果在软件生命周期的后期发现并要改正前期的错误,那么需要付出很高的代价。传统的瀑布模型是文档驱动的,如图2-2所示。(注:实线代表瀑布的流水,虚线代表瀑布的水往上流比较难,即回溯性差)
   瀑布模型的优点是过程模型简单,执行容易;缺点是无法适应变更。瀑布模型适用于具有以下特征的软件开发项目:
(1)在软件开发的过程中,需求不发生或很少发生变化并且开发人员可以一次性获得全部需求则,由于瀑布模型较差的回溯性,在后续阶段中需求经常性的变更需要付出高昂的代价。

 (2)软件开发人员具有丰富的经验,对软件应用领域很熟态。
 (3)软件项目的风险较低,因为瀑布模型不具有完善的风险控制机制

2.2.2   快速原型模型

  如果开发人员用传统的方法开发一个系统,在进行初期需求分析方面的工作时,无论与客户做如何详细的沟通,客户都难以对自己的需求表达准确、全面,那么造成这种结果的原因是客户与开发团队双方的知识领域有很大差异。
  开发人员主要懂技术,业务人员主要了解业务和客户层面,双方对软件开发的理解可能不一致,这将导致沟通需求时存在很多问题,从而极可能导致已经完成大半的软件产品被返工,延长软件产品开发的时间,增加软件产品开发的成本。而时间和成本是软件开发中非常关注的,所以需要引入可以克服这些缺点的快速原型模型,如图2-3所示。(图中实线箭头表示开发过程,虚线箭头表示维护过程)


  快速原型模型,也叫原型模型。快速原型模型需要迅速构建一个可以运行的软件原型,以便理解和澄清问题,使开发人员与客户达成共识,最终在确定的客户需求基础上开发出客户满意的软件产品。快速原型模型允许在需求分析阶段对软件的需求进行初步而非完全的分析和定义,快速设计并开发出软件系统的原型,该原型向客户展示待开发软件的全部或部分功能和性能;客户对该原型进行测试评定,并给出具体改进意见以丰富、细化软件需求;开发人员据此对软件进行修改和完善,直至客户认可之后,才进行软件的完整实现及测试、维护。
  快速原型模型因为能快速修改软件系统,所以能快速对客户的反馈和变更做出响应,同时快速原型模型注重与客户的沟通,所以最终开发出来的软件能够真正反映客户的需求。但这种快速原型开发方式往往是以牺牲质量为代价的。
在快速原型开发过程中,因为没有经过严谨的系统设计和规划,可靠性和性能都难以保障。所以在实际的软件项目中,针对快速原型模型快速、低质量的特点,通常有两种处理策略:抛弃策略和附加策略


(1)抛弃策略是指将原型只应用于需求分析阶段,在确认完需求后,原型将会被抛弃,而在实际开发时,将重新开发所有功能。
(2)附加策略则是指将原型应用于整个开发过程,原型一直在完善,并不断增加新功能以适应新需求,直到满足客户所有需求,最终将原型变成交付客户的软件。
  采用哪种策略来应用原型模型,要看项目特点,包括所采用的原型开发工具和技术的成熟度。如果客户对可靠性、性能要求高,那么最好使用抛弃策略,如果客户对质量要求不高,有简单功能就够了,那么最好使用附加策略
  快速原型模型之所以到现在还一直在使用,是因为它可低成本 、快速地确认需求。快速原型模型具有一些优点,如能够克服瀑布模型的缺点,减少由于软件需求不明确而带来的开发风险。这种模型适合预先不能确切定义需求的软件系统的开发。
快速原型模型也有一些缺点,,如所选用的开发技术和工具不一定符合主流的发展,快速建立起来的系统结构加上连续的修改可能会导致产品质量低下。另外,使用这个模型的前提是有一个可展示的产品原型,因此在一定程度上可能会限制开发人员的创新。

快速原型模型适用于具有以下特征的软件开发项目:
(1)已有产品或产品的原型,只需客户化的工程项目。
(2)简单而熟悉的行业或领域。
(3)有快速原型开发工具。
(4)进行产品移植或升级。

2.2.3   增量模型

  增量模型是把待开发的软件系统模块化,将每个模块作为一个增量组件,从而分批次地分析、设计、编码和测试这些增量组件。运用增量模型的软件开发过程是递增式的过程。相对于瀑布模型而言,采用增量模型进行开发,开发人员不需要一次性地把整个软件产品交付给用户,而是可以分批次进行交付。地把整个软件产品交付给用户,而是可以分批次进行交付。
  一般情况下,开发人员会首先实现提供基本核心功能的增量组件,创建一个具备基本功能的子系 增量统,然后对其进行完善、增量模型如图2-4所示。


增量模型的最大特点就是将待开发的软件系统模块化和组件化 。基于这个特点,增量模型具有以下优点
(1)将待开发的软件系统模块化,可以分批次地交付软件产品,客户可以及时了解软件项目的进展(2)以组件为单位进行开发降低了软件开发的风险。一个开发周期内的错误不会影响到整个软件系统。
(3)开发顺序灵活。开发人员可以对组件的实现顺序进行优先级排序,先完成需求稳定的核心组件。当组件的优先级发生变化时,还能及时地对实现顺序进行调整。
 

增量模型的缺点是要求待开发的软件系统可以被模块化。如果待开发的软件系统很难被模块化,那么将会给增量开发带来很多麻烦。


增量模型适用于具有以下特征的软件开发项目:
(1)软件产品可以分批次地进行交付
(2)待开发的软件系统能够被模块化。
(3)软件开发人员对应用领域不熟悉 难以一次性完成系统开发。
(4)项目管理人员把握全局的水平较高。

2.2.4   螺旋模型

螺旋模型是一种用于风险较大的大型软件项目开发的过程模型。该模型将瀑布模型快速原型模型结合起来,并且加入了这两种模型忽略的风险分析。它将每次迭代分成4个方面的活动。分别对应笛卡儿坐标系的4个象限:确定本阶段目标,选定实施方案,设定项目开发的约束条件;评估所选方案,通过构造原型和风险分析识别并消除风险,实施软件开发和验证;评价本阶段的工作成果,提出修正建议,并计划下一阶段的工作。
螺旋模型的示意如图2-5所示。

螺旋模型的优点是将风险分析扩展到各个阶段中,大幅降低了软件开发的风险。但是这种模型的控制和管理较为复杂,可操作性不强,同时对项目管理人员的要求较高。
螺旋模型强调风险分析使得开发人员和用户对每个演化层出现的风险有所了解,继而做出应有的反应,因此特别适用于庞大、复杂并具有高风险的系统。

2.2.5   喷泉模型

喷泉模型是一种过程模型同时也支持面向对象开发。喷泉模型如图2-6所示。

该模型在面向对象分析阶段,通过定义类与对象之间的关系,建立对象关系和对象行为模型。在面向对象设计阶段,从实现的角度对分析阶段模型进行修改或扩展。在编码阶段,使用面向对象的编程语言和方法实现设计阶段模型。在面向对象的方法中,分析阶段模型和设计阶段模型采用相同的符号标识体系,各阶段之间没有明显的界限,而且常常重复、迭代地进行。
“喷泉”一词体现了面向对象方法的迭代和无间隙性迭代是指各阶段需要多次重复进行,例如,面向对象分析和设计阶段常常需要多次重复进行,以更好地满足需求 无间隙性是指各个阶段之间没有明显的界限,并常常在时间上互相交叉,并行进行。喷泉模型主要用于面向对象的软件项目,软件的某个部分通常被重复多次,相关对象在每次迭代中随之加入渐进的软件成分。

2.2.6   统一软件开发过程模型

统一软件开发过程(Rational Unified Process, RUP)模型是基子UML的一种面向对象的软件
开发模型。它解决了螺旋模型的可操作性问题,采用迭代和增量递进的开发策略,并以用例驱动
为特点,集中了多个软件开发模型的优点,其模型如图2-7所示

图2-7中的纵轴以工作的内容为组织方式,表现了软件开发的工作流程系列的活动,这些活动产生的结果是可见的价值。工作流程可以分为核心工作流程和核心支持作流程。其中核心工作流程是指在整个项目中与主要注领域相关的活动的集合 在每个迭代的软件生命周期中,核心工作流程都有业务建模 需求)分析和设计、实现、测试和部署)配置与变更管理、项目管理和环境属手核心支持工作流程一它们为整个工作流程的实施提供支持。
图2-7中的横轴以时间为组织方式,表现了软件开发的4个阶段:先启、细化、构建、产品化。每个阶段都可能包含若干次迭代。这4个阶段按照顺序依次进行,每个阶段结束时都有一个主要的里程碑。实际上,可以把每个阶段看成两个主要里程碑之间的时间跨度。在每个阶段结束时都要进行阶段评估人确保该阶段目标已实现从而进入下一个阶段。统一软件开发过程模型的项目阶段和里程碑的关系如图2-8所示。 


统一软件开发过程模型是基于迭代思想的软件开发模型。在传统的瀑布模型中,项目的组织方法是使其按顺序一次性地完成每个工作流程。通常情况下,在项目前期出现的问题可能推迟到后期才会被发现,这样不仅增加了软件开发的成本】还严重影响了软件开发的进度一采用迭代的软件工程思想可以多次执行各个工作流程,有利于软件开发人员更好地理解需求、设计出合理的系统构架,并最终交付一系列渐趋完善的成果。可以说,迭代是一次完整的经过所有工作流程的过程。从图2-8中可以看到,每个阶段都包含一次或多次的迭代。
统一软件开发过程模型适用的范围极为广泛,但是对开发人员的素质要求较高。


统一软件开发过程模型适用于具有以下特征的软件开发项目:
(1)过程模型是以迭代为主要特征的。项目组的团队成员,应该对迭代的开发方式比较熟悉。
(2)面向对象的项目
(3)施目组的团队成员应该熟悉UNL,并可利用建模工具进行计划、分析、设计、测试等。
(4)项目经理应该具备风险管理的知识和技能。

2.2.9   几种模型的对比

2.2.10   几种模型之间的关系

1.瀑布模型与快速原型模型之间的关系
快速原型模型的基本思想是快速建立一个能反映用户主要需求的原型系统,在此基础上之后的每一次迭代,都可能用到瀑布模型。
快速原型模型中不但包含迭代模型的思想,而且包含瀑布模型的思想。
2. 瀑布模型与增量模型之间的关系
增量模型是把待开发的软件系统模块化,将每个模块作为一个增量组件,一个模块接着一个模块地进行开发,直到开发完所有的模块。
在开发每个模块时,通常都是采用瀑布模型,从需求分析、设计、编码和单元测试等阶段进行开发。所以增量模型中有瀑布模型,即宏观上是增量模型,微观上是瀑布模型。
增量模型也体现了迭代思想,每增加一个模块,就进行一次迭代,并执行一次瀑布模型,所以增量模型本质上是迭代的。
3.瀑布模型与统一软件开发过程模型之间的关系
在宏观上,瀑布模型是静态模型,统一软件开发过程模型(统一软件开发过程模型是迭代模型的一种)是动态模型。统一软件开发过程模型的每一次迭代,实际上都需要执行一次瀑布模型,都要经历先启、细化、构建、产品化这4个阶段,最终完成瀑布模型的整个过程。
在微观上,瀑布模型与统一软件开发过程模型都是动态模型。瀑布模型与统一软件开发过程模型在每一个开发阶段(先启、细化、构建、产品化)的内部,都需要有一个小小的迭代过程,只有进行这样的迭代,开发阶段才能做得更好。
瀑布模型与统一软件开发过程模型之间的关系可用图2-13来表述:瀑布模型中有统一软件开发过程模型,反过来,统一软件开发过程模型中也有瀑布模型。

4. 瀑布模型与螺旋模型之间的关系
螺旋模型是瀑布模型与快速原型模型的结合,快速原型模型是原型模型的简化,原型模型又是迭代模型与瀑布模型的组合,这些模型之间是相互依存、彼此关联的。
螺旋模型每一次顺时针方向旋转,相当于顺时针方向迭代一次,每次迭代都是完成了一次瀑万模型。这就是瀑布模型与螺旋模型之间的关系。
5.螺旋模型与统一软件开发过程模型之间的关系
螺旋模型与统一软件开发过程模型之间存在一些相似之处,但也有一些不同之处。

(1)相似之处
①都是迭代和增量的开发方法,强调在开发过程中不断进行反馈和调整。
②都将软件开发过程划分为多个阶段,每个阶段都有明确的目标和交付物。
③都强调风险管理和风险评估,通过不断的风险分析和风险评估来指导开发过程。
(2)不同之处
螺旋模型更加注重风险管理和迭代开发,每次迭代都包含需求分析、设计、实现和测试等阶段,每次迭代都会进行风险评估和风险管理。而统一软件开发过程模型更加注重软件工程的整体过程,包括需求分析、设计、实现、测试和维护等阶段。

 

2.2.11   如何选择软件过程模型

各种软件过程模型反映了软件生命周期表现形式的多样性。在生命周期的不同阶段也可采用不同的软件过程模型。在具体的软件开发过程中,可以选择某种软件过程模型,按照某种开发方法,使用相应的工具进行软件开发。
在选择软件过程模型时需要考虑以下几点:
(1)符合软件自身的特性,如规模、成本和复杂性等;
(2)满足软件开发进度的要求;
(3)对软件开发的风险进行预防和控制;
(4)具有计算机辅助工具的支持;
(5)与用户和软件开发人员的知识和技能匹配;
(6)有利于软件开发的管理和控制。一般来说,结构化方法和面向数据结构的万法可采用瀑布模型或增量模型进行软件开发;而面向对象的方法可采用快速原型模型、喷泉模型或统一软件开发过程模型进行软件开发。
在实际的软件开发过程中,软件过程模型并非一成不变,有时还需要针对具体的目标要求进行裁剪、修改等,从而构成完全适合开发目标要求的软件过程模型。现实中的软件系统各种各样,软件开发方式也千差万别。对于同一个问题,不同的开发组织
可能选择不同的开发模型(过程模型)去解决,开发出的软件系统也不可能完全一样。但是其基
本目标都是一致的,即应该满足用户的基本功能需求,否则,再好的软件系统也是没有意义的。

2.3   软件过程模实例

【例2-1】假设你要开发一个软件,它的功能是对73624.9385这个数开方,所得到的结果应该精确到小数点后4位。实现并测试完之后,该产品将被抛弃。你打算选用哪种软件过程模型?请说明你做出这种选择的理由。


【解析】采用瀑布模型。
原因:对这个软件的需求很明确,并且实现开方功能的算法也很成熟,因此,既无须通过快速原型模型来分析需求,也无须用快速原型模型来验证设计方案。此外,实现并测试完之后,该产品将被抛弃,因此也无须使用有助于提高软件可维护性的增量模型或螺旋模型来开发该软件。故选择采用瀑布模型。

【例2-2】某大型企业计划开发一个“综合信息管理系统”,该系统涉及销售、供应、财务、生产、人力资源等多个部门的信息管理功能。该企业的想法是按部门优先级逐个实现系统功能,采用边应用边开发的方式。对此,需要选择一种比较合适的过程模型。请对这个过程模型做出符合应用需要的选择,并说明选择理由。


【解析】采用增量模型。
原因:该企业计划开发的这个“综合信息管理系统”涉及多个部门的信息管理功能,而且希望按部门优先级逐个实现系统功能,采用边应用边开发的方式。以这种方式进行开发,采用的程模型满足增量模型的条件,因此可采用增量模型。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

╭⌒心岛初晴

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值