过程模型总分为五大类:
1.惯例过程模型
2.瀑布模型(又叫作生命周期模型)
3.增量过程模型: 包括增量模型、RAD模型
4.演化过程模型: 包括 原型开发模型、螺旋模型、协同开发模型
5.专用过程模型: 包括 基于构件的开发模型、形式化方法模型、面向方面的软件开发模型
(参考文献:软件工程-实践者的研究方法 (美)Poger S.Pressman )
下面,详细的阐述一下各种软件过程模型的优缺点、适用范围和各模型显著特点
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
1.瀑布模型
它提出了软件开发的系统化的、顺序的方法。其流程从系统开始,随后是需求分析、设计、编码、测试、支持。这种模型是最早也是应用最广泛的软件过程模型(虽然这种模型会引起“堵赛状态”)。
优点:
1.它提供了一个模板,这个模板使得分析、设计、编码、测试和支持的方法可以在该摸板下有一个共同的指导。
2.虽然有不少缺陷但比在软件开发中随意的状态要好得多。
缺点:
1.实际的项目大部分情况难以按照该模型给出的顺序进行,而且这种模型的迭代是间接的,这很容易由微小的变化而造成大的混乱。
2.经常情况下客户难以表达真正的需求,而这种模型却要求如此,这种模型是不欢迎具有二义性问题存在的。
3.客户要等到开发周期的晚期才能看到程序运行的测试版本,而在这时发现大的错误时,可能引起客户的惊慌,而后果也可能是灾难性的。
4.采用这种线性模型,会经常在过程的开始和结束时碰到等待其他成员完成其所依赖的任务才能进行下去,有可能花在等待的时间比开发的时间要长。我们称之为“堵赛状态”。
适用范围:
1. 用户的需求非常清楚全面,且在开发过程中没有或很少变化
2. 开发人员对软件的应用领域很熟悉
3. 用户的使用环境非常稳定
4. 开发工作对用户参与的要求很低
显著特点:
按工序将问题化简,将功能的实现与设计分开,便于分工协作
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
2.增量模型
这种模型融合了线性顺序模型的基本成份和原型实现模型的迭代特征。增量模型采用随着日程时间的进展而交错的线性序列。每一个线性序列产生软件的一个可发布的“增量”。当使用增量模型时,第一个增量往往是核心的产品,也就是说第一个增量实现了基本的需求,但很多补充的特征还没有发布。客户对每一个增量的使用和评估,都做为下一个增量发布的新特征和功能。这个过程在每一个增量发布后不断从复,直到产生了最终的完善产品。增量模型强调每一个增量均发布一个可操作的产品。
优点:
1.采用增量模型的优点是人员分配灵活,刚开始不用投入大量人力资源
2.如果核心产品很受欢迎,则可增加人力实现下一个增量
3.可先发布部分功能给客户,对客户起到镇静剂的作用
缺点:
1.并行开发构件有可能遇到不能集成的风险,软件必须具备开放式的体系结构
2.增量模型的灵活性可以使其适应这种变化的能力大大优于瀑布模型和快速原型模型,但也很容易退化为边做边改模型,从而是软件过程的控制失去整体性
适用范围:
1.进行已有产品升级或新版本开发,增量模型是非常适合的
2.对完成期限严格要求的产品,可以使用增量模型
3.对所开发的领域比较熟悉而且已有原型系统,增量模型也是非常适合的
显著特点:
引进了增量包的概念,无须等到所有需求都出来,只要某个需求增量包出来即可进行开发
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
3.螺旋模型
这是一个演化软件过程模型,它将原型实现的迭代特征和线性顺序模型中控制的和系统化的方面结合起来。使得软件的增量版本的快速开发成为可能。在螺旋模型中,软件开发是一系列的增量发布。在每一个迭代中,被开发系统的更加完善的版本逐步产生。螺旋模型被划分为若干框架活动,也称为任务区域
优点:
1.设计上的灵活性,可以在项目的各个阶段进行变更
2.以小的分段来构建大型系统,使成本计算变得简单容易
3.客户始终参与每个阶段的开发,保证了项目不偏离正确方向以及项目的可控性
4.随着项目推进,客户始终掌握项目的最新信息 , 从而他或她能够和管理层有效地交互
5.客户认可这种公司内部的开发方式带来的良好的沟通和高质量的产品
缺点:
1.采用螺旋模型需要具有相当丰富的风险评估经验和专门知识,在风险较大的项目开发中,如果未能够及时标识风险,势必造成重大损失
2.过多的迭代次数会增加开发成本,延迟提交时间
3.很难让用户确信这种演化方法的结果是可以控制的。建设周期长,而软件技术发展比较快,所以经常出现软件开发完毕后,和当前的技术水平有了较大的差距,无法满足当前用户需求
适用范围:
对于新近开发,需求不明确的情况下,适合用螺旋模型进行开发,便于风险控制和需求变更,螺旋模型只适合于大规模的软件项目
显著特点:
引入了其他模型不具备的风险分析,使软件在无法排除重大风险时有机会停止,以减小损失
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
4.RAD模型
快速应用开发(RAD)是一个线性顺序的软件开发模型,强调极短的开发周期。RAD 模型是线性顺序模型的一个“高速”变种,通过使用基于构件的建造方法获得了快速开发
优点:
1.开发速度快,质量有保证
2.对信息系统特别有效
缺点:
1.对大型项目而言,RAD需要足够的人力资源
2.开发者和客户都要实现承诺,否则将导致失败
3.并非所有系统都适合:不能合理模块化的系统、高性能需求并且要调整构件接口的系统均不适合
适用范围:
1.不适合技术风险很高的开发,不适合系统需求是高性能,并且需要通过调整构件接口的方式来提高性能的产品开发。
2.适用于工期紧张,又可细分功能,还要有合适的构件
显著特点:
使用基于构件的建造方法获得了快速开发,使得一个开发组能够在很短时间内(如60 到90 天)创建出“功能完善的系统”
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
5.迭代模型
迭代包括产生产品发布(稳定、可执行的产品版本)的全部开发活动和要使用该发布必需的所有其他外围元素。在某种程度上,开发迭代是一次完整地经过所有工作流程的过程:需求分析、设计、实施和测试工作流程。实质上,它类似小型的瀑布式项目。RUP认为,所有的阶段都可以细分为迭代。每一次的迭代都会产生一个可以发布的产品,这个产品是最终产品的一个子集
优点:
1.降低了在一个增量上的开支风险。如果开发人员重复某个迭代,那么损失只是这一个开发有误的迭代的花费
2.降低了产品无法按照既定进度进入市场的风险。通过在开发早期就确定风险,可以尽早来解决而不至于在开发后期匆匆忙忙
3.加快了整个开发工作的进度。因为开发人员清楚问题的焦点所在,他们的工作会更有效率
4.由于用户的需求并不能在一开始就作出完全的界定,它们通常是在后续阶段中不断细化的。因此,迭代过程这种模式使适应需求的变化会更容易些
缺点:
在项目早期开发可能有所变化 ,需有一个高素质的项目管理者和一个高技术水平的开发团队
适用范围:
1.在项目开发早期需求可能有所变化
2.分析设计人员对应用领域很熟悉
3.高风险项目
4.用户可不同程度地参与整个项目的开发过程
5.使用面向对象的语言或统一建模语言
6.使用CASE工具
7.具有高素质的项目管理者和软件研发团队
显著特点:
能显著减少风险