首页 理论教育 传统软件开发模型的敏捷重构

传统软件开发模型的敏捷重构

时间:2023-11-20 理论教育 版权反馈
【摘要】:图3-1经典的瀑布模型流程图在瀑布模型中,软件开发的各项活动严格按照线性方式进行,当前活动接受上一项活动的工作结果,实施完成所需的工作内容。3.迭代模型迭代模型是一种与传统的瀑布模型过程相反的软件开发模式,整个开发工作被组织为一系列有固定长度(如3周)的小项目,被称为一系列的迭代。

传统软件开发模型的敏捷重构

1.边做边改模型(Build-and-Fix Model)

边做边改模型是一种类似作坊的开发模式,既没有规格说明,也没有经过设计,随着客户的需要软件一次又一次地不断被修改。开发人员拿到项目后立即根据需求编写程序,调试通过后生成软件的第一个版本。在提供给用户使用后,如果程序出现错误,或者用户提出新的要求,开发人员重新修改代码,直到用户和测试人员都满意为止。其实现在很多中小公司将软件产品的研发周期压缩得很短,那么使用边做边改模型是比较明智的选择。

对编写逻辑不需要太严谨的小程序来说,这种模型还可以用一用,但对规模开发而言这种模型是无法令人满意的,其主要问题在于:

●缺少规划和设计环节,软件的结构随着不断的修改变得越来越糟,导致无法继续修改。

●忽略需求环节,给软件开发带来很大的风险。

●没有考虑测试和程序的可维护性,也没有任何文档,软件的维护十分困难。

2.瀑布模型(Waterfall Model)

瀑布模型是一种比较经典的软件开发模型。1970年温斯顿·罗伊斯提出了著名的“瀑布模型”,直到20世纪90年代都还是被广泛采用的模型。如图3-1所示,瀑布模型将软件生命周期划分为编写计划、需求分析、软件设计、程序编写、软件测试和运行维护等六个基本活动,并且规定了它们自上而下、相互衔接的固定次序,如同瀑布流水,逐级下落。

图3-1 经典的瀑布模型流程图

在瀑布模型中,软件开发的各项活动严格按照线性方式进行,当前活动接受上一项活动的工作结果,实施完成所需的工作内容。需要对当前活动的工作结果进行验证,如验证通过,则该结果作为下一项活动的输入,继续进行下一项活动,否则返回修改。

瀑布模型的优点是严格遵循预先计划的步骤按顺序进行,一切按部就班,比较严谨。瀑布模型强调文档的作用,并要求每个阶段都要仔细验证。但是这种模型的线性过程太理想化,很难适应现代软件开发模式,其主要问题在于:

●各个阶段的划分完全固定,阶段之间产生大量的文档,极大地增加了工作量。

●由于开发模型是线性的,用户只有等到开发末期才能看到效果,增加了开发风险。

●早期的错误可能要等到开发后期的测试阶段才能被发现,从而带来严重的后果。

●软件生命周期各项活动衔接花费的时间较长,团队人员交流成本较大。

●瀑布式模型在需求不明或者在项目进行过程可能变化的情况下基本是不可行的。

3.迭代模型(Stagewise Model)

迭代模型是一种与传统的瀑布模型过程相反的软件开发模式,整个开发工作被组织为一系列有固定长度(如3周)的小项目,被称为一系列的迭代。每一次迭代都包括需求分析、设计、实现与测试。采用这种模型,开发工作可以在需求被完整地确定之前启动,并在一次迭代中完成系统的一部分功能或业务逻辑的开发工作。再通过客户的反馈来细化需求,并开始新一轮的迭代。

与传统的瀑布模型相比较,迭代模型具有以下优点:

●缩小了软件风险的最小单位。如果某次迭代过程存在开发缺陷,那么最糟糕的情况也无非是损失这个设计有误的迭代成本。

●降低了产品无法按照既定计划交付的风险。在开发早期就确定风险,可以尽早解决而不至于在开发后期疲于修补漏洞

●加快了整个开发工作的进度。因为开发人员清楚问题的焦点所在,他们的工作会更有效率

●由于用户的需求并不能在一开始就完全确定下来,在后续阶段还会不断细化,因此,迭代模型更容易适应需求变化,软件复用性更强。

