技术开发 频道

认识软件估算

  4.2、LOC估算法

  这是一种从技术的角度来估算的方法总称,其中又包含许多方法。这类方法以代码(LOC)作为软件工作量的估算单位,在早期的系统开发中较为广泛使用。基于LOC的估算,又有点也有缺点。优点在于方便计算、容易监控、能反映程序员的思维能力;缺点在于代码行数的含糊不清,不能正确反映一项工作的难易程度以及代码的效率。因此在传统的LOC方法进行了许多改进。其中不断被使用,且不断演化的方法包括以下:

  PERT功能点估算法:PERT对各个项目活动的完成时间按三种不同情况估计:一个产品的期望规模,一个最低可能估计,一个最高可能估计。用这三个估计用来得到一个产品期望规模和标准偏差的Pert 统计估计,Pert 估计可得到代码行的期望值和标准偏差SD。

  类比估算法:类比法适合评估一些与历史项目在应用领域、环境和复杂度的相似的项目,通过新项目与历史项目的比较得到规模估计。类比法估计结果的精确度取决于历史项目数据的完整性和准确度,因此,用好类比法的前提条件之一是组织建立起较好的项目后评价与分析机制,对历史项目的数据分析是可信赖的。

  Delphi估算法:Delphi法是一种专家评估技术,在没有历史数据的情况下,这种方式适用于评定过去与将来,新技术与特定程序之间的差别。对于需要预测和深度分析的领域,依赖于专家的技术指导,可以获得较为客观的估算。通过专家们的互相讨论,还可以博取众长。

  系统分解:将系统分成若干个易于用LOC估算的部分,将其各个估算结果累加就是LOC的总规模。其中关键是建立起SBS(系统分解结构),它描述了系统的不同组件。SBS还被使用在其他重要的地方,如系统设计、系统分析等。在进行分解的时候,可以采用自由讨论的形式,可以获得更合理的SBS构成。

  4.3、IBM模型估算法

  该模型是Watson和Felix在1977年发布的,是基于IBM联合系统分布负责的60个项目的总结而得到的模型。该模型是一个静态模型,而参考数据只有60多个项目,因此有很大的局限性。

  4.4、COCOMO估算法

  Boehm在其经典著作“软件工程经济学”(software engineering conomics)中,介绍了一种软件估算模型的层次体系, 称为COCOMO(构造性成本模型,COnstructive COst MOdel),它代表了软件估算的一个综合经验模型。

  COCOMO 模型是适用于三种类型的软件项目:(1)组织模式——较小的、简单的软件项目,有良好应用经验的小型项目组,针对一组不是很严格的需求开展工作(如,为一个热传输系统开发的热分析程序);(2)半分离模式——一个中等的软件项目(在规模和复杂性上),具有不同经验水平的项目组必须满足严格的及不严格的需求(如,一个事务处理系统,对于终端硬件和数据库软件有确定需求);(3)嵌入模式——必须在一组严格的硬件、软件及操作约束下开发的软件项目(如,飞机的航空控制系统)。

  4.5、软件方程式估算法

  软件方程式是一个多变量模型,它假设在软件开发项目的整个生命周期中的一个特定的工作量分布。该模型是从4000 多个当代的软件项目中收集的生产率数据中导出的公式。初期的方程式较为复杂,通过,Putnam 和Myers的努力又提出一组简化的方程式。当然这种方法也是基于长期的参考数据的积累而得到的。

  4.6、WBS估算法

  这是一种基于WBS(工作任务分解)的方法,即先把项目任务进行合理的细分,分到可以确认的程度,如某种材料,某种设备,某一活动单元等。然后估算每个WBS要素的费用。采用这一方法的前提条件或先决步骤是:

  对项目需求作出一个完整的限定。

  制定完成任务所必需的逻辑步骤。

  编制WBS表。

  项目需求的完整限定应包括工作报告书、规格书以及总进度表。工作报告书是指实施项目所需的各项工作的叙述性说明,它应确认必须达到的目标。如果有资金等限制,该信息也应包括在内。规格书是对工时、设备以及材料标价的根据。它应该能使项目人员和用户了解工时、设备以及材料估价的依据。总进度表应明确项目实施的主要阶段和分界点,其中应包括长期定货、原型试验、设计评审会议以及其他任何关键的决策点。如果可能,用来指导成本估算的总进度表应含有项目开始和结束的日历时间。

  除了以上介绍的几种方法外,还有一些其他的方法:类比估算、推测估算、Standard-component估算法、普特南估算法等。当然不同的方法适用于不同的具体环境,有些方法虽然很好但并不一定适合当前的任务。只有量体裁衣,具体问题具体分析,才能得到尽量合理的估算。

  5、估算的戒律

  记住:应该满足于事物的本性所能容许的精确度,当只能近似于真理时,不要去寻求绝对的准确??            ——亚里斯多德

  对于任何一个项目经理,都知道要慎重估算,但是我们仍然会看到人力资源的浪费和财力资源的匮乏,在许多项目中存在。对于宝贵的资源,我们不是用得太多,就是根本不够用。因此,有以下前人总结出来的一些经验以供借鉴。

  不要追求完美:就像没有人能预测出未来,如果还没有完成,就不要企图完美的结果。更何况估算的太精确,反而会失去灵活机动的空间。
  
  不要为满足预算而估算:如果这个项目的预算根本不能完成100%的任务,那么就不要让你的团队委曲求全。正确地反映客观现状,不仅可以争取应得的权利,而且是完成任务的前提。
 
  不要随意削减估算结果:有很多老板喜欢把项目经理递交的估算,不假思索地砍掉一部分。这是一种不负责任的做法,如果要削减一定要有理由。

  客观地估算,不贪多不偷减:就像老板不能随便削减你的估算一样,你也同样不能在估算的时候,贪多或是偷减。贪多必然导致会浪费,偷减必然导致不足。这两个结果恐怕都不是一个合格的项目经理的作为。
 
  客观利用过去的经验:对于以往估算的经验,当然是宝贵的财富,但是如果财富用错了地方就会变成垃圾。在使用经验时,要注意现在和参考经验之间的差异。不要忘记,随着时间的推移,计算机领域技术的更新,许多观念都在发生着改变。

  不要以客户目标作为估算的结果:客户是上帝,软件公司一定要尽力实现客户的需求。但我们要实现的是合理的目标,况且不能为了完成目标而去堆积数字,这样岂不是因果倒置了。

  不要隐匿不确定的成本:软件开发中存在潜在风险,是很正常的事情。现在风险就会带来潜在的成本,如:突然一位程序员离职,导致工作进度路落后。我们不可能估算到任何一种可能发生的情况,但有责任把可能出现的一些关键环节列出来。

0
相关文章