热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

敏捷开发_持续交付与敏捷开发的历史

篇首语:本文由编程笔记#小编为大家整理,主要介绍了持续交付与敏捷开发的历史相关的知识,希望对你有一定的参考价值。

篇首语:本文由编程笔记#小编为大家整理,主要介绍了持续交付与敏捷开发的历史相关的知识,希望对你有一定的参考价值。



正文共3557字4图,阅读时间:9分钟


编辑 | Dishayen


图片来源 | Twenty20



软件中的“持续交付”不仅仅是一个热门话题。


软件的持续交付是软件开发实践和客户保留的圣杯,这也是DevOps今天是如此热门的概念的原因。要了解持续交付的重要性,你需要了解敏捷的历史以及敏捷方法的来源。


敏捷软件开发的历史并不是从敏捷宣言开始的。



持续交付与敏捷开发的历史







首次出现危机






在20世纪90年代初期,随着PC计算机开始在企业中激增,软件开发面临危机。当时,它被广泛称为“应用程序开发危机”或“应用程序交付滞后”。业内专家估计,经过验证的业务需求和实际生产中的实际应用之间的时间大约为三年。


问题是,即使在25年前,企业的迁移速度也比这更快。


在三年的时间里,需求、系统甚至整个业务都可能发生变化。这意味着许多项目在中途取消,许多已完成的项目并不能满足企业当前的所有需求,即使项目的最初目标已经达到。


在某些行业,滞后时间远远超过三年。在航空航天和国防领域,在一个复杂的系统投入实际使用之前可能需要20年或更长的时间。在一个极端但绝非例外的例子中,1982年开始运营的航天飞机计划使用了20世纪60年代以来的信息和处理技术。高度复杂的硬件和软件系统通常是在数十年的时间范围内设计,开发和部署的。







思想领袖感到沮丧






上世纪90年代,航空航天工程师乔恩科恩因为这些漫长的交付时间以及早期做出的决定而变得越来越沮丧,该项目后来无法改变。“我们正在寻找更加及时和反应迅速的产品,”他指出,越来越多的人认为必须有更好的软件构建方式。


他是17名软件思想领袖之一。


他们开始非正式会面并讨论如何更简单地开发软件,而没有当时瀑布和其他流行软件工程技术的过程和文档开销。


其他行业也在进行转型。设计一款新车需要六年或更长的时间,而在九十年代,这一时间几乎减半。AT&T已经被打破,所谓的“小贝尔”正在大幅降低手机和服务的成本。








敏捷诞生了






2001年初,在犹他州举行了着名的Snowbird会议,这些看似非生产性的软件开发活动受到志同道合的专业人士的共同欢迎。但这并不是这一群软件领导者第一次见面。他们在2000年春天在俄勒冈州的Rogue River Lodge收集了一年前的资料。


这个团队包括Kern,极限编程先驱Kent Beck和Ward Cunningham,Arie van Bennekum,Alistair Cockburn和其他十二位,今天在敏捷社区都很有名。作为一种实践,敏捷并不是最终的目标。实际上,在那个时代之前,“敏捷”尚未用于正式谈话。在那次会议上,“轻”和“轻”这些术语更为常见,但没有一个参与者对这种描述特别满意。


特别是,这些思想领袖想方设法快速构建工作软件并将其交付给最终用户。这种快速交付方式提供了一些重要的好处。首先,它使用户能够更快地获得新软件的部分商业利益。其次,它使软件团队能够迅速反馈软件的范围和方向。


快速反馈和改变意愿成为敏捷运动的关键特征。


如果软件团队对理解用户需求没有把握,那么它会提供第一个近似值,然后收听反馈。但是在项目开始的时候几乎没有什么可以做的。









对重量级过程的反弹






敏捷决不是批判在20世纪70年代和80年代开发的开发方法,是以回应软件早期经常使用的混乱和无计划的方法。事实上,从1970年到1990年,软件工程的基础理论和实践应运而生。这个想法是将软件工程和物理工程等同起来,并尽可能地从设计和建筑实际中借用。


这种方法表现在已知的瀑布方法中。这种方法明确定义了从需求到部署的应用程序开发生命周期的主要阶段。它被称为“瀑布”,因为团队完成了一步,然后再进入下一步。在继续进行功能设计之前,必须完成要求,在详细设计之前完成功能设计,等等。就像没有上坡的水一样,很少有条件返回到过程的早期阶段。一旦你完成了一个阶段,那个阶段就会被及时冻结。


