软件开发的11种模式

软件开发的11种模式

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

在这种模型中,既没有规格说明,也没有经过设计,软件随着客户的需要一次又一次地不断被修改。在这个模型中,开发人员拿到项目立即根据需求编写程序,调试通过后生成软件的第一个版本。在提供给用户使用后,如果程序出现错误,或者用户提出新的要求,开发人员重新修改代码,直到用户和测试等等满意为止。

这是一种类似作坊的开发方式,边做边改模型的优点毫无疑问就是前期出成效快。

对编写逻辑不需要太严谨的小程序来说还可以对付得过去,但这种方法对任何规模的开发来说都是不能令人满意的,其主要问题在于:

(1)缺少规划和设计环节,软件的结构随着不断的修改越来越糟,导致无法继续修改;

(2)忽略需求环节,给软件开发带来很大的风险;

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

2,瀑布模型(Waterfall-Model)

瀑布模型将软件生命周期划分:制定计划、需求分析、软件设计、程序编写、软件测试和运行维护等六个基本活动,并且规定了它们自上而下、相互衔接的固定次序,如同瀑布流水,逐级下落。

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

优点:严格遵循预先计划的步骤顺序进行,一切按部就班比较严谨。

(1)为项目提供了按阶段分的检查点

(2)当完成一个阶段后,只需要去关注后续阶段

(3)可在迭代模型中应用瀑布模型

缺点:缺乏灵活性,太过线性理想化,不适合现代软件开发

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

(2)由于开发模型是线性的,用户只有等到整个过程的末期才能见到开发成果,从而增加了开发的风险;

(3)早期的错误可能要等到开发后期的测试阶段才能发现,进而带来严重的后果。

(4)各个软件生命周期衔接花费时间较长,团队人员交流成本大。

(5)瀑布式方法在需求不明并且在项目进行过程中可能变化的情况下基本是不可行的。

3,快速原型模型(Rapid-Prototype-Model)

快速原型模型的第一步是建造一个快速原型,实现客户或未来的用户与系统的交互,用户或客户对原型进行评价,进一步细化待开发软件的需求。通过逐步调整原型使其满足客户的要求,开发人员可以确定客户的真正需求是什么;第二步则在第一步的基础上开发客户满意的软件产品。

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

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

快速原型模型有点整合“边做边改”与“瀑布模型”优点的意味。

优点:

(1)生命周期短

(2)整合“边做边改”与“瀑布模型”优点

(3)减少软件需求不明确带来的开发风险

(4)适用于小型、交互型的系统,大型系统的某些部分

缺点:

(1)可能导致系统设计差、效率低、难以维护

 4,增量模型(Incremental-Model)

在增量模型中,软件被作为一系列的增量构件来设计、实现、集成和测试,每一个构件是由多种相互作用的模块所形成的提供特定功能的代码片段构成。

增量模型在各个阶段并不交付一个可运行的完整产品,而是交付满足客户需求的一个子集的可运行产品。整个产品被分解成若干个构件,开发人员逐个构件地交付产品,这样做的好处是软件开发可以较好地适应变化,客户可以不断地看到所开发的软件,从而降低开发风险。但是,增量模型也存在以下缺陷:

(1) 由于各个构件是逐渐并入已有的软件体系结构中的,所以加入构件必须不破坏已构造好的系统部分,这需要软件具备开放式的体系结构。

(2) 在开发过程中,需求的变化是不可避免的。增量模型的灵活性可以使其适应这种变化的能力大大优于瀑布模型和快速原型模型,但也很容易退化为边做边改模型,从而是软件过程的控制失去整体性。

在使用增量模型时,第一个增量往往是实现基本需求的核心产品。核心产品交付用户使用后,经过评价形成下一个增量的开发计划,它包括对核心产品的修改和一些新功能的发布。这个过程在每个增量发布后不断重复,直到产生最终的完善产品。

例如,使用增量模型开发字处理软件。可以考虑,第一个增量发布基本的文件管理、编辑和文档生成功能,第二个增量发布更加完善的编辑和文档生成功能,第三个增量实现拼写和文法检查功能,第四个增量完成高级的页面布局功能。

优点:

(1)人员分配灵活,一开始不需要投入大量人力

(2)先推出核心的产品,在后续增加相应的功能

(3)增量能够有计划的管理技术风险

(4)适用于需求经常变更的软件开发过程

缺点:

(1)如果增量包之间存在相交的情况未很好的处理,则必须做全盘的系统分析

5,迭代模型(Stagewise-Model)(迭代增量式开发/迭代进化式开发)

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

迭代和版本的区别,可理解如下:迭代一般指某版本的生产过程,包括从需求分析到测试完成;版本一般指某阶段软件开发的结果,一个可交付使用的产品。

