软件过程模型

   软件过程是为了获得高质量软件所需要完成的一系列任务的框架,它规定了完成各项任务的工作步骤。

   软件过程模型是软件开发全部过程、活动和任务的结构框架。


  ︴瀑布模型  (Waterfall Model )

 软件过程模型

      特征:

             接受上一阶段的结果作为本阶段的输入,利用这一输入实施本阶段应完成的活动对本阶段的工作进行评审,将本阶段的结果作为输出,传递给  下一阶段。

      缺点:

             缺乏灵活性,难以适应需求不明确或需求经常变化的软件开发;开发早期存在的问题往往要到交付使用时才发现,维护代价大。

             1.阶段间具有顺序性和依赖性。
             2.推迟实现的观点。
             3.每个阶段必须完成规定的文档;每个阶段结束前完成文档审查,及早改正错误。

            传统的瀑布模型过于理想化。而事实上,人在工作过程中不可能不犯错误。


  ︴增量模型  (Incremental Model )

      是一种渐进地开发逐渐完善的软件版本的模型。先完成一个系统子集的开发,再按同样的开发步骤增加功能 (系统子集),如此递增下去直至满足全部系统需求。系统的总体设计在初始子集设计阶段就应作出设想。

软件过程模型

       特征:

          • 反复的应用瀑布模型的基本成分和演化模型的迭代特征,每一个线型过程产生一个“增量”的发布或提交,该增量均是一个可运行的产品。
          • 早期的版本实现用户的基本需求,并提供给用户评估的平台。


        优点:
          1.在较短时间内向用户提交可完成部分工作的产品,并分批、逐步地向用户提交产品。从第一个构件交付之日起,用户就能做一些有用的工作。
          2.整个软件产品被分解成许多个增量构件,开发人员可以一个构件一个构件地逐步开发。
          3.逐步增加产品功能可以使用户有较充裕的时间学习和适应新产品,从而减少一个全新的软件可能给客户组织带来的冲击。
          4.采用增量模型比采用瀑布模型和快速原型模型需要更精心的设计,但在设计阶段多付出的劳动将在维护阶段获得回报。

       缺点:

          1.在把每个新的增量构件集成到现有软件体系结构中时,必须不破坏原来已经开发出的产品。此外,必须把软件的体系结构设计得便于按这种方式进行扩充,向现有产品中加入新构件的过程必须简单、方便,也就是说,软件体系结构必须是开放的。

          2.开发人员既要把软件系统看作整体。又要看成可独立的构件,相互矛盾。

          3.多个构件并行开发,具有无法集成的风险。


 ︴原型模型  (Prototype Model )

      原型是预期系统的一个可执行版本,它反映了系统性质(如功能、计算结果等)的一个选定的子集。一个原型不必满足目标软件的所有约束,其目的是能快速、低成本地构建原型。
      原型方法从软件工程师与客户的交流开始,其目的是定义软件的总体目标,标识需求。然后快速制订原型开发的计划,确定原型的目标和范围,采用快速设计的方式对其建模,并构建原型。
     被开发的原型应交付给客户试用,并收集客户的反馈意见,这些反馈意见可在下一轮迭代中对原型进行改进。在前一个原型需要改进,或者需要扩展其范围的时候,进入下一轮原型的迭代开发。

软件过程模型

        原型的类型:
               探索型(exploratory prototyping)
                      其目的是要弄清目标系统的要求,确定所希望的特性,并探讨多种方案的可行性
               实验型(experimental prototyping)
                      其目的是验证方案或算法的合理性,它是在大规模开发和实现前,用于考核方案是否合适,规格说明是否可靠。
               演化型(evolutionary prototyping)
                      其目的是将原型作为目标系统的一部分,通过对原型的多次改进,逐步将原型演化成最终的目标系统。 

         原型的使用策略:
                废弃(throw away)策略
                      主要用于探索型和实验型原型的开发。
                追加(add on)策略
                      主要用于演化型原型的开发。
         注 :原型可作为单独的过程模型使用,它也常被作为一种方法或实现技术应用于其它的过程模型中。


 ︴螺旋模型 

        螺旋模型将瀑布模型和增量模型结合起来,加入了风险分析。在该模型中,软件开发是一系列的增量发布,早期的迭代中,发布的增量可能是一个纸上的模型或原型,在以后的迭代中,逐步产生系统更加完善的版本。

        螺旋模型的基本思想是降低风险。

软件过程模型

       特征:
             风险驱动,需要相当丰富的风险评估经验和专门知识,否则风险更大;主要适用于内部开发的大规模软件项目,随着过程的进展演化,开发者和用户能够更好的识别和对待每一个演化级别上的风险;随着迭代次数的增加,工作量加大,软件开发成本增加 。

        优点:
               对可选方案和约束条件的强调有利于已有软件的重用,也有助于把软件质量作为软件开发的一个重要目标;减少了过多测试或测试不足;维护和开发之间并没有本质区别。


 ︴喷泉模型  (Fountain Model )

软件过程模型

        特征:
              主要用于支持面向对象开发过程体现了软件创建所固有的迭代和无间隙的特征。

 ︴基于构件的开发模型
  • 支持软件复用(reuse)
  • 利用预先包装好的软件构件(包括组织内部开发的构件和商品化的、现存COTS构件)来构造应用系统
  • 基于构件的开发模型对提高软件生产率、提高软件质量、降低成本、提早上市时间起到很大的作用。
 软件过程模型



总结
 
软件软过程模型
特点 适合的软件项目
瀑布模型 简单,分阶段,阶段间有因果关系,每个阶段完成后有评审,
允许反馈,不支持用户参与,要求需求可预先确定
需求易于完善定义且不易变动的软件系统
原型模型 不要求需求的预先完备定义,支持用户参与,支持需求的渐进式完善和确认,
能够适应用户需求变化
快速复杂,难以确定,动态变化的软件系统
增量模型 软件产品是被增量式的一块块开发的,开发活动允许并行和重叠 技术风险较大、用户需求较为稳定的软件系统
螺旋模型 结合了瀑布模型原型模型和迭代模型的思想,并引进了风险分析活动 用户需求难以获取和确定,软件开发风险较大的软件系统
…… …… ……



    人