这种方法给软件开发带来了组织和工程实践的感觉。但是有一个关键的区别。民用或机械工程项目在十年或更长时间内很少发生变化。如果你今天需要设计一座桥梁或一座高层建筑,很可能在一两年内不需要修改细节。


事实上,最初设想的瀑布应该适应项目决策的变化和重新考虑。可以回到前一阶段,调整一些决策和期望,这些改变可能会改变目前阶段的各个方面。但在实践中,时间表和预算几乎总是让人觉得不可能,迫使团队坚持早先的决定。


当时,大多数软件开发团队和大学计算机科学部门都把它作为福音,你花更多的时间计划,花在编写代码上的时间就越少,代码就越好。这只会加强一个流程繁重的方法,比交付工作软件更重视规划和文档。


软件项目很少具有与传统工程项目相同的稳定性。业务需求似乎在一夜之间发生变化,并且肯定比以前完成软件应用所需的几个月或几年更快。回想起来,软件显然需要一种不同的工程方法。


当然,问题的另一个部分是软件设计既是一门科学又是一门艺术,其缺陷和相关的人类局限性。


首先,我们根本不知道如何很好地定义软件。用户可以描述他们的业务工作流程,但是他们无法告诉软件设计师哪些功能会自动化以及这些功能应该如何工作。在开始构建产品之前,我们无法精确定义需要什么,将软件工程与大多数其他工程学科分离开来。


其次,从需求到原来的不完美,规范,从规格到实施的翻译都充满了含糊不清。其中一些来自文字的性质; 如果一个声明可能会被误解,那么它几乎肯定会是。但是,由于团队正在设计层面阅读并将其转化为实施层面,所以必然会出现错误和误解。







从业者想要迭代开发






同时,更具体的迭代方法正在开发中。例如,Jeff Sutherland和Ken Schwaber在20世纪90年代初期构思了Scrum过程。这个词来源于橄榄球,并提到了一个朝着共同目标努力的团队。为了在德克萨斯州奥斯汀的面向对象会议上展示它,他们在1995年编写了Scrum。他们以标题为“SCRUM软件开发过程”的论文形式发布了它。


Scrum的基础是这样一个概念,即对于开发新的复杂产品,当小型自组织团队获得目标而不是具体任务时,会产生最佳结果。团队可以自由决定实现这些目标的最佳方式。Scrum还定义了时间盒迭代开发周期,其目标是提供工作软件。今天,大多数宣称采用敏捷方法的团队都表示他们正在使用Scrum。


大约在同一时间,Kent Beck被聘为克莱斯勒实验软件开发项目的顾问。最终,他被任命为项目负责人,为了取得成功,他决定将最佳实践推向极致,并以XP方法论为名。尽管克莱斯勒收购后该项目最终取消,但贝克出版了一本名为“ 极限编程解释 ”的书,并且他的名字成为了领先的替代方法之一的代名词。


也许各种敏捷和迭代技术仍然是少数派,但它不适用于2001年在Snowbird会议上编写的敏捷宣言(Agile Manifesto)。尽管这个小组的目标不明确,但宣言是与当时仍然普遍存在的瀑布模型相反的方法的最明确和最简洁的目的声明。


因此,软件开发社区已经将敏捷宣言及其12项原则锁定为敏捷软件开发运动的明确声明。今天,越来越多的团队自我认定为使用敏捷方法。尽管这些团队中的很多人可能使用包含若干敏捷方法和瀑布元素的混合模型,但他们完全认同敏捷运动的特征,证明了声明的强度和运动的力量。







敏捷、超越






尽管敏捷将我们带到了现实的位置,但并不是故事的结束。有超越敏捷的生活,虽然敏捷是必要的第一步,看看软件开发可能能够冒险的地方。尽快要求我们的头脑可以看到需要软件更改可能是愚蠢的,但尝试加快速度并不愚蠢。敏捷概念能否促进我们软件的持续有效变革?我们是否可以达到软件“发布”及其所有改进的目标不再是计划的事件,而只是像呼吸一样每天,每小时或每分钟发生一次?


但是他所描述的内容毫无疑问。他对软件向生产发布的趋势进行了表述,并讨论了能够每季度,每月,每周发布新版本以及最终每日甚至连续发布新版本的意义。“如果我们不知道该功能是否正确,”他指出,“我们提供了两个版本,让用户决定。” 正如我们今天可以说的,这是持续交付的一个缩影,或DevOps。


敏捷流程是朝这个方向迈出的必要的第一步,但持续交付需要更大的改变。这意味着开发人员根据他们的最佳知识尝试某些东西,但却完全准备根据用户的反应立即删除或更改它。


