关键词:软件开发,项目管理,估算,误差
估算与计划和项目控制,以及估算与目标和承诺之间的关系;不确定性与估算中的误差来源以及影响估算的各种因素;先计数、再计算,无法可想时才依靠判断的基本估算原则;用于估算软件项目的三个重要部分——规模、工作量和进度估算的基本方法;与规模、工作量和进度估算有关的特殊问题;估算的概率论观点以及如何采用适当的方式来表达估算结果中的不确定性;如何进行与估算有关的沟通,从而使技术人员和非技术人员达成共识。
概论
软件项目面临对目标与进度、成本两难的局面。软件估算的首要是确定项目目标是否足够现实,从而让项目在可控的状态下达成这些目标。估算无需非常准确,而是要有用。
估算共识:
- 估算是无法100%准确的。
- 随着估算准确度的提高,估算所需成本会随之急剧增加。
- 估算只是项目计划的输入之一。
- 估算也只是计划承诺的输入之一,而非全部。
- 估算、计划、承诺有关联,但不完全是一回事。
绝对估算就是指以绝对时间(如小时或天)为单位进行估算。
相对估算就是通过不同项目之间的大小对比进行估算。
估算的基本原则:
- 采用多种估算方法,综合出估算。
- 单点估算一般是不准的,可以给出一个区间。
- 保留估算的历史数据,这样在以后的估算中就会越来越一致。
- 关于工作分解和估算可以参考PMBOK(PMBOK第五版中文版.pdf)。
估算是定制软件开发的难题,存在一些普遍规律:
- 频繁的估算显著破坏团队的整体生产力。
- 基于团队成员不可互换的推论,对一个人的估算并不能用来预测另一个人。
- 估算不是承诺。是猜测,而且往往是范围越大,出错的可能性就越大。
- 如果对软件开发的时间和成本没有概念,公司就无法做出是否开发的决定。所有估算必须提供。
常用估算方法
- 类似项目直接比较,估算工作量和进度
- 使用生产率数据,根据规模估算工作量。例如 10000行/(100行/人天)=100人天
- 使用经验模型,根据规模估算。
方法
工作分解(WBS)法
最简单和直接的一个方法,把开发这个模块的所有工作列出来,从需求理解到最终的上线维护,然后分解每个项目直到每个项目很容易估计工作量(在1到2个星期左右),这样把所有的工作量加起来乘以每种工作量的人工单价。
排序估算法.相对估算
每个卡片是项目拆分任务,根据每个卡片需要的工作量,从小到大进行排序。全部卡片贴完以后,再请全体开发人员重新看一看,是不是每个卡片的位置都很适当。如果对某个卡片的位置有异议,请拿出来讨论。这也许是因为大家对它的内容和理解不一致造成的。因此需要对其进行深入讨论,直至一致认为它应该在哪一列为止。
在同一列的卡片是工作量基本相当的任务。
排序估算法.注意事项
1. 在估算之前,应该确保所有卡片之间的规模差异不要过大。卡片粒度不合理,需进行合并或分拆。
2. 卡片的数量不符合正态分布,而是两头的卡片多,中间的卡片少。卡片需要时间均匀
3. 整体规划,卡片之间相关性的分析和验证。注意每个任务的正交性
4. 没有相对估算的团队中首次使用时,最好有经验的人加以引导,对已排定的顺序进行适当验证。
计数,计算和判断
如果无法直接计数得到答案,就应该先对某些对象进行计数,然后使用某些校准数据计算出答案。
计算公式,检查表
历史数据对估算准确度的影响非常大。软件估算
计算对象
LOC代码行,FP功能点,需求的数量,文档的页数
IBM估算模型计算项目工作量
https://www.ibm.com/developerworks/cn/rational/r-cn-rmcprojectestimation/
参考
《软件估算》.百科http://baike.baidu.com/view/2651687.htm
Steve在微软、波音以及西雅图地区的其他公司也从事过软件项目方面的工作。1998年,SoftwareDevelopment杂志的读者们把Steve选为软件行业最有影响力的三个人之一,另外两人分别是BillGates(微软公司的创办人)和LinusTorvalds(Linux的作者)。
技术杂谈.软件估算那点儿事 http://www.wzaobao.com/p/2fftVmo.html