软件开发的演变具有三个重要的里程碑。首先是引入关注发布产品所需时间的瀑布 方法。然后是优化开发生命周期的敏捷方法。现在,DevOps寻求将开发和运营结合起来,作为一个团队一起工作。它提高了生产力,改善了协作,并提供了卓越的产品。在软件开发中采用敏捷和 DevOps 实践对许多人来说是一个挑战。克服这一障碍的第一步是了解敏捷和 DevOps 之间的区别以及这些开发方法所扮演的角色。
什么是敏捷?
敏捷是一种方法论,专注于通过迭代开发和测试持续交付项目的可管理的小增量。它被引入作为传统瀑布方法的替代方案,以其结构化、线性、顺序的生命周期而闻名。项目管理和软件开发等动态过程需要适应变化和新条件的能力。僵化的瀑布方法无法满足持续技术创新的快节奏世界的期望。于是,敏捷诞生了。敏捷为复杂项目提供有效的日常管理,改善团队成员和客户之间的沟通和协作。
敏捷价值观
该方法由敏捷宣言定义,12 条原则奠定了“敏捷工作”的基础和价值观。
敏捷软件开发的核心有四个核心价值:
个人和交互超过流程和工具。宣言强调了重视每个团队成员和营造一个健康和刺激的工作环境的重要性。为了最大限度地提高效率,它鼓励队友之间不断沟通,让每个人都参与到开发过程中。
工作软件优于综合文档。文档不能妨碍交付软件。以前,每个项目都必须从开发软件的要求和期望的详细文档开始。敏捷专注于令人尴尬的更改,并避免在以后可能会更改的文档上花费太多时间。
客户合作超过合同谈判。持续发展涉及定期与客户合作。即时反馈引导项目朝着最终会产生最佳结果的方向发展。在开发之前与客户协商合同并在生产之后再参考它会导致潜在的沟通不畅。应该避免。
响应变化而不是遵循计划。项目中期所做的更改需要很容易被接受,因为它们有助于产品的整体成功。适应新环境、拥抱新特性是敏捷与瀑布的显着区别之一。
敏捷软件开发
敏捷软件开发涉及实施敏捷框架,例如 Scrum 和看板。每个软件开发生命周期都从将项目分解为可管理的故事和需求开始。这些任务被组织成冲刺。冲刺发生在两周内,在此期间,团队致力于启动和运行特定功能。
在冲刺期间,团队专注于构建、测试和部署软件,并在此过程中进行调整。一旦他们完成了一个冲刺,他们就会进入下一个冲刺,直到项目完成。这种做法允许持续交付软件。同时,客户、利益相关者和项目经理可以跟进并提供反馈,以确保获得满意的结果。
一些开发阶段还可以包括自动化流程以加速集成(例如自动化测试和代码管理)并确保一切正常工作。在开发过程中,团队协作,互相提供反馈,并在每个 sprint 后定期回顾会议期间审查他们的工作。
什么是 DevOps?
DevOps 是一种软件开发文化,在这种文化中,开发团队和运营团队共同努力以提高协作和生产力。该实践还涉及实施 DevOps 原则和实践以及使用一组DevOps 工具进行测试。DevOps 原则促进沟通、端到端责任和信息共享。他们定义 DevOps 并设定目标。与传统的软件开发不同,DevOps 包括构建、测试、部署和监控软件的连续循环。DevOps 的主要目标是有效地交付高质量的软件。
DevOps 原则
越来越多的公司正在向 DevOps 过渡。实施 DevOps 具有许多优势,例如快速且易于集成的软件部署。如果不了解驱动它的基本价值观,就不可能过渡到这种新文化。它需要在开发和运营团队中改变思维方式,这会激励他们作为一个统一战线开展工作。
以下原则是在 DevOps 环境中指导工程流程的基础:
版本控制。 开发人员每天多次向中央存储库提交代码更改。在向主存储库(主分支)提交代码之前,必须验证所有代码。为了促进协作,其他开发人员可以跟踪更改。
持续集成。开发团队的成员每天数次将他们的代码集成到一个共享存储库中。每个开发人员将工作分割成小的、可管理的代码块,并更快地检测潜在的合并冲突和错误。
持续交付。随着代码的不断集成,它也始终如一地交付给最终用户。较小的贡献允许更快的更新发布,这是客户满意度的关键因素。
持续部署。DevOps 的很大一部分是自动化流程以加快生产速度。持续部署涉及自动发布不会对现有架构构成重大威胁的次要更新。
持续测试。这种策略涉及在开发的每个步骤中尽可能多地进行测试。自动化测试提供有价值的反馈和手头过程的风险评估。
持续运营。DevOps 团队一直致力于以小而频繁的版本升级软件。这就是为什么 DevOps 需要持续监控性能的原因。其主要目标是防止代码发布期间出现停机和可用性问题。
合作。 DevOps 的主要目标之一是促进协作和反馈共享。开发和运营需要主动沟通和共享反馈,以维持高效的 DevOps 管道。
DevOps 软件开发
DevOps 软件开发侧重于项目必须通过的既定管道。阶段的数量取决于团队正在开发的软件的复杂性和类型。关键阶段包括开发、构建、测试和部署。规划阶段通常先于前面提到的所有阶段,并且在部署之后还会添加一个监控阶段。有关 DevOps 软件开发阶段以及如何规划 DevOps 管道的更多信息,请查看什么是 DevOps 管道以及如何构建一个。
敏捷与 DevOps
敏捷 | 开发运维 | |
---|---|---|
基本理念 | 一种专注于通过迭代开发和测试持续交付项目可管理的小增量的文化。 | 一种开发和运营团队协同工作的实践,旨在提高协作和生产力。 |
采用 | 它可以用于任何部门来帮助管理复杂的项目。 | 专注于端到端的工程流程。 |
重点 | 创建一个欢迎项目中期更改以提高质量的环境。 | 合并开发和运营团队,以确保他们进行持续的测试和开发。 |
团队 | 人数较少,团队成员紧密合作并具有相似的技能。 | 一个由多个部门组成的大型团队中的各种技能组合。 |
交货 | 每个 sprint 之后的增量部署(通常是每周或每两周一次)。 | 目标是每天(甚至每隔几个小时)提供持续交付。 |
文档 | 极少的文档可提高开发过程的灵活性。 | 足够的文档以确保团队良好协作。强调官方文档的沟通。 |
质量和风险 | 每次冲刺后,产品的质量都会提高,而风险会降低。 | 由于有效的协作和自动化测试,生产出低风险的高质量产品。 |
回馈 | 专注于客户反馈并相应地调整产品。 | 鼓励队友之间的内部反馈,以改进和加快交付。 |
工具 | Kanboard、JIRA、Active Collab、Bugzilla、Slack、Trello。 | TeamCity、AWS、Puppet、OpenStack、Docker、Jenkins、Kubernetes、GitLab。 |
合并敏捷和 DevOps
合并敏捷和 DevOps 有很多优势。包括加快交付速度、提高用户满意度以及团队内的有效协作。将 DevOps 的实践与敏捷文化相结合需要改变现有的策略和态度。
了解。敏捷方法要求团队成员了解彼此的任务。相互理解对于 Scrum Master、项目经理和产品负责人来说尤其重要。为了成功管理项目,他们需要了解交付产品所需的每一个步骤。
协作。DevOps 涉及开发团队与运营团队一起工作。前面提到的角色现在需要了解开发过程和操作的所有方面。
冲刺中的 DevOps 实践。接下来,团队需要在处理 sprint 时采用集成 DevOps。这包括让整个 DevOps 团队(连同 QA)参与计划、每日站会和回顾。
自动化工作流程。由于自动化是 DevOps 开发的重要组成部分,因此它应该包含在敏捷工作流程和项目规划中。AIOps等新兴领域使用人工智能来自动化 IT 环境中的手动工作流。
衡量成功。合并敏捷和 DevOps 还涉及评估和测量端到端开发中的关键 DevOps 指标和 KPI 。
DevOps 和敏捷可以协同工作
敏捷和 DevOps 都旨在及时交付高质量的软件。敏捷与 DevOps 之间的区别在于,敏捷专注于优化开发生命周期,而 DevOps 将开发和运维统一在 CI/CD 环境中。
DevOps 和敏捷并不是相互排斥的。任何过渡到 DevOps 的组织都不应放弃现有的敏捷工作流程。DevOps 是敏捷的扩展,围绕非敏捷关注的实践而构建。当一起使用时,这两种实践可以改进软件开发并产生更好的产品。