敏捷估算为何使用斐波那契数列(Fibonacci)(
1.故事点到底有什么用?
2.敏捷估算为什么用斐波那契数列,而不是自然数?
为何用故事点估算法?
在软件估算中,根据估算方法不同一般可以分为:
类比估算 (相对估算)
WBS估算(绝对值估算)
Delphi估算(绝对值估算)
而之外的如Ad-Hoc和PERT估算等很少被使用,在次也不多作介绍,目前另一种流行的是功能点估算,个人认为更加合理,以后再做详细解释。工时估算是绝对估算的一种,可以是WBS或Delphi估算的产物,最终获得的是”精确的“小时数或者人天数。这里给精确打上引号是因为绝对估算法的确能给出明确的时间目标值,虽然最终结果往往跟这个估算值有很大偏差。这类估算方法的缺点是:估算往往有专家"代劳",并不代表团队的估算;前期需求和架构的不明确给估算造成很大影响,因此无法精确给出,只能凭经验或者增加估算"水分";估算结果一般是固定的,需求变更会对估算造成较大影响。
为了解决以上问题,在敏捷中使用了用户故事点估算法。这类方法是相对估算法,即在一个比较明确的功能估算基础上,由团队对剩余的需求进行相比估算,当实习一个阶段的交付后(一般为几周),对于项目工期进行预估,并对剩余的工作重新进行估算。这里要强调的是,1.团队一起估算。2.每次交付完成,重新进行估算。这种方法让刚开始并不明确的工期,在几周后变得明确,并且重新估算,可以应对新的变更需求,以及让估算更为精确。而敏捷估算方法的主要问题是,在项目初期很难给出明确的完工时间,从而很难给出项目总预算。这是敏捷项目经理需要去回答也是说服客户的。 (我的经验是签总价合同的基础上,补充人天条款多退少补。)
那么故事点到底有什么作用呢?
简单的说有两个比较显著的作用。其一,故事点可以是系统交付的价值衡量。这个看上去很难理解,举个例子就不难了。比如:一个项目是1000工时,另一个项目是1000故事点。对于使用了500工时和完成500个故事点的项目状态进行比较,第一个项目很难说明其完成了50%功能,因为有些功能比较复杂,其中几个功能可能占了大部分时间。而对于完成了500故事点的项目,对于用户来说是确确实实完成了一半有价值可以使用的功能,而且是优先级较高的功能。因此对于这两个50%的感受是完全不一样的。
其二。在相对估算中,相互抵消了不确定比例。也举个例子,比如:一个项目比较正常的估算可能是1000点,每个迭代可完成100个故事点,一共10个迭代。而团队A把估算放大一倍,把它估算2000点。看上去好像增加了一倍工作量,但实际操作结果并非如此。因此估算的放大,团队Velocity也上升了(每个迭代完成的故事点数)。排除消极怠工的情况下,他们第一个迭代可能完成的是200个故事点,因此总的项目周期还是10个迭代。因此,在团队信任基础上,就算对于有功能的很多不确定因素,同比放大或者缩小估算值,并不影响最终交付所需要的投入。反而让团队估算更为"心平气和",反应事实。
当然故事点还有很多其他好处,比如估算速度快等,也是值得使用的。
那为何用斐波那契数列?
回答这个问题之前,我们需要先了解什么是斐波那契数列。斐波那契的公式大家都知道是:F0=0,F1=1,Fn=F(n-1)+F(n-2)(n>=2,n∈N*)。
个人认为这是一个非常神奇的数组。首先它是一个自然数组,但是通项公式却用无理数来表达(不知道无理数,有理数的同学先去补课下)。
其二它的前一项与后一项的比值越来越接近黄金分割(0.618)。还有其三,其四等如两倍项关系,奇偶项和公式等,都是非常有意思的。具体可以参考百度百科。
那么到底为什么用这个数列来进行敏捷估算呢?
如果去追究Scrum创世者KenSchwaber或者Jeff Sutherland当初为何用这个数组,结果可能会让你失望,因为并没有说明这个数组和估算是有直接关联的,也没用直接说明为何采用这个数列。而事实上,这个数列起到了作用的,因为在敏捷估算中,并不最求精确的绝对值估算,估算本身就包含复杂性和工作量,因此在相对估算中,如果存在不确定因素,甚至需要比较的"1"也存在不确定因素的时候,相对估算就变得更为粗矿。对于已经不确定的估算,用绝对值或者连续值估算都看上不那么靠谱了。所以后来Scrum估算中把21改为20,34改为40也是这个原因,既然不用精确,那么取一个便于记忆和运算的数值会更加方便。这里就需要理解敏捷估算的精髓,而非早本宣科。所以各位如果觉得这个数列不好记,用1,2,5,8,10,15,20,25…等你觉得比较顺眼的数列也是完全可以的。大可不必担心违反了scrum,而恰恰参透了敏捷的精髓。第三也是很重要的一点。敏捷估算向来不是一次性估算,因此及时你的估算值很大,当他需要被实现的时候,肯定会被细化成一个迭代可实现的功能大小范围。再次估算或许影响了整体估算的最终值,但是让下一个交付的估算更为精确。这是传统估算所不能相比的。
轉自http://blog.sina.com.cn/ali0288
敏捷估算为何使用斐波那契数列(Fibonacci)(相关推荐
- matlab 斐波那契数列Fibonacci Sequence
斐波那契数列Fibonacci Sequence 主代码 %% 清理可能存在的旧数据 clc; % 清屏 clear; % 清除变量 close; % 关闭可能存在的窗口 %% 调用主要代码 n = ...
- JavaScript实现以数组形式返回斐波那契数列fibonacci算法(附完整源码)
JavaScript实现以数组形式返回斐波那契数列fibonacci算法(附完整源码) fibonacci.js完整源代码 fibonacci.js完整源代码 export default funct ...
- 斐波那契数列(Fibonacci) - 这就是算法吗?爱了爱了
斐波那契数列(Fibonacci) 今天开始做牛客的剑指Offie,一看到斐波那契我就想到递归,是它是它就是它,然后我就满怀期待地写下了下面地代码.ok,没问题,一次性过.然而,我滴老天鹅,才击败30 ...
- 求解斐波那契数列(Fibonacci Numbers)算法居然有9种,你知道哪几种吗?
By LongLuo 斐波那契数列(Fibonacci sequence),又称黄金分割数列,因数学家莱昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为&q ...
- Java数据结构与算法---斐波那契数列Fibonacci
Java数据结构与算法-斐波那契数列Fibonacci 原理都很简单,直接上代码: package cn.m_fibonacci;public class Fibonacci {public stat ...
- 斐波那契数列 (Fibonacci) 多种实现方法(Python)与详细介绍
斐波那契数列 Fibonacci Sequence 本文介绍了多种方式得到斐波那契数列或斐波那契数.斐波那契数列也称为"兔子数列".来源于兔子繁殖的预测.它的重要性体现在相邻两数之 ...
- JAVA编程:斐波那契数列(Fibonacci)
JAVA编程09:斐波那契数列(Fibonacci),输入一个数据n,计算[斐波那契数]列(Fibonacci)的第n个值 需调用run9方法 /*输入一个数据n,计算[斐波那契数]列(Fibonac ...
- Java实现斐波那契数列Fibonacci
import java.util.Scanner; public class Fibonacci {public static void main(String[] args) {// TODO Au ...
- 使用并行的方法计算斐波那契数列 (Fibonacci)
更新:我的同事Terry告诉我有一种矩阵运算的方式计算斐波那契数列,更适于并行.他还提供了利用TBB的parallel_reduce模板计算斐波那契数列的代码(在TBB示例代码的基础上修改得来,比原始 ...
最新文章
- 关于前端开发的相关资料及例子
- php建立数据库操作类,PHP数据库操作类的定义及使用
- MediaCodec_loop 崩溃
- 中南大学计算机专业男女比例,你知道吗?中南大学的男女比例居然是这样的
- rust货轮什么时候出现_与 Rust 在一起的四年
- C++ COM编程之接口背后的虚函数表
- python文件管理_超值的Python文件操作与管理!
- mysql多数据源事务_多数据源一致性事务解决方案
- 详述一次大量删除导致MySQL慢查的过程
- idea连接Mysql报错
- Call to your teacher(深度搜索)
- QML中使用QSortFilterProxyModel进行排序和过滤
- 解决Promise.all一个被rejected,整个都被rejected的缺陷
- java生成二维码扫描跳转到指定的路径URL
- 深圳大学数学文化赏析MOOC答案
- PageAdmin CMS Sql新建数据库和用户名教程
- adb操作提示Read-only file system问题
- CocosCreator之微信小游戏的抽奖转盘
- pandas创建DataFrame的几种方式(建议收藏)
- win10如何设置定时联网断网辅助自律