软件开发模型的优缺点和适用范围软件开发模型大体上可以分为三种类型。第一种是以软件需求完全确定为前提的瀑布模型;第二种是在软件开发初始阶段只能提供基本需求时采用的渐进式开发模型,如原型模型、螺旋模型等;第三种是以形式化开发方法为基础的的变换模型。时间中经常将几种模型组合使用,以便充分利用各种模型的优点。1.瀑布模型瀑布模型也称软件生存周期模型。它在软件工程中占有重要地位,它提供了软件开发的基本框架,这比依靠“个人技艺”开发软件好得多。它有利于大型软件开发过程中人员的组织、管理,有利于软件开发方法和工具的研究与使用,从而提高了大型软件项目开发的质量和效率。瀑布模型的缺点:一是个阶段的划分完全固定,阶段之间产生大量的文档,极大地增加了工作量;二是由于开发模型是线性的用户只有等到整个过程的末期才能见到开发成果,从而卡增加了开发的风险;三是早期的错误可能要等到开发后期的测试阶段才能发现,进而带来严重后果。2.原型模型原型模型的主要思想:先借用已有系统作为原型模型,通过“样品”不断改进,使得最后的产品就是用户所需要的。原型模型通过向用户提供原型获取用户的反馈,使开发出的软件能够真正反映用户的需求。原型模型的特点:开发人员和用户在“原型”上达成一致。这样一来,可以减少设计中的错误和开发中的风险,也减少了对用户培训的时间,而提高了系统的实用、正确性以及用户的满意程度。缩短了开发周期,加快了工程进度。降低成本。原型模型的缺点:当告诉用户,还必须重新生产该产品时,用户是很难接受的。这往往给工程继续开展带来不利因素。不宜利用原型系统作为最终产品。3.螺旋模型螺旋模型采用一种周期性的方法来进行系统开发。这会导致开发出众多的中间版本。螺旋模型的优点:1)设计上的灵活性,可以在项目的各个阶段进行变更。2)以小的分段来构建大型系统,使成本计算变得简单容易。3)客户始终参与每个阶段的开发,保证了项目不偏离正确方向及项目的可控性。14)随着项目推进,客户始终掌握项目的最新信息,从而他或她能够和管理层有效地交互。5)客户认可这种公司内部的开发方式带来的良好的沟通和高质量的产品。螺旋模型的缺点:很难让用户确信这种演化方法的结果是可以控制的。建设周期长,而软件技术发展比较快,所以经常出现软件开发完毕后,和当前的技术水平有了较大的差距,无法满足当前用户需求。螺旋模型的项目适用:对于新近开发,需求不明确的情况下,适合用螺旋模型进行开发,便于风险控制和需求变更。4.基于四代技术的模型四代语言(4GL)是在大型数据库管理程序基础上发展起来的程序设计语言。是面向结果的非过程式语言它独立于具体的处理机,有丰富的软件工具的支持,能统一利用和管理各种数据资源,因此能适应不同水平用户的需要。以4GL为核心的软件开发技术称为四代技术(4GT).软件开发者在定义软件需求、给出软件规格说明后,4GT工具能够将开发者编写的软件规格说明自动转换成程序代码,这大大减少了分析、设计、编码、与测试的时间。实践表明,大多数需求明确的小型应用系统,特别是信息领域、工程和实时嵌入式小型应用系统采用4GT,在软件开发时间、成本、质量等方面都会取得比较好的效果。对于大型的软件开发项目,由于在系统分析、设计、测试、文档生成等方面要做大量的工作,采用4GT虽然可以节省部分代码生成的时间,但它在整个大型软件系统开发中所占的比例是有限的。5.变换模型变换模型是基于形式化规格说明语言及程序变换的软件开发模型。它采用形式化的软件开发方法对形式化的软件规格说明进行一系列自动或半自动的程序变换,最后映射为计算机系统能够接受的程序系统。为了确认形式化规格说明与软件需求的一致性,往往以形式化规格说明为基础开发一个软件原型,用户可以从人机界面、系统主要功能和性能等几个方面对原型进行评审。必要时,可以修改软件需求、形式化规格说明和原型,直至原型被确认为止。这时软件开发人员即可对形式化的规格说明进行一系列的程序变换,直至生成计算机系统可以接受的目标代码。“程序变换”是软件开发的另一种方法,其基本思想是把程序设计的过程分为生成阶段和改进阶段。首先通过对问题的分析制定形式规范并生成一个程序,通常是一种函数型的“递归方程”。然后通过一系列保持正确性的源程序到源程序的变换,把函数型风格转换成过程型风格并进行数据结构和算法的求精,最终得到一个有效的面向过程的程序。这种变换过程是一种严格的形式推导过程,所以只需对变换前的程序的规范加以验证,变换后的程序的正确性将由变换法则的正确性来保证。变换模型的优点是解决了代码结构经多次修改而变坏的问题,减少了许多中间步骤(如设计、编码和测试等)。但是变换模型仍有较大局限,2以形式化开发方法为基础的变换模型需要严格的数学理论和一整套开发环境的支持,目前形式化开发方法在理论、实践和人员培训方面距工程应用尚有一段距离。前面介绍的软件开发模型是针对软件开发的某些问题和要求设计的,他们都有各自的优点和不足.在软件工程实践中经常把几种模型组合在一起配套使用,形成组合模型.