如何理解敏捷开发

article/2025/1/8 12:14:22

目录

什么是敏捷开发 2.0

常用的 4 种开发模式

瀑布式开发

迭代式开发

螺旋式开发

敏捷软件开发

4 种开发模式总结

什么是 DevOps

精益管理的7个原则

DevOps的开发流程

提交

编译

单元测试

部署到测试环境中

预生产测试

部署到生产环境

敏捷开发 2.0 解决的问题

持续集成

持续交付

持续部署

总结


什么是敏捷开发 2.0

常用的 4 种开发模式

瀑布式开发

瀑布式开发是由 WW.Royce 在 1970 年提出的软件开发模型,是一种比较老的计算机软件开发模式, 也是典型的预见性的开发模式。在瀑布式开发中,开发严格遵循预先计划的需求分析、设计、编码、集成、测试、维护的步骤进行,步骤的成果作为衡量进度的方法,例如需求规格、设计文档、测试计划和代码审阅等。 瀑布式开发最早强调系统开发应有完整的周期,且 必须完整地经历每个周期内的每个开发阶段,井系统化地考量分析所涉及的技术、时间与资源投入等。
瀑布式开发的主要问题是它的严格分级导致自由度降低,项目早期即作出承诺会导致对后 期需求的变化难以调整且代价很大,这在需求不明晰并且在项目进行过程中可能有变化的情况 下基本上是不可行的。瀑布式开发如图所示:

迭代式开发

法代式开发也被称为迭代增量式开发,是一种与传统的瀑布式开发相反的软件开发过程, 它弥补了传统开发方式的一些弱点,有更高的成功率。在迭代式开发中,整个开发工作被组织 为一系列短小的、固定长度的小项目,每次选代都包括需求分析、设计、实现与测试。采用迭代式开发时, 工作可以在需求被完整地确定之前启动, 并在一次选代中完成系统的一部分功能 或业务,再通过客户的反馈来细化需求,并开始新一轮的迭代。迭代式开发如图所示:

代式开发有如下特点:

  • 每次只设计和实现产品的一部分;
  • 一步一步地完成;
  • 每次设计和实现一个阶段,这叫作一个迭代。

螺旋式开发

螺旋式开发是由巴利 · 玻姆在 1988 年正式发表的软件系统开发模型,它兼顾了快速原型的法代特征及瀑布模型的系统化和严格监控,其最大的特点是引入了其他模型不具备的风险分析,使软件在无法排除重大风险时有机会停止,以减少损失。 同时,在每个法 代阶段构建原型是螺旋模型用来减少风险的方法。 螺旋模型更适合大型的昂贵的系统级的软件开发, 一开始应用的规模很小,当项目被定义得更好、更稳定时逐渐展开。其核心在于不需要 在刚开始时就把所有事情都定义清楚,可以先定义最重要的功能去实现它,然后听取客户的意 见,再进入下一个阶段,如此不断循环、重复,直到得到满意的产品。螺旋模型在很大程度上 是一种风险驱动的方法体系,因为在每个阶段及经常发生的循环之前,都必须先进行风险评估。 螺旋式开发如图所示:

特点:

  1. 制定计划:确定软件目标,选定实施方案,弄清楚项目开发的限制条件。
  2. 风险分析: 分析、评估所选方案,考虑如何识别和消除风险。
  3. 实施工程:实施软件开发和验证。
  4. 客户评估:评价开发工作,提出修正建议,制定下一步计划。

敏捷软件开发

敏捷软件开发又被称为敏捷开发,是一种从 1990 年开始逐渐引起人们的广泛关注的新型软 件开发方式,具有应对快速变化的需求的软件开发能力。它的具体名称、理念、过程、 术语都 不尽相同,相对于非敏捷开发,更强调程序员团队与业务专家之间的紧密协作及面对面沟通, 比单纯通过书面文档沟通更有效,能更频繁地交付新的软件版本,使自我组织、自我约束的团 队能够更好地适应需求的变化,也更注重软件开发过程中人的作用。 如图所示: 

