过程是软件工程的基础。过程构成了软件项目管理控制的基础,建立一个环境以便于技术方法的采用,工作产品的产生,里程碑的建立,质量的保证,正常变更的正确管理。过程框架定义了定义了若干小的框架活动,为完整的软件开发过程建立了基础。框架中的每个活动都由一组工程动作,每个动作包括一系列的的任务并产生一个工作产品,每个工作任务完成一部分软件工程动作所定义的工作。
惯例过程模型
惯例过程模型定义包含活动,动作,任务,里程碑和工作产品在内的明确集合,是高质量软件开发所必需的。这些过程模型虽然不是完美的,但是确实为软件工程工作提供了有用的路线图。
惯例,规定了一套过程元素——框架活动,软件工作动作,任务,工作产品,质量保证以及每个项目的变更控制机制。
(1)瀑布模型
瀑布模型又叫经典生命周期,它提出了一个系统的、顺序的开发方法,从用户需求规格说明开始,通过策划、建模、构建和部署的过程,最终提供一个完整的软件并提供持续的技术支持。它是软件工程最早的范例。因为实际生产中的项目很少遵守瀑布模型提出的顺序,所以随着项目的推进,变更可能带来混乱;瀑布模型需要客户明确需求,但通常客户难以清楚描述他们的所有需求,这样,瀑布模型很难适应很多项目开始阶段的不确定性;项目接进尾声时,客户才能得到可执行的程序。如果在可执行程序评审之间没有发现系统中的重大缺陷,将可能造成惨重损失。
(2)增量过程模型
增量模型以迭代方式运用瀑布模型。随着时间的推移,增量模型在每个阶段运用线性序列,每个线性序列产生一个软件的可交付增量。增量模型的第一个增量往往是核心产品,满足了基本需求。其他一些附加的特性,客户使用访核心产品或者进行仔细评价,并根据评价结果制定下一个增量计划。
(3)RAD模型
Rapid Application Development,快速应用程序开发是一种侧重于短暂的开发周期的增量软件过程模型。是瀑布模型的高速变体。RAD的不足:对于大型可伸缩的项目,RAD需求大量的人力资源来创建多个独立的RAD团队;如果没有为短时间内急速完成整个系统做好准备,项目将失败;如果不能合理的模块化,RAD构件建立会有很多问题;如果系统需求是高性能,且需要通过高速构件接口的方式来提高性能,不能采用RAD模型;技术风险很高的情况下,不宜采用RAD。
个人理解:在RAD模型应用中,有两个重要的前提条件:一个严格的时间控制,另一个是可复用的模块。RAD是瀑布模型的高速变体,从开始到交付,会对整个系统进行主要功能的分解,主要功能由RAD团队并行同步开发,这样实现了人月的统筹方法。各个RAD团队的相关条件应该持平。在分配的功能内,使用可复用的模块,能保证开发的同步进行,且能尽量保证在最后的集成阶段的统一。但RAD模型中投入的人力很大,且对多团队的开发统筹要求严格。对于客户要求紧急,且软件开发公司实力强大,那么这一模型是非常适合的。
演化过程模型
在软件的开发过程中,业务和产品需求经常发生变化,直接导致最终产品难以实现。严格的交付时间使用开发团队不可能圆满完成软件产品,但必须交付功能有限的版本以应对竞争或商业压力;核心产品和系统需求很好的理解了,但产品或系统扩展的细节问题没有定义。那么为了应对这种情况,需要一种不断演化的软件产品过程模型。
演化模型是迭代的过程模型,使得软件开发人员能够逐步开发完更完整的软件版本。
(1)原型开发
客户提供了软件的基本功能,但没有详细定义输入,处理和输出需求。另一种情况,开发人员对算法效率,操作系统兼容性等不确定。那么原型开发是最好的解决方法。
快速设计产生一个原型,对原型部署,然后由客户或用户进行评价。根据反馈,进一步细化软件需求,在原型系统不断调整以满足用户需求的过程中,采用迭代技术,同时也使开发者逐步清楚用户需求。
个人理解:原型模型开发最主要的目的可能有两个:
1 客户需求模糊,对于客户来说需求是模糊的,那对于开发者来说更模糊。也就是需求对双方来说都是不确定的,可能仅有主要的,大的功能比较确定。那在这种情况下,建立一个原型,为客户提供可参考的需求问题的模板,使用户可以完善需求。
2 客户的需求是确定的,但时间要求很严格,紧迫。那么在双方协定下,可以快速建立一个实现主要功能的原型,但因为各种原因不能达到RAD模型开发的条件,那么建立原型以适应这种情况。然后在原型开发完毕,部署之后再进一步迭代是一种解决办法。
对于第一个目的,除非全新的业务软件开发,否则现实中有很多这样的实例可以用于原型参考。
(2)螺旋模型
螺旋模型结合了原型的迭代性质和瀑布模型的系统性和可控性特点。
螺旋模型是一种风险驱动型过程模型生成器,对于软件集中的系统,它可以指导多个共利益者的协同工作。它有两个显著的特点。一是采用循环的方式逐步加深系统定义和实现的深度,同时降低风险。二是确定一系列里程碑,确保共利益者都支持可行的和令人满意的系统解决方案。
螺旋模型被分割成一系列由软件工程团队定义的框架活动。每个框架活动代表螺旋上的一个片段。随着演进过程开始,从圆心开始顺时针方向,软件团队执行螺旋上的一圈表示的活动。
螺旋模型是开发大型系统和软件的理想方法。螺旋模型要求在项目的所有阶段始终考虑技术风险,如果适当应用该方法,能够在风险变为问题之前化解风险。
(3)协同开发模型
协同开发模型,有时候叫协同工程,可以表示为一系列框架活动,软件工程动作和任务以及相应的状态。对于协同过程模型中建模活动的某一软件工程任务,在某一特定时间,建模活动可能处于一种状态。其他活动或任务可用类似的方法表示。所有活动同时存在并处于不同的状态。