首页 > 代码库 > 软件开发模式

软件开发模式

对于软件系统的开发与管理,由于它们的要求各异,所 处的环境不同。因而可能采用上述不同的开发与管理方式,使用不同的程序设计语言,运用不同的开发工具与开发平台。但是一般来说,它们都遵循以下几种具体开发 模式
   1.瀑布模型
   W. Royce在1974年最早提出这一软件开发模型,它将软件开发过程中的各项目活动规定为依固定顺序连接的若干阶段工作,形如瀑布流水,最终得到软件系统软件产品。
   在瀑布模型(waterfall model)中,软件开发过程被划分成若干个互相区别而又彼此联系的阶段,每一个阶段中的工作都以上一阶段工作的结果为依据,同时也为下一个阶段的工作提供了前提,并且本阶段的工作结果也可反馈给上一个阶段,修改与重新进行上一阶段的工作。
   多年来,瀑布模型广泛流行,一是由于它在支持开发结构化软件、控制软件开发复杂度、促进软件开发工程化方面起了显著作用;二是由于它为软件开发和维护提供了一种在当时较为有效的管理 模式 。根据这一 模式 制订开发计划.进行成本预算,组织开发人员以阶段评审和文档控制为手段,有效地对软件开发过程进行指导,从而对软件的质量有一定程度的保证。
  瀑布模型在大量的实践中也暴露了它的不足和问题。以往的工作经验表明,由于固定的工作顺序,前期阶段工作中 造成的差错越到后斯阶段, 造成的损失和影响也就越大,为了纠正它而花费的代价也就越高。
   2.渐增模型
   渐增模型(incremental model)也称为有计划的产品改进模型。它从一组给定的需求开始,通过构造一系列可执行中间版本来实施开发活动。第一个中间版本纳人一部分需求,下一个中间版本纳人更多的需求,依此类推,直到系统完成。每一个中间版本都要执行必要的过程、活动和任务。例如,需求分析和体系结构设计需要执行一次,而软件的详细设计、软件的编程和测试、软件集成和软件验收测试,在每个中间版本构造过程中都要执行。
  在这种模型下开发每一个中间版本时,开发过程中的活动和任务顺序地或部分平行地使用。当相继中间版本在部分并行开发时,开发过程中的活动和任务可以在各中间版本间平行地采用。
   3.演化模型
   演化模型主要针对事先不能完整定义需求的软件项目开发,许多软件开发项目由于人们对软件需求的认识模糊,很难一次开发成功,返工再开发难以避免。为此人们对需开发的软件给出 基本 需求,作第一次试验开发,其目标仅在于探索可行性和明确项目的需求,取得有效的反馈信息,以支持软件的最终设计和实现。这种开发模型可以减少由于需求不明给开发工作带来的风险。演化模型的例子如下图 示。
   演化模型也是通过构造系统的各个可执行的中间版本来开发系统的。但与渐增型的区别是,承认需求不能被完全了解,且不能在初始时就确定,在该模型中,需求一部分被预先定义,然后在每一个相继的中间版本中逐步完善。并且,每个中间版本在开发时,开发过程中的活动和任务顺序地或 部分重叠平行地被采用。对 有的中间版本,开发过程中的活动和任务通常按同一顺序被重复使用,维护过程和运作过程可以与开发过程平行地进行。整个软件的生命过程—获取过程、供应过程、支持过程和组织过程通常与开发过程平行地进行。
   4.螺旋模型
   1988年TRW公司的B.Boehm综合瀑布模型与演化模型的特点,提出了螺旋模型(spiral model)。与前述几种开放模型相比,螺旋模型强调了软件开发过程中的风险分析与控制。该模型通常被运用于指导大型软件项目的开发,它将开放过程分为以下的四个环节:制订计划、风险分析、实施开发和 客户评估。在软件开发过程,这四个环节每完成一次,就完成了软件的一个新版本;下一个版本的进行,将在新的基础之上重复这四个环节。
   在图a中,沿着螺旋线旋转,坐标的四个象限分别表示了四个环节活动:
   (1)制订计划:确定软件目标,选定实施方案,弄清项目开发的限制条件;
   (2)风险分析:分析 选方案,考虑如何识别和消除风险;
   (3)实施开发:实施软件的开发;
   (4)客户评估:评价软件功能和性能,提供修正建议。
   沿着螺旋线每转一圈,表示开发出一个更完善的新的软件版本,如果开发风险过大,开发机构或客户无法接受,项目有可能就此终止;在多数情况下,会沿着螺旋线继续下去,自内向外逐步延伸,最终得到满意的软件产品。使用该模型需要具有相当丰富的风险评估经验和专门知识。软件风险是任何软件开发项目中普遍存在的问题,可以说任何软件项目的开发都存在一定的风险,它们的区别只是程度大小的区别而已。在项目的开发过程中,系统分析人员必须回答 需求是什么、要投人多少资源、如何安排进度等一系列问题后才能制订计划, 以判断的关键是分析人员的经验。项目越大,问题越复杂,资源、进度、成本等因素的不确定性就越大。风险分析就在于风险的识别,风险的衡量,并采取对策,从而消除或减少可能浩成的损失。 

软件开发模式