自学习计算机以来,这些术语就时长在眼前晃悠。随着实践经验和项目经理的增加,软件工程相关的词汇出现频率越发高了,但在实践过程中,大家对它们都有各自的理解,在实践中许多含义都有分歧,我们需要随时梳理它们,并跟随软件工程先进实践不断更新自己的理解。

基本概念

敏捷 (Agile)

敏捷是一种软件开发方法论,旨在通过迭代、增量的方式快速交付高质量的软件,并且能够适应不断变化的需求。敏捷强调的是团队的协作、客户反馈和灵活性。

核心原则

  • 迭代开发和增量交付

  • 客户需求的持续反馈和响应

  • 自组织的团队和跨职能合作

  • 持续交付可工作的软件

背景:在 20 世纪 90 年代末至 2000 年代初,传统的瀑布式开发方法面临着适应性差、开发周期长等问题,无法满足快速变化的业务需求。于是,17 位软件开发者在 2001 年共同签署了《敏捷宣言》,标志着敏捷理念的正式提出。

CI/CD (Continuous Integration/Continuous Deployment)

CI/CD 是一种软件工程实践,用于自动化软件的构建、测试和部署过程,旨在实现更高效、更可靠的软件交付。

核心概念

  • 持续集成 (CI):指的是开发人员频繁地将代码集成到主干分支,并通过自动化构建和测试来验证代码的正确性。

  • 持续交付 (CD):指的是持续将集成后的代码自动部署到生产环境之前的阶段,确保代码能够在任何时候都可以安全地发布到生产环境。

背景:CI 的理念最早由软件开发方法 XP(极限编程,Extreme Programming)推广,旨在解决开发过程中代码集成的困难。Martin Fowler 在 2000 年发表了关于 CI 的文章,使这一理念得以广泛传播。随着 CI 的普及,开发者开始探索将持续集成扩展到自动部署,以实现真正的持续交付和部署。Jez Humble 和 David Farley 在 2010 年出版的《持续交付》(Continuous Delivery)一书系统阐述了这一理念。

DevOps

DevOps 是一种文化和实践,它旨在通过促进开发(Dev)和运维(Ops)团队之间的协作和沟通,来提高软件交付的速度和质量。

核心原则

  • 自动化:包括自动化测试、部署、监控等。

  • 协作:开发和运维团队紧密合作,共同负责软件的交付和运行。

  • 持续改进:通过监控和反馈不断优化流程和工具。

背景:DevOps 源自于开发(Dev)与运维(Ops)之间的“墙”导致的效率低下。2008 年在比利时举行的“敏捷运维”会议上,Patrick Debois 和其他业界人士讨论了如何打破开发和运维之间的壁垒。2009 年,“DevOps Days”会议首次举办,标志着 DevOps 运动的正式启动。

在实践中发展

敏捷开发需要频繁的迭代和交付,这为 CI/CD 提供了应用场景。CI/CD 的自动化流程保障了敏捷开发中的每一次变更都能被迅速验证并安全地部署,从而有效支持了敏捷开发的核心理念。

CI/CD 是 DevOps 实践的核心组成部分,DevOps 通过 CI/CD 实现了开发与运维之间的无缝协作。通过自动化测试、构建、部署以及监控,CI/CD 加速了软件从开发到生产的整个生命周期,促进了 DevOps 文化的推广。

敏捷和 DevOps 都旨在提高软件交付的速度和质量。敏捷推动了开发流程的改进,而 DevOps 则扩展了这种改进,涵盖了从开发到运维的全流程。二者结合,形成了一种全面的开发和运维方法,确保了从需求获取到生产部署的高效和高质量。

更多

顺手记了一些与前面提到的概念平级的软件工程概念,其中有的出现得很早,伴随着计算机行业的发展不断变化,有一些概念则是近些年随着云计算等开发应用的兴起提出的。

  • 持续测试 (Continuous Testing):在整个开发和交付流程中,持续地进行自动化测试,以确保代码的质量和功能符合预期。

  • 持续监控 (Continuous Monitoring):在软件上线运行后,对其性能、可用性、安全性等方面进行持续的监控和分析,以便及时发现和解决问题。

  • 基础设施即代码 (Infrastructure as Code, IaC):使用代码来定义和管理 IT 基础设施(如服务器、网络、存储等)的配置和部署。

  • 精益 (Lean):精益是一种管理哲学,最初应用于制造业,旨在通过消除浪费、优化流程来提高效率和质量。精益思想被引入软件开发后,成为精益软件开发。

  • 微服务架构 (Microservices Architecture):微服务架构是一种软件架构风格,将一个复杂的应用程序分解为一组独立的、相互协作的小服务,每个服务专注于完成单一的业务功能。

  • 版本控制 (Version Control):版本控制是一种软件工程实践,用于跟踪和管理代码的变更历史,通常通过工具如 Git 实现。

  • 蓝绿部署 (Blue-Green Deployment):蓝绿部署是一种部署方法,通过维护两个几乎相同的生产环境(蓝色和绿色),其中一个环境运行当前版本的应用程序,另一个环境运行新版本。切换流量时,只需更改路由即可完成版本切换。

  • 灰度发布 (Canary Release):一种软件发布策略,将新版本逐步推送给一小部分用户进行测试,确保新功能或修复不会影响整体用户体验,然后逐步推送给更多用户。

  • SRE (Site Reliability Engineering):SRE 是一种专注于提高系统可靠性和可维护性的工程学科,最早由 Google 提出,旨在通过软件工程的方法来解决运维中的问题。

参考阅读