Primavera功能点方法与软件研发项目规模成本估算.docx
《Primavera功能点方法与软件研发项目规模成本估算.docx》由会员分享,可在线阅读,更多相关《Primavera功能点方法与软件研发项目规模成本估算.docx(20页珍藏版)》请在冰豆网上搜索。
Primavera功能点方法与软件研发项目规模成本估算
Primavera软件系统中的功能点方法
与软件研发项目规模成本估算
上海普华科技发展有限公司胡晓俊
Primavera系统中的功能点估算方法概述
Ø功能点估算的概念
功能点估算是一种基于软件需求特性对软件项目的规模进行估测的方法。
1979年IBM公司的AlanAlbrech首先开发了计算功能点的方法,这种方法是通过评估和计量软件产品所需的内部基本功能和外部基本功能数目,再根据技术复杂度因子(权重)对这些软件功能计数进行量化,得到软件研发项目规模的最终结果。
并且这个结果与软件的成本估算有着密切的关系。
另外功能点这种估算方法与实现产品所使用的编程语言和技术没有关系,可以用于各种软件开发项目的规模估算中,目前功能点的估算方法已经被广泛的认可在信息系统、数据库密集型、4GL应用系统开发的规模测量中。
功能点的估算有两个目的:
第一是作为软件规模的测量、对比和分析(如软件度量方法)的基础;第二,也是更重要的目标,是作为软件成本估计模型的输入,软件的成本估计则是基于功能点和工作量之间的经验成本估计关系(CER)进行的。
Primavera系统是一个应用于多行业的企业级项目管理的综合平台,主要应用于企业的多项目时间进度的管理、资源角色管理、费用成本管理、沟通管理、综合管理等项目管理领域。
功能点估算的功能可以在Primavera系统ProjectManagement组件中的一个自上而下估算的工具中实现。
这个工具只是整个Primavera系统中的一小部分,但它将自上而下估算的方法和功能点估算的方法演绎成可实际操作应用的步骤,
Ø功能点估算的过程
功能点的估算可以划分为三个步骤:
统计未调整的功能点计数(UFP)、统计总影响度(TDI)和计算最终调整功能点计数(FP)。
其中最终调整功能点计数就是我们功能点估算的最终结果。
它是用来度量软件产品功能的标准单位,并可作为软件研发项目规模成本估算的基础。
功能点的计算公式为:
FP=UFC×TCF,TCF称为技术复杂度因子,是由总影响度TDI计算出来的:
TCF=0.65+0.01×TDI。
因此功能点的计算公式也可以表示为:
FP=UFC×(0.65+0.01×TDI),如下图所示。
用于估算第三步最终功能点计数(FP)的计算
用于估算第二步的总影响度(TDI)的计算
用于估算第一步的未调整功能点计数(UFP)的计算
过程示意图:
第一步:
计算未调整的功能点计数(UFP)
计算输入:
✧内部逻辑文件(ILF)
是最终用户可以进行维护和识别的逻辑相关数据组,这些数据通过外部输入维护并完全保存在应用程序的内部。
最低、平均和最高复杂度的权重分别为7、10和15。
✧外部接口文件(EIF)
外部接口文件是仅用于引用目的的逻辑相关数据的用户可识别的组。
数据完全驻留在应用程序外部,由其它应用程序所维护。
外部接口文件是其它应用程序的内部逻辑文件。
最低、平均和最高复杂度的权重分别为5、7和10。
✧外部输入(EI)
外部输入是数据由外向内跨越边界的基本处理过程。
数据可能来自于数据输入屏幕、电子输入或其它应用程序。
数据可以是控制信息或业务信息。
如果数据是业务信息,它用于维护一个或多个内部逻辑文件。
如果数据是控制信息,它不必更新内部逻辑文件。
最低、平均和最高复杂度的权重分别为3、4和6。
✧外部输出(EO)
外部输出是导出的数据由内向外跨越边界的基本处理过程。
数据创建发送给其它应用的报表或输出文件。
这些报表和文件由一个或多个内部逻辑文件和外部接口文件所创建。
最低、平均和最高复杂度的权重分别为4、5和7。
✧外部查询(EQ)
外部查询是包括输入和输出构件的基本处理过程。
输入和输出构件导致一个或多个内部逻辑文件和外部接口文件的数据检索。
该信息被发送出应用程序边界。
输入过程不会更新任何内部逻辑文件以及输出不包含导出的数据。
最低、平均和最高复杂度的权重分别为3、4和6。
计算输出:
✧未调整的功能点计数(UFP)
未调整的功能点计数是对各种复杂度的内部逻辑文件、外部接口文件、外部输入、外部输出和外部查询的加权合计。
第二步:
计算总影响度因子(TDI)
当前选中系统特征的含义描述说明
每个系统特征的每个分值得具体含义的说明
计算输入:
总影响度因子是14个系统特征值的累计总和,每个系统特征值采用0~5的分值进行计量,分别代表无影响(noinfluence)、偶尔影响(incidental)、适度影响(moderate)、平均影响(average)、重大影响(significant)和根本性影响(essential),具体的评分标准含义这里不详述了,使用Primavera系统的用户可以在功能点估算的系统特征对话框中找到每一个系统特征含义的说明和每一个系统特征取值的评分标准的说明,这些说明可以帮助实施功能点估算的人员进行判断和取值。
✧确定分布式数据处理(DistributedDataProcessing)的分值,该值表明分布式数据和功能如何被处理。
✧确定配置项负载(HeavilyUsedConfiguration)的分值,该值表明对当前的硬件平台的使用程度。
✧确定性能(Performance)的分值,该值表明用户对响应时间或吞吐量是否有所要求。
✧确定事务率(TransactionRate)的分值,该值表明事务执行的频繁程度。
✧确定安装容易程度(InstallationEase)的分值,该值表明转换和安装的困难程度多大。
✧确定在线更新(OnlineUpdate)的分值,该值表明多少内部逻辑文件会被在线的事务更新。
✧确定复杂处理(ComplexProcessing)的分值,该值表明应用软件是否具有大量的逻辑或数学处理。
✧确定操作容易程度(OperationalEase)的分值,该值表明应用软件在启动、备份和恢复的有效性/自动化程度。
✧确定用户使用效率(End-UserEfficiency)的分值,该值表明应用软件是否就最终用户使用效率上有所设计。
✧确定修改容易程度(FacilitateChange)的分值,该值表明应用软件是否被设计以方便于修改。
✧确定多个地点(MultipleSites)的分值,该值表明应用软件是否设计支持多个地点场所/机构。
✧确定重用性(Reusability)的分值,该值表明应用软件开发以满足一个或是多个用户的需要。
✧确定在线数据项(On-lineDataEntry)的分值,该值表明百分之多少的信息是在线输入的。
✧确定系统特征数据通讯(DataCommunications)的分值,该值表明系统具有多少数据通讯设备。
计算输出:
总影响度因子(TDI)是14个系统特征分值的累计总和。
第三步:
计算最终调整功能点计数(FP)
最终调整功能点计数可以通过该公式进行计算,FP=UFC×(0.65+0.01×TDI)。
即它由前面步骤中得出的未调整功能点计数(UFP)和总的影响度(TDI)来确定。
如何通过Primavera实现软件研发项目规模成本估算
Primavera软件中的自上而下的估算方法能够在项目计划编制的前期对其规模、进度和成本进行预估,这不仅可以对项目风险和投资赢利情况作一个预测,也对以后的项目计划编制提供了参考。
相比其他的各种软件规模的估算方法,这种自上而下的估算方法所能获得的数据是较为精确的,但是如果直接手工的去进行估算,在算法上会较为费时费力,所以我们可以借助一些软件的工具来实现,例如在Primavera的项目管理解决方案中,我们就可以利用其中的自上而下估算功能(包括功能点估算)来实现软件研发项目早期的规模、成本、进度的预估。
例如在某个公司在对财务软件系统的集成升级过程中就使用这种方法。
该软件研发的项目计划是在04年8月份开始的。
在其开始之前我们并不是急于编制实施计划,而是先对需要开发的这个系统的功能数量进行测量,并采用功能点这种标准单位来度量,以获得当前这个项目的规模情况,通过本公司的研发团队的平均产量等历史经验值将该软件规模的功能点折算成项目所需总的人工或非人工资源数量,以便我们今后的计划编制过程中确定每道作业的计划工期和每个资源的预算用量。
另外通过Primavera软件系统也可以实现项目经验和方法的积累提炼和重复利用,这是在Primavera软件系统的MethodologyManagement组件中实现的。
它可以将一些类似项目的历史数据和方法保存成可以供新项目参考利用模板,例如我们在这个财务系统的集成开发项目中就可以使用MethodologyManagement库中的某个类似的模板来快速建立一个成本、进度估算模型和框架。
关于这方面的详细内容不在本文讨论范围内。
我们接下来就以这个财务软件系统的集成项目为例,讨论一下通过Primavera系统进行软件研发项目规模成本及进度估算的具体实现。
为了讨论的方便,我们简化了该项目进度计划的内容。
1)估算软件研发项目的功能点计数
软件项目的功能点估算的值是作为软件规模和成本估算的基础,因此我们首先对该软件研发项目的功能点做统计。
实际上,在Primavera的自上而下估算方法中可以采用两种估算方法:
第一种是直接利用先前的经验数据来做估算,即可以通过人为的经验判断来确定项目所需的人工或非人工资源数量,在人为判断的过程中也可以利用历史上类似项目的情况作参考,比如可以参考MethodologyManagement中相关的历史数据。
这种方法较多的应用在传统的工程建设项目上,但不太适合于软件研发项目估算,因为其达不到软件开发项目对估算结果精确度的要求。
第二种方法是基于功能点的估算来确定项目所需资源数量。
这种方法因其独有的统计方式和计算方法仅针对软件研发项目,所以无法应用在别的类型项目的估算上。
如下图,在使用Primavera软件的自上而下估算功能时,首先将估算方法调整为功能点的方法,通常功能点是要通过统计和计算得出的,继而得出项目所需的人工数量或非人工数量,因此这里我们需要先进入到功能点计算的界面中去。
另外,简便期间,本案例中我们仅基于功能点来估算人工数量,事实上它也可以基于功能点估算非人工数量。
我们还可以选择在整个财务系统集成项目中进行估算还是在该项目某一块特定的范围内进行估算,这里我们选择整个项目。
基于功能点估算人工数
估算范围为整个项目
选择本次对人工资源估算
进入功能点的统计计算界面
根据之前的介绍,功能点的计算可以分为三个步骤:
计算未调整功能点计数(UFP);计算总影响度(TDI);计算最终功能点计数(FP)。
系统将自动根据UFP和TDI计算出最终功能点计数(FP)
第一步:
该软件研发项目的项目经理负责对功能点进行估计,并从该项目软件技术人员那里获取软件相关的计数项的统计。
在对当前财务系统集成项目的目标软件特性进行分析后可以统计出以下数据。
复杂度
各计数项
简单
中等
复杂
内部逻辑文件
9
0
2
外部接口文件
5
2
3
外部输入
5
4
3
外部输出
6
6
1
外部查询
1
3
3
这些数据可以直接作为Primavera功能点估算界面中未调整功能点计数的输入内容。
计算方法即将统计出的各项乘以相应的权重求和,计算结果就是各项计数的加权总和(UFP=305)。
第二步:
根据系统特征确定软件的14个技术复杂度因子(TCF),假设这里的技术复杂度都为平均值。
那么可以得出总的影响度TDI=∑Fi=42。
其中Fi为14个技术复杂度因子的取值,它的取值范围为0~5,这里我们假设全部取平均值3。
第三步:
根据最终调整功能点计数的计算公式FP=UFC×(0.65+0.01×TDI),可以计算出最终功能点计数FP=326。
这个值就是我们进行功能点估算的最终结果。
FP的计算公式
2)估算项目所需的资源数量并按权重分摊
在确定软件研发项目规模的功能点以后,可以根据当前企业的研发实力和效率将功能点的计数折算成该项目所需的人工或非人工资源数量,即我们希望知道以当前企业的实际生产率来完成这样规模的软件研发项目究竟需要投入多少人力和物力,并且在这里我们用工时或工日为单位来计量所需的资源数量。
这种对资源数量的估算是基于功能点和企业平均产量的经验值来完成的,所以具有一定的主观性。
如下图,根据经验填入企业软件研发的平均产量,例如平均产量=14(功能点/人工月),即每当消耗了一个人工月的资源可以完成软件项目14个功能点。
这样可以估算出如果要完成整个财务系统集成的项目(完成326个功能点)需要提供326÷14=23.29人工月=501人工日。
注:
人工年、人工月、人工日和人工时之间的折算比例可以在用户设置或管理设置中定义。
根据功能点和平均产量估算出的项目资源需求数量
平均产量是根据企业历史数据填写的经验值
在用户设置中定义时间周期
在管理设置中定义时间周期
估算好的资源数量还可以按百分比进行一定的调整,例如我们应用了5%的调整后,原来501人工日的资源数量被调整为526人工日的数量。
至此,功能点和资源数量总量的估算完成,我们可以把这些估算的数据和估算过程历史信息保存起来,供该软件研发项目在进度计划编制和资源计划编制阶段使用。
这些估算的数据是作为进度计划编制阶段作业工期的估算和资源计划阶段资源预算数量估算的基础。
可以按比例调整估算的资源数量
把当前估算的数据保存下来
保存本次估算的数据和历史过程
接下来开始项目进度计划和项目资源计划的编制,在这过程中可以把前面估算出来的资源总量分摊到项目计划每道作业分配的资源上面去。
这样就可以得到两个重要的结果:
1、资源计划中每个资源的预算数量;2、进度计划中每道作业的计划工期。
这是我们在项目管理的计划阶段所需要确定的非常关键的两个值,它会影响到我们编制的计划是否准确、是否符合实际、是否具有可行性,同时也是产生进度和成本估算数据的基础。
具体步骤如下:
1.对该软件项目的工作内容进行分解,编制和分解WBS结构,并确定WBS的估算权重,该权重是作为项目资源自上而下分摊的比例。
关于Primavera软件中自上而下分摊的详细功能介绍和论述可以参阅北京普华李海增写的《P3EC费用估算功能与火力发电厂概预算控制》。
自上而下估算分摊示意图:
2.编制项目作业进度计划,根据作业类型确定工期类型和估算权重,为作业分配角色或资源,编制项目资源角色计划。
其中工期类型基本上都选择为固定单位时间用量,这样做的目的是为了实现根据作业资源的分配量来计算工期。
计划工期=资源用量÷单位时间用量。
那么一旦将资源数量自上而下分摊到每道作业的资源上后,作业的计划工期也就自动计算出来了。
但是里程碑不需要确定工期,因为里程碑的工期总是零,因此其工期类型只能是固定工期。
资源角色计划中,在做自上而下估算之前,需要确定分配给作业的每个资源或角色的单位时间用量,该量是用于自上而下估算后计算计划工期的,计划工期=资源用量÷单位时间用量。
3.应用先前保存的功能点和资源数量估算的结果,对整个软件研发项目进行自上而下分摊资源数量到作业上并自动估算作业工期。
估算前:
作业工期和资源数量未定。
进行估算:
在自上而下估算中选择查看估算历史。
选择先前保存的估算数据并应用到当前的项目计划中去。
估算后:
可以获得所有任务作业的工期及相关资源分配量,配合作业的工期是在进度计算后由其逻辑相关联的作业决定的。
3)估算项目成本费用和时间进度
成本估算是对完成项目所需费用的估计和计划,它是项目计划的一个重要组成部分。
对于一个软件开发项目来说,其成本是指在软件开发过程中所花费的工作量对应的费用代价。
软件开发的成本的计算不同于工程建设项目或其他物理产品生产的成本计算,因为它基本不包含原材料和能源的消耗(我们在Primavera系统中对软件项目通常不使用材料资源的原因),主要是人工的消耗。
这些人工所对应的费用代价就是软件产品开发的主要直接成本。
对于软件成本估算的目的是建立软件开发项目的预算,以及为软件的产品报价提供参考。
并且也是作为软件成本控制管理的核心,能够使软件项目按照其预算进行监控。
进行软件成本估算主要需要输入以下一些数据:
⏹软件项目的WBS结构:
用于分解项目的工作内容,以确保项目的所有工作都进行了成本估算,保证估算的完整性。
⏹作业计划:
它是项目的主要活动和任务的描述,是构成项目进度计划的最基本单元,在成本估算中用于承载项目所需资源及其量费的分摊,是进行自上而下估算的框架,也是进行编制资源费用计划的基础。
⏹资源计划:
用于描述项目作业对资源的需求情况或资源的分配情况,供项目总体工作量或资源消耗量的分摊。
⏹企业历史项目数据:
企业以往类似项目的数据,包括规模、进度、成本等信息,可以作为项目估算的主要参考。
例如前面我们在项目规模估算时用到的平均生产率(功能点/人工月)就是一个历史经验数据。
⏹资源单价:
软件项目成本估算时应该确定每一种资源的单价,尤其是人工的单价(通常指人工工资),有时也包括一些非人工资源的单价,如测试机的折旧等。
资源的单价是软件项目成本估算中非常重要的一个输入,是估算费用的基础。
软件开发项目规模成本的估算主要是对项目所需各种资源的估算,包括人工资源、非人工的设备和耗材等。
项目成本可以划分为直接成本和间接成本,直接成本是与具体开发项目直接相关的成本,间接成本是指不能归属于一个具体项目的企业运营成本。
这两种成本都是在估算过程中必须考虑的。
例如我们在之前资源分摊的基础上开始进一步的成本估算过程,因为之前我们已经确定了每一个项目作业所需资源或角色的分配情况,接下来只要在项目资源数量的分配基础上通过输入资源单价来生成项目所需资源的费用,如前所述,这些资源费用是构成项目成本的主要来源。
主要包括:
确定项目作业上分配的每个资源或角色的单价,例如:
软件开发人员的角色单价为每天280元,高级软件工程师的角色单价为每天400元。
或者直接确定某个具体资源的单价,例如:
软件开发人员菲利浦的员工工资是每小时35元,员工麦克的工资是每天280元,等等。
同样,对于非人工资源的机械或设备的使用我们也需要输入相应的单价,即单位时间消耗、租用或折旧的费用,例如使用的某种测试工具的损耗单价是每年20万元。
对于项目中涉及到的与具体资源无关的费用,例如管理费、咨询费、印刷费、采购费、差旅费用等等以及一些企业运营的间接费用都可以在Primavera系统的作业其他费用中输入。
这些费用的输入是为了确保项目成本估算完整和准确性。
例如我们在该软件开发项目后期对客户的培训的作业中加入了相关材料的印刷费用2700元。
在所有的资源单价和其他费用都确定后,我们就可以得到整个软件开发项目的成本费用情况,包括了项目的人工费用、非人工费用、其他费用及这些费用的总和。
注意在这里不包含单独的材料资源的费用,虽然在Primavera系统中提供了材料资源这种类型的资源,但是我们在软件开发项目的资源计划或成本估算中一般不使用这种类型的资源,原因前面已经提到:
因为软件开发项目的原材料或能源的损耗占的比例非常小或几乎没有。
在下图中我们可以看到该项目的基本成本费用情况。
进度管理是项目管理中最重要的部分之一,我们当前项目的时间进度估算有一部分是基于前面对项目规模的估算,就是项目中每道作业的工期我们是根据估算出的资源用粮和单位时间用量计算出来的。
因此这种估算进度的方式是依据我们对该项目规模的整体把握,自上而下的方式来进行的,即保证了进度数据估测的准确性,同时也降低了进度估算工作过程的复杂性。
通过自上而下估算可以快速的估算进度工期,只要在此基础上连接作业的逻辑关系,就可以通过进度计算估算出项目的时间进度了。
如下图,连接完所有作业之间的逻辑关系后,进行进度计算,可以得到该软件开发项目的时间进度横道图、每道作业的计划开始、完成时间、浮时(时差)、项目或WBS总的起止时间,项目总的工期、关键作业和关键路径等一系列时间进度信息。
结合前面得到的项目成本估算数据和项目进度估算数据,我们还可以获取和分析项目成本费用的分布曲线和直方图,这是也该项目资金计划的分布图,给企业项目的资金准备提供了参考。
另外,使用这些基础数据,还可以通过Primavera系统的myPrimavera组件来进行项目资源分析、项目组合分析(PortfoliosManagement)、投资收益情况的分析(ROI)等等,它是企业在进行项目战略选择时的依据之一。