软件开发模型(Software Development Model)是指软件开发全部过程、活动和任务的结构框架。那么软件开发模型有哪些?各有什么特点?
1、原型模型
典型的原型开发方法模型。适用于需求不明确的场景,可以帮助用户明确需求。
2、瀑布模型
瀑布模型是将软件生存周期中的各个活动规定为依线性顺序连接的若干阶段的模型,包括需求分析、设计、编码、运行与维护。 瀑布模型的特点是容易理解,管理成本低,每个阶段都有对应的成果产物,各个阶段有明显的界限划分和顺序要求,一旦发生错误,整个项目推倒重新开始。
适用于需求明确的项目,一般表述为需求明确、或二次开发,或者对于数据处理类型的项目。
3、增量模型
融合了瀑布模型的基本成分和原型实现的迭代特征,可以有多个可用版本的发布,核心功能往往最先完成,在此基础上,每轮迭代会有新的增量发布,核心功能可以得到充分测试。强调每一个增量均发布一个可操作的产品。
4、螺旋模型
典型特点是引入了风险分析。结合了瀑布模型和演化模型的优点,最主要的特点在于加入了风险分析。它是由制定计划、风险分析、实施工程、客户评估这一循环组成的,它最初从概念项目开始第一个螺旋。
5、V模型
强调测试贯穿项目始终,而不是集中在测试阶段。是一种测试的开发模型。
6、喷泉模型
典型的面向对象的模型。特点是迭代、无间隙。会将软件开发划分为多个阶段,但各个阶段无明显界限,并且可以迭代交叉。
7、快速应用开发RAD
概念:RAD是瀑布模型的一个高速变种,适用比传统生命周期快得多的开发方法,它强调极短的开发周期,通常适用基于构件的开发方法获得快速开发。
过程:业务建模,数据建模,过程建模,应用生成,测试与交付。
适用性:RAD对模块化要求比较高,如果某项功能不能被模块化,则其构件就会出问题;如果高性能是一个指标,且必须通过调整结构使其适应系统构件才能获得,则RAD也有可能不能奏效;RAD要求开发者和客户必须在很短的时间完成一系列的需求分析,任何一方配合不当都会导致失败;RAD只能用于管理信息系统的开发,不适合技术风险很高的情况。
8、构件组装模型
9、统一过程(在软考中UP、RUP都指统一过程)
典型特点是用例驱动、以架构为中心、迭代和增量。统一过程把一个项目分为四个不同的阶段:
构思阶段(初始阶段):包括用户沟通和计划活动两个方面,强调定义和细化用例,并将其作为主要模型。
(1)项目蓝图文档(核心需求,关键特性,主要约束)
(2)用例模型
(3)项目计划
细化阶段:包括用户沟通和建模活动,重点是创建分析和设计模型,强调类的定义和体系结构的表示。
(1)完成架构设计
(2)淘汰高风险元素
构建阶段:将设计转化为实现,并进行集成和测试。
(1)UML模型
(2)测试用例
移交阶段:将产品发布给用户进行测试评价,并收集用户的意见,之后再次进行迭代修改产品使之完善。
(1)可运行的软件产品
(2)用户手册
(3)用户支持计划
10、敏捷开发
敏捷开发是一种以人为核心、迭代、循序渐进的开发方法,适用于小团队和小项目,具有小步快跑的思想。常见的敏捷开发方法有极限编程法、水晶法、并列争球法和自适应软件开发方法。
极限编程XP是一种轻量级的开发方法,它提出了四大价值观:沟通、简单、反馈、勇气。五大原则:快速反馈、简单性假设、逐步修改、提倡更改、优质工作。十二个最佳实践:计划游戏、隐喻、小型发布、简单设计、测试先行、重构、结对编程、集体代码所有制、持续集成、每周工作40小时、现场客户和编码标准。
水晶法强调经常交付,认为每一种不同的项目都需要一套不同的策略、约定和方法论。
并列争球法的核心是迭代、增量交付,按照30天进行迭代开发交付可实际运行的软件。
自适应软件开发(ASD方法)的核心是三个非线性的,重叠的开发阶段:猜测、合作、学习。
开放式源码,这里提到的开放式源码指的是开放源码界所用的一种运作方式。开放式源码项目有一个特别之处,就是程序开发人员在地域上分布很广,这使得它和其他敏捷方法不同,因为一般的敏捷方法都强调项目组成员在同一地点工作。开放源码的一个突出特点就是查错排障(debug)的高度并行性,任何人发现了错误都可将改正源码的“补丁”文件发给维护者。然后由维护者将这些“补丁”或是新增的代码并入源码库。
11、Coad的功用驱动开发方法(FDD-Feature Driven Development)
FDD是由Jeff De Luca和大师Peter Coad提出来的。像其他方法一样,它致力于短时的迭代阶段和可见可用的功能。在FDD中,一个迭代周期一般是两周。
在FDD中,编程开发人员分成两类:首席程序员和“类”程序员(class owner)。首席程序员是最富有经验的开发人员,他们是项目的协调者、设计者和指导者,而“类”程序员则主要做源码编写。