软件开发模式:瀑布、敏捷、DevOps

2022-10-12  本文已影响0人  Chandler_珏瑜

一、概述开发模式

 无论是瀑布式开发、敏捷式开发还是DevOps,整个流程都分为设计、开发、测试和部署四个部分,只不过各个部分的开始和结束时间节点不同。如下图所示:

开发模式的差异.png

 从瀑布式开发到敏捷开发再到DevOps,各个阶段的切换速度越来越快,瀑布式开发和敏捷开发的运维部署工作都是放到最后,而DevOps结合敏捷开发思想,将部署工作也敏捷起来。

开发模式.png

二、瀑布式开发

2.1 简述瀑布式开发

瀑布式开发是早期被广泛采用的软件开发模型。要求有明确的需求,按照需求一步步做好规划,每一阶段工作的完成是下一阶段开始的前提,每一阶段都要进行严格的评审,保证各阶段的工作做得足够好时才允许进入下一阶段,它适用于需求明确的项目。

 最大的风险是,当产品研发完成后,到了产品测试阶段如果发现了问题,或者发现其无法满足市场需求,那么就需要重新开发,甚至需要重新规划产品。

三、敏捷式开发

3.1简述

敏捷开发是一种以用户需求进化为核心、倡导拥抱变化、循环迭代、循环渐进的开发方法。首先把用户最关心的软件原型做出来并交付给用户,用户在实际场景中发现问题并给予反馈,研发人员快速修改弥补需求中的不足。上述过程不断迭代,直到用户满意。

 敏捷追求“更早地交付价值,更灵活地应对变化”,适用于需求不明确、创新性或者需要抢占市场的项目,特别适合互联网项目。

3.2 原则

  1. 我们最重要的目标,是通过持续不断地及早交付有价值的软件来使客户满意。
  2. 欣然面对需求变化,即使到了开发的后期也一样。敏捷过程利用变化为客户创造竞争优势。
  3. 经常性地交付可以工作的软件,交付的间隔可以从几周到几个月,交付的时间间隔越短越好。
  4. 业务人员和开发人员必须相互合作,项目中的每一条都不例外。
  5. 激发个体的斗志,以他们为核心搭建项目,提供所需的环境和支援,辅以信任,从而达成目标。围
  6. 无论团队内外,最具有效果并且富有效率的传递信息的方法,就是面对面的交谈。
  7. 可工作的软件是进度的首要进度标准。
  8. 敏捷过程倡导可持续开发。负责人、开发者和用户要能够共同维持其步调稳定连续。
  9. 不断地追求技术卓越和良好设计,会增强敏捷能力。
  10. 以简洁为本,极力减少不必要工作量的艺术。
  11. 最好的架构、需求和设计出自于自组织的团队。
  12. 团队定期地反思如何能够提高效能,并依此调整自身的举止表现。

3.3 宣言

四、DevOps

4.1 简述

 DevOps是一种方法论,DevOps = Development + Operations,即开发团队和运维团队一体化,尽可能地为公司创造更多价值。

DevOps是一种软件开发实践,它将人员、流程和技术结合在一起,以交付持续的价值。该方法分为计划和跟踪、开发、生成和测试、交付以及监视和操作。

DevOps.png

 DevOps的独特之处在于开发、IT运营、质量工程和安全团队协同工作,在发布新产品、版本或更新所涉及的所有任务中创造效率。

 DevOps将开发和运营合并为一个团队,专注于快速交付和稳定的基础架构。其目标包括:

4.2 价值观

DevOps是一种文化,是一种软件开发的方式或者基础设施的方式,也是一种构建和部署软件和应用的方式。它假设开发和运维之间没有隔阂,他们一起合作,没有矛盾。

 DevOps基于其它两个领域的实践:精益和敏捷。DevOps不是一个公司内的岗位或角色;它是一个组织或团队对持续交付、持续部署和持续集成的坚持不懈的追求。三种方式定义的DevOps的理念:

4.3 原则

1、持续交付的八大原则

 DevOps持续交付的八大原则对可运维性给出了这样的定义,在企业中研发和运维体系必然需要相互配合,开发团队负责功能性需求实现的同时,在架构和编码上注重非功能性需求的实现,测试团队和运维团队将围绕着各自职能的需求,规划与建设DevOps流水线中对应的工具系统,加速企业IT价值链的流转,以为企业创造更大的商业价值。

  1. 为软件的发布创建一个可重复且可靠的过程:标准化发布操作,建立可靠的脚本/工具,并用自动化流程实现编排。
  2. 将几乎所有事情自动化:区分场景,将计划内任务实现自动化运维。
  3. 把所有的东西都纳入版本控制:可描述、可度量、可监督,并纳入运维平台管理。
  4. 提前并频繁地做出让你感到痛苦的事情:让错误尽早的暴露,并修复它。
  5. “DONE”意味着“已发布”:交付到用户受众才是完成。
  6. 交付过程是每个成员的责任:协同合作,减少等待的浪费。
  7. 持续改进:闭环,不断提升能力。

2、提倡的原则