优点:

(1)降低了在一个增量上的开支风险。如果开发人员重复某个迭代,那么损失只是这一个开发有误的迭代的花费。

(2)降低了产品无法按照既定进度进入市场的风险。通过在开发早期就确定风险,可以尽早来解决而不至于在开发后期匆匆忙忙。

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

(4)由于用户的需求并不能在一开始就作出完全的界定,它们通常是在后续阶段中不断细化的。因此,迭代过程这种模式使适应需求的变化会更容易些。因此复用性更高

6,螺旋模型(Spiral-Model)

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

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

(1)制定计划:确定软件目标,选定实施方案,弄清项目开发的限制条件;

(2)风险分析:分析评估所选方案,考虑如何识别和消除风险;

(3)实施工程:实施软件开发和验证;

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

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

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

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

(3)软件开发人员应该擅长寻找可能的风险,准确地分析风险,否则将会带来更大的风险

一个阶段首先是确定该阶段的目标,完成这些目标的选择方案及其约束条件,然后从风险角度分析方案的开发策略,努力排除各种潜在的风险,有时需要通过建造原型来完成。如果某些风险不能排除,该方案立即终止,否则启动下一个开发步骤。最后,评价该阶段的结果,并设计下一个阶段。

7,敏捷开发模型(Agile-Development-Model)

敏捷开发是一种以人为核心、迭代、循序渐进的开发方法。在敏捷开发中,软件项目的构建被切分成多个子项目,各个子项目的成果都经过测试,具备集成和可运行的特征。换言之,就是把一个大项目分为多个相互联系,但也可独立运行的小项目,并分别完成,在此过程中软件一直处于可使用状态。

敏捷开发小组主要的工作方式:

(1)作为一个整体工作;

(2)按短迭代周期工作;

(3)每次迭代交付一些成果,关注业务优先级,检查与调整。

敏捷开发的4个核心思想:

(1)强调面对面的沟通,人和人的相互交流胜于任何流程和工具

(2)把精力集中在可执行的程序上,可以运行的产品胜于编制综合性文档,强调了原型、模型、demo等的重要性

(3)团队合作和团队激励,合作胜于谈判,敏捷开发能将需求、开发、测试等全部团队成员融合成一个整体,大家都是一条线上的蚂蚱

(4)超强的适应能力,适应变化胜于按部就班,敏捷开发的特点就是快速

敏捷软件开发要注意项目规模,规模增长,团队交流成本就上去了,因此敏捷软件开发暂时适合不是特别大的团队开发,比较适合一个组的团队使用。

8,演化模型(Evolutionary-Model)

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

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

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

9,喷泉模型(Fountain-Model)

以用户需求为动力,以对象为驱动的模型,主要用于采用对象技术的软件开发项目

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

优点:

(1)可以提高软件项目开发效率,节省开发时间,适用于面向对象的软件开发过程

缺点:

(1)由于喷泉模型在各个开发阶段是重叠的,因此在开发过程中需要大量的开发人员,不利于项目的管理

(2)这个模型要求严格管理文档,使得审核难度加大,尤其是面对随时加入各种需求

10,智能模型(四代技术4GL)

智能模型拥有一组工具(如数据查询、报表生成、数据处理、屏幕定义、代码生成、高层图形功能及电子表格等),每个工具都能使开发人员在高层次上定义软件的某些特性,并把开发人员定义的这些软件自动地生成为源代码。这种方法需要四代语言(4GL)的支持。4GL不同于三代语言,其主要特征是用户界面极端友好,即使没有受过训练的非专业程序员,也能用它编写程序;它是一种声明式、交互式和非过程性编程语言。4GL还具有高效的程序代码、智能缺省假设、完备的数据库和应用程序生成器。目前市场上流行的4GL(如Foxpro等)都不同程度地具有上述特征。但4GL目前主要限于事务信息系统的中、小型应用程序的开发。

11,混合模型(Hybrid-Model)

过程开发模型又叫混合模型(hybrid model),或元模型(meta-model),把几种不同模型组合成一种混合模型,它允许一个项目能沿着最有效的路径发展,这就是过程开发模型(或混合模型)。实际上,一些软件开发单位都是使用几种不同的开发方法组成他们自己的混合模型。

 

https://blog.csdn.net/xi_gua_gua/article/details/53107283

软件开发模式对比(瀑布、迭代、螺旋、敏捷)

1、瀑布模型是由W.W.Royce在1970年最初提出的软件开发模型, 瀑布式开发是一种老旧的计算机软件开发方法。
瀑布模型式是最典型的预见性的方法,严格遵循预先计划的需求分析、设计、编码、集成、测试、维护的步骤顺序进行。
步骤成果作为衡量进度的方法,例如需求规格,设计文档,测试计划和代码审阅等等。 

