敏捷ACP.敏捷估计与规划.Mike Cohn.
第一部分 传统规划失败的原因 vs 敏捷规划有效的原因
传统的项目规划方式往往会让我们失望。要回答-一个 新产品的范围/进度/资源的组合问题,传统规划过程不一定会产生令人非常满意的答案和最终产品。以下- -些论据可以支持这个结论:
●大约2/3的项目会显著超出费用预算(LedererandPrasad1992)
●产 品中64%的功能很少或从不会被使用(Johnson 2002)
●一般项目花费的时间会超出进度表100%(Standish2001)
导致规划失败的5个原因:
- 传统规划方法的一一个 关键问题就是,它们强调的是各项活动的完成而不是对功能的交付。基于活动的规划的第一个问题在于客户并不能从活动的完成中获得价值。功能才是客户价值的计量单位。因此,规划也应该是在功能层面上,而不是在活动层面上。
- 传统规划方法常会失败的第二个原因是多任务处理,也就是同时处理多个任务。多任务处理会对生产率产生可怕的影响。
- 传统规划方法不定能够带来高价值产品的第三个原因是,制订的计划没有按照对用户和客户所具有的价值大小来排列工作的优先级。
- 传统规划方法的第四个缺点是不承认不确定性的存在。我们忽视了与产品相关的不确定性,假定最初的需求分析就可以产生对产品的完整、完善的定义。
- 在每个估计中都包含了-一个可能性,它表示一项特定工作在估计的时间内完成的可能性.很多公司把估计当成了承诺.
敏捷规划的目的是以迭代的方式发现总体产品开发问题的最佳解决方案, "在哪段时间内使用哪些资源来得到哪些功能"。
敏捷估计和规划方法可以成功找到这样的解决方案的原因包括:
- 计划是在不同层次上做出的,并且重规划频繁地发生;
- 计划是根据功能而不是根据任务做出的;首先估计规模,然后根据规模的估计值推算出持续时间;
- 小故事保持L作的流动,而且每次迭代结束时会消除处理中的工作;
- 是在小组层次而不是个人层次对进度进行度量;承认不确定性并为之做计划。
敏捷估计和规划的12条原则:
(1)让整个小组参与。建议就是虽然可能很明显只有1~2个特定的小组成员会处理正在估计的故事或任务,但整个小组做出的估计才是最好的。小组成员间分担的职责越多,小组可以共享的成功也就越多。
(2)在不同层次上进行规划。发布计划、迭代计划和每日计划分别以不同的精度覆盖了不同的时间范围,而且各有其特定的用途。
(3)使用不同度量单位,让对规模和持续时间的估计保持独立。
(4)用功能或者日期来体现不确定性。如果新功能的量是固定的,就把不确定性表示为一个日期范围(“我们会在第三季度完成”或者“我们会在7~10次迭代中完成" )。如果日期是固定的,就需要表示在要交付的确切功能上的不确定性(“我们将在12月31日完成,产品至少会包含这些新功能,最多可能只会再包含那些新功能”)。不确定性较大的时候,就使用较大的单位(例如迭代、月,然后是季度)。(5)经常重规划。
(6)跟踪进度并沟通。燃尽图和其他让人一眼就能看明白的项目进度指示器是最好的。
(7)承认学习的重要性。
(8)规划具有适当规模的功能。迭代中用0.5人天作为单位;
(9)确定功能优先级。
(10)把估计和计划建立在事实上。有关一一个功能完成了多少的问题。很容易知道-一个功能完成了0%的时候(我们还没有开始处理它),也相当容易知道我们已经完成了100%的时候(产品所有者的所有满意条件测试都已经通过了)。(11) 保留一些松弛度。尤其是在规划一次迭代的时候,不要规划用掉所有小组成员100%的时间。
(12)通过前瞻规划协调多个小组。在涉及多个开发小组的项目中,应该通过滚动前瞻规划来协调他们的工作。通过前瞻和把特定功能分配到即将到来的特定迭代,可以规划和调节小组间的依赖。
第二部分 敏捷规划与估计
1. 规模估计: 相对故事点 vs 理想人天, 更建议用故事点做规模估计
,
故事点 | 理想人天 |
有利于采用故事点进行估计的要点 ●故事点估计通常更快 | 有利于采用理想日进行估计的要点 ●理想日在小组以外更容易解释 ●理想日估计更容易开始 |
注: 1. 不要过分估计, 估计有回报递减原则; 小组共同估计. 2. 规划扑克; :斐波纳契数列:0,0.5,1,2,3,5,8,13,20,30,50,无穷大 等比数列; 3. 故事--史诗--主题; 故事的规模要控制在一个数量级内,小于10人日; |
2. 为价值做规划
确定优先级的因素 | (1)获得这些功能带来的经济价值。 --进度风险;成本风险;功能风险;技术风险;商业风险; |
确定功能满意度优先级 | 1. kano模型,
评估方法1: 问卷调查功能的正反两个态度 评估方法2: 相对权重法---专家判断,有此功能的收益和无此功能带来的惩罚做估算 |
第三部分 项目进度安排------发布计划+迭代计划+进度表
1. 发布规划---项目是受功能驱动的,--高层次视图,以用户故事为基础,以价值交付为目标
发布规划就是建立很高层次的、覆盖超过一次迭代周 期长度的计划的过程。一次典型的发布可能会覆 盖3~6个月,而且根据迭代周期的长度,可能具有3~12次或者更多次迭代。粗略地看,确定一次发布中可以有多少工作,以及确定要实现哪些用户故事是一个非常直接的过程。用规划出的迭代次数乘上开发小组预期的或历史的速度,就可以得到能够完成的工作总量。然后我们可以选择适合这个工作量,发布计划本身常常是被简单地记录成-一个列表,列出项目将要开发的用户故事。
//1. 发布规划,不是建立计划,规定谁负责哪个故事,谁负责哪个工作和活动顺序留给团队,并且尽量推迟决定。
//2 。 发布规划,不拆解故事到任务。
| |
![]() | |
![]() |
2. 迭代规划---迭代计划会上确定,迭代计划会不分配任务,迭代目标是小组统一的承诺
优先级变化的一个来源是选代回顾会议。在迭代回顾中,要向项目利益相关者、扩展的项目开发群以及其他所有感兴趣的人演示在这次选代中增加的新功能和新能力.在这些法代回顾中常会得到高价值的反馈.他们常会提出一些好的新想法,会取代以前确定的高优先级对聋的位置.
![]() | 用户故事---》任务 |
![]() | 任务分解结构 |
![]() | |
![]() | 速度驱动的迭代规划 使用" 昨日天气"的方法来确定在当前途代中应该规划多少个故事点或是理想日。 |
![]() | 承诺驱动的迭代计划,要求开发小组把用户故事逐个添加到法代中,直到他们无法承诺完成更多的故事. 更倾向用承诺驱动的迭代规划方法,因为速度本来就不准确。 |
●正在处理的发布的时间长度 ●不确定性的多少 ●获得反馈的难易程度 ●优先级可以保持多久不变 ●不用外部反馈自行工作的意愿的强弱 ●迭代的系统开销 ●紧迫感的产生有多快 | 选择选代长度时考虑的因素 |
一直采用2周的迭代长度可能会使开发小组过度紧张,因为一直会有交付的压力,最终期限也总是不会超过下周。我最喜欢用来减轻这种紧张的办法是采用6次2周的迭代加1次1周的迭代的大循环。我把这个循环称为:“6x2+ 1”。 在2周长度的迭代中,开发小组处理产品所有者确定为优先的对象。而在1周长度的迭代中,小组自行选择工作。这并不意味着欢乐时光或是在沙滩上休息1周,而是让小组中的人员使用这个时间来集中处理他们认为项目中应该优先处理的事情。程序员可以进行一些他们认为如果在其他迭代中间进行则风险太高的重构工作,或是试验一些有关的新技术。测试人员可以用这个时间来把一些遗留的手工测试自动化,赶上进度。分析师则可以对他认为没有受到
| 6X2+1 |
3. 估计速度---速度范围---历史值,试行一次迭代,作出预测
不确定性锥形 | ![]() |
试行迭代 | ![]() |
作出预测 | (1)估计每个人每天可以在项目.上工作的小时数。 (2)确定在迭代中可以用在项目,上的总小时数。 (3)任意地、在某种程度上随机地选择用户故事,把它们扩展成组成它们的任务。重复这个步骤直到确定了足够的任务来填满迭代中的小时数。 (4)把上述步骤确定出的速度转换成一个范围。 |
4. 为不确定性做缓冲规划---功能缓冲区+进度缓冲+成本缓冲
功能缓冲区 | 这个对功能进行缓冲的过程和DSDM(Dynamic Systerms DevelopmentMethod,动态系统开发方法)敏捷开发过程中的做法-样。在DSDM项目中,需求分为4类:必有的(Must Have)、应有的(Should Have)、可有的(Could Have)和不会有(Won't Have)的。DSDM把这个分类过程称为MoSCoW规则。 项目中只能把不超过70%的计划工作量分配给必有的需求。这样,DSDM项目建立了-一个相当于30%项目持续时间的功能缓冲区。 |
进度缓冲 | 不要对每一个活动缓冲,------关键链法; 进度缓冲区设置规则 ●平方和的平方 根方法在有10个以上的用户故事或者功能被估计时最可靠。但是如果您项目中的故事或功能少于10项,也许根本就不应该规划缓冲区。 由于我们对每个对象的估计都是在50%和90%点上,这意味着这两个估计值之间的差大约是标准差的两倍。每个对象的标准差就是(w:-aj)/2,其中w;表示第I个用户故事的最坏情况(90%估计值),而a;表示同-一个故事的平均情况(50 |
第四部分 计划的跟踪与交流
1. 发布计划的监督---发布燃尽图;发布条形燃尽图;停车场图;
在发布开始的时候,我们会建立-一个计划,其内容类似于“在接下来4个月时间的8次迭代中,我们要完成大约240个故事点(或理想日)的工作。
这些力量(已完成的工作、改变的需求和修改的估计值)可以看作类似于船只所受到的风的力量(称为偏航,leeway)和海 的力量(称为漂移,drift)。 考虑一下图19-1,它显示出对- -条船起作用的力量。图中显示的船实际航行的距离会比从里程表上读出的数据少。类似地,虽然船上的罗盘在整个航程中都显示朝向正东,风会让它产生朝南的偏航。如果不进行航向调整,这条船会花更长的时间,才能到达-一个离最初目标有- -些距离的某个地方。如果在头脑中重新标注图19-1中的箭头,把漂移和偏航改成需求的变化(增加或除去功能)和估计值的变化。图19-1就反映了相对于进度表跟踪-一个软件项目的挑战。
发布燃尽图 | ![]() |
发布燃尽条形图 | 绘制这类耗散图的时候要记住4条简单的规则。 |
停车场图 | 在停车场图中,发布中的每个主题(或- -组用户故事)周围都有一个大矩形框。 每个框上都标注了它们的名称、主题中故事的数目、这些故事的故事点或理想日数目,以及已完成的故事点比例。 |
2. 迭代计划跟进---任务板,迭代燃尽图;
任务板 | 一次迭代中使用的任务板图 //1 任务在签入前准备好测试标准和环境。 //2 开发完,进入待测试验证阶段,测试通过后,才已完成 |
迭代燃尽图 | 在一个项目中,了解还剩多少事要做远比了解已经做了多少事有用。 此外,跟踪已完成的工作量并把它与原始估计需要的工作量进行比较,会导致“评估顾虑"(Sanders 1984)。当估计者对提供估计值感到顾虑的时候,众所周知的“战斗或逃跑”的本能就会开始起作用,估计者就会更多地依赖本能而不是分析的方法(Jorgensen 2004)。 |
3 与计划和进度有关的沟通
就计划进行沟通 | 当被问及一个项目的进度表时,把要交付的故事点数目加起来,除以对速度的猜测值,然后说出类似“我们将在6月14日交付,离现在还有7.2次迭代”的话是很有诱惑力的做法。这种做法是错误的,因为它给人的印象是我们用来建立计划的知识足够精确,可以支持这样的估计。 //注意范围,考虑不确定性
不过,我们每2周就会向您交付一次软件,并根据您的满意程度勾出完成的功能故事。好消息是如果您不满意,就可以停止开发。更好的消息是,如果您在完成所有功能前就感到满意了,您也可以停止开发。不好的消息是,您需要和我们一-起工作,来让我们了解您的满意的含义是什么。最好的 与传统甘特图不同点//1。 停留在功能层面上;没有资源分配,即谁负责那些工作;
|
就进度进行沟通 | ![]() |
小结 | 燃尽图是对进度进行沟通的主要手段,但它们常常需要同时有一一个图 显示开发小组在每次迭代中的速度。把速度考虑成-一个取值范围而不是单个值是有益的。有一个好方法可以达到这一目的,就是同时使用最近一次迭代的速度 、前8次迭代的平均速度和前8次迭代中最差的3次迭代的平均速度。这3个值很好地描绘出刚发生的情况、长期平均的情况和最坏条件下可能发生的情况。 |
相关文章:

敏捷ACP.敏捷估计与规划.Mike Cohn.
第一部分 传统规划失败的原因 vs 敏捷规划有效的原因 传统的项目规划方式往往会让我们失望。要回答-一个 新产品的范围/进度/资源的组合问题,传统规划过程不一定会产生令人非常满意的答案和最终产品。以下- -些论据可以支持这个结论: ●大约2/3的项目会显著超…...

[创新工具和方法论]-01- DOE课程基础知识
文章目录 1.DOE实验设计的介绍1.1 什么是实验设计DOE?1.2 DOE的优势有哪些?1.3 如何开展DoE研究?步骤 2.DOE实验培训3.数据分析步骤4.实验的随机化5.偏差6.R方 相关系数假设检验 7.三因子二水平全因子设计 1.DOE实验设计的介绍 实验设计是一种安排实验和分析实验数…...

LeetCode-1033. 移动石子直到连续
题目链接 LeetCode-1033. 移动石子直到连续 题目描述 题解 题解一(Java) 作者:仲景 这题目挺难懂的,得画画图才能更好的理解 这也是LeetCode的尿性,习惯了,非得整这种别人看不懂的鸟语 你可以这样理解&a…...
JVM调优入门指南:掌握步骤、参数和场景
前言 作为Java开发者,我们经常需要优化应用的性能,其中JVM调优是非常重要的一部分。在本文中,我们将介绍JVM调优的一般步骤和方法,了解JVM调优参数,如堆大小、新生代比例、GC算法等参数的作用和配置方式,并…...
基于JSP+MySQL的跳蚤市场网站设计与开发
摘 要 在当今社会,网络信息已经不是什么很陌生的词汇,每天都在这个信息时代里生活着并且享受着它带来的与众不同。网络购物可以说是飞速发展的,这种购物方式逐渐的影响着人们的衣食住行。所以利用计算机实现 跳蚤市场网站设计与开发势在必行。本网站是一个校园的跳蚤市场网…...

内网穿透NPS和宝塔Nginx配合使用,开启SSL访问本地局域网网络
并非为了教学,仅供自己记录,方便下次用。所以内容不会刻意花时间写的很细节详细。 1. 服务器NPS配置 NPS install安装后,配置文件会在其他位置,通过是 /etc/nps/nps.conf目录。 找到进行修改,主要修改的是http_proxy_p…...

ToLua框架
ToLua 是一个用于在 Unity 中为 Lua 提供 C# 语言绑定的框架。通过 ToLua,你可以方便地将 C# 代码暴露给 Lua 脚本,并在 Lua 脚本中调用 C# 类、方法和属性。 更新流程 原理:使用AssetBundle进行资源的更新,而由于lua运行时才编…...

Golang-常见数据结构Map
Map map 是一种特殊的数据结构:一种元素对(pair)的无序集合,pair 的一个元素是 key,对应的另一个元素是 value,所以这个结构也称为关联数组或字典。这是一种快速寻找值的理想结构:给定 key&…...

基于空间矢量脉宽调制(SVPWM)的并网逆变器研究(Simulink)
💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...
介绍tcpdump在centos中的使用方法
tcpdump是一款强大的命令行数据包分析器,支持多种过滤和抓包参数。下面将介绍tcpdump的常用抓包参数。当需要监控CentOS系统的网络流量或者进行网络故障排查时,可以使用tcpdump来捕获数据包并进行分析。 下面介绍在CentOS中使用tcpdump的方法࿱…...

机器学习实战:Python基于DT决策树模型进行分类预测(六)
文章目录 1 前言1.1 决策树的介绍1.2 决策树的应用 2 Scikit-learn数据集演示2.1 导入函数2.2 导入数据2.3 建模2.4 评估模型2.5 可视化决策树2.6 优化模型2.7 可视化优化模型 3 讨论 1 前言 1.1 决策树的介绍 决策树(Decision Tree,DT)是一…...

操作系统之进程同异步、互斥
引入 异步性是指,各并发执行的进程以各自独立的、不可预知的速度向前推进。 但是在一定的条件之下,需要进程按照一定的顺序去执行相关进程: 举例说明1: 举例说明2: 读进程和写进程并发地运行,由于并发必然导致异步性…...

你了解这2类神经性皮炎吗?常常预示着这5类疾病!
神经性皮炎属于慢性皮肤病,患者皮肤可出现局限性苔藓样变,同时伴有阵发性瘙痒。神经性皮炎易发生在颈部两侧和四肢伸侧,中年人是高发人群。到目前为止神经性皮炎病因还并不是很明确,不过一部分病人发病前常常出现精神神经方面异常…...

二叉搜索树【Java】
文章目录 二叉搜索树的性质二叉搜索树的操作遍历查找插入删除 二叉搜索树又称为二叉排序树,是一种具有一定性质的特殊的二叉树; 二叉搜索树的性质 若它的左子树不为空,则左子树上结点的值均小于根节点的值; 若它的右子树不为空&a…...
二叉树的遍历方式
文章目录 层序遍历——队列实现分析Java完整代码 先序遍历——中左右分析递归实现非递归实现——栈实现 中序遍历——左中右递归实现非递归实现——栈实现 后续遍历——左右中递归实现非递归实现——栈加标志指针实现 总结 层序遍历——队列实现 给你二叉树的根节点 root &…...

SpringCloud01
SpringCloud01 微服务入门案例 实现步骤 导入数据 实现远程调用 MapperScan("cn.itcast.order.mapper") SpringBootApplication public class OrderApplication {public static void main(String[] args) {SpringApplication.run(OrderApplication.class, args);}…...
SpringBoot整合Redis实现点赞、收藏功能
前言 点赞、收藏功能作为常见的社交功能,是众多Web应用中必不可少的功能之一。而redis作为一个基于内存的高性能key-value存储数据库,可以用来实现这些功能。 本文将介绍如何使用spring boot整合redis实现点赞、收藏功能,并提供前后端页面的…...

【Java入门合集】第一章Java概述
【Java入门合集】第一章Java概述 博主:命运之光 专栏:JAVA入门 学习目标 1.理解JVM、JRE、JDK的概念; 2.掌握Java开发环境的搭建,环境变量的配置; 3.掌握Java程序的编写、编译和运行; 4.学会编写第一个Java程序&#x…...
Android无线调试操作说明
1.首先通过手机机蓝牙将jackpal.androidterm-1.0.70.apk(终端模拟器)传的设备上安装 链接: https://pan.baidu.com/s/151SzEgsX0b_VTWowzfUrsA?pwdrn75 提取码: rn75 复制这段内容后打开百度网盘手机App,操作更方便哦 2.打开这个终端模拟器,输入以下命…...
什么是 Python ?聊一聊Python程序员找工作的六大技巧
最近我一直在思考换工作的事情。因此,这段时间我会看一些题目,看一些与面试相关的内容,以便更好地准备面试。我认为无论你处于什么阶段,面试中都会有技术面试环节。无论是初级职位还是高级职位,都需要通过技术面试来检…...

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析
1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具,该工具基于TUN接口实现其功能,利用反向TCP/TLS连接建立一条隐蔽的通信信道,支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式,适应复杂网…...
Java 语言特性(面试系列2)
一、SQL 基础 1. 复杂查询 (1)连接查询(JOIN) 内连接(INNER JOIN):返回两表匹配的记录。 SELECT e.name, d.dept_name FROM employees e INNER JOIN departments d ON e.dept_id d.dept_id; 左…...

srs linux
下载编译运行 git clone https:///ossrs/srs.git ./configure --h265on make 编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/srs.log 开放端口 默认RTMP接收推流端口是1935,SRS管理页面端口是8080,可…...

网络编程(UDP编程)
思维导图 UDP基础编程(单播) 1.流程图 服务器:短信的接收方 创建套接字 (socket)-----------------------------------------》有手机指定网络信息-----------------------------------------------》有号码绑定套接字 (bind)--------------…...
.Net Framework 4/C# 关键字(非常用,持续更新...)
一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...

通过MicroSip配置自己的freeswitch服务器进行调试记录
之前用docker安装的freeswitch的,启动是正常的, 但用下面的Microsip连接不上 主要原因有可能一下几个 1、通过下面命令可以看 [rootlocalhost default]# docker exec -it freeswitch fs_cli -x "sofia status profile internal"Name …...

【Post-process】【VBA】ETABS VBA FrameObj.GetNameList and write to EXCEL
ETABS API实战:导出框架元素数据到Excel 在结构工程师的日常工作中,经常需要从ETABS模型中提取框架元素信息进行后续分析。手动复制粘贴不仅耗时,还容易出错。今天我们来用简单的VBA代码实现自动化导出。 🎯 我们要实现什么? 一键点击,就能将ETABS中所有框架元素的基…...

Matlab实现任意伪彩色图像可视化显示
Matlab实现任意伪彩色图像可视化显示 1、灰度原始图像2、RGB彩色原始图像 在科研研究中,如何展示好看的实验结果图像非常重要!!! 1、灰度原始图像 灰度图像每个像素点只有一个数值,代表该点的亮度(或…...
《Offer来了:Java面试核心知识点精讲》大纲
文章目录 一、《Offer来了:Java面试核心知识点精讲》的典型大纲框架Java基础并发编程JVM原理数据库与缓存分布式架构系统设计二、《Offer来了:Java面试核心知识点精讲(原理篇)》技术文章大纲核心主题:Java基础原理与面试高频考点Java虚拟机(JVM)原理Java并发编程原理Jav…...
怎么开发一个网络协议模块(C语言框架)之(六) ——通用对象池总结(核心)
+---------------------------+ | operEntryTbl[] | ← 操作对象池 (对象数组) +---------------------------+ | 0 | 1 | 2 | ... | N-1 | +---------------------------+↓ 初始化时全部加入 +------------------------+ +-------------------------+ | …...