热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

啥是敏捷开发?

自打听了民哥的《软件工程》,敏捷开发基本上是他每节课必提的开发方法,那么我们先来看一下,什么是敏捷开发。敏捷开发是通过遵循软件客观规律,不断的进行迭代增量开发,最终交付符合客户价值的产品

自打听了民哥的《软件工程》,敏捷开发基本上是他每节课必提的开发方法,那么我们先来看一下,什么是敏捷开发。

     敏捷开发是通过遵循软件客观规律,不断的进行迭代增量开发,最终交付符合客户价值的产品,敏捷开发的软件更像一个活着的植物,软件开发是自底向上逐步有序的生长过程,类似于植物自然生长。敏捷开发的宣言是个体和交互胜过过程和工具,可以工作的软件胜过面面俱到的文档,客户合作胜过合同谈判,响应变化胜过遵循计划。但在敏捷开发过程中人是获得成功的最为重要的因素。文档需适度,在处理客户问题上,双赢比输赢更好,在响应变化过程中,要为下两周做详细的计划,为下三个月做粗略的计划,以后就做极为粗糙的计划。

     但敏捷开发也不是随心所欲,自我放纵的开发,他也有自己的开发原则,(1)尽早并持续地交付有价值的软件以满足顾客需求。(2)敏捷流程欢迎需求的变化并利用这种变化来提高用户的竞争优势。(3)经常发布可用的软件,发布间隔可以从几周到几个月,能短则短。(4)业务人员和开发人员在项目开发过程中应该每天共同工作。(5)以有进取心的人为项目核心,充分支持信任他们 (6)无论团队内外,面对面的交流始终是最有效的沟通方式 个人觉得在团队开发过程中这一点做得不是很好(7)可用的软件是衡量项目进展的主要指标 (8)敏捷流程应能保持可持续的发展。 领导团队和用户应该能按照目前步调持续合作下去。(9)只有不断关注技术和设计才能越来越敏捷。(10)保持简明 尽可能简化工作量的技艺 极为重要。(11)只有能自我管理的团队才能创造优秀的架构需求和设计。(12)时时总结如何提高团队效率并付诸行动。俗话说的好,没有规矩不成方圆,敏捷开发在自由范围之内又遵守自己的原则,兼顾了灵活与实用性。

      下面我们来认识一下敏捷开发的方法,其中包括:极限编程XPScrum,精益软件开发,动态系统开发,特性驱动开发,水晶开发。虽然方法不同,但他们都拥有共同的特征

①迭代式开发,迭代开发将整个软件生命周期分成多个小的迭代(一般2-4周),每一次迭代都由需求分析、设计、实现和测试在内的多个活动组成,每一次迭代都可以生成一个稳定和被验证过的软件版本。其好处是:1)通过将高技术风险的需求在早期迭代里实现,有助于尽早暴露问题和及时消除风险2)通过提供功能渐增的产品,持续从客户获得反馈,根据反馈及时调整,使最终产品更加符合客户的需要3)通过小批量减少排队,提供更灵活、快速的交付能力4)平滑人力资源的使用,避免出现瓶颈。迭代开发的关键要点是:1)每一次迭代都建立在稳定的质量基础上,并做为下一轮迭代的基线,整个系统的功能随着迭代稳定地增长和不断完善。2)每次迭代要邀请用户代表(外部或内部)验收,提供需求是否满足的反馈3)迭代推荐采用固定的周期(2-4周),迭代内工作不能完成,应当缩减交付范围而不是延长周期,简而言之就是,迭代开发是有节奏地小步快跑,但建立在坚实的质量基础上。②增量交付,③开发团队和用户反馈推动产品开发,④持续集成,⑤开发团队自我管理。