瀑布式的主要的问题是它的严格分级导致的自由度降低,项目早期即作出承诺导致对后期需求的变化难以调整,
代价高昂。瀑布式方法在需求不明并且在项目进行过程中可能变化的情况下基本是不可行的。 


2、迭代式开发也被称作迭代增量式开发迭代进化式开发,是一种与传统的瀑布式开发相反的软件开发过程,它弥补了传统开发方式中的一些弱点,具有更高的成功率和生产率。
什么是迭代式开发?
每次只设计和实现这个产品的一部分, 
逐步逐步完成的方法叫迭代开发, 
每次设计和实现一个阶段叫做一个迭代. 

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

迭代式开发的优点:
  1、降低风险
  2、得到早期用户反馈
  3、持续的测试和集成
  4、使用变更
  5、提高复用性



螺旋开发,1988年,巴利·玻姆(Barry Boehm)正式发表了软件系统开发的“螺旋模型”,它将瀑布模型和快速原型模型结合起来,强调了其他模型所忽视的风险分析,特别适合于大型复杂的系统。
“螺旋模型”刚开始规模很小,当项目被定义得更好、更稳定时,逐渐展开。 

  “螺旋模型”的核心就在于您不需要在刚开始的时候就把所有事情都定义的清清楚楚。您轻松上阵,定义最重要的功能,实现它,然后听取客户的意见,之后再进入到下一个阶段。如此不断轮回重复,直到得到您满意的最终产品。 
       (1)制定计划:确定软件目标,选定实施方案,弄清项目开发的限制条件; 

  (2)风险分析:分析评估所选方案,考虑如何识别和消除风险; 

  (3)实施工程:实施软件开发和验证; 

  (4)客户评估:评价开发工作,提出修正建议,制定下一步计划。 
螺旋模型很大程度上是一种风险驱动的方法体系,因为在每个阶段之前及经常发生的循环之前,都必须首先进行风险评估。


 



敏捷软件开发又称敏捷开发, 是一种从1990年代开始逐渐引起广泛关注的一些新型软件开发方法,是一种应对快速变化的需求的一种软件开发能力。它们的具体名称、理念、过程、术语都不 尽相同,相对于“非敏捷”,更强调程序员团队与业务专家之间的紧密协作、面对面的沟通(认为比书面的文档更有效)、频繁交付新的软件版本、紧凑而自我组织 型的团队、能够很好地适应需求变化的代码编写和团队组织方法,也更注重软件开发中人的作用。
 

  • 人和交互 重于过程和工具。
  • 可以工作的软件 重于求全而完备的文档。
  • 客户协作重于合同谈判。
  • 随时应对变化重于循规蹈矩。


其中位于右边的内容虽然也有其价值,但是左边的内容最为重要。
人员彼此信任 人少但是精干 可以面对面的沟通

项目的敏捷开发:
敏捷开发小组主要的工作方式可以归纳为:作为一个整体工作; 按短迭代周期工作; 每次迭代交付一些成果; 
关注业务优先级; 检查与调整。

最重要的因素恐怕是项目的规模。规模增长,面对面的沟通就愈加困难,
因此敏捷方法更适用于较小的队伍,40、30、20、10人或者更少。
大规模的敏捷软件开发尚处于积极研究的领域。




四者对比区别:

传统的瀑布式开发,也就是从需求到设计,从设计到编码,从编码到测试,从测试到提交大概这样的流程,要求每一个开发阶段都要做到最好。
特别是前期阶段,设计的越完美,提交后的成本损失就越少。

迭代式开发,不要求每一个阶段的任务做的都是最完美的,而是明明知道还有很多不足的地方,却偏偏不去完善它,而是把主要功能先搭建起来为目的,以最短的时间,
最少的损失先完成一个“不完美的成果物”直至提交。然后再通过客户或用户的反馈信息,在这个“不完美的成果物”上逐步进行完善。

螺旋开发,很大程度上是一种风险驱动的方法体系,因为在每个阶段之前及经常发生的循环之前,都必须首先进行风险评估。

敏捷开发,相比迭代式开发两者都强调在较短的开发周期提交软件,但是,敏捷开发的周期可能更短,并且更加强调队伍中的高度协作。
敏捷方法有时候被误认为是无计划性和纪律性的方法,实际上更确切的说法是敏捷方法强调适应性而非预见性。 

适应性的方法集中在快速适应现实的变化。当项目的需求起了变化,团队应该迅速适应。这个团队可能很难确切描述未来将会如何变化.

