实施Scrum敏捷开发的关键要素

article/2025/8/27 19:38:33

一、敏捷开发由来

 

2001年2月11日至13日,美国犹他州瓦萨奇山雪鸟滑雪胜地,17个人聚到一起,试图找到软件开发的共识,最终的成果就是《敏捷软件开发宣言》。参会者们包括来自于极限编程、Scrum、DSDM、自适应软件开发、水晶系列、特征驱动开发、实效编程的代表们。官方网站:http://www.agilemanifesto.org

 

《敏捷宣言》提出敏捷4条价值观:

1、个人与互动胜过过程与工具

(Individuals and interactions over processes and tools)

2、可用的软件胜过复杂的文件

(Working software over comprehensive documentation)

3、与客户合作胜过合同谈判

(Customer collaboration over contract negotiation)

4、响应变更胜过遵循计划

(Responding to change over following a plan)

 

《敏捷宣言》提出敏捷12条原则:

1.我们最重要的目标,是通过持续不断地及早交付有价值的软件使客户满意。

2.欣然面对需求变化,即使在开发后期也一样。为了客户的竞争优势,敏捷过程掌控变化。

3.经常地交付可工作的软件,相隔几星期或一两个月,倾向于采取较短的周期

4.业务人员和开发人员必须相互合作,项目中的每一天都不例外。

5.激发个体的斗志,以他们为核心搭建项目。提供所需的环境和支援辅以信任从而达成目标。

6.不论团队内外,传递信息效果最好效率也最高的方式是面对面的交谈。

7.可工作的软件是进度的首要度量标准。

8.敏捷过程倡导可持续开发。责任人、开发人员和用户要能够共同维持其步调稳定延续。

9.坚持不懈地追求技术卓越和良好设计,敏捷能力由此增强。

10.以简洁为本,它是极力减少不必要工作量的艺术。

11.最好的架构、需求和设计出自自组织团队。

12. 团队定期地反思如何能提高成效,并依此调整自身的举止表现。

 

二、Scrum敏捷开发

Scrum敏捷开发定义:Scrum 是用于开发、交付和持续支持复杂产品的一个框架,是一个增量的、迭代的开发过程。在这个框架中,整个开发过程由若干个短的迭代周期组成,一个短的迭代周期称为一个Sprint,每个Sprint的建议长度是一至四周。在Scrum中,使用产品Backlog来管理产品的需求,产品backlog是一个按照商业价值排序的需求列表,列表条目的体现形式通常为用户故事。Scrum团队总是先开发对客户具有较高价值的需求。在Sprint中,Scrum团队从产品Backlog中挑选最高优先级的需求进行开发。挑选的需求在Sprint计划会议上经过讨论、分析和估算得到相应的任务列表,我们称它为Sprint backlog。在每个迭代结束时,Scrum团队将递交潜在可交付的产品增量。 Scrum起源于软件开发项目,但它适用于任何复杂的或是创新性的项目。Scrum 目前已被用于开发软件、硬件、嵌入式软件、交互功能网络、自动驾驶、学校、政府、市场、管理组织运营,以及几乎我们(作为个体和群体)日常生活中所使用的一切。以下是Scrum敏捷总体流程图:

scrum的基本流程如上图所示:

1.产品负责人负责整理user story,形成左侧的product backlog 。 ---用户故事整理

2.发布计划会议:product owner负责讲解user story,对其进行估算和排序,发布计划会议的产出就是制定出这一期迭代要完成的story列表。sprint backlog。 --用户故事确认

3.迭代计划会议:项目团队对每一个story进行任务分解,分解的标准是完成该story的所有任务,最终每个任务都有明确的负责人,并完成工时的初估值。--用户故事分解

4.每日例会:每天scrum master召集站立会议,团队成员回答昨天做了什么今天计划做什么,有什么问题。--用户故事实现

5.演示会议:迭代结束后,召开演示会议,相关人员都受到邀请参加,团队负责人向大家展示本次迭代取得的成果。期间大家的反馈记录下来,由PO整理,形成新的story。 --用户故事的二次整理