敏捷软件开发特点:

  • 首要任务是尽早地、持续地交付可评价的软件,以使客户满意。
  • 乐于接受需求变更,即使在开发后期也是如此。敏捷软件开发能够驾驭需求的变化,从 而为客户赢得竞争优势。
  • 频繁交付可使用的软件,交付的间隔越短越好,可以从几个月缩减到几个星期。
  • 在整个项目开发期间,业务人员和开发人员必须朝夕工作在一起。
  • 围绕那些有推动力的人们来构建项目,给予他们所需的环境和支持,并且相信他们能够把工作做好。
  • 开发团队及在开发团队内部进行最快速、有效的传递信息的方法是面对面交谈。
  • 可使用的软件是进度的主要衡量指标。
  •  提倡可持续发展。出资人、开发人员及使用者应该共同维持稳定的开发速度。
  • 为了增强敏捷能力,应持续关注技术上的杰出成果和良好的设计。
  • 简洁,最小化那些没有必要投入的工作量是至关重要的。
  • 最好的架构、需求和设计都源于自我组织的团队。
  • 团队定期反思如何变得更有战斗力,然后相应地转变井调整其行为。

4 种开发模式总结

瀑布式开发:

在从需求到设计、从设计到编码、从编码到测试、从测试到提交的每个开发阶段都要做到最好,特别是在前期阶段设计得越完美,提交后的损失就越少。然而现在的系统很复杂且多变,所以很难在现实中应用瀑布式开发。
迭代式开发:

不要求每个阶段的任务都做到最好,可以容忍一些不足,先不去完善它, 将主要功能先搭建起来,以最短的时间及最少的损失完成一个不完美的成果直至提交, 然后通过客户或用户的反馈信息,在这个不完美的成果上逐步进行完善。
螺旋开发:

在很大程度上是一种风险驱动的方法体系,因为在每个阶段及经常发生的循环之前,都必须先进行风险评估。

 敏捷开发:

和迭代式开发相比,两者都强调在较短的开发周期内提交软件,但是,敏捷开发的周期可能更短且更强调队伍中的高度协作。敏捷方法有时被误认为是无计划性和纪律性的方法,实际上更确切的说法是敏捷方法强调适应性而非预见性,适应性的方法主要用于快速适应需求的变化。当项 目的需求有变化时,团队能够迅速应对新的需求。

在一般的公司里,采用敏捷开发和不断迭代开发的方式较多,而且效率高、效果明显。因 为之前做的系统业务单一、逻辑简单、用户量少,项目团队的规模一般在 10~30 人。现在的系 统要面对不同用户的定制化的推荐,互联网连接着人与人、人与物及物与物,业务也变得越来越复杂,功能越来越多,如果整个系统糯合在一起,则必定会牵一发而动全身,导致系统维护 起来相当困难,同时每个公司又面临着人员的频繁流动、系统文档的不完善或多次转手丢失等 情况,以至于新来的人员很难快速了解和熟悉系统。因而,人们开始思考如何更高效地解决复 杂的大型系统的开发模式,在此姑且称之为“敏捷开发 2.0",在介绍敏捷开发 2.0 的概念之前, 先介绍时下热门的 DevOps。

什么是 DevOps

目前对 DevOps 有太多的说法和定义,不过它们都有一个共同的思想:解决开发者与运维者之间曾经不可逾越的鸿沟,增强开发者与运维者之间的沟通和交流。
DevOps 是通过自动化的基本设施、自动化的工作流程和持续可测量的应用性能,来整合开 发团队和运维团队,以达到更高的合作效率和生产率。
然而笔者认为 DevOps 不仅仅局限在开发者和运维之间,更是一种文化的改变和鼓励沟通、 交流、合作的行动,目的在于更加快速稳定地构建高质量的应用系统,这恰好体现了精益管理 的原则。我们也可以把 DevOps 看作一种能力。

如何获得这种能力呢?

关键有两点:

一是全局观,要从软件交付的全局出发, 加强各角色之间的合作;

