软件开发模型是指软件开发全部过程、活动和任务的结构框架,它能清晰、直观地表达软件开发全过程,明确规定了主要活动和任务,是软件项目工作的基础。
一、瀑布模型
1.概念
最早出现的软件开发模型,核心思想是按工序化简问题,将功能实现与设计分开,便于分工协作。将软件生命周期划分为制定计划、需求分析、软件设计、程序编写、软件测试和运行维护等六个基本活动,并且规定了它们自上而下、相互衔接的固定次序,逐级下落。
2.优点
a.为项目提供按阶段划分的检查点
b.当前一阶段完成后,只需要去关注后续阶段
c.可在迭代模型中应用
3.缺点
a.项目各个阶段间极少有反馈
b.在项目生命周期的后期才能看到结果
c.通过过多的强制完成日期和里程碑来跟踪各个项目阶段

二、迭代模型
1.概念
某种程度上,开发迭代是一次完整地经过所有工作流程的过程:(至少包括)需求工作流程、分析设计工作流程、实施工作流程和测试工作流程。
2.使用条件
a.项目开发早期需求可能有所变化
b.分析设计人员对应用领域很熟悉
c.高风险项目
d.用户可不同程度地参与整个项目的开发过程
e.使用面向对象的语言或统一建模语言
f.使用CASE工具,如Rose
g.具有高素质的项目管理者和软件研发团队
3.优点(与瀑布模型相比)
a.降低在一个增量上的开支风险
b.降低产品无法按照既定进度进入市场的风险
c.加快整个开发工作的进度
d.由于用户的需求并不能在一开始就作出完全的界定,它们通常是在后续阶段中不断细化的。因此,迭代过程这种模式使适应需求的变化会更容易些。

三、螺旋模型
适合于大型复杂的系统和新近开发,需求不明确的情况。由风险驱动,强调可选方案和约束条件从而支持软件的重用,有助于将软件质量作为特殊目标融入产品开发之中。
1.限制条件
a.往往适应于内部的大规模软件开发
b.软件开发人员应擅长寻找可能的风险,准确地分析风险,否则将会带来更大的风险
2.缺点
难以让用户相信结果是可控制的。建设周期长,而软件技术发展比较快,容易出现软件开发完毕后,和当前的技术水平有较大的差距,无法满足当前用户需求。
