Primavera 软件系统中的功能点方法
与软件研发项目规模成本估算
上海普华科技发展有限公司 胡晓俊
Primavera 系统中的功能点估算方法概述
功能点估算的概念
功能点估算是一种基于软件需求特性对软件项目的规模进行估测的方法。1979 年
IBM 公司的 Alan Albrech 首先开发了计算功能点的方法,这种方法是通过评估和计量软
件产品所需的内部基本功能和外部基本功能数目,再根据技术复杂度因子(权重)对这
些软件功能计数进行量化,得到软件研发项目规模的最终结果。并且这个结果与软件的
成本估算有着密切的关系。另外功能点这种估算方法与实现产品所使用的编程语言和技
术没有关系,可以用于各种软件开发项目的规模估算中,目前功能点的估算方法已经被
广泛的认可在信息系统、数据库密集型、4GL 应用系统开发的规模测量中。
功能点的估算有两个目的:第一是作为软件规模的测量、对比和分析(如软件度量
方法)的基础;第二,也是更重要的目标,是作为软件成本估计模型的输入,软件的成
本估计则是基于功能点和工作量之间的经验成本估计关系(CER)进行的。
Primavera 系统是一个应用于多行业的企业级项目管理的综合平台,主要应用于企
业的多项目时间进度的管理、资源角色管理、费用成本管理、沟通管理、综合管理等项
目管理领域。功能点估算的功能可以在 Primavera 系统 Project Management 组件中的一
个自上而下估算的工具中实现。这个工具只是整个 Primavera 系统中的一小部分,但它
将自上而下估算的方法和功能点估算的方法演绎成可实际操作应用的步骤,
功能点估算的过程
功能点的估算可以划分为三个步骤:统计未调整的功能点计数(UFP)、统计总影
响度(TDI)和计算最终调整功能点计数(FP)。其中最终调整功能点计数就是我们功能
点估算的最终结果。它是用来度量软件产品功能的标准单位,并可作为软件研发项目规
模成本估算的基础。功能点的计算公式为:FP = UFC×TCF,TCF 称为技术复杂度因子,
是由总影响度 TDI 计算出来的:TCF = + ×TDI。因此功能点的计算公式也可以
表示为:FP = UFC×( + ×TDI),如下图所示。
过程示意图:
第一步:计算未调整的功能点计数(UFP)
计算输入:
用 于 估 算 第 三 步
最 终 功 能 点 计 数
(FP)的计算
统计未调整功能
点计数(UFP)
统计总影响度
(TDI)
计算最终调整功
能点计数(FP)
用于估算第一步的
未调整功能点计数
(UFP)的计算
用于估算第二步的
总影响度(TDI)的
计算
软件各种复
杂度功能特
性的计数
各种复杂度
的权重因子
当前这种类
型功能计数
的加权总和
所有类型功
能计数的加
权总和
内部逻辑文件(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 的分
值进行计量,分别代表无影响(no influence)、偶尔影响(incidental)、适度影响
( moderate )、 平 均 影 响 ( average )、 重 大 影 响 ( significant ) 和 根 本 性 影 响
(essential),具体的评分标准含义这里不详述了,使用 Primavera 系统的用户可以
在功能点估算的系统特征对话框中找到每一个系统特征含义的说明和每一个系统
特征取值的评分标准的说明,这些说明可以帮助实施功能点估算的人员进行判断和
取值。
确定分布式数据处理(Distributed Data Processing)的分值,该值表明分布
式数据和功能如何被处理。
确定配置项负载(Heavily Used Configuration)的分值,该值表明对当前
的硬件平台的使用程度。
确定性能(Performance)的分值,该值表明用户对响应时间或吞吐量是否
有所要求。
确定事务率(Transaction Rate)的分值,该值表明事务执行的频繁程度。
确定安装容易程度(Installation Ease)的分值,该值表明转换和安装的困
难程度多大。
确定在线更新(Online Update)的分值,该值表明多少内部逻辑文件会被
在线的事务更新。
确定复杂处理(Complex Processing)的分值,该值表明应用软件是否具有
大量的逻辑或数学处理。
当 前 选
中 系 统
特 征 的
含 义 描
述说明
每个系统特
征的每个分
值得具体含
义的说明
确定操作容易程度(Operational Ease)的分值,该值表明应用软件在启动、
备份和恢复的有效性/自动化程度。
确定用户使用效率(End-User Efficiency)的分值,该值表明应用软件是否
就最终用户使用效率上有所设计。
确定修改容易程度(Facilitate Change)的分值,该值表明应用软件是否被
设计以方便于修改。
确定多个地点(Multiple Sites)的分值,该值表明应用软件是否设计支持
多个地点场所/机构。
确定重用性(Reusability)的分值,该值表明应用软件开发以满足一个或
是多个用户的需要。
确定在线数据项(On-line Data Entry)的分值,该值表明百分之多少的信
息是在线输入的。
确定系统特征数据通讯(Data Communications)的分值,该值表明系统具
有多少数据通讯设备。
计算输出:
总影响度因子(TDI)是 14 个系统特征分值的累计总和。
第三步:计算最终调整功能点计数(FP)
最终调整功能点计数可以通过该公式进行计算,FP = UFC×( + ×
TDI)。即它由前面步骤中得出的未调整功能点计数(UFP)和总的影响度(TDI)
来确定。
如何通过 Primavera 实现软件研发项目规模成本估算
最 终 调 整 功 能 点
(FP)的计算公式
Primavera 软件中的自上而下的估算方法能够在项目计划编制的前期对其规模、进
度和成本进行预估,这不仅可以对项目风险和投资赢利情况作一个预测,也对以后的项
目计划编制提供了参考。相比其他的各种软件规模的估算方法,这种自上而下的估算方
法所能获得的数据是较为精确的,但是如果直接手工的去进行估算,在算法上会较为费
时费力,所以我们可以借助一些软件的工具来实现,例如在 Primavera 的项目管理解决
方案中,我们就可以利用其中的自上而下估算功能(包括功能点估算)来实现软件研发
项目早期的规模、成本、进度的预估。
例如在某个公司在对财务软件系统的集成升级过程中就使用这种方法。该软件研发
的项目计划是在 04 年 8 月份开始的。在其开始之前我们并不是急于编制实施计划,而
是先对需要开发的这个系统的功能数量进行测量,并采用功能点这种标准单位来度量,
以获得当前这个项目的规模情况,通过本公司的研发团队的平均产量等历史经验值将该
软件规模的功能点折算成项目所需总的人工或非人工资源数量,以便我们今后的计划编
制过程中确定每道作业的计划工期和每个资源的预算用量。
另外通过 Primavera 软件系统也可以实现项目经验和方法的积累提炼和重复利用,
这是在 Primavera 软件系统的 Methodology Management 组件中实现的。它可以将一些类
似项目的历史数据和方法保存成可以供新项目参考利用模板,例如我们在这个财务系统
的集成开发项目中就可以使用 Methodology Management 库中的某个类似的模板来快速
建立一个成本、进度估算模型和框架。关于这方面的详细内容不在本文讨论范围内。
我们接下来就以这个财务软件系统的集成项目为例,讨论一下通过 Primavera 系统
进行软件研发项目规模成本及进度估算的具体实现。为了讨论的方便,我们简化了该项
目进度计划的内容。
1) 估算软件研发项目的功能点计数
软件项目的功能点估算的值是作为软件规模和成本估算的基础,因此我们首先
对该软件研发项目的功能点做统计。
实际上,在 Primavera 的自上而下估算方法中可以采用两种估算方法:
第一种是直接利用先前的经验数据来做估算,即可以通过人为的经验判断来确
定项目所需的人工或非人工资源数量,在人为判断的过程中也可以利用历史上类似
项目的情况作参考,比如可以参考 Methodology Management 中相关的历史数据。
这种方法较多的应用在传统的工程建设项目上,但不太适合于软件研发项目估算,
因为其达不到软件开发项目对估算结果精确度的要求。
第二种方法是基于功能点的估算来确定项目所需资源数量。这种方法因其独有
的统计方式和计算方法仅针对软件研发项目,所以无法应用在别的类型项目的估算
上。
如下图,在使用 Primavera 软件的自上而下估算功能时,首先将估算方法调整
为功能点的方法,通常功能点是要通过统计和计算得出的,继而得出项目所需的人
工数量或非人工数量,因此这里我们需要先进入到功能点计算的界面中去。另外,
简便期间,本案例中我们仅基于功能点来估算人工数量,事实上它也可以基于功能
点估算非人工数量。我们还可以选择在整个财务系统集成项目中进行估算还是在该
项目某一块特定的范围内进行估算,这里我们选择整个项目。
根据之前的介绍,功能点的计算可以分为三个步骤:计算未调整功能点计数
(UFP);计算总影响度(TDI);计算最终功能点计数(FP)。
第一步:该软件研发项目的项目经理负责对功能点进行估计,并从该项目软件
选择本次对人
工资源估算
基于功能点
估算人工数
估算范围为
整个项目
进入功能点的统计计算界面
该按钮用于统计和计算
未 调 整 功 能 点 计 数
(UFP)
该按钮用于计算总
影响度(TDI)
系统将自动根据 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×( + ×TDI),
可以计算出最终功能点计数 FP = 326。这个值就是我们进行功能点估算的最终结果。
2) 估算项目所需的资源数量并按权重分摊
在确定软件研发项目规模的功能点以后,可以根据当前企业的研发实力和效率
将功能点的计数折算成该项目所需的人工或非人工资源数量,即我们希望知道以当
前企业的实际生产率来完成这样规模的软件研发项目究竟需要投入多少人力和物
力,并且在这里我们用工时或工日为单位来计量所需的资源数量。这种对资源数量
的估算是基于功能点和企业平均产量的经验值来完成的,所以具有一定的主观性。
如下图,根据经验填入企业软件研发的平均产量,例如平均产量=14(功能点/
人工月),即每当消耗了一个人工月的资源可以完成软件项目 14 个功能点。这样可
FP 的计算公式
以估算出如果要完成整个财务系统集成的项目(完成 326 个功能点)需要提供 326 ÷
14 = 人工月 = 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 组件来进行项目资源分析、项目组合分析(Portfolios Management)、
投资收益情况的分析(ROI)等等,它是企业在进行项目战略选择时的依据之一。