不难看出,敏捷开发的方法和特征正是当代高速发展的社会最需要的开发方法。

      但真正的敏捷开发实践是什么样的呢?让我们来看一下,敏捷包括三个层次,(1)理念(敏捷核心思想)(2)优秀实践(敏捷的经验积累)(3)具体应用(能够结合自身灵活应用才是真正敏捷),但我们在实际开发过程中应灵活选择最适合自己的实践,避免教条化。要想应用敏捷开发,必须要深入理解敏捷理念,其一,深入理解“聚焦客户价值”,包括:标识和消除软件开发中的浪费;交付刚刚好的系统:在项目明显超负荷时,管理者简单地期望靠团队work harder来解决,最终导致:(质量下降,项目延期,客户不满意,团队疲劳,埋下长期隐患);随时构建质量,不容忍缺陷,发现缺陷应立即停下来解决,以保证在坚实的质量基础上前行;及时消除技术债务,持续保持快速响应;;其二:深入理解“激发团队”,包括:认清团队的基本事实(不盲目冒进,对自己的能力做出正确的评估);敏捷方式下管理者的转变(通过目标来牵引团队自主工作;帮助团队提供资源,排除障碍;营造团队自管理的工作氛围;作为教练辅导团队进步),敏捷方式下对管理者最大的挑战是学会放松“控制”;基于简单原则的管理,原则简单但必须被遵守);敏捷方式下团队成员的转变(从被动到主动的心态转变是团队成员适应敏捷开发的关键);;其三,深入理解“适应变化”,包括:认请“客户是逐步发现真正需求”,我们要意识到,客户是逐步发现他真正要的东西,开发人员逐步发现如何开发产品满足客户需求,在这个过程中随时可能发生变化;小批量是快速交付的关键,在需求响应周期相同的情况下,批量(一次开发的需求量)越小,资源利用率更高。在资源利用率相同的情况下,批量越小,交付周期更短。减小批量不仅带来缩短交付周期,而且还带来提高质量、促进创新、降低管理成本、更高的效率等其他好处,大幅提升商业价值;通过迭代计划不断调整以适应需求变化,变化无法一次性预测,一开始制作大而全的计划易造成浪费,应根据迭代积累的经验和需求变化的情况对计划不断调整和细化;应持续保持良好的软件架构,新产品开发通过早期迭代来实现和验证架构,有利于架构的尽早稳定;利用多层次反馈不断调整以逼近目标。

下面让我们来看一下敏捷实践的概览,敏捷软件开发是以短周期迭代为核心,包含团队、工作件、管理和技术优秀实践的集合,其中,敏捷团队包括3个核心角色: PO(Product Owner)Scrum Master(Scrum教练)Team(开发产品),产品Backlog是需求动态管理的载体。在软件开发过程中,团队的交流是必不可少的,这里我们简称“会议”,其中包括:迭代计划会议,每日站立会议,用户故事,结对编程,测试驱动开发和持续集成。

     迭代计划会议的基本内容为:澄清需求、对“完成标准”达成一致;工作量估计、根据团队能力确定本轮迭代交付内容;细化、分配迭代任务和初始工作计划。关键要点为:充分参与,相互承诺,确定内部任务。

    每日站立会议是每日工作前,团队成员的例行沟通机制,由Scrum Master组织,Team成员全体站立参加的会议,主要聚焦在下面的三个主题:我昨天为本项目做了什么?我计划今天为本项目做什么?我需要什么帮助以更高效的工作?它的好处在于:增加了团队凝聚力,产生了积极的工作氛围;及时暴露风险和问题;促进团队内成员的沟通和协调。

    用户故事是站在用户角度描述需求的一种方式;每个用户故事须有对应的验收测试用例;用户故事是分层分级的,在使用过程中逐步分解细化;典型的描述句式为:作为一个XXX客户角色,我需要XXX功能,带来XXX好处。

    结对编程提高代码质量和工作效率。

    测试驱动开发以测试作为编程的中心,它要求在编写任何代码之前,首先编写定义代码功能的测试用例,编写的代码要通过用例,并不断进行重构优化;TDD要求测试可以完全自动化运行。测试驱动开发保证代码整洁可用。

     持续集成(CI)是一项软件开发实践,其中团队的成员经常集成他们的工作,通常每人每天至少集成一次,每次集成通过自动化构建完成。持续集成提供产品质量的快速反馈,保证随时拥有可工作的软件。

     以上就是我对敏捷开发的综述与理解,希望对你们都有帮助。


