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

article/2025/1/9 1:39:13

一、什么是敏捷开发

敏捷开发简单的描述为:是一种应对需求快速变化的软件开发方式。

敏捷开发的核心思想就是小步快跑、不断迭代,在一次次的迭代升级中完成【小目标】最终完成那个【大目标】。正因为敏捷开发的这种不断迭代升级的开发模式,使得其很适合当前瞬息万变的互联网产品。

我们先来看一张图:

假设市场或者客户要求企业制造一个代步工具,并且最好是汽车,交付时间很紧迫,你有两种选择:

第一种:如图1

先出设计稿为汽车,设计通过后开始施工,先造轮胎->底盘->发动机->外壳->内饰->喷漆->打磨抛光->验车->交付,当你没日没夜的终于赶在工期前自信满满的把车交到客户手上的时候,客户却告诉你,我一年前想买一辆汽车,现在觉得这太low了,还是要一辆特斯拉 Model 3吧,这时你的一脸懵逼何处安放。。。

第二种:如图2

先做辆酷炫滑板车,满足部分需求;再改造成时尚单车,满足客户上班骑行的需求;再改造成哈雷摩托,满足客户周末拉风的需求;最后依据客户迭代升级成敞篷酷炫的电动特斯拉跑车,各方不同客户满意

如果是你,会选哪种?

其实如果把造车换成开发一个软件项目的话,那么第一种方式我们称为传统的瀑布式开发;第二种方式就是我们的敏捷式开发。

请注意上述例子中有两个关键词:需求变更和迭代升级

由于现实生活中,客户的需求是随着市场在不断变化的,因此那种一张图纸做到底的方式显然无法适应客户频繁变化的需求;通过迭代升级,每一次迭代都能够交付一个最小可用的产品(MVP),客户可以基于此产品继续提出新的需求来不断完善。

如上图所示,一个大的项目在敏捷开发的模式中被分解成多个【小目标】,通过完成所有这些小目标,一个大的项目随之完成。

二、互联网时代为什么需要敏捷开发?

这个问题总结下来有两点:快速试错和拥抱变化

微信张小龙在WXG大会上提到:

我们今天可以想一些与众不同的点子,然后我们可以很快就看到效果,因为我们可以很快把它上线了,然后可以去验证,如果不对就下线,如果还有改进余地,下个版本再去改它。这是一个能够持续实现你的想法的过程”。

张小龙所说的上线、验证、改进的持续循环流程实际上就是一个快速试错和拥抱变化的过程。 当今的互联网,市场变化日新月异,在不断变化的市场中取得成功就要拥有快速试错的能力。

下面是滴滴打车最新的客户端截图。从图中可以看到,滴滴支持的全部车辆服务已经覆盖到了快车、小巴、出租车、顺风车、专车等多达10种服务,而大众刚刚熟悉滴滴时,滴滴仅有出租车、快车和顺风车三种车型。

试想如果滴滴从一开始就计划设计出10种车型再开始上线推广,那估计现在满街跑的就该是Uber或者快的或者什么滴而不是滴滴了。商机转瞬即逝,正是在一次次的上线中,从车主、用户及市场的反馈中不断调整迭代,才造就了今天的滴滴,而这正是敏捷思想的精髓所在。

三、有哪些公司在使用敏捷开发

可以说,在如今的软件开发领域,敏捷开发模式已经成为主流,从BAT等互联网一线大厂到中小创业公司,从传统的银行、保险等企业,再到北大、清华的图书馆,都在使用敏捷开发。

国外使用敏捷开发的公司更不用说, 微软、Google、Facebook的工程师们都已采用敏捷开发的模式进行软件项目的开发。

四、敏捷开发适合哪些项目?

实际上,敏捷开发比较适合时间要求紧急项目复杂高需求比较新颖充满未知团队自主性强的项目。

传统的瀑布模型无法在如此短的时间内做出快速反应,保持对项目的紧张性和专注性是敏捷开发的优势之一。

装修就是一个很好的敏捷项目实践,举个例子:

小明是一名Web开发程序员,经过多年奋斗终于在帝都买了一套100平米的豪宅,接下来的头等大事就是装修。 装修可以看成一个很典型的使用敏捷开发的项目:

紧迫感--恩,装修的工期是非常有限的,因此必须保证在规定时间内完成

复杂度--装修过的人懂的,丈量、设计、采购、装修等等环节,每个环节之间的配合都很关键

团队自主性--全家总动员,热情节节高,你懂的~

我们可以把每个环节想象成一次小的迭代过程,通过完成一次次的迭代最终完成整个项目。

