|
本文会根据在软件项目中实施极限编程的实践,对敏捷方法的估算技术做进一步的讨论。但所讨论的方法不仅能用于极限编程,也适用于其他敏捷方法。项目管理者联盟
4 敏捷开发中的估算方法项目管理者联盟
敏捷开发的团队通常是由较有经验的、善于沟通的人员构成。所以在敏捷开发中采用的估算方法往往需要便于理解、能发挥团队成员的集体智慧、并有利于项目的顺利交付。在笔者的团队中,采用了一种叫做“扑克估算”(Planning Poker)的方法进行项目初 期的估算。正像许多其他敏捷开发中所采用的技术,“扑克估算”也非常简单,但却有效率。项目管理者联盟
首先,敏捷方法中的估算应该是由团队成员共同进行,而不是由项目经理“闭门造车”式地得出。这样做的原因之一是因为开发团队是由不同经验的同事组成,对于同一个问题,经验不同的人往往会给出不一样的解决方案。如果可以将所有人的能力集中到一起,那么最后对问题的求解也就八九不离十了。blog.mypm.net
同样的道理也能用在估算上。“扑克估算”大致过程是这样的:开始之前首先要决定采用的估算度量。一般来说“估算点”比较常用,但有时也会采用费伯那其数字(FibonacciNumber,0,1,1,2,3,5,8,13…)作为估算点的值,或者采用衣服的尺码(XS,S,M,L,XL,XXL…)或其他抽象的数字或符号。例如,用户故事一比较简单,那么可以标记1为它的估算点;用户故事二是一个系统登录过程,需要考虑的方面较多,那么就可以标记13为它的估算点等。项目管理者联盟
这样做的最大好处是可以估算出每一个“块”相对于其他“块”的大小,而不是实现它需要的时间长短。因为敏捷开发具有短交付周期的特点,一般经过几个周期的适应,团队就能逐渐得出每个“点”该花费多少时间的认识,那么下次估计就会更加准确。项目管理者联盟
这也正是敏捷开发的另一个“自我纠正”的特点。接下来就是准备这样一套卡片或使用即时贴代替。团队成员对于每一个用户故事进行讨论,澄清关于该点的需求,尽量使所有成员都理解这个功能该如何设计等。项目管理者联盟
如果大家对于某一点再也提不出问题,那么就一起亮出自己的“估算点”卡片。正如前面所说的,每个成员都有不同经验背景,所以很难一次都给出同样的估算。这是因为可能某个人看到了潜在的问题和风险而其他人却没有发现,又或者有人想到了一个更加简便的办法等。得到不同意见后,将其作为下一步讨论的基础。项目管理培训
大家相互交换对问题风险的看法,讨论新的点子等。最后,小组重新投票得出一个比较一致的估算。一个接着一个,按照同样的流程对所有的用户故事进行估算,得出一串不同的“估算点”。这就是“扑克估算”的大致思路。项目管理者联盟
5 常用的估算方法项目管理者联盟
能够应用在软件项目中估算方法还有很多种,其中功能点分析是一种常用方法。它是将系统分解为较小组件,以便能够快速理解和分析。同“估算扑克”法类似,功能点是功能点分析的测量单位在功能点分析中,系统被分为五个大类组成部分(组件)和一些常规系统特性。项目管理者联盟
前三类件是:外部输入(External Inputs EI)、外部输出(External Outputs EO)和外部查询(External Inquiry EQ)。这些组件中的每一个组件都处理档案,因此他们被称为“事务”(Transac-tion)。另外两类或组件是:内部逻辑文件(InternalLogical Files ILF)和外部界面文件(External InterfaceFiles EIF),它们是构成逻辑信息数据的存储之地。项目管理者联盟
外部输入:是指用户可以根据需要通过增、删、改来维护内部逻辑文件。外部输入使用户可以维护ILF。外部输出:是指用户的输出结果。显示结果就是经过调用维护数据和参考数据获得的。在功能点术语中,显示的结果就称为“外部输出”。外部查询:是指用户可以通过计算机系统选择特定的数据并显示结果。项目管理者联盟
为了获得这项结果,用户要输入选择信息抓取符合条件的数据。此时没有对数据的处理,是直接从所在的文件抓取信息。例如:驾驶员要显示预先设置的地形图,输出的结果就是直接从信息存贮位置提取的信息;这里称作“外部查询”。pmp.mypm.net
内部逻辑文件:这是第一项数据功能,使客户可以使用他们负责维护的数据。数据在系统中的逻辑分组是由最终用户维护的,所以把它们叫做“内部逻辑文件”(ILF)。项目管理者联盟
外部界面文件:这是第二项数据功能,也和数据的逻辑分组有关。在这种情况下,用户不负责维护数据,数据在另一系统中驻留由其他用户进行维护。该数据只供系统用户参考使用。例如:飞行中,驾驶员可能需要参考某卫星或地面定位系统的定位数据。驾驶员不负责更新这些数据但要参考使用。项目管理者联盟
这样,这些只供参考使用的其他系统的数据分组就称为外部界面文件。功能点估算通过对于系统的分析,根据以上五种组件的多少,按照高、中、低三个类别对每项的复杂度进行打分,最后加上影响估算的调整因子而得出估算结果,如下面的公式talent.mypm.net
AFP(调整后功能点)=UFP(未调整功能点数目)×AF(影响因子)项目管理者联盟
6 实际的例子项目管理者联盟
笔者在实际采用敏捷方法的项目中进行了一些实验。分别采用不同的方法对于同样一个短开发周期的工作进行了估算,结果如下表1所示。表1不同估算方法不同估算结果方法估算值单位工作量(人/天)预计工作量扑克估算33 1·6 52·8人/天功能点估算69 0·8 55·2人/天项目管理者联盟
其中扑克估算的单位工作量是按照前几次团队估算的结果调整得出的,大约要花费1·6个人天才能完成一个估算点的工作量;功能点估算的单位工作量是从公司已有的统计表格上摘录,反映了在公司中采用类似技术团队的平均工作效率。bbs.mypm.net
整个周期大约花费了两个礼拜的时间,共有六个团队成员参与开发。实际工作量可以认为是60人/天。项目管理者联盟
7 结果的分析项目管理者联盟
综上所述,在采用比较简单的、基于团队经验的估算方法比起精确的、有着复杂数学模型的估算方法并没有明显精确度的差异。但是相对于复杂的方法来说,简单的、易于团队达成共识的方法能节约得出结论所需要的时间,也能增强团队对于任务的认识。项目管理者联盟
从另一个侧面来看,也能提高团队的士气和效率。正如某些研究预测学的专家所说,“研究预测学得到的最牢靠也最有用的结论之一就是,简单方法总体上和复杂方法一样准确。”项目经理博客
|