软件项目的估算历来是比较复杂的事,因为软件本身的复杂性、历史经验的可重复性、估算工具的缺乏以及一些人为错误,都会导致软件项目的估算往往和实际情况相差甚远。据有关机构调查发现,约有60%的软件项目的失败是因为估算偏差引起的,而不是因为技术实力不够。因此,估算偏差已被列为软件项目失败的四大原因之一。
  从软件工程学上,我们知道软件需求和估算是软件项目的基础。因为只有准确的了解客户的需求,以之为基础,并使用科学的方法对目标软件系统的规模、工作量和进度做出合理的估算,我们才能在预算内按时按质顺利的完成项目。然而,软件估算作为软件项目的基础领域却常常被人们所忽视。我在近期的一个开发项目中就尝到忽视软件规模估算带来的苦果,结果是项目进行到一半时就发现不但工期严重滞后于计划,而且项目的各种资源也严重的不足和缺乏,项目被迫暂停下马。
  常见的项目规模估算失准原因
  一直以来,软件项目的规模估算(Size Estimation)是个争论不休的问题。不论是对软件开发团队还是对软件用户,软件规模估算的重要性都是不容置疑的。因为它能极大的影响着甲方对发包软件的成本估算,乙方对自身开发成本的预测,以及乙方对开发过程的量化管理等诸多方面。而且,只有相对合理和相对准确地估算软件规模,才能对项目的进度安排、资源分配等各个环节进行合理的部署。所以,软件项目的规模估算是软件项目中相当重要的一环。但是,以下的原因却使到我在这次项目的实际操作中对项目规模估算失准了:
  1)对项目规模估算认识不足
  项目规模估算一般分为两种应用场景:一是招投标的时候用来估价、报价;二是用来安排进度计划和指导项目具体工作的分配。因此,如果对规模估算认识不足的话,将可能会在这两种应用场景中估算失准。例如,如果项目规模低估的话就会造成人力估算低估、成本预算低估、日程过短,最终人力资源耗尽,成本超出预算。最后为了完成项目不得不赶工,不但会影响到项目质量,甚至会导致项目失败。而如果规模高估的话,就会因估价过高而降低了招投标时的竞争力,或在进度安排时提高了开发成本和浪费资源。由于对规模估算的认识不足,使到我在这次项目中就尝到一个大苦果,就是低估项目规模导致项目需要多次的追加预算。我不但多次受到公司领导的批评,而且还受到客户的多次投诉。
  (2)个人经验估算法带有一定的局限性
  一般来说,依靠历史或个人经验的规模估算方法都有一定的局限性。原因是很难在项目分析和计划阶段就对软件的规模进行相对准确的估算。因为估算是依靠评估人员的经验,所以对评估人员的能力要求比较强,并且难以由第三方对评估人员的工作偏差作出修正。在这次项目的初期,我片面的只是根据个人经验进行估算,结果是轻率的估算了项目规模。这是最后导致项目失利的原因之一。另外,不同软件项目使用的技术不一样,这一点也非常影响到软件规模的估算。例如同一个功能,使用JAVA语言和使用Ruby语言所涉及的代码行相差数十行,甚至数百行。即使同为JAVA语言,使用不用的框架所需要编写的代码行也不一样。
  (3)对项目估算时缺乏数据支持
  因为在软件开发初期时对规模估算都是很难准确量化的,所以到底需要多少资源、多长时间或者规模估算到什么的程度才算是合理的是没有一个标准的。但一个好的项目估算,是离不开一个准确的、可信的、客观的数据作为基础。如果在项目规模估算时只凭项目管理人员的经验进行估算,而缺乏大量的数据支持,那么估算最终就会变成常见的"三拍"现象:"首先是项目经理拍脑袋估算,然后是项目经理估算失准时拍马屁的补救,最后是项目失败时拍屁股走人"。当然,这只是个玩笑。不过由此可见项目规模估算不能只依靠经验来估算,而应该是要有大量的数据来支持。
  什么是软件项目的规模估算?
  软件开发项目管理中的一项重要任务是开发项目的规模估算,这是极其重要但却很容易被忽视的一项内容。因为没有正确的规模估算,项目计划就会失去成功的基础。可惜大部分的开发团队都很难做到对项目规模进行准确的估算。
  什么是项目规模估算?
  做好软件项目管理的基础是要做好项目的规划工作,而做好项目规划的前提是要做好软件估算。也就是说,就是没有好的软件估算,项目的规划、跟踪和控制就根本无从谈起。因此,软件估算是项目计划活动的基础之一。
  软件估算一般是通过主观经验和客观分析两种方法进行,包括有四个重要方面:规模估算、工作量估算、进度估算和成本估算。其中,对规模进行估算是为了将项目范围进行量化。规模估算是整个软件估算中最核心、最基础的环节,也是整个软件估算的第一步。规模估算有两个主要作用:一是通过规模估算建立项目基线;二是利用基线对项目生产率和状态进行评价,并确定软件过程的进度目标。也就是说,规模估算是一切估算的基础,是能直接决定和影响到其它三个估算的决策。