软件开发模型(Software Development Model)是指软件开发全部过程、活动和任务的结构框架。软件开发包括需求、设计、编码和测试等阶段,有时也包括维护阶段。
软件开发模型能清晰、直观地表达软件开发全过程,明确规定了要完成的主要活动和任务。
1.瀑布模型
瀑布模型是经典的软件开发模型,开发过程是通过设计一系列阶段顺序展开的,从系统需求分析开始直到产品发布和维护,每个阶段都会产生循环反馈,因此,如果有信息未被覆盖或者发现了问题,那么最好 “返回”上一个阶段并进行适当的修改,项目开发进程从一个阶段“流动”到下一个阶段,每个阶段之间的依赖性强。
优点:
1)为项目提供了按阶段划分的检查点
2)当前一阶段完成后,只需要去关注后续阶段。
缺点:
1) 各个阶段的划分完全固定,阶段之间产生大量的文档,极大地增加了工作量;
2) 与用户见面晚,从而增加了开发的风险;
3) 早期的错误可能要等到开发后期的测试阶段才能发现,发现问题越晚代价越高。
适用范围:
需求很明确的软件开发项目;
在开发时间内需求没有或很少变化;
分析设计人员应对应用领域很熟悉;
低风险项目(对目标、环境很熟悉);
用户使用环境很稳定;
用户除提出需求以外,很少参与开发工作。
2.增量模型
增量模型是一种非整体开发的模型,分为两种形式:基于瀑布模型的渐增模型;基于原型的快速原型模型。
渐增模型的优点:
人员分配灵活,刚开始不用投入大量人力资源。如果核心产品很受欢迎,则可增加人力实现下一个增量客户可以不断地看到所开发的软件,从而降低开发风险。
缺点:
1) 由于各个构件是逐渐并入已有的软件体系结构中的,所以加入构件必须不破坏已构造好的系统部分,这需要软件具备开放式的体系结构。
2) 在开发过程中,需求的变化是不可避免的。增量模型的灵活性可以使其适应这种变化的能力大大优于瀑布模型和快速原型模型,但也很容易退化为边做边改模型,从而是软件过程的控制失去整体性。
快速原型模型又称原型模型,它是增量模型的另一种形式;它是在开发真实系统之前,构造一个原型,在该原型的基础上,逐渐完成整个系统的开发工作。
快速原型模型的第一步是建造一个快速原型,实现客户或未来的用户与系统的交互,用户或客户对原型进行评价,进一步细化待开发软件的需求。通过逐步调整原型使其满足客户的要求,开发人员可以确定客户的真正需求是什么;第二步则在第一步的基础上开发客户满意的软件产品。
快速原型模型的优点:
减少由于软件需求不明确带来的开发风险。
缺点:
所选用的开发技术和工具不一定符合主流的发展;快速建立起来的系统结构加上连续的修改可能会导致产品质量低下。
3.螺旋模型
螺旋模型将瀑布模型和增量模型结合起来,并加入了风险分析,主要分为四个工作步骤:
(1)制定计划:确定软件目标,选定实施方案,弄清项目开发的限制条件;
(2)风险分析:分析评估所选方案,考虑如何识别和消除风险;
(3)实施工程:实施软件开发和验证;
(4)客户评估:评价开发工作,提出修正建议,制定下一步计划。
优点:
1)设计上的灵活性,可以在项目的各个阶段进行变更;
2)以小的分段来构建大型系统,使成本计算变得简单容易;
3)客户始终参与每个阶段的开发,保证了项目不偏离正确方向以及项目的可控性;
4)随着项目推进,客户始终掌握项目的最新信息 , 从而他或她能够和管理层有效地交互;
5)客户认可这种公司内部的开发方式带来的良好的沟通和高质量的产品。
缺点:
1)采用螺旋模型需要具有相当丰富的风险评估经验和专门知识,在风险较大的项目开发中,如果未能够及时标识风险,势必造成重大损失;
2)过多的迭代次数会增加开发成本,延迟提交时间。
4.喷泉模型
喷泉模型是一种以用户需求为动力,以对象为驱动的模型,主要用于描述面向对象的软件开发过程。
优点:
该模型的各个阶段没有明显的界限,开发人员可以同步进行开发。其优点是可以提高软件项目开发效率,节省开发时间,适应于面向对象的软件开发过程。
缺点:
由于喷泉模型在各个开发阶段是重叠的,因此在开发过程中需要大量的开发人员,因此不利于项目的管理。此外这种模型要求严格管理文档,使得审核的难度加大,尤其是面对可能随时加入各种信息、需求与资料的情况。