二是自动化,人机交互就意味着手工操作,应选择那些支持脚本化、无须人机交互界面的强大管理工具,比如各种受版本控制的脚本,以及类似于 Zabbix 这样的基础设施监控工具和类似于 SaltStack、 Ansible 这样的基础设施配置管理工具等。

DevOps 可以用一个公式表达:

文化观念的改变 + 自动化工具 = 不断适应快速变化的市场

其核心价值在于以下两点:

1.更快速的交付,响应市场的变化;

2.更多地关注业务的改进与提升;

精益管理的7个原则

  1. 消除浪费;
  2. 增强学习;
  3. 延迟决策;
  4. 快速交付;
  5. 团队授权;
  6. 内置完整性(完整性是为了让客户对产品的体验具备平滑性和一致性);
  7. 考虑全局;

DevOps的开发流程

提交

工程师将程序在本地测试后,提交到版本控制系统如Git等;

编译

持续整合系统(如 Jenkins CI),在检测到版本更新时,便自动从 Git 仓库里拉取 最新的程序,进行编译、构建。

单元测试

Jenkins 完成编译构建后,会自动执行指定的单元测试代码。

部署到测试环境中

在完成单元测试后, Jenkins 可将程序部署到与生产环境相近的测试环境中进行测试。

预生产测试

在预生产测试环境里,可以进行一些最后的自动化测试,例如 Selenium 测试及与实际情况类似的测试,可由开发人员或客户手动进行。

部署到生产环境

通过所有测试后,便可将最新的版本部署到实际生产环境里。

如图所示:

从流程中可以看到,借助 Jenkins 等工具,提交程序之后的步骤几乎都可以自动化完成, 这节省了工程师的大量手动操作时间。由于每次提交程序后都会自动进行编译与测试等流程, 所以一旦有问题就可以马上发现并处理 CJenkins 会自动通知),这样也保证了程序的质量。

上图有一个很重要的角色: SaltStack。 SaltStack 是一个架构管理系统,可以批量地修改 Server 的设定或执行指令,也可以通过配置管理使得开发环境、测试环境及应用环境最大可能 地保持一致。 SaltStack 使得管理大量 Server 变得更轻松,这方便了运维工作。 与 SaltStack 类似 的工具还有 Puppet、 Chef、 Ansible 等。

敏捷开发 2.0 解决的问题

敏捷开发 2.0 是相对于敏捷开发而言的,敏捷开发意味着让我们全面拥抱需求的变化, 但 是对于瞬息万变的市场反馈还远远不足以应对,因此为了更加快速地发现问题和得到市场的快 速反馈,引入了持续集成(Continuous Integration, CI)和持续交付(Continuous Delivery, CD), 来更加高效地进行敏捷开发,即敏捷开发 2.0。

持续集成

是一种软件开发实践,要求团队成员经常集成其工作,每个人至少每天集成 一次会导致每天有多个集成。 集成是通过自动化的构建进行验证的,这些构建运行回 归测试,以尽快检测集成中的错误。团队慢慢会发现,这种方法有利于集成问题的大 幅减少,更快地实现有凝聚力的软件开发方式。

持续交付

是在持续集成的基础上,将集成后的代码部署到更贴近真实的运行环境的预 生产环境中。比如,我们完成单元测试后,可以把代码部署到连接数据库的 Staging 环 境中进行测试。如果代码没有任何问题,则可以继续部署到生产环境中 。

持续部署

是持续交付的更高级阶段,即所有通过了自动化测试的改动都自动地部署到生产环境中。大多数公司如果没有受制度的约束或其他条件的影响,则都应该以持续部署为目标。 在很多业务场景里, 一种业务需要等待其他功能完成了才能上线, 这使得持续部署不可能实现。虽然可以使用功能转换解决很多这样的问题,但并不是每次都会这样。 所以,持续部署是否适合某个公司是基于该公司的业务需求的,而不是技术限制。

总结

