一.什么是软件开发模型
软件开发模型(Software Development Model)是指软件开发全部过程、活动和任务的结构框架。软件开发包括需求、设计、编码和测试等阶段,有时也包括维护阶段。
软件开发模型能清晰、直观地表达软件开发全过程,明确规定了要完成的主要活动和任务,用来作为软件项目工作的基础。对于不同的软件系统,可以采用不同的开发方法、使用不同的程序设计语言以及各种不同技能的人员参与工作、运用不同的管理方法和手段等,以及允许采用不同的软件工具和不同的软件工程环境。
二.主要软件模型介绍
1.瀑布模型
按工序将问题化简,将功能的实现与设计分开,便于分工协作,即采用结构化的分析与设计方法将逻辑实现与物理实现分开。将软件生命周期划分为制定计划、需求分析、软件设计、程序编写、软件测试和运行维护等六个基本活动,
并且规定了它们自上而下、相互衔接的固定次序。
优点
为项目提供了按阶段划分的检查点。
当前一阶段完成后,您只需要去关注后续阶段。
可在迭代模型中应用瀑布模型。
它提供了一个模板,这个模板使得分析、设计、编码、测试和支持的方法可以在该模板下有一个共同的指导。
缺点
各个阶段的划分完全固定,阶段之间产生大量的文档,极大地增加了工作量。
由于开发模型是线性的,用户只有等到整个过程的末期才能见到开发成果,从而增加了开发风险。
通过过多的强制完成日期和里程碑来跟踪各个项目阶段。
瀑布模型的突出缺点是不适应用户需求的变化。
适用场景:面向过程、需求明确、低风险项目
2.V模型(瀑布模型的变种)
通过开发和测试同时进行的方式来缩短开发周期,提高开发效率。
优点
适用于功能很明确的项目,先有测试案例,开发出的程序通过测试案例进行验证
缺点
V模型仅仅把测试过程作为在需求分析、系统设计及编码之后的一个阶段,忽视了测试对需求分析,系统设计的验证,需求的满足情况一直到后期的验收测试才被验证。
3.原型模型
增量模型的另一种形式;在开发真实系统之前,构造一个原型,在该原型的基础上,逐渐完成整个系统的开发工作。
优点
克服瀑布模型的缺点,减少由于软件需求不明确带来的开发风险。
缺点
所选用的开发技术和工具不一定符合主流的发展;快速建立起来的系统结构加上连续的修改可能会导致产品质量低下。
4.螺旋模型(原型+瀑布)
螺旋模型基本做法是在“瀑布模型”的每一个开发阶段前引入一个非常严格的风险识别、风险分析和风险控制,它把软件项目分解成一个个小项目。每个小项目都标识一个或多个主要风险,直到所有的主要风险因素都被确定。
优点
设计上的灵活性,可以在项目的各个阶段进行变更。
以小的分段来构建大型系统,使成本计算变得简单容易。
客户始终参与每个阶段的开发,保证了项目不偏离正确方向以及项目的可控性。
随着项目推进,客户始终掌握项目的最新信息 , 从而他或她能够和管理层有效地交互。
客户认可这种公司内部的开发方式带来的良好的沟通和高质量的产品。
缺点
很难让用户确信这种演化方法的结果是可以控制的。建设周期长,而软件技术发展比较快,所以经常出现软件开发完毕后,和当前的技术水平有了较大的差距,无法满足当前用户需求。
适用场景:对于新近开发,需求不明确的情况下,适合用螺旋模型进行开发,便于风险控制和需求变更。
5.敏捷开发方法
敏捷开发以用户的需求进化为核心,采用迭代、循序渐进的方法进行软件开发。在敏捷开发中,软件项目在构建初期被切分成多个子项目,各个子项目的成果都经过测试,具备可视、可集成和可运行使用的特征。
优点
个体和交互胜过过程和工具
可以工作的软件胜过面面俱到的文档
客户合作胜过合同谈判
响应变化胜过遵循计划
缺点
敏捷注重人员的沟通,忽略文档的重要性,若项目人员流动大太,又给维护带来不少难度,特别项目存在新手比较多时,老员工比较累;更适合小型项目。
6.统一过程/统一开发方法
统一过程(Unined Process,UP)是由 Rainal公司开发的一种选代的软件过程,是一个优秀的软件开发模型,它提供了完整的开发过程解决方案,可以有效地降低软件开发过程的风险,经过裁剪的 UP 可以适应各种规模的团队和系统。
UP主要包含四个阶段:启动阶段(Inception)、精化阶段(Elaboration)、构造阶段(Construction)和过渡阶段(Transition)。每个阶段都有其独特的目标和任务,并可能包含多个迭代。
适用于各种规模和复杂性的软件开发项目。
统一过程有以下几个主要特点:
迭代和增量:UP强调在软件开发过程中采用迭代和增量的方法。每个迭代都会产生可见的、可测试的、可执行的产品。
以风险为驱动:UP是以风险为驱动的过程。在每个迭代中,都需要识别和解决最重要的风险。
以用例为驱动:UP是以用例为驱动的过程。用例被用来捕捉需求,指导设计、实现和测试。
高度可配置:UP是一个框架,而不是一个具体的过程。它可以根据项目的特性和团队的需求进行定制和配置。
统一过程的价值主要体现在以下几个方面:
提高质量:通过迭代和增量的开发,可以更早地发现问题,减少缺陷,从而提高产品质量。
降低风险:通过以风险为驱动的过程,可以更早地识别和解决风险,从而降低项目失败的风险。
提高用户满意度:通过以用例为驱动的过程,可以更好地理解用户需求,从而提高用户满意度。
灵活性:通过高度可配置的过程,可以灵活地适应各种项目和团队的需求。
缺点主要体现在以下几个方面:
理论化程度较高:UP的缺点之一是它的理论化程度相对较高,这可能导致在实际应用中,正确性验证的步骤比较困难且耗时。
正确性验证步骤困难且耗时:由于UP强调的是面向对象的方法和统一建模语言(UML),这要求开发者在设计和实现阶段进行详细的模型构建和验证。这一过程可能相当耗时,尤其是在需要快速迭代和适应市场变化的现代软件开发环境中。
不进行传统的模块测试:UP不进行传统的模块测试,这一点在实际开发中可能不现实。传统的模块测试是确保软件质量的重要手段之一,如果不进行这些测试,可能会增加软件在后期出现问题的风险。