4.快速原型模型(Rapid Prototype Model)

快速原型模型相当于边做边改模型与瀑布模型的融合。快速原型模型分两步实施,第一步是快速构建一个产品原型,实现客户或用户与系统的交互,客户或用户对原型进行评价,进一步细化待开发软件的需求,然后逐步调整原型使其满足客户的要求,从而确定客户的真正需求;第二步则是在第一步的基础上开发令客户满意的软件产品。(www.xing528.com)

快速原型模型的关键在于尽可能快速地构造出软件原型,一旦确定了客户的真正需求,所构建的原型将被丢弃。因此,原型系统的内部结构并不重要,重要的是必须迅速建立原型,随之迅速修改原型,以反映客户的真正需求。

快速原型方法可以克服瀑布模型的缺点,减少由于软件需求不明确带来的开发风险,效果显著。

5.螺旋模型(Spiral Model)

1988年,巴利·玻姆(Barry Boehm)正式提出软件系统开发的“螺旋模型”,将瀑布模型和快速原型模型结合起来,强调了其他模型所忽视的风险分析,特别适合于复杂的大型系统。

螺旋模型沿着螺线进行若干次迭代,图3-2中的四个象限分别代表了以下活动:

●制订计划:确定软件目标,选定实施方案,弄清项目开发的限制条件。

●风险分析:分析评估所选方案,考虑如何识别和消除风险。

●实施工程:实施软件开发和验证。

●客户评估:评价开发工作,提出修正建议,制订下一步计划。

图3-2 螺旋模型[1]

螺旋模型由风险驱动,强调可选方案和约束条件,从而支持软件的复用,有助于将软件质量作为特殊目标融入产品开发之中。但是,螺旋模型也有一定的限制条件,具体如下:

●螺旋模型强调风险分析,但要求许多客户接受和相信这种分析,并做出相关反应是不容易的,因此,这种模型往往适用于内部的大规模软件开发。

●如果执行风险分析将大大影响项目的利润,那么进行风险分析将毫无意义,因此,螺旋模型只适合于大规模软件项目。

●软件开发人员应该擅长寻找潜在风险,准确地分析风险,否则将会带来更大的风险。

6.演化模型(Evolutionary Model)

演化模型主要针对事先不能完整定义需求的软件开发过程。用户可以给出待开发系统的核心需求,并且当看到核心需求实现后,能够有效地给出反馈,以支持系统的最终设计和实现。软件开发人员根据用户的需求,首先开发核心系统。当该核心系统投入运行后,用户试用之,完成他们的工作,并提出精化系统、增强系统功能的需求。软件开发人员根据用户的反馈,实施开发的迭代过程。第一个迭代过程均由需求、设计、编码、测试、集成等阶段组成,为整个系统增加一个可定义的、可管理的子集。

在开发模式上采取分批循环开发的办法,每个循环开发出一部分功能,成为这个产品原型的新增功能,不断地演化出新的系统。实际上,这个模型可看作重复执行的多个“瀑布模型”。

演化模型要求开发人员有能力把项目的产品需求分解为不同的组,以便分批循环开发。这种分组并不是随意的,而是要根据功能的重要性及对总体设计的基础结构的影响做出判断。有经验指出,每个开发循环以6周到8周为合适的周期。

7.喷泉模型(Fountain Model)

喷泉模型与结构化生存期比较,具有更多的增量和迭代性质,生存期的各个阶段可以相互重叠和多次反复,而且在项目的整个生存期中还可以嵌入子生存期,就像水喷上去又可以落下来,既可以落在中间,也可以落在最底部。

8.智能模型(Intelligence Model)

智能模型拥有一组工具(如数据查询、报表生成、数据处理、屏幕定义、代码生成、高层图形功能及电子表格等),每个工具都能使开发人员在高层次上定义软件的某些特性,并把开发人员定义的这些软件特性自动地生成源代码

智能模型需要四代语言的支持。四代语言不同于三代语言,其主要特征是用户界面极为友好,即使没有受过训练的非专业程序员,也能用它编写程序。它是一种声明式、交互式和非过程性编程语言,具有高效的程序代码、智能缺省假设、完备的数据库和应用程序生成器。四代语言目前主要限于事务信息系统的中、小型应用程序的开发。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