敏捷开发中用户故事的细化为开发提供了可执行的标准,敏捷开发的特点是快速迭代,一个用户故事的大小和复杂度应该是在一个迭代中开发完毕为宜。如果用户故事过大,可能会导致它的开发横跨几个迭代。此事就应该将这个用户故事分解。每个任务的时间最好不要超过8小时,就是要保证一个工作日内完成,如果做计划时发现有些任务的时间超过了8小时,就说嘛任务的划分有问题,需要进行子任务的分解。

 

2.1、实施Scrum敏捷开发关键细节点:

1、大项目分成多个迭代(Sprint),每个迭代都要跟客户交流确认;

2、用户故事不能过大,不要跨多个迭代;

3、每个任务的时间最好不要超过8小时,就是要保证一个工作日内完成;

4、每个团队不要太大,8人左右最好;

5、每天一定要有站例会,每个人2分钟都要说,不会有人摸鱼,注意要控制时间;

6、要有实体看板,把大家聚到一起,仪式感很强,不能用电子看板代替。

 

2.2、敏捷开发物理看板示例

 

2.3、Scrum团队组织架构

核心是要保证团队成员稳定,不能老换人,否则会影响敏捷研发效率和质量,PM、PO、UED、SCM等这些角色可以跨团队复用的。

2.4、敏捷开发和瀑布开发的区别

 

三、Scrum敏捷概念梳理

Scrum框架涉及到多个概念,官方有3个角色、3个工件、5个事件的说法,以下是按照实际的项目开发过程梳理的。

 

3.1、Scrum敏捷角色有哪些

 

Scrum Master职责:强调是服务型领导,对内不要太强势,要注意团队融洽

 

Product Owner 职责:这个角色很关键,懂需求,要处理好与甲方的关系

 

3.2、Scrum何时做什么事

 

3.3、Scrum要开哪些会议

 

3.4、什么是用户故事

 

用户故事(user story)

用户故事(user story)是个用来确定用户和用户需求的简短描述,用户故事是从用户的角度来描述用户苛求得到的功能。一个好的用户故事包括三个要素:

1.角色:谁要使用这个功能。

2.活动:需要完成什么样的功能。

3.商业价值:为什么需要这个功能,这个功能带来什么样的价值。

模板:作为一个<角色>, 我想要<功能>, 以便于<商业价值>

例子:

“作为招聘网站注册用户,我想要查看最近3天发布的招聘信息,以便于我看到最新的招聘信息”。

作为一个“网站管理员”,我想要“统计每天有多少人访问了我的网站”,以便于“我的赞助商了解我的网站会给他们带来什么收益。

需要注意:用户故事不能够使用技术语言来描述,要使用用户可以理解的业务语言来表达。

 

3.5、什么是用户故事地图

 

用户故事地图 已经成为敏捷需求规划中的一个流行方法。用户故事地图可以将你的backlog变成一张二维地图,而不是传统的简单列表。用户故事地图可以解决以下问题:

  • 让你更容易看清backlog的全貌;
  • 帮助你更好的进行迭代增量式开发,梳理最小 MVP 最小可运行产品,同时确保早期的发布可以验证整体架构和解决方案;
  • 有助于激发讨论和管理项目范围
  • 允许你从多个维度进行项目规划,并确保不同的想法都可以得到采纳

用户故事地图模板:

 

以购书网站为例展现用户故事地图:

 

 

3.6、什么是故事点

故事点 是敏捷项目管理和开发中的一种抽象的度量单位,用于估计实现一个或多个用户故事的复杂度,它是对工作量的一种描述方式。一个故事点就是一个数字,透过这个数字告诉整个团队用户故事的复杂度。复杂度包括功能的难易程度、风险和花多大的功夫。

故事点(story point)和预估时间(estimated)不一样,故事点是一种相对的估计,它并不能和类似“人/天”这样的单位画等号,因为每个人完成同样复杂度的工作所需的时间是不同的。故事点方法提倡敏捷团体在一起讨论,为用户故事计数,以此来衡量故事的难度和所需的工作量。

故事点一般用在团队内部,结合燃尽图一起用,故事点度量的最大缺陷就是“缺乏一致性”,不能在多个敏捷团队之间进行横向比较。

 

四、敏捷开发总结

网上关于scrum的概念很多,让人看后摸不着头脑,实施scrum敏捷开发要注意理解其背后的内涵,其实就是先定规矩、达成共识、简单工作、小步快跑。

比如:

搞一个物理看板,每人日例会站立开会,有仪式感;

日例会每天必开,每人必须参加,迟到给大家发红包;

有问题大家尽快提出来,讨论协商解决,不要隐藏问题;

故事点在团队内部达成共识,比如一个增删改查模块2个故事点;

每个迭代完成后,团体要复盘讨论,分享经验。

云程低代码开发平台产品在研发过程采用了“Scrum敏捷思想+DevOps工具”模式,我们将继续探索。


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

相关文章

SCRUM敏捷开发教程

大家好&#xff0c;我是煎饼哥&#xff0c;本期向大家介绍一个关于敏捷开发的方法&#xff0c;叫做scrum&#xff0c;相信资深的产品经理都接触过类似的项目管理方法。 scrum敏捷开发&#xff0c;是一个美国统计学教授记录了多年工作经验&#xff0c;总结出来的一套简单易懂的开…

Scrum敏捷开发模式

前言 我的个人博客 最近报名参加了微信小程序应用开发赛&#xff0c;也是作为走向职场前的一次锻炼&#xff0c;为了模拟企业开发的流程&#xff0c;我们团队决定使用敏捷开发模式来管理项目。这篇文章&#xff0c;是对在近些天来网上学习到的Scrum敏捷开发模式的总结。 软件…

无向图的邻接表

如何根据无向图画出邻接表呢&#xff1f; 比如&#xff1a; 第一排的v1&#xff0c;与v2和v4相连&#xff0c;因此两个黄色方框内的数字分别代表v2和v4的下标&#xff1b; 第二排的v2&#xff0c;与v1、v3和v5相连&#xff0c;因此三个绿色方框内的数字分别代表v1和v3和v5的…

C++实现的邻接表

1. 在学习图的存储方式中&#xff0c;邻接矩阵和邻接表是两种比较常用的存储图的方式&#xff0c;下面使用的是C语言实现的邻接表 2. 具体的实现过程如下&#xff1a; ① 首先使用结构体声明图的结构体&#xff0c;图中顶点的结构体&#xff0c;以及指向下一条边的结构体&…

图的存储--邻接表

邻接表既适用于存储无向图&#xff0c;也适用于存储有向图。邻接表常用于稀疏图的存储。 邻接表存储图主要在于将图的各顶点建立一个链表&#xff0c;链表记录该顶点的邻接点的在数组的位置。 #define MAX_VERTEX_NUM 10 // 最大顶点数 #define INF 32767 // 不邻接 typedef…

有向图的邻接矩阵、邻接表和逆邻接表

1、如何根据有向图画出邻接矩阵&#xff1f; 如图&#xff1a; v1指向v2和v3&#xff0c;在矩阵中v1指向v2、v3的表示标1。 注意&#xff1a; v1指向v2在矩阵中是用竖列的v1对应横行的v2 2、如何根据有向图画出邻接表呢&#xff1f; 注意&#xff1a; 画有向图的邻接表时…

【数据结构】 图的邻接表

邻接表是图的另一种存储结构&#xff08;使用链表的思想&#xff09;。 该方式的基本思路&#xff1a;顶点表后指向邻接表&#xff0c;邻接表中依次为当前顶点的邻接点 准备工作 与邻接矩阵类似&#xff0c;在构造邻接表之前&#xff0c;需要存储各个顶点的信息&#xff0c;…

《数据结构》-图的邻接表表示法(四)

邻接表表示法(链式) 存储定义&#xff1a; 顶点&#xff1a;按编号顺序将顶点数据存储在一维数组中关联同一顶点的边(以顶点为尾的弧)&#xff1a;用线性链表存储 无向图的邻接表 例如&#xff0c;如下无向图 则它的邻接表为 无向图邻接表的特点&#xff1a; 邻接表不唯一…

【图】邻接表

目录 无向图的邻接表 链表&#xff08;存相邻顶点下标&#xff09;的类 数组里放的顶点 邻接表&#xff08;操作&#xff09; 构造和析构&#xff08;创建销毁邻接表&#xff09; 插入顶点 插入边 获取下标 插v1、v2之间的边 删除顶点 删除边 输出&#xff1a; 其他…

图的邻接表表示法(C语言)