DevOps 不能只关注开发及运维,还应该关注产品、开发、测试、运维, 甚至对客户的需求 也要有了解。而敏捷开发 2.0 要求将大而全的项目拆分成小的相对独立的服务, 从一开始就不 仅仅只关注自动化部署,还要关注整个项目是否具备自动化的、可快速扩展的、完善的容错机 制,以及零岩机和便捷的监控管理。为了实现敏捷开发 2.0, 我们需要采用持续部署、 微服务和 容器这三种技术方案。

  • 持续部署:能够持续自动反馈应用程序的提交状态,减少错误等; 同时为产品的交付提 供了质量保证,能快速投入市场。
  • 微服务:使技术选型、构架系统更自由:开发更快速、周期更短: 服务更容易扩展。
  • 容器: 使部署成百上千的微服务更加容易,系统更加稳定。

 

文章转载于:《分布式服务架构:原理、设计与实战》本文仅供参考,交流,学习,如侵联删
 


http://chatgpt.dhexx.cn/article/YsxD2MBo.shtml

相关文章

什么是敏捷?什么是敏捷开发?

什么是敏捷? 显示敏捷相互馈送的各个方面的关系图,例如协作、开发和自动化版本控制和部署。 敏捷是一个术语,描述软件开发方法,强调增量交付、团队协作、持续规划和持续学习。 敏捷术语于 2001 年在敏捷宣言中创造。 宣言旨在制定…

瀑布式开发与敏捷开发的区别是什么

摘要:瀑布模型式是最典型的预见性的方法,严格遵循预先计划的需求、分析、设计、编码、测试的步骤顺序进行。敏捷开发以用户的需求进化为核心,采用迭代、循序渐进的方法进行软件开发。我们将在文章中详细说明两者各自的适合场景。 详细解答&am…

【敏捷式开发公司-禅道使用心得】

前言:本人测试小菜鸡一枚,近期入职了一家六七十人的小公司,在我入职之前,他们一直是用Teambition(以下简称TB)来做项目管理的,包括提交需求、bug管理都是在TB。入职后我也大概使用了一下&#x…

敏捷开发和瀑布式开发

瀑布模型的特点: (传统的开发方式) 1、强调文档 前一个阶段的输出就是下一个阶段的输入,文档是个阶段衔接的唯一信息。所以很多开发人员好象是在开发文档,而不是开发软件,因为要到开发的后期才可以看到软…

【APICloud系列|21】使用APICloud敏捷式开发总结,回顾开发一个完整APP过程。

导读:APICloud是柚子(北京)科技有限公司创建的低代码开发平台,总部位于北京, 通过生产力工具与混合开发技术,为企业与开发者构建高效的IT环境;在APICloud平台已有80万注册用户,平台每日生成安装包超6000个。业务团队延伸至上海、深圳、重庆、青岛等10余个城市。 APICloud是…

敏捷开发-互联网时代的软件开发方式

一、什么是敏捷开发 敏捷开发简单的描述为:是一种应对需求快速变化的软件开发方式。 敏捷开发的核心思想就是小步快跑、不断迭代,在一次次的迭代升级中完成【小目标】最终完成那个【大目标】。正因为敏捷开发的这种不断迭代升级的开发模式,使…

Curl windows下载地址

Windows下Curl可执行程序的下载地址为: https://curl.haxx.se/download.html 该下载不需要编译,可以立即执行,windows 64位下载的时候,注意点版本号那一列(如:7.49.1),不要点“Win64 ia64 zip…

curl 下载地址中有特殊字符解决方案

curl 下载地址中有特殊字符解决方案 情况 使用 curl 下载 地址中带有 特殊字符的时候 比如下面这个地址。实际访问地址不正确,参数丢失问题 curl -o kspf.jpeg https://img-blog.csdnimg.cn/71ad2375855244a3b918585938236efe.png?a1&b2&c3 上面这个 u…

C++使用curl下载文件(get请求)

使用curl也可以下载文件&#xff0c;代码如下&#xff1a; #include<iostream> #include<string> #include<curl\curl.h> using namespace std;//下载文件数据接收函数 size_t dl_req_reply(void *buffer, size_t size, size_t nmemb, void *user_p) {FILE …

Linux C语言通过curl下载https资源