推荐阅读
  • 本文探讨了Flutter和Angular这两个流行框架的主要区别,包括它们的设计理念、适用场景及技术实现。 ... [详细]
  • 深入理解SAP Fiori及其核心概念
    本文详细介绍了SAP Fiori的基本概念、发展历程、核心特性、应用类型、运行环境以及开发工具等,旨在帮助读者全面了解SAP Fiori的技术框架和应用场景。 ... [详细]
  • 如何在Windows 10中显示详细的登录过程
    本文将指导您如何配置Windows 10系统以显示详细的登录过程信息,这对于系统管理员和高级用户来说非常有用。通过简单的注册表设置,您可以了解登录时系统的具体操作。 ... [详细]
  • 时尚界的独特存在:Ruby Aldridge的家族故事
    在时尚界,有些家族以其独特的魅力和才华闻名。本文将介绍Ruby Aldridge,一个在家族光环下依然走出自己道路的时尚新星。 ... [详细]
  • 利用Selenium框架解决SSO单点登录接口无法返回Token的问题
    针对接口自动化测试中遇到的SSO单点登录系统不支持通过API接口返回Token的问题,本文提供了一种解决方案,即通过UI自动化工具Selenium模拟用户登录过程,从浏览器的localStorage或sessionStorage中提取Token。 ... [详细]
  • 第三周课堂测试1、使用汇编语言编写指令时,用一些简单的容易记忆的符号来代替二进制指令,比机器语言更为方便,属于高级语言。(B ... [详细]
  • 我们正在使用GNU Make来构建我们的系统,在makefile文件的末尾,我们通过一个名为Makedepends的包含来生成一系列的.d文件。然而,当文件被删除或移动时,依赖关系会中断,我们需要寻找一种方法来优雅地处理这种情况。 ... [详细]
  • DropBlock:一种卷积网络的正则化技术
    本文详细探讨了DropBlock这一正则化方法在卷积神经网络中的应用与效果。通过结构化的dropout方式,即在特征图中连续区域内的单元同时被丢弃,DropBlock有效解决了传统dropout在卷积层应用时效果不佳的问题。更多理论分析及其实现细节可参考原文链接。 ... [详细]
  • 本文介绍如何在 Ruby 中利用 Splat 运算符(*)来简化方法参数的处理,提高代码的灵活性和可读性。 ... [详细]
  • 成为一名高效的Java架构师不仅需要掌握高级Java编程技巧,还需深入理解JVM的工作原理及其优化方法。此外,对池技术(包括对象池、连接池和线程池)的应用、多线程处理、集合对象的内部机制、以及常用的数据结构和算法的精通也是必不可少的。同时,熟悉Linux操作系统、TCP/IP协议栈、HTTP协议等基础知识,对于构建高效稳定的系统同样重要。 ... [详细]
  • 专注于模式识别与机器学习的研究生,对于该领域内的就业方向及具体职位要求有着浓厚的兴趣。本文将探讨智能图像/视频处理工程师的岗位要求,并为相关专业的学生提供学习建议。 ... [详细]
  • C#爬虫Fiddler插件开发自动生成代码
    哈喽^_^一般我们在编写网页爬虫的时候经常会使用到Fiddler这个工具来分析http包,而且通常并不是分析一个包就够了的,所以为了把更多的时间放在分析http包上,自动化生成 ... [详细]
  • 关于python中的字符串,python里面字符串 ... [详细]
  • 本文旨在为初学者提供详细的指导,帮助他们更好地理解和掌握GPO(组策略对象)的管理方法。通过探讨GPO的基本概念及其在实际应用中的挑战,我们将介绍一些有效的策略管理和恢复技术。 ... [详细]
  • 2020年腾讯PCG后端开发实习生面试经历分享
    本文详细记录了2020年腾讯平台与内容事业群(PCG)后端开发实习生岗位的面试过程,包括初试和复试的主要内容和技术考察点。 ... [详细]
author-avatar
o筱灵丹
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有