估算也是软件开发中很重要的一个环节,如果低估项目周期会造成人力低估、成本预算低估、日程过短,最终人力资源耗尽,成本超出预算,为完成项目不得不赶工,影响项目质量,甚至导致项目失败。软件开发周期估算是IT人员经常提到的一个概念,那么究竟什么是软件开发周期估算呢?我们可以把它定义如下:根据软件的开发内容、开发工具、开发人员等因素对需求调研、程序设计、编码、测试等整个开发过程所花费的时间做的预测。在这个定义中,“预测”两个字非常关键,它突出体现了估算的含义,同时也隐含表明了结果的不确定性。
有效的软件开发周期估算在软件开发中是非常困难的工序之一,之所以说困难,是因为软件开发所涉及的因素不仅多而且异常复杂,即便是及其类似的软件项目也不能完全照搬,在估算的把握上有一定难度。项目周期估计过长表面看来影响不大,但是实际上也会带来成本估计过高,人力资源利用不充分效率低下的后果。无论哪种情况对于项目经理控制整个项目都会带来很大影响,周期估算如同盖楼房中打地基,是后续工作的基础,它完成质量的好坏所带来的影响会贯穿整个项目,由此可见开发周期正确估算的重要性。
1.国内外软件估算比较
国内软件开发的管理目前正逐步向规范化发展,但是在开发周期的估算上绝大部分还是处于手工作坊的状态。所谓的手工作坊指两个方面,一方面是管理人员意识上没有认识到估算的重要性,认为估算就是一个大概的估计,很多还受限于商业行为,比如为了签订合同而不惜减少开发工作量却未经任何评审;另一方面也没有专门的工具来辅助估算,或者说没有专门对它进行研究。一个软件开发周期究竟要多长基本上是依靠经验来判断,不同经验的人估算出的周期相差很大,而更糟糕的是这种开发周期的判断由于完全凭借经验使得不同意见的人之间很难沟通,因为谁都没有确切的量化标准来支持自己的判断,最终的结果往往是以“专家”的估算为准。这就有些类似于中式烹调,放多少作料没有依据,一般都是“少许”,这个“少许”靠的就是经验,高级厨师和新手根据这个量炒出的菜味道可能差得很远;实际上国内的软件开发需要的正是定量估算,这样做不仅规范而且精确,十分有助于软件事业的健康发展以及与国际接轨。
国外发达国家在软件估算上比国内要成熟的多,不仅有很多先进方法比如代码行估算法、功能点估算法、人力估算法,而且形成了专业化的估算工具来辅助这项工作,比如微软公司开发的项目管理工具软件Project,加拿大Software Productivity Center Inc.公司开发的Estimate,都是比较成熟的估算辅助工具。Project采用了自下而上的估算法,Estimate更是属于专业化工具,包含常用的各种估算方法、校正方法,使用了Putnam Methodology、Cocomo II和 Monte Carlo Simulation几种成熟算法,估算结果除了项目花费时间、人力,还包括十几种分析报告以及模拟发散图、计划编制选项图、人力图、预计缺陷图、缺陷方差图等等,从各种不同角度辅助管理人员进行分析。
采用辅助工具对软件开发周期进行估算具有明显的优势,这些辅助工具是在大量不同类型项目数据研究的基础上总结开发出来的,采用的算法、估算的方法已经很成熟,估算结果的准确性有保障,由于这种估算是可以量化的,并非依据个人经验直接得出一个结果,在结果的评审上有据可依。长期依靠工具辅助估算可以将大量项目的数据和估算结果积累形成历史经验库,知识成果得以保存,便于以后利用。
2. 软件估算中的因素