邻接表 邻接表数据结构类型如下&#xff1a; #define MaxVertices 100 typedef struct node{ //边表 int adjvex;node* next; }EdgeNode; typedef struct{ //顶点表 int vertex; EdgeNode* edgenext; }VertexNode; typedef VertexNode AdjList[MaxVertices];//…

邻接表的创建

邻接表 特点&#xff1a; 1、想要知道某个顶点的度&#xff0c;就去查找这个顶点的边表中结点的个数 2、若想判断顶点 Vi 到 Vj是否存在边&#xff0c;只需测试顶点 Vi 的边表中adjvex是否存在 Vj 的下标。 3、若求顶点的所有邻接点&#xff0c;其实就是对此顶点的边表进行遍历…

邻接表创建

邻接矩阵是个不错的图储存结构&#xff0c;但我们发现&#xff0c;对于边数相对顶点较少的图&#xff0c;这种结构是存在对储存空间的极大浪费的&#xff08;关于邻接矩阵的相关知识在这里&#xff1a;邻接矩阵的创建&#xff09;&#xff0c;因此我们要考虑另外一种存储结构方…

邻接表和邻接矩阵

进入图论的大门&#xff08;深渊&#xff09;之前&#xff0c;我们一定要掌握的两种必备手段——邻接表和邻接矩阵&#xff0c;此刻将成为我们的巨大帮手&#xff08;其实做不来题还是做不来&#xff09;&#xff0c;下面让我们来学习一下&#xff0c;这两种存图方式在计算机中…

图的邻接矩阵和邻接表的比较

欢迎关注“软件开发理论”公众号获取干货 图的存储结构主要分两种&#xff0c;一种是邻接矩阵&#xff0c;一种是邻接表。 1.邻接矩阵 图的邻接矩阵存储方式是用两个数组来表示图。一个一维数组存储图中顶点信息&#xff0c;一个二维数组&#xff08;邻接矩阵&#xff09;存储图…

无向图邻接表实现

无向图邻接表实现 顶点&#xff1a;按照编号顺序将顶点数据存储在一维数组当中 关联同一个顶点的边&#xff08;以顶点为尾的弧&#xff09;&#xff1a;用线性链表存储 头结点&#xff1a;datafirstarc 表结点&#xff1a;adjvex&#xff08;邻接点的序号&#xff0c;存放…

邻接矩阵和邻接表

图的存储结构主要分两种&#xff0c;一种是邻接矩阵&#xff0c;一种是邻接表。 1.邻接矩阵 邻接矩阵的存储方式是用两个数组来表示图。一个一维数组储存图中顶点信息&#xff0c;一个二维数组储存图中的边或弧的信息。 无向图 这里右图是把顶点作为矩阵内行和列的标头罗列出…

图--邻接表

邻接表是图结构中的一种存储结构&#xff0c;适用于存储无向图和有向图。 邻接表存储图的实现方式是&#xff0c;给图中的各个顶点独自建立一个链表&#xff0c;用节点存储该顶点&#xff0c;用链表中其他节点存储各自的临界点。 与此同时&#xff0c;为了便于管理这些链表&a…

邻接表的实现(有向邻接表)、(无向邻接表),基于C++

邻接表 邻接矩阵的实现请看这里 是不错的一种图存储结构&#xff0c;但是&#xff0c;对于边数相对顶点较少的图&#xff0c;这种结构存在对存储空间的极大浪费。因此&#xff0c;找到一种数组与链表相结合的存储方法称为邻接表。 邻接表的处理方法是这样的&#xff1a; &a…

邻接表图文详解

在与链表相关的诸多结构中&#xff0c;邻接表是相当重要的一个。它是树与图结构的一般化存储方式&#xff0c; 邻接表可以看成“带有索引数组的多个数据链表”构成的结构集合。在这样的结构中存储的数据被分成若干类&#xff0c;每一类的数据构成一个链表。每一类还有一个代表元…

数据结构 图的邻接表

呃&#xff0c;下面该写邻接表了....... 邻接表的出现是因为图若是稀疏图&#xff0c;用邻接矩阵会造成空间的浪费&#xff0c;毕竟你要开辟一个一维数组和一个二维数组嘛&#xff0c;而且还是大开小用的那种。 邻接表为了避免内存的浪费引入了链式存储&#xff0c;它的处理办…