用户的反应并不是以言语的形式出现,而是以行动的形式出现。


我们监视生产中的应用程序并收集用户行为的数据。实时分析这些数据可以告诉团队接下来要做什么。接下来发生的事情不会超过一两天。



 END 


推荐阅读
  • 在拉斯维加斯举行的Interop 2011大会上,Bitcurrent的Alistair Croll发表了一场主题为“如何以云计算的视角进行思考”的演讲。该演讲深入探讨了传统IT思维与云计算思维之间的差异,并提出了在云计算环境下应具备的新思维方式。Croll强调了灵活性、可扩展性和成本效益等关键要素,以及如何通过这些要素来优化企业IT架构和运营。 ... [详细]
  • MySQL 8.0 MGR 自动化部署与配置:DBA 和开源工具的高效解决方案
    MySQL 8.0 MGR 自动化部署与配置:DBA 和开源工具的高效解决方案 ... [详细]
  • Kafka组件详解及工作原理
    本文介绍了Apache Kafka的核心组件及其工作方式,包括生产者(Producer)、消费者(Consumer)、主题(Topic)、代理(Broker)、分区(Partition)、消费者组(Consumer Group)和偏移量(Offset),并探讨了这些组件之间的交互机制。 ... [详细]
  • 使用Python轻松合并大量复杂Excel文件
    当面对大量的Excel文件时,如何高效地将它们合并成一个文件成为了一项挑战。本文将指导初学者如何利用Python的几个库,在几十行代码内完成这一任务。 ... [详细]
  • python image stiching_Python自然语言处理,词云图生成
    自然语言处理本节介绍如何使用Python中的库,生成词云图,涉及自然语言处理的相关问题,自然语言处理是计算机科学领域与人工智能领域中的一个 ... [详细]
  • TensorFlow核心函数解析与应用
    本文详细介绍了TensorFlow中几个常用的基础函数及其应用场景,包括常量创建、张量扩展以及二维卷积操作等,旨在帮助开发者更好地理解和使用这些功能。 ... [详细]
  • Python图像处理库概览
    本文详细介绍了Python中常用的图像处理库,包括scikit-image、Numpy、Scipy、Pillow、OpenCV-Python、SimpleCV、Mahotas、SimpleITK、pgmagick和Pycairo,旨在帮助开发者和研究人员选择合适的工具进行图像处理任务。 ... [详细]
  • WPS文档中实现高效批量文本替换的指南
    本文详细介绍了如何在WPS文档中快速执行批量文本替换的操作方法,旨在帮助用户提高文档编辑效率。 ... [详细]
  • Flutter 高德地图插件使用指南
    本文档详细介绍了如何在Flutter项目中集成和使用高德地图插件,包括安装、配置及基本使用方法。 ... [详细]
  • 本文将详细介绍如何使用ViewPager实现多页面滑动切换,并探讨如何去掉其默认的左右切换动画效果。ViewPager是Android开发中常用的组件之一,用于实现屏幕间的内容切换。 ... [详细]
  • JavaScript 实现购物商城商品图片放大功能
    本文介绍了如何使用 JavaScript 和 CSS 实现购物商城中商品图片的放大功能,解决了图片放大时文字位置变化的问题,并提供了详细的代码示例。 ... [详细]
  • 如何在Word文档中输入特殊符号?全面指南
    本文将详细介绍如何在Microsoft Word文档中轻松输入各种特殊符号,包括五角星等不易直接键入的字符。 ... [详细]
  • 在开发过程中,我最初也依赖于功能全面但操作繁琐的集成开发环境(IDE),如Borland Delphi 和 Microsoft Visual Studio。然而,随着对高效开发的追求,我逐渐转向了更加轻量级和灵活的工具组合。通过 CLIfe,我构建了一个高度定制化的开发环境,不仅提高了代码编写效率,还简化了项目管理流程。这一配置结合了多种强大的命令行工具和插件,使我在日常开发中能够更加得心应手。 ... [详细]
  • 无论你是刚毕业的大学生,还是想在职业中寻求进步的经验丰富的IT专家,这些提示都可以帮你成为DevOps工程师。DevOps工程是一个备受称赞的热门职业。不管你是刚毕业正在找第一份工 ... [详细]
  • 关于ScrumXPDevOps的学习
    最近听了ECUG大会上孙敬云老师的分享感觉受益匪浅,毕竟大学课本上只讲到瀑布模型就没有下文了,工作以后一直贯彻的都是Scrum路线,一直也没有时间好好的去学习整理这部分的知识,直到 ... [详细]
author-avatar
遇见你_天意_384
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有