4.4 DevOps包含一些工具链

 DevOps实践涉及到开发部门以及软件研发的整个生命周期,这意味着在整个开发生命周期中,涉及到一大批新旧工具,包括从规划、编码、测试、发布、监控等自动化的流程工具。

工具链.png

 DevOps融合了一系列基本原则和实践的方法论,并从这些实践中派生出了各种工具。这些工具体现在软件开发和交付过程的不断阶段。

4.5 实践DevOps需要建立哪些能力

1、不可或缺的自动化能力

主要体现在三点上:

2、建立持续支付能力

主要体现在三点上:

3、利益共同体的合作文化

以提高业务响应效率出发,要有一荣俱荣、精诚合作、共同进步的态度。

合作文化.png

 DevOps成功的关键在于文化转变,除了上面提到工具,组织文化的转变也同等重要,我们总结出了很多DevOps的其他因素,比如人(People)的思想和思考方式、开发和运维的流程(Process)、精益(Lean)、自动化(Automation)、测量(Measurement)。

在组织文化方面,DevOps推崇:

4.6 最佳实践手段:CI/CD

 DevOps是CI/CD思想的延伸,CI/CD则是DevOps的技术核心,如果没有CI/CD,没有自动化测试,DevOps是没有任何意义的。所以说DevOps是以CI/CD为基础来优化程序的开发、测试、运维等各个不同环节。

1、CI

 CI:持续集成,是一种开发实践,它倡导团队成员需要频繁的集成他们的工作,每次集成都通过自动化构建(包括编译、构建、自动化测试)来验证,从而尽快地发现集成中的错误。让正在开发的软件始终处于可工作的状态,让产品快速迭代,同时还能保持高质量。

2、CD

CD包含了两层内容:持续交付持续部署

持续交付是持续集成的延伸或者看作持续集成的下一步,它将集成后的代码部署到类生产环境,确保可以以可持续的方式快速向客户发布新的更改。如果代码没有问题,可以手工部署到生产环境中。它强调的是,不管怎么更新,软件是随时随地可以交付的。

持续部署是持续交付的下一步,在持续交付的基础上,由开发人员或运维人员自助式的定期向生产环境部署稳定的构建版本,持续部署的目标是代码在任何时刻都是可部署的,并可自动进入到生产环境。

持续交付是指团队确保每个变更可以部署至生产环境,但也许并不需要实际部署,这通常可能是处于业务方面的原因。而持续部署是指每个变更可以自动部署到生产环境。

五、比对瀑布、敏捷、DevOps

5.1 瀑布的优劣

瀑布的优劣.png

5.2 敏捷的优劣

敏捷的优劣.png

5.3 DevOps的优势

devops的优势.png

5.4 敏捷与DevOps共存

 关于 DevOps 和敏捷,最重要的一点是它们不是互斥的。

 DevOps 是一种文化,促进所有参与软件开发和维护的参与者之间的协作。

 敏捷可以被描述为一种开发方法,旨在需求不断变化的现实中维护工作效率和驱动发布。

 尽管 DevOps 和敏捷是不同的,但是如果将这两种方法结合使用,将会带来更高的效率和更可靠的结果。DevOps是敏捷的有效补充,是将运维纳入产品开发过程的思维方式,是敏捷开发方法论的升级,更强调自动化工具的实现与应用,以帮助实现软件的快速迭代。

六、未来发展

 DevOps是精益思想应用在IT领域的必然结果,源起于开发侧的敏捷运动,由于端到端的系统优化需求,发展到开发、测试、运维的联动。

 从其发展脉络,可以发现DevOps的必然发展方向,那就是向业务侧延伸。

6.1 BizDevOps

 业务是产品开发和运维的源头,完整的价值流必须从源头开始。这不是预测,而是正在发生的事实,大部分DevOps的实施都已经将业务侧包含在内,成为BizDevOps。

 BizDevOps需要达成的目标如下所示:

  1. 需求管理:分别从业务代表/产品经理/开发人员/测试人员等视角提供符合各自角色的需求看板
  2. 链路打通:打通从需求到设计,研发,测试,运维,运行的信息链条
  3. 价值流可视化:从端到端可视化地传递价值流
  4. 促进交付质量:设置验收标准,统计标准达成率,反馈需求最终交付质量

6.2 MLDevOps

 机器学习(ML)系统是一种软件系统,所以DevOps也适用于构建和运维可靠的ML系统。然而,ML系统与其他软件系统有以下不同:

 ML系统和其他软件系统在源代码控制的持续集成、单元测试、集成测试以及软件模块或包的持续交付也有一些显着的差异:

6.3 APPDevOps

 客户端涉及H5、Android、iOS,手工作业比较多,管理愈发困难。DevOps可以通过自动化通过减少手工作业,实现一站式构建与运维平台。

七、小结

 本文是本人整理总结的,内容来源于网络与书籍,如果引用作者的文章,可以联系我,我会在来源进行备注。

如果需要給我修改意见的发送邮箱:erghjmncq6643981@163.com
资料参考:《敏捷软件开发》
转发博客,请注明,谢谢。

上一篇下一篇

猜你喜欢

热点阅读