软件开发模型给出了软件开发活动各个阶段之间的关系,它是软件开发过程的概括,是软件工程的重要内容。软件开发模型为软件工程管理提供了里程碑和进度表,为软件开发过程提供了原则和方法。
一.软件开发模型概述
软件开发模型可分为三种类型:1.以软件需求完全确定为前提的瀑布模型;2.在软件开发初期只能提供基本需求是采用的迭代式开发模型(如喷泉模型,螺旋模型,统一开发过程和敏捷方法等);3是以 形式化开发方法为基础的变换模型。
1.瀑布模型
瀑布模型是一种严格定义方法,它将软件开发的过程分为软件计划、需求分析、软件设计、编码实现、软件测试,运行维护六个阶段,最终得到软件产品。
在瀑布模型中,依赖于早期进行的需求调查,不能适应需求的变化,由于是单一流程,开发中的经验教训不能反馈于本产品的过程,风险往往到后期的开发阶段才显露出来。
2.演化模型
演化模型主要针对事先不能完整定义需求的软件开发,是在快速开发一个原型的基础上,根据用户在调用原型的过程中提出的反馈意见和建议,对原型进行改进,获得原型的新版本,重复这一过程,直到演化成最终的软件产品。演化模型的主要优点是:任何功能一经开发就能进入测试,以便验证是否符合产品需求,其缺点是,如果不加以控制地让用户接触开发中尚未稳定的功能,可能对开发人员及用户都会产生负面影响。
3.螺旋模型
螺旋模型是瀑布模型与演化模型的结合,并加入两者所忽略的风险分析所建立的一种软件开发模型。螺旋模型是一种演化软件过程模型,它将原型实现的迭代特征与线性顺序模型中的控制的和系统化的方面结合起来,软件开发是一系列的增量发布。螺旋模型沿着螺线进行若干次迭代,每次迭代包括制定计划、风险分析、施工工程和客户评价4个方面的工作。
4.喷泉模型
喷泉模型是一种以用户需求为动力,以对象为驱动的模型,主要用于描述面向对象的软件开发过程。该模型认为软件开发过程自下而上的各阶段是相互重叠呵呵多次反复的,就像水喷上去又可以落下来,类似喷泉。在喷泉模型中,各活动之间无明显边界,例如,分析和设计之间就没有明显的边界。这种特性称为无间隙性。
5.变换模型
变换模型是基于形式化规格说明语言和程序变换的软件开发模型,它对形式化的软件规格说明进行一系列自动或半自动的程序变换,最后映射为计算机能够接受的软件系统。
6.智能模型
智能模型也称为基于知识的软件开发模型,它综合了上述若干模型,并把专家系统结合在一起,该模型应用基于规则的系统,采用规约和推理机制,帮助开发人员完成开发工作,并使维护在系统规格说明一级进行。
7.V模型
V模型是在快速应用开发的基础上演变而来,由于将整个开发过程中构成一个V字而得名。V模型应用在软件测试方面,和瀑布模型有一些共同的特征。V模型中的过程从左到右,描述了基本的开发过程和测试行为,其价值在于它非常明确地标明了测试过程中存在的不同级别,并清楚描述了这些测试阶段和开发过程各阶段的对应关系。
V模型强调软件开发的协作和速度,将软件实现和验证有机结合起来,在保证较高的软件质量情况下缩短开发周期。V模型适合企业级的软件开发,它更清楚地揭示了软件开发过程的特性及本质。
二.快速应用开发
快速应用开发RAD是一种比传统生命周期法快得多的开发方法,它强调极短的开发周期。RAD模型是瀑布模型的一个高速变种,通过使用基于构件的开发方法获得快速开发。
1.RAD的基本思想
RAD的基本思想主要体现在以下4个方面:
(1)让用户更主动的参与到系统分析、设计和构造活动中来。
(2)将项目开发组织成一系列重点突出的研讨会,让项目投资方、用户、系统分析师、设计人员和开发人员一起参加。
(3)通过一种迭代的构造方法,加速需求分析和设计阶段。
(4)让用户提前看到一个可以工作的系统。
2.RAD的开发阶段
RAD的业务流程主要有业务建模,数据建模,过程建模,应用生成,测试与交付。
3.RAD的特点
RAD采用基于构件的开发方法,复用已有的程序结构或使用构件,或者创建可以复用的构件。RAD通过大量使用可复用构件,加快了开发速度,但是也有一些局限性:首先,并非所有应用都适合RAD,RAD对模块化要求比较高,如果有些功能不能被模块化,那么RAD所需要的构件就会有问题。其次,开发者和客户必须在很短的时间内完成一些列需求分析;最后RAD只能适用于管理信息系统的开发,不适合技术风险很高的情况。
三.统一过程
统一过程UP是一个通用过程框架,可以用于种类广泛的软件系统,不同的应用领域、不同的组织类型、不同的性能水平和不同的项目规模,UP是基于构件的,在为软件系统建模时,使用的是UML。UP具有三个显著的特点:用例驱动,以构建为中心,迭代和增量。
1.RUP概述
RUP将项目管理、业务建模、分析与设计等统一起来,贯穿整个开发过程,采用Internet技术,可以增强团队的开发效率,并为所有成员提供最佳的软件实现方案。RUP中的软件过程在时间上被分解为4个顺序的阶段:初始阶段,细化阶段,构件阶段和交付阶段。
2.初始阶段
初始阶段的任务是为系统建立业务模型并确定项目的边界。在初始阶段必须识别所有与系统交互的外部实体,定义系统与外部实体的特性。初始阶段的实现过程包括:明确项目规模,评估项目风险,制定项目计划,阶段技术评审。
3.细化阶段
细化阶段的任务就是分析问题领域,建立完善的架构,淘汰项目中最高风险的元素。细化阶段的实施过程包括:确定架构,制定构件阶段计划,建立支持环境,选择构件,阶段技术评审。
4.构件阶段
在构件阶段,要开发所有剩余的构件和应用程序功能,把这些构件集成为产品,并进行详细测试。
5.移交阶段
当基线已经足够完善,可以安装到最终与用户实际环境中时,则进入交付阶段。交付阶段的重点是确保软件对最终用户是可以使用的。
四.敏捷方法
敏捷方法强调开发团队与用户之间的紧密协作、面对面的沟通、频繁交付新的软件版本、紧凑而自我组织型的团队,更注重人的作用。
1.敏捷宣言
敏捷宣言认为个体和交互胜过过程和工具,可工作的软件胜过大量的文档,客户合作胜过合同谈判;响应变化胜过遵循计划。敏捷方法强调让客户满意和软件尽早增量发布;小而高度自主的项目团队;非正式的方法;最小化软件工程工作产品以及整体精简开发。
目前主要的敏捷方法:极限编程XP,自适应软件开发,水晶方法,特性驱动开发FDD。
2.敏捷方法的特点
敏捷方法是一种以人为本、迭代、循序渐进的开发方法。在敏捷方法中,软件项目的构件被切分为多个子项目,各个子项目成果经过测试,具备集成和可运行的特征。虽然敏捷方法发展很快,但是也暴露出了一些问题:客户参与往往依赖于客户参与的意愿和客户自身的代表性;团队成员的性格可能不适合激烈的投入;对系统的变更做出优先级排序可能是很困难的;维护系统的简洁性往往需要额外的工作,可能没时间执行系统简化过程。
3.XP方法
敏捷方法中最有名的就是XP,XP是一种轻量级,高效,低风险,柔性,可预测的软件开发方式,适用于中小型项目软件开发团队,并且客户的需求模糊或者需求多变,与其他方法相比,具有一下不同点:
在更短的周期内,更早提出具体持续的反馈信息;迭代地进行计划编制,首先在最开始迅速生成一个总体计划,然后在整个项目开发过程中不断发展;依赖于自动测试程序来监控开发进度,及早捕获缺陷;依赖口头交流,测试和源程序进行沟通;倡导持续的演化式的设计;依赖开发团队内部的紧密合作。
XP的核心是其总结的四大价值观,沟通,简单,反馈,勇气。