论软件项目估算
【摘要】
<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

 

 

 

【正文】
项目估算在系统开发初期对项目完成时间和成本进行估算,目前常用的方法为功能点和行估算法。正确的估算可保证信息系统的建设进度,保证及时交付软件系统,保证资源正确分配,为及时准确把握系统建设进度提供指导。
2003 年我参加了公司管理信息系统的建设,担任了系统分析师的工作。
随着企业信息化的普及,管理信息系统在企业管理中已涉及到生产、销售、采购、人力资源、库存、财务、决策支持等各个方面,与传统的经营管理相互***融合,大大提高了企业管理的有效性和及时性,提高了企业服务顾客的方便和快捷。
我在一家上市公司信息中心上班,随着企业所面临的市场竞争的加剧、市场环境的复杂多变,以及企业规模的不断扩张的现状,公司提出了要在一平台上管理所有企业业务的要求,要做到企业资源的统一调度和客户服务的方便与快捷。而各个部门、各子公司均有不同的信息化规划,实现了不同的信息管理系统,这些系统的开发没有统一的标准,没有统一的接口,系统之间无法实现信息共享,浪费了巨大的人力、物力。为了从根本上解决公司所面临的状况,经过领导多次会议讨论决定开发一个统一的管理信息平台,实现资源共享。
在项目开发初期,我们对项目确定了以进行有效的项目估算,产生高质量的系统和按时交付软件产品为目标的软件开发策略,由于各部门已有正在使用的软件系统,我们在调查企业管理过程时结合这些项目过程快速建立任务之间的相互关系,根据以前项目开发过程建立度量基线,,我们可以准确的估算各个任务的工作量,分配人员和其他资源,制定进度时序。
在此项目中我们采用了以下主要措施和方法。
1、    在软件计划和需求分析阶段,综合考虑利用可复用资源,合理估算项目工作量,准确度量任务权重,成功降低软件生产成本。在系统的定义阶段,我们把估算工作量做为此阶段的主要度量因素,通过综合考虑利用可复用资源,准确核算任务权重,从而尽量准确的估算出项目工作量。将项目的开发周期尽可能限制在可实现的最短时间内,从而达到降低软件生产成本的目的。
2、    由于公司以前完成过类似的项目,只是规模相对比较小,但一些可共用的组件可直接复用(如数据库的添加、删除、更新等操作模块、错误处理模块、登录认证模块),相当于开发新系统的一个圆形,只是在具体的流程和某些管理细节上不一样,因此我们将此系统演化为一个演示版本作为与用户交流的手段,在原型话交流后,采用面向对象技术进行分析建模,然后对演示版本进行修改,再与用户用原型版本进行交流,然后对原型版本进行修改,在与用户交流,巾帼多次迭代过程,用户对原型版本功能基本满意,我们对用户的需求也全面掌握。然后采用功能点法,将每个模块逐步分解,直到基本模块为止,对可复用模块出需要修改的以外,不计入开发成本和时间。
3、    由于软件工作量的估算首先从软件项目范围抽出软件功能,接着给出为实现每一软件功能所必须执行的一些列软件工程任务,如需求分析、设计、编码和测试等。所以对于上述含有技术难度的任务,我们利用历史数据对不同复杂性和开发特性的功能模块,分别按最佳的、可能的、悲观的三种情况给出估算值,计算加权平均,的出较为准确的任务权重度量值。
根据以上分析,我们制定了一个详细的进度表,并定义了相应的里程碑,限定了项目在 8 个月之内完成。
二、在软件设计编码阶段,注意人员安排,确保产品质量
在考虑软件开发资源时,人是最重要的资源,在安排开发活动是必须考虑在开发过程中各阶段对人员的需要。在软件项目设计编码阶段,我们把人员调配确定为此阶段的主要度量要素,按照人员自身能力合理安排,保证了软件产品的质量。
本系统在软件需求分析和定义阶段,有两名高级技术人员参与了对软件系统的定义。他们利用自己丰富的实践经验,为系统提出了许多可行的能够高效实现预定任务的方案,同时在技术难度相对大一点的部分由他们从设计把关。而在项目实施阶段与负责指导相关人员对关键任务的理解,并随时监控程序眼在编码中是否真正实现了他们的设计思想。这一系列安排,确保了我们在软件产品在关键技术上从未出过错。尤其是高级技术人员设计由超级用户实现的多层权限控制模块,可将权限一层一层下发,从模块到模块内部操作到每种物料的操作权限进行多层管理。产品交付使用后,用户对于灵活的权限控制模块非常满意。
根据进度表中各个里程碑的划分,管理人员可以方便的度量每个编程人员的实际工作进度,同时按照时间安排进行软件测试和验收,从而确保软件开发进度和软件质量。
三、在软件开发全过程,随时掌握项目进行情况,必要时调整进度表。
在为项目开发指定的详细进度表中,确切的定义每一项任务的工作量、开始时间、持续时间和结束时间。我们让开发小组的每一位成员认真了解自己所承担任务的时间表,并根据自己的任务制定相应的工作计划。
我们采用微软的 project2003 对项目进行管理,为了使系统项目能够顺利完成开发任务,我们要求参与此项目的开发人员在当日工作结束后都要按照实际工作情况填写。例如:我们在 WBS 分解的基础上,对单个模块或任务作出清楚的标记,是否完成,完成人等均有明确标识,同时根据完成情况对甘特图和网络图对每项任务分为提前完成、延后完成、预计提前或延后完成均用不同颜色标识,对延期或预计延期的任务重点了解任务详细情况,同时每周要对自己的工作进展作出结论,如某任务已完成 80% ,能够按照计划时限完成本任务,并向项目组汇报。
开发小组的每个成员要对自己做出的结论负责,这样管理人员就可以做到随时了解项目进度,为调整项目计划提供了客观基础,项目小组会在每个里程碑处,以会议的形式对本阶段的工作进行确认、总结;并对本阶段进展情况作出结论并决定是否调整下一阶段的进度计划。
本系统在整个项目小组开发过程中,由于总体工作量估算基本正确,关键任务及人员使用合理,使得开发任务按其高质量完成了。但是在我们的工作中也有失误的地方。例如在项目估算中,还有一些重要的影响因素没有考虑和计算,造成错误的任务权重,错误的修改时间,修改错误引起的其他错误,上阶段未发现错误对下阶段开发的影响没有量化等。
通过以上分析和讨论我们知道,要想真正在软件生产中实现工程进度的可控性,就必须在软件项目计划阶段确定软件范围,合理调配所需资源,从而获得获得更接近实际值的软件任务成本和工作量估算。软件项目估算值虽然与实际是有一定偏差,随着项目进展定期更新,从而将软件工程的进度限定在可控范围内,就使得软件生产任务按照预定计划实现。