Linux C语言通过curl下载https资源代码如下&#xff0c;注意需要把main函数 char *url 赋值为需要下载文件的路径。 #include <curl/curl.h> #include <stdio.h> #include <string.h> #include <stdint.h>static size_t filesize 0;size_t write_dat…

CURL下载文件简易进度条

背景 curl下载文件比较方便&#xff0c;sample里的进度打印比较鸡肋&#xff0c;网上搜了一下C打印进度条&#xff0c;随便改改&#xff0c;就ok了&#xff0c;代码贴起来&#xff01; curl 回调函数进度打印输出 int download_progress(char *progress_data,double t, /* d…

如何在GitHub正确地使用 Curl 下载文件?

Curl是在 Linux 终端中下载文件的绝佳工具。 下载与原始文件同名的文件的常用语法非常简单&#xff1a; curl -O URL_of_the_file这在大多数情况下都有效&#xff0c;但是&#xff0c;您会注意到&#xff0c;有时当您从 GitHub 或 SourceForge 下载文件时&#xff0c;它不会获…

Curl 下载安装和配置

Curl 下载安装和配置 1.1 什么是Curl?1.2 Curl 支持的网络协议1.3 Curl 是做什么用的&#xff1f;1.4 Curl 如何下载安装&#xff1f;1.4.1 Windows 平台1.4.2 Linux 平台1.4.3 Mac OS 平台 1.5 Curl 配置1.5.1 解压1.5.2 配置环境变量1.5.3 验证安装配置是否成功 1.6 如何使用…

curl下载和上传

cURL 概述 cURL 是一个利用 URL 语法在命令行下工作的文件传输工具&#xff0c;1997年首次发行。它支持文件上传和下载&#xff0c;所以是综合传输工具&#xff0c;但按传统&#xff0c;习惯称 cURL 为下载工具。 常见用法 下载文件 下载文件 -o&#xff0c;自定义路径和文…

curl下载(curl下载文件)

php写curl下载文件 不是下载到服务器 让浏览器弹出下载文件&#xff0c;在本地下载 求高手解答 这样的用header吧 $file‘下载地址’; if (file_exists($file)) { header(Content-Description: File Transfer); header(Content-Type: application/octet-stream); header(Conten…

Curl下载及简单使用

Curl 是一个命令行工具和库&#xff0c;用于通过URL传输数据。 简单来说就是可以通过命令行发送GET,POST 等多种协议请求的工具 一、官网下载 下载地址 windows版 下载完成后解压即可 二、使用 进入 bin 目录下&#xff0c;打开cmd 窗口&#xff0c;输入 curl 加路径 带cook…

curl 下载图片

curl -o 1.jpg http://image.baidu.com/image123.jpg [1] 40848 [root~]# % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 251k 0 251k 0 0 1570k 0 --:–:-- --:–:-- --:–:-- 1589k

Curl【实例 01】curl下载使用及cmd实例脚本分享(通过请求下载文件)

Curl 官方下载地址 可下载不同平台不同版本的安装包&#xff0c;本次使用的是Windows解压版本curl-8.0.1_9-win32-mingw.zip。 curl下载使用及cmd实例 1.是什么1.1 curl1.2 bat和cmd 2.常用命令2.1 发送GET请求并显示响应头信息2.2 显示详细的请求和响应信息2.3 限制重定向次数…

完整的python项目实例-python完整项目

广告关闭 2017年12月,云+社区对外发布,从最开始的技术博客到现在拥有多个社区产品。未来,我们一起乘风破浪,创造无限可能。 一个完整的python项目需要具备什么? 1. 需求功能的实现: 实现思路+现有框架+基础编程 2. 项目日志: logging模块(调试性的日志和记录性的日志…

微信小程序项目实例——投骰子

微信小程序项目实例——投骰子 文章目录 微信小程序项目实例——投骰子一、项目展示二、核心代码文末 项目代码见文字底部&#xff0c;点赞关注有惊喜 一、项目展示 投骰子是一款工具类小程序 用户可以点击按钮投出自身的骰子点数 二、核心代码 <!--dice.wxml--> <v…