https://blog.csdn.net/csshuke/article/details/82871250

  • 4
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 《敏捷软件开发:原则、模式与实践》是由Robert C. Martin等人合著的一本著名的软件开发实践指南,全面介绍了敏捷开发的原则、模式和实践。敏捷软件开发是一种灵活、协作和迭代的开发方法,致力于快速交付高质量的软件。 这本书的第一个原则是满足客户需求是首要任务。它强调开发团队应该与客户紧密合作,及时沟通并根据客户需求调整开发计划。其次,它提倡频繁交付可工作软件,以获得客户尽早的反馈和验证。第三个原则是通过人与人之间的沟通取代繁琐的文档,以促进有效的合作和交流。 该书还介绍了许多敏捷开发模式,其中最重要的是迭代和增量开发。迭代开发是将开发过程分为多个迭代周期,每个迭代周期都会交付一个可工作的软件部分,使开发团队能够更好地掌握进度和质量。增量开发是指以模块化的方式逐步构建软件,每个增量都能带来新的功能或改进。这些模式可以帮助开发团队更好地管理项目、降低风险并提高开发效率。 在实践方面,该书提供了许多实用的建议和技巧。例如,它推荐使用持续集成来保持软件的稳定性和可靠性。持续集成是指将开发人员的代码经常集成到共享存储库中,并自动进行构建和测试。此外,该书还介绍了敏捷开发中常用的工具和技术,如测试驱动开发、结对编程和自动化测试等。 总的来说,这本书全面而深入地介绍了敏捷软件开发的原则、模式和实践。无论是新手开发者还是有经验的专业人士,都可以从中获得有益的指导,提高软件开发的效率和质量。 ### 回答2: 敏捷软件开发是一种迭代、协作和灵活的软件开发方法。它强调团队合作、快速反应需求变化、频繁交付可用软件等原则。 《敏捷软件开发:原则、模式与实践》是一本由Robert C. Martin编写的经典著作。该书系统地介绍了敏捷软件开发的原则、模式与实践。它通过精炼的代码示例、实际案例和实践经验,向读者展示了如何在开发过程中采用敏捷的方法。 该书中介绍的原则包括SRP(单一职责原则)、OCP(开放封闭原则)、LSP(里氏替换原则)、ISP(接口隔离原则)和DIP(依赖倒置原则)等。这些原则旨在提高软件的可维护性、可扩展性、可复用性等,使软件开发更加灵活和高效。 书中还介绍了一些常见的敏捷开发模式,如TDD(测试驱动开发)、重构、迭代和增量开发等。这些模式帮助开发团队在迭代开发过程中更好地理解需求、编写高质量的代码以及及时应对变化。 此外,书中还分享了作者多年的实践经验和敏捷开发团队的成功案例。通过这些实践经验,读者可以学习到如何构建高效的开发团队、合理分配任务、高效沟通等。 总之,《敏捷软件开发:原则、模式与实践》是一本对于想要了解和应用敏捷开发方法的人来说非常有价值的书籍。它不仅介绍了敏捷开发的基本原则和常见模式,还通过实践经验向读者展示了如何在实际项目中应用这些原则和模式。这本书对于提升软件开发团队的敏捷能力,提高软件质量和开发效率都具有重要的指导作用。 ### 回答3: 《敏捷软件开发:原则、模式与实践》(The Pragmatic Programmer)是一本由Andrew Hunt和David Thomas合著的经典软件开发指南。该书介绍了敏捷开发的原则、模式和实践,对于软件开发人员和团队具有很高的实用性和指导性。 该书首先介绍了软件开发的各种原则,包括需求分析与设计、代码管理与维护、测试与调试等方面。根据作者的经验,每个原则都给出了具体的实践建议,帮助读者更好地理解和应用。这些原则涵盖了软件开发的各个环节,帮助开发人员以更加敏捷的方式进行工作。 接着,书中介绍了一系列经典的软件开发模式,如责任链模式、单例模式、观察者模式等。这些模式是针对常见问题的解决方案,可以提高软件的可重用性和可扩展性。作者通过生动的例子和图示,详细解释了每种模式的原理和应用场景,帮助读者理解和应用这些模式。 最后,书中还介绍了一些实践技巧和工具,如版本控制、自动化测试等。这些实践可以帮助开发人员提高效率、减少错误,保证软件的质量和稳定性。作者还分享了许多实际项目中的经验和教训,让读者从中受益。 总的来说,《敏捷软件开发:原则、模式与实践》是一本非常实用的软件开发指南。它不仅向读者介绍了敏捷开发的理念和原则,还提供了丰富的实践经验和实用技巧。无论是初学者还是有经验的开发人员,都可以从中获得启发和指导,在实际工作中更加高效地进行软件开发

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值