瀑布模型
瀑布模型严格遵守软件生命周期各阶段的固定顺序,上一阶段完成后才能进入下一阶段,整个模型就像一个飞流直下的瀑布。

1 2 3 4 5 6 7 8 9
| 优点: 可强迫开发人员采用规范的方法 严格规定了各阶段必须提交的文档 要求每个阶段结束后,都要进行严格评审
缺点: 过于理想化 缺乏灵活性 无法再开发过程中逐步明确用户无法表达准确的需求
|
瀑布V模型
瀑布V模型是瀑布模型的一种变体。在开发过程中任一阶段都可能引入缺陷,最后的测试只能在交付前发现更多的缺陷。瀑布V模型强调了测试。

1 2 3 4 5 6
| 优点: 瀑布V模型不但保证了瀑布模型的阶段式文档驱动的特点,更强调了软件产品的验证工作
缺点: 需求分析集中在项目开始,而一旦需求不准确,存在偏差,之后的设计、实现、验证会放大偏差。 瀑布模型后期维护工作相当繁重,而这些维护工作大都是修正需求阶段引入的缺陷,这个问题是瀑布模型难以克服的。
|
快速原型模型
快速原型是指在计算机上快速建立可以运行的程序或者界面。让用户能尽快了解系统的概貌,一旦用户确认了原型,就可以快速按照原型开发出满足用户真实需求的软件产品。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| 特点: 引入了迭代的概念 强调用户参与 在用户需求分析、系统功能描述、系统实现方法等方面允许有较大的灵活性,可以逐步完善。 可以用来评价几种不同的设计方案 可以用来建立系统的某个部分 不排斥传统生命周期的有效的方法和工具,与传统方法互为补充。
动态定义需求,适用于需求不明确的项目。
不适合使用原型法的情况: 缺乏使用的原型开发工具 用户不参与、不积极配合开发过程 用户的数据资源缺乏组织和管理 用户的软件资源缺乏组织和管理
|
演化模型
演化模型也是一种原型化的开发方法。
1 2 3
| 快速原型模型中,原型的用途是获取用户的真实需求,一旦需求确定了,原型就被抛弃,是一种“抛弃式”的原型化方法。 演化模型中,则是从初始模型逐步演化为最终软件产品的渐进过程,是一种“渐进式”的原型化方法。 一个演化模型可以看做若干次瀑布模型的迭代。
|
增量模型
增量模型是第三种原型化开发方法,它既不是“抛弃式”的,也不是“渐进式”的,而是“递增式”的。
1 2 3 4 5 6 7
| 在系统的技术架构成熟、风险较低的时候,可以采用增量的方式进行系统开发, 这样可以提前进行集成测试和系统测试,缩短初始版本的发布周期,提高用户对系统的可见度,降低系统的风险。 第一版本往往是系统的核心功能,可以满足用户最基本的需求。之后增量版本的功能逐步丰富、完善。
注意: 每一个版本都是一个完整的、可用的版本 版本间的增量要均匀
|
螺旋模型
螺旋模型结合了瀑布模型和演化模型的有点,不仅体现了两个模型的优点,而且还强调了其他模型均忽略了的风险分析。
螺旋模型在“瀑布模型”的每一个开发阶段前,引入一个非常严格的风险识别、风险分析和风险控制。它把软件项目分解成一个个小项目,每个小项目都标识一个或多个主要风险,直到所有的主要风险因素都被确定。
螺旋模型特别适用于庞大而复杂、具有高风险的系统。

1 2 3 4 5 6
| 优点: 螺旋模型支持需求的动态变化,为用户的关键决策提供了方便,有助于需求准确性;为项目管理决策调整提供了便利,从而降低软件开发风险。
缺点: 需要具有相当丰富的风险评估经验和专业知识,如果未能及时标识风险,势必会造成重大损失。 过多的迭代次数会增加开发成本,延迟提交时间。
|
构件组装模型
利用软构件进行搭积木的方式开发。

1 2 3 4 5 6 7 8 9 10
| 优点: 让系统扩展更容易 构件更容易被重用,降低软件开发成本 构件粒度较小,开发任务更灵活,可用若干小组并行开发。
缺点: 需要经验丰富的架构师,设计不好的构件难以实现构件的优点,降低构件组装模型的重用度。 在考虑重用度的时候,往往会在其他方面让步,比如性能。 使用构件的时候,要求开发人员熟练掌握构件,增加了开发人员的学习成本。 第三方构件的质量难以掌握,且会最终影响软件的质量。
|