热门标签 | 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 


推荐阅读
  • 本文介绍了在Python3中如何使用选择文件对话框的格式打开和保存图片的方法。通过使用tkinter库中的filedialog模块的asksaveasfilename和askopenfilename函数,可以方便地选择要打开或保存的图片文件,并进行相关操作。具体的代码示例和操作步骤也被提供。 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • PHP图片截取方法及应用实例
    本文介绍了使用PHP动态切割JPEG图片的方法,并提供了应用实例,包括截取视频图、提取文章内容中的图片地址、裁切图片等问题。详细介绍了相关的PHP函数和参数的使用,以及图片切割的具体步骤。同时,还提供了一些注意事项和优化建议。通过本文的学习,读者可以掌握PHP图片截取的技巧,实现自己的需求。 ... [详细]
  • 本文是一位90后程序员分享的职业发展经验,从年薪3w到30w的薪资增长过程。文章回顾了自己的青春时光,包括与朋友一起玩DOTA的回忆,并附上了一段纪念DOTA青春的视频链接。作者还提到了一些与程序员相关的名词和团队,如Pis、蛛丝马迹、B神、LGD、EHOME等。通过分享自己的经验,作者希望能够给其他程序员提供一些职业发展的思路和启示。 ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • 本文介绍了在Vue项目中如何结合Element UI解决连续上传多张图片及图片编辑的问题。作者强调了在编码前要明确需求和所需要的结果,并详细描述了自己的代码实现过程。 ... [详细]
  • 也就是|小窗_卷积的特征提取与参数计算
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了卷积的特征提取与参数计算相关的知识,希望对你有一定的参考价值。Dense和Conv2D根本区别在于,Den ... [详细]
  • Python瓦片图下载、合并、绘图、标记的代码示例
    本文提供了Python瓦片图下载、合并、绘图、标记的代码示例,包括下载代码、多线程下载、图像处理等功能。通过参考geoserver,使用PIL、cv2、numpy、gdal、osr等库实现了瓦片图的下载、合并、绘图和标记功能。代码示例详细介绍了各个功能的实现方法,供读者参考使用。 ... [详细]
  • 智慧城市背景下Python机器学习项目实战案例分享
    首先,何为智慧城市?智慧城市的“智慧”源自何处?智慧城市的特征在于运用大数据和数字技术提高居民生活质量。机构获得的数据越全面、越实时,它们就越有能力观测事件发生的详情、分析需求模 ... [详细]
  • 敏捷,持续集成/持续交付, DevOps 三者的区别
    以下这篇译文清晰明了地揭示了敏捷(Agile),持续集成/持续交付(CI/CD)和DevOps三者之间的区别和联系。它们尽管有所不 ... [详细]
  • docker 多物理机容器_Docker(1) 什么是 Docker
    ​1|0学习Docker前的必备知识1|1环境配置的烦恼软件开发最大的麻烦事之一,就是环境配置相信每位编程初学者都会在环境配置上倒腾很久,而作为老师也会 ... [详细]
  • 移动云_搭乘“云原生”硬核实践之舟,移动云助力开发者畅游未来创新之旅
    本文由编程笔记#小编为大家整理,主要介绍了搭乘“云原生”硬核实践之舟,移动云助力开发者畅游未来创新之旅相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 从零到devops(除了docker还有什么容器)
    2月9日,在云栖计算之旅线下沙龙上,阿里云容器服务团队的高级研发工程师mmddy分享了《基于容器技术的DevOps探索》。首先介绍了DevOps和CD,接着分析了Docker如何打 ... [详细]
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社区 版权所有