瀑布模型
传统的瀑布模型
Link to original
实际的瀑布模型
Link to original
特点:
- 阶段间具有顺序性和和依赖性。
- 推迟实现的观点。
- 质量保证的观点:
- 每个阶段必须完成规定的文档。
- 每个阶段结束前都要对所完成的文档进行评审,以便尽早发现问题,改正错误。
- 文档驱动
优点: - 原理简单,容易掌握。
- 各阶段间都有验证和确认,以便进行质量管理。
- 主要用于支持结构化方法。
缺点: - 缺乏灵活性,不能适应用户需求的变化。
- 缺乏演化性,返回上一级的开发需要付出十分高昂的代价。
- 是线性的软件开发模型,回溯性很差。
适用情况:需求明确、变更少的项目。
快速原型模型
快速原型模型
Link to original
特点:
- 快速构建原型
- 用户参与使用反馈
- 反复迭代
优点: - 增强了开发者与用户间的交流,有助于满足用户的真实需求。
- 用户可尽早得到有用的产品,及时发现问题,随时纠正错误。
- 减小技术、应用风险,降低开发费用,缩短开发时间。
缺点: - 为了使原型尽快地工作,没有考虑软件的总体质量和长期的可维护性。
- 为了演示,可能采用不合适的操作系统、编程语言、效率低的算法,这些不理想的选择成了系统的组成部分。
- 开发过程不便于管理。
适用情况:需求不明确,创新性强的项目
增量模型
增量模型
Link to original
特点:
- 软件被分解为多个增量构件,开发人员分批地逐步向用户提交产品。
优点: - 分批次提交软件,方便用户及时了解软件进度,及早发现问题。
- 以构件为单位进行开发,开发人员可以逐步开发,降低软件开发风险。
- 开发顺序灵活,优先级最高的服务首先交付。
缺点: - 没有整个软件系统的完整需求定义,会给总体设计带来麻烦。
- 在把每个新的增量构件集成到现有软件结构中时,必须不破坏原来已开发出的产品,具有无法集成的风险。
适用情况:需求逐步明确、软件体系架构开放。
螺旋模型

特点:
- 风险驱动
优点: - 对可选方案和约束条件的强调有利于已有软件的重用,也有助于把软件质量作为软件开发的一个重要目标。
- 减少了过多测试或测试不足。
- 维护和开发之间并没有本质区别。
缺点: - 软件开发人员需要具有丰富的风险评估经验和专门知识,否则风险更大。
适用情况:大型、高风险项目。
喷泉模型

特点:
- 不同阶段的源泉相互重叠,两个活动之间存在交迭
- 保证了在各项开发活动之间的无缝过渡,在软件分析、设计和编码等各项开发活动之间并不存在明显的边界。
- 强调增量开发
- 对象驱动
适用情况:面向对象的项目。