精华内容
下载资源
问答
  • 什么是敏捷开发

    2018-12-19 09:22:46
    本篇分享的是:【什么是敏捷开发 】 目录: 1.几种开发方法 1.1瀑布式开发 1.2迭代式开发 1.3螺旋式开发 2.敏捷开发 2.1 敏捷开发的诞生 2.2敏捷开发宣言 2.3 敏捷开发 3.敏捷开发方法 ...

    这里是pm小课堂,每篇分享文从

    【背景介绍】【知识剖析】【常见问题】【解决方案】【编码实战】【扩展思考】【更多讨论】【参考文献】

    八个方面深度解析pm知识/技能。

    本篇分享的是:【什么是敏捷开发 】

    目录:

    1.几种开发方法

    1.1瀑布式开发

    1.2迭代式开发

    1.3螺旋式开发

    2.敏捷开发

    2.1 敏捷开发的诞生

    2.2敏捷开发宣言

    2.3 敏捷开发

    3.敏捷开发方法

    3.1 Scrum

    3.1.1 什么是scrum

    3.1.2 Scrum 框架结构

    3.2其他开发方法介绍

    4.敏捷管理工具

    4.1禅道

    5.实例:修真院敏捷开发流程

    6.讨论

    7.参考文献、

     

    1.几种开发方法

    1.1瀑布式开发——瀑布模型(Waterfall Model)

    1970年温斯顿·罗伊斯(Winston Royce)提出了著名的“瀑布模型”,直到80年代早期,它一直是唯一被广泛采用的软件开发模型。

    瀑布模型要求软件开发严格按按照需求→分析→设计→编码→测试的阶段进行,每一个阶段都可以定义明确的产出物和验证准则。瀑布模型在每一个阶段完成后都可以组织相关的评审和验证,严格的瀑布模型每一个阶段都不应该重叠,而应该是在评审通过后才能够进入到下一个阶段。遵循自上而下、相互衔接的固定次序,如同瀑布流水,逐级下落。

    瀑布模型式是最典型的预见性的方法。

    瀑布模型的优点仍然是可以保证整个软件产品较高的质量,保证缺陷能够提前的被发现和解决.采用瀑布模型可以保证系统在整体上的充分把握,使系统具备良好的扩展性和可维护性

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

    2.1 迭代式开发

    迭代式开发也被称作迭代增量式开发或迭代进化式开发,是一种与传统的瀑布式开发相反的软件开发过程,它弥补了传统开发方式中的一些弱点,具有更高的成功率和生产率。

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

     

    1.3螺旋开发——螺旋模型(Spiral Model)

    螺旋模型是一种演化软件开发过程模型,它兼顾了快速原型的迭代的特征以及瀑布模型的系统化与严格监控。螺旋模型最大的特点在于强调其他模型所忽视的风险分析,螺旋模型很大程度上是一种风险驱动的方法体系,因为在每个阶段之前及经常发生的循环之前,都必须首先进行风险评估。。

    通常螺旋模型由四个阶段组成:制定计划、风险分析、实施工程和客户评估。

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

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

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

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

    螺旋模型适用于庞大并且复杂,高风险的项目,需求不明确的情况下,便于风险控制和需求变更。

     

    2.敏捷开发

    2.1 敏捷开发的诞生

    程序员说,要有敏捷

    ——于是就有了敏捷。

    敏捷这个词被用的过于泛滥了,大家都在讨论它,可以把它视为一种宗教。

     

    美国在计算机行业已经走了几十年,瀑布流、螺旋模型、快速迭代...各种各样的软件开发流程雨后春笋各领风骚一段时间。虽然不断变化和完善,但互联网的加速发展让传统方法显得笨重,难以快速适应变化。有十七个程序员(程序员改变世界)在美国犹他州盐城湖的一个风景区开了个碰头会,找到了一个团队耦合度高,流程极其灵活的方法,他们把它称为敏捷开发(Agile program development)。

    2.2 敏捷开发宣言

     

    • 个体和交互重于过程和工具

    敏捷方法认为,人是软件开发中最重要的因素,开发团队要能做到团结协作,人与人面对面的交流、沟通,是最快速、最有效的途径。

    • 可以工作的软件重于面面俱到的文档

    文档的意义在于为程序服务,过多的文档需要开发人员花费大量的时间去维护,而且还要确保文档与代码的实时性,否则就失去了文档的意义。而问题也就在于,开发人员没有把时间、精力放到最重要的任务上,能力、资源没有最大化的发挥效能。敏捷方法认为,文档应当短小精悍、易于维护,而且主题突出。

    • 客户协作重于合同谈判

    做过软件开发的人都知道,客户对产品的需求是不断变化的,试图一开始就规定项目的细节和进度,显然是不现实的,只有开发团队和客户彼此精诚合作,常与沟通,频繁的客户反馈,才能促使项目的成功。

    • 随时响应变化重于循规蹈矩

    客户的需求在产品的开发阶段是不断变化的,即使谈判时确定的需求,也可能会根据某些因素而发生巨大的改变。因此,敏捷方法认为,在制定计划时应尽可能的简洁、灵活,以适应技术和需求方面的变动。当然,所有的未知的因素是不可能考虑周全的,这就要求我们在制定计划时,留出一定的缓冲期,来应对这些未知情况。

    • 适应变化

    传统的软件开发强调的是,足够清晰的需求,制定详细的文档,按照预定的计划逐一进行开发、测试。这样的方式在制定好计划之后拒绝变化,无法应对客户对需求的实时更改,后续的维护必将会付出巨大的代价。

    而敏捷方法则是以最简的方式来迎接变化,客户在整个开发过程中都是参与者,开发团队能够在最短的时间内得到客户的反馈,不断适应需求的变更,从而使得最终的产品能够充分的符合客户的要求。

    2.3敏捷开发

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

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

    敏捷开发可以说是在迭代开发的基础上发展形成的,它额外强调了沟通合作、以人为本的思想。敏捷开发的缺陷可能在于团队不能过大,一般少于20人,且要求成员都是精干,有互相信任的基础。

     

    3.敏捷开发方法:

     

    3.1 Scrum

    3.1.1 什么是scrum

    Scrum 是当前最流行的敏捷软件开发方法论和实施框架。

    Scrum 是一种团队管理工作的方式,其将工作分解为较小的工作单元,并在周期性固定的时间段内持续地交付工作单元

    上面描述的周期性固定的时间段,称为迭代(Iteration)或者冲刺(Sprint)。

    上面描述的较小的工作单元,称为用户故事(User Story)。

    用户故事可以使用特定的格式来描述,其描述了一个对于客户有价值的工作,而且可以在一个迭代周期内完成。

    3.1.2 Scrum 框架结构

    Scrum敏捷开发流程主要包括:三个角色、三个物件和四个会议。

    三个角色:

    产品经理(Product Owner):主要负责确定产品的功能和达到要求的标准,指定软件的发布日期和交付的内容,同时有权力接受或拒绝开发团队的工作成果。

    敏捷教练(Scrum Master):主要负责整个Scrum流程在项目中的顺利实施和进行,以及清除挡在客户和开发工作之间的沟通障碍,使得客户可以直接驱动开发。

    开发团队(Scrum Team):主要负责软件产品在Scrum规定流程下进行开发工作,人数控制在5~10人左右。

    三个物件:

    1、product Backlog : 产品Backlog指根据初始需求分解出的任务列表,包括功能性和非功能性的所有功能。

    2、Sprint Backlog ,这是一个迭代计划会议的输出,包含开发团队在迭代周期内所要完成的工作列表。 如果说产品backlog是以story为单位,文档归属为PM团队,那么Sprint Backlog 是以小时(时间)为单位的,文档归属为开发团队。

    3、燃尽图。

    燃尽图(burn down chart)是在项目完成之前,对需要完成的工作的一种可视化表示。燃尽图有一个Y轴(工作)和X轴(时间)。理想情况下,该图表是一个向下的曲线,随着剩余工作的完成,“烧尽”至零。燃尽图向项目组成员和企业主提供工作进展的一个公共视图。(引自百度百科)

    scrum基本流程(四个会议):

     

    1.产品负责人负责整理user story,形成左侧的product backlog。

    2.产品发布计划会议:product owner负责讲解user story,对其进行估算和排序,发布计划会议的产出就是制定出这一期迭代要完成的story列表,sprint backlog。

    3. spring计划会议:在每个迭代之初,开发团队和 Product Owner 共同来计划在迭代周期内要完成的工作。Product Owner 负责向团队讲解要完成的工作的内容,开发团队负责对工作进行估计。

    4.spring每日立会:每天,开发团队和产品负责人都要进行一个短暂的沟通。团队成员回答昨天做了什么?今天计划做什么?遇到了什么问题?

    5.spring演示会议:在迭代周期结束时,开发团队向产品负责人及所有干系人进行演示,并接受反馈。

    6.spring回顾会议:在迭代周期结束时,Scrum 团队通过会议来对迭代的过程进行总结,以促使团队自我持续改进。

     

    3.2其他开发方法介绍

    水晶方法,Crystal ,是由 Alistair Cockburn 和 Jim Highsmith 建立的敏捷方法系列,其目的是发展一种提倡“机动性的”方法,包含具有共性的核心元素,每个都含有独特的角色、过程模式、工作产品和实践。Crystal 家族实际上是一组经过证明、对不同类型项目非常有效的敏捷过程,它的发明使得敏捷团队可以根据其项目和环境选择最合适的 Crystal 家族成员。

    透明水晶方法,适合于一个小团队来进行敏捷开发,人数在6人以下为宜。

    七大体系特征:

    •1. 经常交付

    任何项目,无论大小、敏捷程度,其最重要的一项体系特征是每过几个月就向用户交付已测试的运行代码。如果你使用了此体系特征,你就会发现,“经常交付”的作用还是很让人吃惊的。

    项目主办者根据团队的工作进展获得重要反馈。用户有机会发现他们原来的需求是否是他们真正想要的,也有机会将观察结果反馈到开发当中。开发人员打破未决问题的死结,从而实现对重点的持续关注。团队得以调整开发和配置的过程,并通过完成这些工作鼓舞团队的士气。

    • 2.反思改进

    在我们的开发中,时常会出现这样那样的问题,技术难题、各种烦心事等等,这会在很大的程度上影响项目的进展。而且,如果其他任务对这项任务有依赖的话,那么其他的任务也会被推迟,这就很可能会导致项目的失败。

    换句话说,如果,我们能够经常在迭代会中及时的反思和改进,那么,这种事情应该是不会发生的,或者说发生了,也能够很快的找到解决方案去应对它。事实上,从慌乱的日常开发中,抽出一点时间来思考更为行之有效的工作方法就已经足够了。

    • 3.渗透式交流

    渗透交流就是信息流向团队成员的背景听觉,使得成员就像通过渗透一样获取相关信息。这种交流通常都是通过团队成员在同一间工作室内工作而实现的。若其中一名成员提出问题,工作室内的其他成员可以选择关注或不关注的态度,可以加入到这个问题的讨论当中来,也可以继续忙自己的工作。

    •4. 个人安全

    个人安全指的是当您指出困扰您的问题时,您不用担心受到报复。个人安全非常重要,有了它,团队可以发现和改正自身的缺点。没有它,团队成员们知而不言,缺点则愈发严重以致于损害整个团队。个人安全是迈向信任的第一步。有了信任,团队协作才能真正的实施,开发效率也就会直线上升的。

    •5.焦点

    所谓“焦点”,就是确定首先要做什么,然后安排时间,以平和的心态开展工作。确保团队成员清楚的了解他们自己最重要的任务是什么,确保他们能够有充分的时间去完成这些任务。

    • 6.与专家用户建立方便的联系

    与专家用户持续建立方便的联系能够给团队提供:对经常交付进行配置以及测试的地方,关于成品质量的快速反馈,关于设计理念的快速反馈,最新的(用户)需求。

    • 7.配有自动测试、配置管理和经常集成功能的技术环境

    自动测试可以为开发人员在代码修改后就可以进行自动测试,并且能够发现存在的一些bug,以至开发人员能够及时的进行修改,对于他们来说,节省了时间,提高了效率,而且还不用为烦人的测试而苦恼。

     

    总结:

    基于敏捷指导思想 ,形成了不少敏捷软件开发方法 (例如XP、scrum、水晶方法等 ),它们大都强调适应性而非预测性、强调以人为中心,而不以流程为中心 ,以及对变化的适应和对人性的关注。

    纵观所有敏捷开发方法,其基本都具备轻载、基于时间、Just Enough、并行并基于构件的迭代和增量的特点 。

     

    4.敏捷管理工具

     

    4.1 禅道

    禅道是一款国产专业的研发项目管理软件,主要管理思想基于国际流行的敏捷项目管理方法—Scrum。

    这是修真院里学员使用的项目管理工具,实际操作带大家了解一下。

     

    5.实例:修真院敏捷开发流程

    这里结合修真院敏捷开发PPT讲解。

    最后再捋一遍:

    敏捷开发是一种以人为核心、迭代、循序渐进的开发方法。在敏捷开发中,软件项目经常被拆分为多个子项目或多个步骤来完成,而一个步骤又称为一次迭代,在每一次迭代完成之后,都会产生一个可交付的产品。这样做有效的分解了整个项目的复杂度,便于实现产品交付目标,同时在项目的早起,就能拿出初具雏形的产品。

    敏捷开发方法的核心思想概括起来,就是“以人为本”和“适应变化”。

         自己目前还是学习基础理论阶段,没有实际项目经验,讲敏捷可能纸上谈兵了,大家有什么意见和补充欢迎提出。

     

    6.讨论

    7.参考文献

    1. 瀑布模型、迭代模型、螺旋模型、敏捷开发、scrum——维基百科

    2. 瀑布模型、迭代模型、螺旋模型、敏捷开发、scrum——百度百科。

    3. 五种典型开发周期模型(瀑布、V、原型化、螺旋、迭代) - CSDN博客

    4. 软件生命周期的内容以及生命周期模型比较 - CSDN博客

    5. 你大概走了假敏捷:认真说说敏捷的实现和问题。——腾讯云,薄玉桴

    6. 软件开发模式对比(瀑布、迭代、螺旋、敏捷) - aparche - 博客园

    7. 敏捷开发系列之旅 第四站(透明的Crystal水晶方法) - CSDN博客

    8. 敏捷开发中原则与过程的分析与研究——张 孟,同济大学软件学院,上海 201804

    9. 【创业技术之道】 谈谈敏捷开发和Scrum——知乎,谭超



    作者:tomatobeef
    链接:https://www.jianshu.com/p/f4dc76f46af0
    來源:简书
    简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

    展开全文
  • 什么是敏捷开发

    万次阅读 多人点赞 2019-05-31 10:49:56
    敏捷开发(Agile)一种以人为核心、迭代、循序渐进的开发方法。 在敏捷开发中,软件项目的构建被切分成多个子项目,各个子项目的成果都经过测试,具备集成和可运行的特征。 简单地来说,敏捷开发并不追求前期完美...

    敏捷开发(Agile)是一种以人为核心、迭代、循序渐进的开发方法。

    在敏捷开发中,软件项目的构建被切分成多个子项目,各个子项目的成果都经过测试,具备集成和可运行的特征。

    简单地来说,敏捷开发并不追求前期完美的设计、完美编码,而是力求在很短的周期内开发出产品的核心功能,尽早发布出可用的版本。然后在后续的生产周期内,按照新需求不断迭代升级,完善产品。

    是谁这么厉害,提出了敏捷开发思想?是一位名叫 Martin Fowler 的美国大叔。

    大叔不但是敏捷开发的创始人之一,还在面向对象开发、设计模式、UML 建模领域做出了重要贡献。目前担任 ThoughtWorks 公司的首席科学家。

    敏捷开发模式的分类
    敏捷开发的实现主要包括 SCRUM、XP(极限编程)、Crystal Methods、FDD(特性驱动开发)等等。其中 SCRUM 与 XP 最为流行。

    同样是敏捷开发,XP 极限编程 更侧重于实践,并力求把实践做到极限。这一实践可以是测试先行,也可以是结对编程等,关键要看具体的应用场景。

    SCRUM 则是一种开发流程框架,也可以说是一种套路。SCRUM 框架中包含三个角色,三个工件,四个会议,听起来很复杂,其目的是为了有效地完成每一次迭代周期的工作。在这里我们重点讨论的是 SCRUM。

    SCRUM 的工作流程

    学习 Scrum 之前,我们先要了解几个基本术语:

    Sprint:冲刺周期,通俗的讲就是实现一个“小目标”的周期。一般需要 2-6 周时间。
    User Story:用户的外在业务需求。拿银行系统来举例的话,一个 Story 可以是用户的存款行为,或者是查询余额等等。也就是所谓的小目标本身。
    Task:由 User Story 拆分成的具体开发任务。
    Backlog:需求列表,可以看成是小目标的清单。分为 Sprint Backlog 和 Product Backlog。
    Daily meeting:每天的站会,用于监控项目进度。有些公司直接称其为 Scrum。
    Sprint Review meeting: 冲刺评审会议,让团队成员们演示成果。
    Sprint burn down:冲刺燃尽图,说白了就是记录当前周期的需求完成情况。
    Release:开发周期完成,项目发布新的可用版本。
    在这里插入图片描述
    如上图所示,在项目启动之前,会由团队的产品负责人(Product owner)按照需求优先级来明确出一份 Product Backlog,为项目做出整体排期。

    随后在每一个小的迭代周期里,团队会根据计划(Sprint Plan Meeting)确定本周期的 Sprint Backlog,再细化成一个个 Task,分配给团队成员,进行具体开发工作。每一天,团队成员都会进行 Daily meeting,根据情况更新自己的 Task 状态,整个团队更新 Sprint burn down chart。

    当这一周期的 Sprint backlog 全部完成,团队会进行 Spring review meeting,也就是评审会议。一切顺利的话,会发布出这一版本的 Release,并且进行 Sprint 回顾会议(Sprint Retrospective Meeting)。

    那么,现实中的 Scrum 是什么样的情景呢?看看下面的照片就知道了:
    在这里插入图片描述
    敏捷开发与 DevOps
    DevOps 是 Development 和 Operations 的合成词,其目标是要加强开发人员、测试人员、运维人员之间的沟通协调。如何实现这一目标呢?需要我们的项目做到持续集成、持续交付、持续部署。

    时下流行的 Jenkins、Bamboo,就是两款优秀的持续集成工具。而 Docker 容器则为 DevOps 提供了强大而有效的统一环境。
    在这里插入图片描述
    在这里插入图片描述

    展开全文
  • ylbtech-开发模式-敏捷开发:什么是敏捷开发 1.返回顶部 1、 0、先来一张导图 1、概念 简单的说,敏捷开发是一种以人为核心、迭代、循序渐进的开发方法。在敏捷开发中,软件项目...
    ylbtech-开发模式-敏捷开发:什么是敏捷开发

     

    1.返回顶部
    1、

    0、先来一张导图

     

     

    1、概念

    简单的说,敏捷开发是一种以人为核心、迭代、循序渐进的开发方法。在敏捷开发中,软件项目的构建被切分成多个子项目,各个子项目的成果都经过测试,具备集成和可运行的特征。

    换言之,就是把一个大项目分为多个相互联系,但也可独立运行的小项目,并分别完成,在此过程中软件一直处于可使用状态。

    敏捷最大的特色是迭代式开发。

    2、优势

     

     

    1、敏捷开发属于增量式开发,对于需求范围不明确,需求变更较多的项目而言,可以很大程度上响应及拥抱变化。

    2、对于互联网产品而言,市场风向转变很快,需要一种及时快速的交付形式,而敏捷开发则能更好地适用于此。

    3、敏捷开发可最大程度体现80/20法则的价值,通过增量迭代,每次都优先交付那能产生80%价值效益的20%功能。能最大化单位成本收益。

    3、误区

     

    4、特点

     

    5、核心原则

     

     

    6、捷开发与瀑布模型开发

     

    瀑布模型开发

        

     

    敏捷开发

     

    某博主po的一个很有趣的“敏捷和瀑布”对比例子,给大家作为阅读参考:

     

     

    6.1、敏捷开发

    • 客人到餐馆来点菜(新项目)

    • 不确定客户想吃什么的时候,通常选好餐厅后会先看看餐厅的菜单(客户往往提不出具体的需求)

    • 根据图文菜单,客人点了是个菜(根据原型和设计稿,基本确定了需求)

    • 后厨开始准备(项目启动)

    • 配菜、炒菜,先上了两盘,让客人尝了尝味道(先提供可用实例给客户用)

    • 客人说还不错,后厨继续准备后面的菜,陆续上菜(不断迭代,不断测试)

    • 上菜过程中,客人突然发现有个菜的味道太淡了,让后厨加了点盐又端上来了(敏捷的好处,可以不断测试和需求变更)

    • 又上了两盘,不够辣,又拿到后厨加了辣(敏捷的坏处,需求没有提前明确,反复迭代,增加了工作量)

    • 到最后两盘时,客人要求换两个菜,还好没炒(迭代的好处,随时接受需求变更)

    • 客人吃完,很满意(基本满足了全部的要求)

     

    6.2、瀑布模型开发

    • 客人到餐馆来点菜(新项目)

    • 不确定客户想吃什么的时候,通常选好餐厅后会先看看餐厅的菜单(客户往往提不出具体的需求)

    • 根据图文菜单,客人点了十个菜(根据原型和设计稿,基本确定了需求)

    • 后厨开始准备(项目启动)

    • 根据客人的下单配菜,炒菜(基本上不会主动去了解完整需求)

    • 半个小时了,菜还没上桌,客人饿极了(项目启动后很长一段时间客户什么都看不到)

    • 再过了二十分钟,十个菜都一起上来了(项目最终一次交付)

    • 客人说,有几个菜挺好的,但是有个菜味道淡了,有两个不够辣,还有两盘重复了想换掉(我是买单的,我要变需求)

    • 这时候大堂经理来了,说,“味道淡了可以加盐,不辣可以加辣,但是换菜不行,已经炒好的那两盘菜也是要算成本的”(瀑布的坏处,需求变更比较麻烦)

    • 于是,后厨只给客户加了盐,加了辣

    • 客人吃完,不是很满意,下次不来了(没有满足需求)

     

    7、总结

    但总的来说,在现在管理项目过程中,并没有严格的按照完全的敏捷或者完全的瀑布模式,都是各自掺杂了其他的方式。在实际项目过程中,过于强调模式并没有意义,重要的是能不能预防问题的发生,在问题发生之后能不能用最小的成本解决,模式更多起一个参考作用

    最后借用民国时候的一句话:少研究一些主义,多关注一些实际问题

    2、
    2.返回顶部
     
    3.返回顶部
     
    4.返回顶部
     
    5.返回顶部
     
     
    6.返回顶部
     
    warn 作者:ylbtech
    出处:http://ylbtech.cnblogs.com/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

    转载于:https://www.cnblogs.com/storebook/p/11227114.html

    展开全文
  • 什么是敏捷开发?

    2020-04-12 18:53:37
    但是,到底什么是敏捷开发,能说清的人却不多。本文尝试用简洁易懂的语言,解释敏捷开发。 一、迭代开发 敏捷开发的核心是迭代开发(iterative development)。敏捷一定是采用迭代开发的方式。 那么什么是"迭代...

    敏捷开发(agile development)是非常流行的软件开发方法。据统计,2018年90%的软件开发采用敏捷开发。

    但是,到底什么是敏捷开发,能说清的人却不多。本文尝试用简洁易懂的语言,解释敏捷开发。

    一、迭代开发

    敏捷开发的核心是迭代开发(iterative development)。敏捷一定是采用迭代开发的方式。

    那么什么是"迭代开发"呢?迭代的英文是 iterative,直译为"重复",迭代开发其实就是"重复开发"。

    对于大型软件项目,传统的开发方式是采用一个大周期(比如一年)进行开发,整个过程就是一次"大开发";迭代开发的方式则不一样,它将开发过程拆分成多个小周期,即一次"大开发"变成多次"小开发",每次小开发都是同样的流程,所以看上去就好像重复在做同样的步骤。

    举例来说,SpaceX 公司想造一个大推力火箭,将人类送到火星。但是,它不是一开始就造大火箭,而是先造一个最简陋的小火箭 Falcon 1。结果,第一次发射就爆炸了,直到第四次发射,才成功进入轨道。然后,开发了中型火箭 Falcon 9,九年中发射了70次。最后,才开发 Falcon 重型火箭。如果 SpaceX 不采用迭代开发,它可能直到现在还无法上天。

    迭代开发将一个大任务,分解成多次连续的开发,本质就是逐步改进。开发者先快速发布一个有效但不完美的最简版本,然后不断迭代。每一次迭代都包含规划、设计、编码、测试、评估五个步骤,不断改进产品,添加新功能。通过频繁的发布,以及跟踪对前一次迭代的反馈,最终接近较完善的产品形态。

    二、增量开发

    迭代开发只是要求将开发分成多个迭代,并没有回答一个重要的问题:怎么划分迭代,哪个任务在这个迭代,哪个任务在下个迭代?这时,一般采用"增量开发"(incremental development)划分迭代。

    所谓"增量开发",指的是软件的每个版本,都会新增一个用户可以感知的完整功能。也就是说,按照新增功能来划分迭代。

    举例来说,房产公司开发一个10栋楼的小区。如果采用增量开发的模式,该公司第一个迭代就是交付一号楼,第二个迭代交付二号楼......每个迭代都是完成一栋完整的楼。而不是第一个迭代挖好10栋楼的地基,第二个迭代建好每栋楼的骨架,第三个迭代架设屋顶......

    增量开发加上迭代开发,才算真正的敏捷开发。

    三、敏捷开发的好处

    3.1 早期交付

    敏捷开发的第一个好处,就是早期交付,从而大大降低成本。

    还是以上一节的房产公司为例,如果按照传统的"瀑布开发模式",先挖10栋楼的地基、再盖骨架、然后架设屋顶,每个阶段都等到前一个阶段完成后开始,可能需要两年才能一次性交付10栋楼。也就是说,如果不考虑预售,该项目必须等到两年后才能回款。

    敏捷开发是六个月后交付一号楼,后面每两个月交付一栋楼。因此,半年就能回款10%,后面每个月都会有现金流,资金压力就大大减轻了。

    3.2 降低风险

    敏捷开发的第二个好处是,及时了解市场需求,降低产品不适用的风险。

    请想一想,哪一种情况损失比较小:10栋楼都造好以后,才发现卖不出去,还是造好第一栋楼,就发现卖不出去,从而改进或停建后面9栋楼?

    对于软件项目来说,先有一个原型产品,了解市场的接受程度,往往是项目成功的关键。有一本书叫做《梦断代码》,副标题就是"20+个程序员,三年时间,4732个bug,100+万美元,最后失败的故事",这就是没有采用敏捷开发的结果。相反的,Instagram 最初是一个地理位置打卡 App,后来发现用户不怎么在乎地理位置,更喜欢上传照片,就改做照片上传软件,结果成了独角兽。

    由于敏捷开发可以不断试错,找出对业务最重要的功能,然后通过迭代,调整软件方向。相比传统方式,大大增加了产品成功的可能性。如果市场需求不确定,或者你对该领域不熟悉,那么敏捷开发几乎是唯一可行的应对方式。

    四、如何进行每一次迭代

    虽然敏捷开发将软件开发分成多个迭代,但是也要求,每次迭代都是一个完整的软件开发周期,必须按照软件工程的方法论,进行正规的流程管理。

    具体来说,每次迭代都必须依次完成以下五个步骤。

    1. 需求分析(requirements analysis)
    2. 设计(design)
    3. 编码(coding)
    4. 测试(testing)
    5. 部署和评估(deployment / evaluation)

    每个迭代大约持续2~6周。

    五、敏捷开发的价值观

    《敏捷软件开发宣言》里面提到四个价值观。

    • 程序员的主观能动性,以及程序员之间的互动,优于既定流程和工具。
    • 软件能够运行,优于详尽的文档。
    • 跟客户的密切协作,优于合同和谈判。
    • 能够响应变化,优于遵循计划。

    六、十二条原则

    该宣言还提出十二条敏捷开发的原则。

    1. 通过早期和持续交付有价值的软件,实现客户满意度。
    2. 欢迎不断变化的需求,即使是在项目开发的后期。要善于利用需求变更,帮助客户获得竞争优势。
    3. 不断交付可用的软件,周期通常是几周,越短越好。
    4. 项目过程中,业务人员与开发人员必须在一起工作。
    5. 项目必须围绕那些有内在动力的个人而建立,他们应该受到信任。
    6. 面对面交谈是最好的沟通方式。
    7. 可用性是衡量进度的主要指标。
    8. 提倡可持续的开发,保持稳定的进展速度。
    9. 不断关注技术是否优秀,设计是否良好。
    10. 简单性至关重要,尽最大可能减少不必要的工作。
    11. 最好的架构、要求和设计,来自团队内部自发的认识。
    12. 团队要定期反思如何更有效,并相应地进行调整。

    七、参考链接

    (完)

    展开全文
  • 原标题:什么是敏捷开发?它有什么特点随着软件开发技术的不断发展,现在出现了很多种不同的开发模式,其实敏捷开发已经成为现在很多企业开发应用程序都想要选择的开发方案。那么什么是敏捷开发呢?下面一起来了解...
  • 什么是敏捷开发流程

    万次阅读 2019-05-11 19:34:29
    什么是敏捷开发流程 】 这个词猛一听起来感觉很高大上,其实现在已经是主流的团队开发流程 了。 一. 先说一下官方的定义: 敏捷不是指某一种具体的方法论、过程或框架,而是一组价值观和原则。符合敏捷价值观....
  • 什么是敏捷开发?它有什么特点

    千次阅读 2020-05-15 10:12:45
    那么什么是敏捷开发呢?下面一起来了解一下相关的知识吧!  常用的 4 种开发模式:  1.瀑布式开发  瀑布式开发是由 WW.Royce 在 1970 年提出的软件开发模型,是一种比较老的计算机软件开发模式, 也是典型的预见...
  • 什么是敏捷开发中的Spike? Spike,如果需要翻译的话,中文可以翻译成“探针”,但是一般不会翻译而直接使用Spike这个词。 Spike可以理解为:以回答问题或收集信息为目的的任务,而不是生产非专业产品的任务。有时...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,314
精华内容 2,125
关键字:

什么是敏捷开发