01、软件项目的开发模型
软件开发模型是指软件开发全部过程、活动和任务的框架结构。根据软件开发工程化及实际需要,软件生存周期的划分有所不同,形成了不同的软件开发模型,或称软件生存周期模型。
瀑布模型
瀑布模型是将软件生存周期的各项活动规定为按固定顺序而连接的若干阶段工作,形如瀑布流水,最终得到软件产品。瀑布模型的核心思想是按工序将问题化简,将功能的实现与设计分开,便于分工协作,它将软件生存周期划分为制订计划、需求分析、软件设计、程序编写、软件测试和运行维护6个基本活动。
瀑布模型就是自顶向下的结构化开发模型方法,其过程是从上一项活动接收该项活动的工作对象作为输入,利用这一输入实施该项活动应完成的内容,给出该项活动的工作成果,并作为输出传给下一项活动。同时评审该项活动的实施,若评审通过,则继续下一项活动;否则返回前面,甚至更前面的活动。瀑布模型如图1所示。
■ 图1 瀑布模型
(1) 瀑布模型的优点。
瀑布模型奠定了软件工程方法的基础,流水依赖,便于分工协作。同时,瀑布模型为项目提供了按阶段划分的检查点,有复审质量保证。
(2) 瀑布模型的缺点。
瀑布模型是线性的,用户见面晚,从而增加了开发风险,瀑布模型的突出缺点是不适应用户需求的变化。
(3) 适用范围。
瀑布模型适合于系统需求明确的小系统。
原型模型
正确的需求定义是系统成功的关键。但是许多用户在开始时,往往不能准确地描述他们的需要,软件开发人员需要反复地和用户交流信息,才能全面、准确地了解用户的需求。在用户实际使用了目标系统以后,通过对系统的执行、评价,使用户更加明确对系统的需求。此时用户常常会改变原来的某些想法,对系统提出新的需求,以便使系统更加符合他们的实际需要。
原型模型是在开发真实系统之前,构造一个原型,实现客户或未来的用户与系统的交互,用户或客户对原型进行评价,进一步细化待开发软件的需求。通过逐步调整原型使其满足客户的要求;第二步则在第一步的基础上开发客户满意的软件产品。原型模型如图2所示。
■ 图2 原型模型
(1) 原型模型的优点。
原型方法打破了瀑布模型方法的僵化,让开发过程之间和开发过程中的主客体之间提前融合。原型模型缩短了开发周期,加快了工程进度,降低了工程成本。
(2) 原型模型的缺点。
原型模型所选用的开发技术和工具不一定符合主流的发展,快速建立起来的系统结构加上连续修改可能会导致产品质量低下。
(3) 适用范围。
原型模型适合于预先不能确切定义需求的软件系统的开发。
增量模型
增量模型也称为渐增模型,融合了瀑布模型的基本成分和原型模型的迭代特征,该模型采用随着日程时间进展而交错进行的线性序列,每一个线性序列产生软件的一个可发布的“增量”。当使用增量模型时,第一个增量往往是核心的产品,实现了基本的需求,但很多补充的特征还没有发布。客户对每一个增量的使用和评估都作为下一个增量发布的新特征和功能,这个过程在每一个增量发布后不断地重复,直到产生最终的完善产品为止。
增量模型是把待开发的软件系统模块化,将每个模块作为一个增量组件,从而分批次地分析、设计、编码和测试这些增量组件。增量模型本质上是迭代的,但与原型模型不一样的是其强调每一个增量均发布一个可操作产品。早期的增量是最终产品的“可拆卸”版本,但提供了为用户服务的功能,并且还提供了评估的平台。增量模型如图3所示。
■ 图3 增量模型
(1) 增量模型的优点。
增量模型在较短的时间内向用户提交有用的工作产品,解决一些急用功能。同时,增量模型提高了系统的可维护性,整个系统由构件集成,当需求变更时只变更部分部件,而不必影响整个系统。
(2) 增量模型的缺点。
由于在加入构件时,必须保证不破坏已构造好的系统部分,这需要软件具备开放式的体系结构。增量模型的灵活性使其适应需求变化的能力大大优于瀑布模型和快速原型模型,但也很容易退化为边做边改模型,从而使软件过程的控制失去整体性。
(3) 适用范围。
增量模型适合于软件需求不明确、设计方案有一定风险的项目。
螺旋模型
软件开发几乎总要冒一定的风险,例如,产品交付给用户之后用户可能对产品不满意,到了预定的交付日期软件可能还未开发出来,实际的开发成本可能超过了预算,关键的开发人员离岗,产品投入市场之前竞争对手发布了一个功能相近、价格更低的软件等。因此,在软件开发过程中必须及时识别和分析风险,并且采取适当措施以消除或减少风险的危害。
螺旋模型是一种演化软件开发过程模型,它兼顾了快速原型的迭代特征以及瀑布模型的系统化与严格监控特征。螺旋模型最大的特点在于引入了其他模型不具备的风险分析,使软件在无法排除重大风险时有机会停止,以减小损失。同时,在每个迭代阶段构建原型是螺旋模型用以减小风险的途径。螺旋模型如图4所示。
■ 图4 螺旋模型
(1) 螺旋模型的优点。
螺旋模型具有设计上的灵活性,可以在项目的各个阶段允许其变更。同时,以小的分段来构建大型系统使成本计算变得简单容易。此外,客户始终参与每个阶段的开发,保证了项目不偏离正确方向以及项目的可控性。
(2) 螺旋模型的缺点。
螺旋模型很难让用户确信这种演化方法的结果是可以控制的,况且该模型建设周期长,软件技术发展比较快,所以经常出现开发结束后的软件和当前的技术水平有了较大的差距,从而无法满足当前用户的需求等问题。
(3) 适用范围。
螺旋模型适合于内部软件开发的大规模软件项目。
喷泉模型
喷泉模型是一种以用户需求为动力,以对象为驱动的模型。喷泉模型克服了瀑布模型不支持软件重用和多项开发活动集成的局限性,可使开发过程具有迭代性和无间隙性。喷泉模型在各个开发阶段是重叠的,因此不利于项目的管理。此外,这种模型要求严格管理文档。喷泉模型如图5所示。
■ 图5 喷泉模型
(1) 喷泉模型的优点。
喷泉模型对生命周期各阶段的区分变得不重要,不明显了。喷泉模型分析阶段得到的对象模型也适用于设计阶段和实现阶段,提高了软件项目开发效率,节省了开发时间。
(2) 喷泉模型的缺点。
喷泉模型的开发过程过分无序,面向对象范型本身要求经常对开发活动进行迭代或求精。同时,在开发过程中需要大量的开发人员,因此不利于项目的管理。
(3) 适用范围。
喷泉模型适合于利用面向对象技术的软件项目。