五、相比传统,为何高效

敏捷开发讲求Idea的快速落地、高效实践。

怎么理解这句话呢?我们还是先来看一下敏捷开发和瀑布式开发的流程图,左下方是瀑布式开发,右上方是敏捷开发。

首先是人员成本:

试想你是一个程序员,如果你工作在瀑布模型中,那么当需求人员在与客户沟通需求中,需求文档还没有出来,由于瀑布模型以文档驱动,此时你是处于空闲状态的,你后面的测试兄弟也是如此;而在敏捷模式中,每个开发测试人员都是全程参与每个迭代的,因此人员充分参与所有过程。

其次是沟通成本:

在传统的瀑布模型中,需求、开发、测试人员都在不同的Team中,假设开发要与需求沟通,那么要跨Team去沟通,时间和空间无法保证同步,因此沟通成本较高;而敏捷开发团队中的人员都在一个Scrum Team中,团队不大,沟通起来成本很小。

最后是风险成本:

对于瀑布模式,最大的风险成本来源于一旦开发过程中有需求变更或者严重的问题,所有流程都要回滚到上个阶段推倒重来,且越到后期风险越高,修改的成本越大;而对敏捷模式,可以很灵活轻松的面对需求变更,有任何bug、需求更改可以放到下一个迭代去做,大大降低了开发过程中的风险成本。

六、以人为本

敏捷开发的十二条原则中有一条叫做:激发个体的斗志,以他们为核心搭建项目。

敏捷开发是一种以人为核心、迭代、循序渐进的开发方法,在敏捷开发过程中,人是第一位的,过程是第二位的,当然也对个人的能力和自主性提出了更高的要求

七、敏捷开发流程总览

说了这么多,来看一张真正的敏捷开发过程SCRUM的完整流程图吧:

这张图描述了一个敏捷开发项目(Scrum)中的团队成员、流程、交付结果及主要事件

附为大家推荐的几个敏捷开发网站:

敏捷开发宣言:agilemanifesto.org

Scrum Guide:scrumguides.org

Scrum Primer:Short Introduction to Scrum

文章来自于特邀嘉宾极客学院高端培训品牌魔鬼程序员教学总监


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

相关文章

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…

连接数据库的项目实例

学生成绩管理系统 关键词&#xff1a;java&#xff0c;SQL Server 2012 后端 打开SQL Server 2012&#xff1a; 点击加号&#xff1a; 选中数据库&#xff0c;右键&#xff0c;新建数据库&#xff1a; 点击确定&#xff0c;等待片刻选中数据库&#xff0c;右键&#xff0c;刷…

SSM项目实例——简易版图书管理系统

文章目录 概述准备实现1.搭建数据库2.实现pojo层3.实现dao层4.实现service层5.配置Spring整合dao层6.配置Spring整合service层7.配置Spring整合Spring MVC8.配置Spring整合文件9.实现controller层10.实现view层11.运行前检查 运行后记 概述 通过对数据库中一张表的CRUD&#x…

vue-element-admin完整项目实例

项目运行地址&#xff1a;https://panjiachen.github.io/vue-element-admin/#/login 项目地址&#xff1a;https://github.com/PanJiaChen/vue-element-admin 项目地址&#xff1a;&#xff08;国际化&#xff09;https://github.com/PanJiaChen/vue-element-admin/tree/i18n 项…

购物车——js小项目实例

购物车——js小项目实例 首先构思好整体样式 添加点击事件&#x1f341;事件委托&#x1f341;接下来就是各种函数的书写 最后附上完整js代码 短短几周&#xff0c;js阶段的学习已然结束&#xff0c;结课作业就是实现一个购物车功能 功能&#xff1a; 1、可以添加商品 2、全选…

SpringBoot+Vue项目实例开发及部署

目录 一、SpringBoot快速上手 1、SpringBoot介绍 2、SpringBoot特点 3、快速创建SpringBoot应用 4、SpringBoot开发热部署 二、Web开发基础 1、Web入门 2、控制器 3、路由映射 4、参数传递 三、Web开发进阶 1、静态资源访问 2、文件上传原理 3、拦截器 四、构建…

微信小程序项目实例——手势解锁

微信小程序项目实例——手势解锁 文章目录 微信小程序项目实例——手势解锁一、项目展示二、设置手势、手势解锁三、手势重置文末&#xff1a;项目代码 项目代码见文字底部 一、项目展示 这是一款简单实用的手势解锁工具 手势解锁是当下常用的解锁方式 本实例以工具的形式 可以…