1、 1 瀑布模型 瀑布模型规定了各项软件工程活动,包括:制定开发计划、进行需求分析和说明、软件设计、程序编码、测试及运行维护。并且规定了它们自上而下,相互衔接的固定次序,如同瀑布流水,逐级下落,如图2.1所示。 瀑布模型的基本思想:根据软件生命周期各阶段的任务,从可行性研究与计划开始,逐步进行阶段性变换,直至通过确认测试并得到用户确认的软件为止。 瀑布模型的特点: (1)阶段间的顺序性和依赖性:上一阶段的变换结果是下一阶段变换的输入,相邻两个阶段具有因果关系,每个阶段完成任务后,都必须进行阶段性评审,确认之后再转入下一个阶段。 (2)文档驱动性:要求每个阶段必须完成规定的文档并通过评
2、审,以便尽早发现问题,改正错误。 瀑布模型的优点:可强迫开发人员采用规范的方法,严格提交文档,做好阶段评审,从而使软件过程易于管理和控制,有利于软件的质量保障。 瀑布模型的缺点:要求软件开发初期就要给出软件系统的全部需求,开发周期比较长,承担的风险也比较大。 图1.5.1 软件生存周期的瀑布模型 软件开发的实践表明,上述各项活动之间并非完全是自上而下,呈线性图式。实际情况是,每项开发活动均处于一个质量环(输入-处理-输出-评审)中。只有当其工作得到确认,才能继续进行下一项活动,在图1.5.1中用向下的箭头表示;否则返工,在图1.5.1中由向上的
3、箭头表示。 2 快速原型模型 快速原型模型的第一步是建造一个快速原型,实现客户或未来的用户与系统的交互,用户或客户对原型进行评价,进一步细化待开发软件的需求。通过逐步调整原型使其满足客户的要求,开发人员可以确定客户的真正需求是什么;第二步则在第一步的基础上开发客户满意的软件产品。 显然,快速原型方法可以克服瀑布模型的缺点,减少由于软件需求不明确带来的开发风险,具有显著的效果,如图1.5.2所示。 快速原型的关键在于尽可能快速地建造出软件原型,一旦确定了客户的真正需求,所建造的原型将被丢弃。因此,原型系统的内部结构并不重要,重要的是必须迅速建立原型,随之迅速修改原型,以反映客户的需求。
4、 快速原型模型的基本思想:软件开发人员根据用户提出的软件初步定义,快速开发一个原型,向用户展示原型的功能和性能,在反复征求用户对原型意见的过程中,进一步确认用户的需求并对原型进行修改和完善,直到得到用户确认的软件定义,在确认的原型基础上完成软件系统的设计、实现、测试和使用与维护。 快速原型模型的特点: (1)原型驱动:整个软件过程围绕着原型的快速开发和对原型的评价,通过原型确认用户需求,以及通过原型的反复修改最终得到用户确认的软件定义。 (2)过程的交互性和迭代性:软件过程是由开发人员与用户之间通过原型的评价和确认而进行的一个交互过程。而且这个过程不是简单的重复,而是不断改进和完善的迭
5、代过程。 快速原型模型优点:允许用户在软件开发过程中完善对软件系统的需求,开发周期相对有所缩短,成本比较低,有效地发挥用户和开发人员之间的密切配合作用,使软件过程更能体现逐步发展、逐步完善的原则。 快速原型模型缺点:频繁的需求变化会使开发进程难于管理和控制,原型的快速开发和修改对技术要求比较高,需要有较好的工作基础。 3 螺旋模型 对于复杂的大型软件,开发一个原型往往达不到要求。螺旋模型将瀑布模型与演化模型结合起来,并且加入两种模型均忽略了的风险分析。螺旋模型沿着螺线旋转,如图1.5.3所示,在笛卡尔坐标的四个象限上分别表达了四个方面的活动,即: 制定计划──确定软件目标,选定实
6、施方案,弄清项目开发的限制条件; 风险分析──分析所选方案,考虑如何识别和消除风险; 实施工程──实施软件开发 客户评估──评价开发工作,提出修正建议。 沿螺线自内向外每旋转一圈便开发出更为完善的一个新的软件版本。 螺旋模型的基本思想:是生命周期模型和快速原型模型的结合,其基本思想是借助构建原型来降低风险,把软件开发的每一个阶段都看作是增加了风险分析的快速原型模型。螺旋模型的每一个周期都包括需求定义、风险分析、工程实现和评审4个部分,软件开发的整个过程就是这4个部分的迭代,每迭代一次,过程就完成一个周期,软件开发就前进一个层次,系统就生成一个新的版本。 螺旋模型的特点:
7、 (1)模型结合性:螺旋模型的每一个周期都应用了原型模型排除风险,在确认了原型之后,则 软件初步定义 快速开发原型 工作原型 评价原型 设计 实现 测试 使用与维护 修改原型 图1.5.2 快速原型模型结构图 图1.5.3 螺旋模型 又启动生命周期模型继续过程的演化。因此,螺旋模型是生命周期模型和快速原型模型的结合,体现了两个模型的优点。 (2)过程迭代性:软件开发过程的每个阶段都是一次迭代,这种迭代不是过程的简单重复,而是每旋转一个圈就前进一个层次,得到一个新的版本。 螺旋模型的优点:强调可选方案和约束条件有利于已有软件的重用,有助于把
8、软件质量作为软件开发的一个重要目标,减少过多或测试不足带来的风险。维护看成是模型的另一个周期,在维护和开发之间没有本质的区别。 螺旋模型的缺点:要求软件开发人员具有丰富的风险评估经验和有关的专门知识,开发过程比较复杂,给过程管理和控制带来一定的难度。 5 增量模型 与建造大厦相同,软件也是一步一步建造起来的。在增量模型中,软件被作为一系列的增量构件来设计、实现、集成和测试,每一个构件是由多种相互作用的模块所形成的提供特定功能的代码片段构成. 增量模型在各个阶段并不交付一个可运行的完整产品,而是交付满足客户需求的一个子集的可运行产品。整个产品被分解成若干个构件,开发人员逐个构件地交付产品
9、这样做的好处是软件开发可以较好地适应变化,客户可以不断地看到所开发的软件,从而降低开发风险,如图2.2所示。增量模型也存在以下缺陷: (1) 由于各个构件是逐渐并入已有的软件体系结构中的,所以加入构件必须不破坏已构造好的系统部分,这需要软件具备开放式的体系结构。 (2) 在开发过程中,需求的变化是不可避免的。增量模型的灵活性可以使其适应这种变化的能力大大优于瀑布模型和快速原型模型,但也很容易退化为边做边改模型,从而是软件过程的控制失去整体性。 在使用增量模型时,第一个增量往往是实现基本需求的核心产品。核心产品交付用户使用后,经过评价形成下一个增量的开发计划,它包括对核心产品的修改和一些
10、新功能的发布。这个过程在每个增量发布后不断重复,直到产生最终的完善产品。 例如,使用增量模型开发字处理软件。可以考虑,第一个增量发布基本的文件管理、编辑和文档生成功能,第二个增量发布更加完善的编辑和文档生成功能,第三个增量实现拼写和文法检查功能,第四个增量完成高级的页面布局功能。 增量模型的基本思想:把软件产品作为一系列的增量构件来设计、实现、集成和测试。开发时分批逐步向用户提交产品,每次提交一个满足用户需求子集的增量构件,直到最后一次得到满足用户全部需求的完整产品为止。 增量模型的特点:过程渐进性:软件过程分批次完成,每次提交一个满足用户需求子集的增量构件,产品规模逐渐增大,直到得到满
11、足用户全部需求的完整产品为止。 增量模型的优点:能在较短的时间内向用户提交部分功能的构件,并且在逐步增加产品功能的过程中有充裕的时间学习和适应新的功能,减少一个全新软件可能给用户带来的冲击。 增量模型的缺点:增量构件的划分依赖于系统功能的构成和软件开发人员的经验,每次集成新的增量构件必须不破坏原有软件系统的结构,因此要求软件系统的体系结构必须具有高度的开放性和可扩充性。 下一个构件开发 构件开发 软件定义 概要设计 详细设计 实现 使用与维护 测试 构件集成 图1.5.4 增量模型结构 6 喷泉模型 喷泉模型对软件复用和生存周期中多项开发活动的集成提供了支持,主
12、要支持面向对象的开发方法。“喷泉”一词本身体现了迭代和无间隙特性。系统某个部分常常重复工作多次,相关功能在每次迭代中随之加入演进的系统。所谓无间隙是指在开发活动,即分析、设计和编码之间不存在明显的边界。如图2.5所示。 喷泉模型的基本思想:是典型的面向对象生命周期模型。“喷泉”这个词描述了面向对象软件开发过程的迭代和无缝特性。在喷泉模型中,代表开发过程不同阶段的圆圈之间互相交迭,而且各项开发活动之间是无缝过渡的。每个阶段内的向下箭头代表着阶段自身的迭代或求精,整个软件过程呈现一种开发阶段落沿中轴向上,又在每一个阶段向下回流的喷泉形态,所以称为喷泉模型。 喷泉模型的特点: (1)过程迭代性
13、在面向对象的方法中,软件开发各个阶段之间或一个阶段内的各个步聚之间都存在迭代的过程,这一点要比面向数据流或面向数据的方法更为常见。 (2)阶段间我无缝过渡性:用面向对象方法开发软件时,在分析、设计和编码等项开发活动之间并不存在明显的边界,不同阶段互相交迭,各项开发活动之间无缝过渡。 喷泉模型的优点:支持面向对象方法的软件开发过程,提供软件复用与生命周期中多项开发活动集成的机制。 喷泉模型的缺点:喷泉模型本身就不是以面向过程为背景的,过程在喷模型中已被弱化,代替的是无间隙的阶段过渡与重复迭代。 图1.5.5 喷泉模型 7 V型模型 V型模型
14、是瀑布模型的一个变种,如图2.6所示。它同样需要一步一步进行,前一个阶段的任务完成之后才可以进行下一阶段的任务。这个模型强调测试的重要性,它将开发活动与测试活动紧密地联系在一起。每一步都将比前一阶段进行更加完善的测试。 实验证明,一个项目50%以上的时间花在测试上。通常,大家对测试存在一种误解,认为测试是开发周期的最后一个阶段。其实,早期的测试对提高产品质量、缩短开发周期起着重要作用。V型模型也正好说明了测试的重要性,它是与开发并行的,这个模型体现了全过程的质量意识。 项目规划 接收测试 需求分析 系统测试 概要设计 集成测试 详细设计 单元测试 编码和调试 图1.5.6
15、 V型模型 V型模型的特点如下: (1)简单易用,只要按照规定的步骤一步一步执行即可。 (2)V型模型强调测试过程与开发过程的对应性和并行性,例如单元测试对应详细设计,集成测试对应概要设计,系统测试对应需求分析。 (3)V型模型没有反映实际的开发过程,实际的开发过程会有很多的迭代过程,比如实施过程中会发现设计中的问题,然后去修正,测试过程中也会返回前一段,重新做一些事情。 使用指南: 使用V型模型,要求开发的人过程是严格按照顺序进行的,一个阶段的输出是下一个阶段的输入。同时,注意图2.6中虚线对应过程听并行考虑,例如需求分析阶段应该有系统测试的准备,概要设计阶段应该有集成测试
16、的准备,详细设计阶段应有单元测试的准备等。 V型模型适合的场合: 项目的需求在项目开始前很明确,解决方案在项目开始前也很明确,项目对系统的性能安全很严格。类似的项目如:航天飞机控制系统,公司的财务系统等。 8 形式化方法模型 形式化方法特别适合于那些对安全性、可靠性和保密性要求极高的软件系统开发,它采用形式化的数学方法将系统描述转换成可执行的程序。 形式化方法的过程模型如图1.5.7所示,它首先将软件需求描述提炼成采用数学符号表达的形式化描述,然后经过一系列的形式化转换将形式化描述自动转换成可执行程序,最后将整个系统集成起来进行测试。 形式化转换n 形式化转换n 需求定义 形
17、式化描述 形式化转换1 形式化转换2 …… 形式化转换n 集成和系统测试 图1.5.7 形式化方法的过程模型 由于数学方法具有严密性和准确性,形式化方法开发过程所交付的软件系统具有较少的缺陷和较高的安全性。但是,形式化方法在实际软件开发中应用并不多,其主要原因在于: 开发人员需要具备一定技能并经过特殊训练后才能掌握形式化开发方法。 现实应用的系统大多数是交互性强的软件,但是这些系统难以用形式化方法进行描述。 形式化描述和转换是一项费时、费力的工作,采用这种方法开发系统在成本和质量等方面并不占优势。 9 组合模型 在实际应用中,常常把几种模型结合在一起,配套使用,这就是组合模型。模型的组合方式有两种:一种方式是以某一种模型为主,嵌入另一种或几种模型。例如在生命周期模型中,为了帮助用户和开发人员尽快确定软件需求,在软件设计阶段之前可以嵌入原型模型。另一种方式是软件开发人员根据软件项目和软件开发环境的特点,建立一个特定的软件开发组合模型,为开发过程设计一条选择多种模型组合的路径。当然,路径的选择应根据软件开发的实际情况而定,目的是降低开发成本,缩短开发时间以及提高软件产品的质量。 7






