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

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


推荐阅读
  • 2018年人工智能大数据的爆发,学Java还是Python?
    本文介绍了2018年人工智能大数据的爆发以及学习Java和Python的相关知识。在人工智能和大数据时代,Java和Python这两门编程语言都很优秀且火爆。选择学习哪门语言要根据个人兴趣爱好来决定。Python是一门拥有简洁语法的高级编程语言,容易上手。其特色之一是强制使用空白符作为语句缩进,使得新手可以快速上手。目前,Python在人工智能领域有着广泛的应用。如果对Java、Python或大数据感兴趣,欢迎加入qq群458345782。 ... [详细]
  • 基于PgpoolII的PostgreSQL集群安装与配置教程
    本文介绍了基于PgpoolII的PostgreSQL集群的安装与配置教程。Pgpool-II是一个位于PostgreSQL服务器和PostgreSQL数据库客户端之间的中间件,提供了连接池、复制、负载均衡、缓存、看门狗、限制链接等功能,可以用于搭建高可用的PostgreSQL集群。文章详细介绍了通过yum安装Pgpool-II的步骤,并提供了相关的官方参考地址。 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • 本文介绍了如何将CIM_DateTime解析为.Net DateTime,并分享了解析过程中可能遇到的问题和解决方法。通过使用DateTime.ParseExact方法和适当的格式字符串,可以成功解析CIM_DateTime字符串。同时还提供了关于WMI和字符串格式的相关信息。 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • Android Studio Bumblebee | 2021.1.1(大黄蜂版本使用介绍)
    本文介绍了Android Studio Bumblebee | 2021.1.1(大黄蜂版本)的使用方法和相关知识,包括Gradle的介绍、设备管理器的配置、无线调试、新版本问题等内容。同时还提供了更新版本的下载地址和启动页面截图。 ... [详细]
  • 学习SLAM的女生,很酷
    本文介绍了学习SLAM的女生的故事,她们选择SLAM作为研究方向,面临各种学习挑战,但坚持不懈,最终获得成功。文章鼓励未来想走科研道路的女生勇敢追求自己的梦想,同时提到了一位正在英国攻读硕士学位的女生与SLAM结缘的经历。 ... [详细]
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • Principle for Mac(交互式屏幕设计软件)免激活版
    Mac上好用的交互式屏幕设计软件,PrincipleforMac是一款交互式屏幕设计软件,principle mac让您的设计将以原则出现,随时为您注入新的活力。如果您进行更改,再 ... [详细]
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • 本文介绍了在Pygame中使用矩形对表面进行涂色的方法。通过查阅Pygame文档中的blit函数,可以了解到如何将一个表面的特定部分复制到另一个表面的指定位置上。具体的解决方法和参数说明在文中都有详细说明。 ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • 本文由编程笔记小编整理,介绍了PHP中的MySQL函数库及其常用函数,包括mysql_connect、mysql_error、mysql_select_db、mysql_query、mysql_affected_row、mysql_close等。希望对读者有一定的参考价值。 ... [详细]
  • 本文介绍了使用PHP实现断点续传乱序合并文件的方法和源码。由于网络原因,文件需要分割成多个部分发送,因此无法按顺序接收。文章中提供了merge2.php的源码,通过使用shuffle函数打乱文件读取顺序,实现了乱序合并文件的功能。同时,还介绍了filesize、glob、unlink、fopen等相关函数的使用。阅读本文可以了解如何使用PHP实现断点续传乱序合并文件的具体步骤。 ... [详细]
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社区 版权所有