对一个项目的评估,往往被要求在项目需求还不明确的时候开始。不知道你是否有这样的体会,客户给你简单介绍了一点需求,或者发给你一份写的很粗略的文档,就要求你给个价格看这东西大概是要花多少钱多少时间才能建成。以前我做网站的时候,遇到过好多好多的这类问题。
在软件开发过程中,总要面临一个"估算(Estimation)"的问题。这个项目需要多长时间?这个模块你大概多久完成?一共要花多少钱才能搞出来?软件开发的成本主常常用人月来计算,当然,也有人/小时,人/天。从数学上说,计算一个时间的先决条件,是必须要知道速率和距离。那软件开发度速率是多少?开发要走完的距离又怎么估计?
假定"人天"可以作为我们需要找到的速率(Velocity)的单位,就是某个人每天8小时能干的活的工作量,或说他的开发能力。对于一大堆待要开发的需求,它的总工作量和整个团队的单位开发能力的计算需要考虑更多的因素。
先来考虑需求的总量。我们来看这一个例子,列举你认识的满足下面条件的人:人,男人,20岁的男人,20岁的 头发有些染黄的男人,20岁的头发有些染黄抽烟的男人。从这一组词中,我们可以看到,从左到右描述的越来越具体,你能列举出的也越来越少。而反过来顺序,词的外延更大,你的能想到的却越来越多的。
同样的,对于需求的描述,如果描述的越细致,你就越能够准确的估算它的工作量。 登录系统,这样的需求很难说要多久。而一个使用用户名密码登录,支持找回密码功能的登录系统就稍微好一些。如果能够画出界面原型图那就更加清晰了。对于这样的需求,我们可以用"理想的人天"来评估。我们说某一个需求的成本,是2 Ideal Days。 就是一个人在理想的2天内能够完成这个工作。
说到开发人员的"理想的人天",就不能离开团队孤立的看。一个团队包括项目经理和需求分析师、测试员等角色。他们的工作不直接反应到代码量的多少。如果只考虑一个项目开发人员的代码开发量成本,毫无疑问要亏损的。另外,团队成员水准参差不齐,不同的任务不同程序员来完成所花费的时间也不同。因此,单独相加每个成员的"人天"毫无意义。必须要整体考虑一个团队的总"人天"。
那么如何衡量一个团队的总"人天"?如果一个团队已经经过长期的磨合,那么可以从以往的数据来获得他们的开发量。 如果是新建立的团队,没有经过磨合,那就需要开始实际进行一段时间的开发,在开发后3-4个星期再回头来计算这几个星期的团队速率。一般的,一个团队经过一段时间的磨合,在开发速率上会有缓慢的提升。例如一个需求的估算......More↓↓↓