功能点估算法是软件项目管理众多知识中比较有技术含量的一个。在软件项目管理中项目计划制定的优劣直接关系到项目的成败,项目计划中对项目范围的估算又尤为重要,如果项目负责人对项目的规模没有一个比较客观的认识,没有对工作量、所需资源、完工时间等因素进行估算,那么项目计划也就没有存在的意义。
项目范围的估算在CMMI的“MA”度量分析管理和“PP”项目计划中均有涉及,对软件项目范围的估算有很多种方法,常见的就是LOC代码行和FP功能点法,它们之间的区别和关系如下:
1、 FP功能点估算法常用在项目开始或项目需求基本明确时使用,这时进行估算其结果的准确性比较高,假如这个时候使用LOC代码行估算法,则误差会比较大。
2、 使用FP功能点估算法无需懂得软件使用何种开发技术。LOC代码行估算法与软件开发技术密切相关。
3、 FP功能点法是以用户为角度进行估算,LOC代码行估算法则是以技术为角度进行估算的。
4、 通过一些行业标准
或企业自身度量的分析,FP功能点估算法是可以转换为LOC代码行的。在项目刚开始的时候进行功能点估算可以对项目的范围进行预测,在项目开发的过程中由于需求的变更和细化可能会导致项目范围的蔓延,计算出来的结果会与当初估计的不同,因此在项目结束时还需要对项目的范围情况进行估算,这个时候估算的结果才能最准确反映项目的规模。
功能点分析的步骤
在本文中将以国际标准IFPUG(International Function Point Users Group)组织提供的功能点估算法V4.1.1为基础与大家进行讲解。如下图所示,首先大家应该了解功能点估算法的使用步骤。
图 功能点估算的步骤
1、 识别功能点的类型。
2、 识别待估算应用程序的边界和范围。
3、 计算数据类型功能点所提供的未调整的功能点数量。
4、 计算人机交互功能所提供的未调整的功能点数量。
5、 确定调整因子。
6、 计算调整后的功能点数量。
识别项目的类型
国际的IFPUG组织将软件项目分为三类,功能点估算法适用于任何一类项目
l 新开发项目
l 二次开发的项目
l 功能增强的项目
识别项目的范围和边界
使用UML的“UseCase”用例图是以用户角度进行识别项目范围和边界的最好方法,因为在画用例图时就必须明确系统的边界。通过系统的边界我们可以知道哪些功能要计算功能点,哪些功能点是外部系统负责计算的。以下图为例:一个外贸订单系统只包含录入、修改、删除、查询和统计订单的功能,而汇率查询转换服务是不属于该系统的。
应用程序边界的识别规则大家一定要牢记,不能从技术角度去思考,必须从用户角度来定义;如果项目牵扯到多个系统,那么必须将这多个系统的边界全部描述清楚。
图 外贸订单系统用例图
FP功能点估算分类
FP功能点估算法将功能点分为以下5类:
1、 ILF:Internal Logical File内部逻辑文件
2、 EIF: External Interface File外部接口文件
3、 EI: External Input外部输入
4、 EO: External Output外部输出
5、 EQ: External Inquiry外部查询其中ILF和EIF属于数据类型的功能点,EI、EO、EQ属于人机交互类型的功能点。
以外贸订单系统项目为例:
l 录入订单、修改订单、删除订单是EI;
l 查询订单是EO
l 统计订单是EQ
l 汇率查询转换系统为EIF
l 订单和客户是ILF
识别功能点的重要原则
ILF、EIF要与EI、EO、EQ分开计算。对ILF和EIF复杂度的计算可以简单理解为对数据库复杂度的计算。对EI、EO、EQ复杂度的计算可以理解为对程序开发复杂度的计算。一般软件项目都是由数据和程序构成的,因此计算ILF、EIF和计算EI、EO、EQ之间没有任何关系。
第二部分:内部逻辑文件与外部接口文件ILF内部逻辑文件
内部逻辑文件是指一组以用户角度识别的,在应用程序边界内且被维护的逻辑相关数据或控制信息。ILF的主要目的是通过应用程序的一个或多个基本处理过程来维护数据。
EIF外部接口文件外部接口文件是指一组在应用程序边界内被查询,但它是在其他应用程序中被维护的,以用户角度来识别的,逻辑上相关的数据。因此一个应用程序中的EIF必然是其他应用程序中的ILF。EIF的主要目的是为边界内的应用程序提供一个或多个通过基础操作过程来引用的一组数据或信息。EIF所遵循的规则:
n 从用户角度出发识别的一组逻辑数据。
n 这组数据是在应用程序外部,并被应用程序引用的。
n 计算功能点的这个应用程序并不维护该EIF
n 这组数据是作为另一个应用程序中的ILF被维护的。
ILF和EIF复杂性计算
ILF和EIF的复杂性是取决于RET(Record element type)和DET(Data element type)的数量。DET是一个以用户角度识别的,非重复的有业务逻辑意义的字段。
DET计算的规则:
● 通过一个基本处理过程的执行,对ILF进行维护或从ILF/EIF中返回一个特定的、用户可识别的、非重复的字段,那么每个这样的字段算一个DET。
ü 例如:添加一个外贸订单时需要保存“订单号码、订单日期、地址、邮编”,那么对于ILF订单来说它的DET就是4个。
ü 例如:保存订单时还会保存订单的明细,订单的明细往往作为一个子表进行保存,那么“订单号码”在主表和子表中都同时存在(主外键),但以用户角度来识别时,存盘操作是一个最小的单位,那么订单号码只能算做一个DET。
● 当两个应用程序维护和/或引用相同的ILF/EIF,但是每个应用程序分别维护/引用它们相应的DET时,这些DET在这两个应用程序的维护或引用中将单独计算。
ü 例如一个应用程序的两个“Elementary Process”基本处理过程都需要使用到“地址”的信息,地址的信息又可以细分为“国家、城市、街道、邮编”。那么对于其中一个基本处理过程来说,他将整个地址信息作为一个整体进行处理,那就只算一个DET,另外一个基本处理过程使用每个地址的详细信息,那么DET就是4个。
Ø RET计算的规则如下:
RET是指一个EIF/ILF中用户可以识别的DET的集合。如果把DET简单理解为字段的话,那RET就可以简单理解为数据库中的表。RET在ILF/EIF中分为两种类型:可选的(Optional)和必选的(Mandatory)。计算RET的规则为以下两点:
● 在一个ILF/EIF中每一个可选或必选的集合都被计算为一个RET。或者
● 如果一个ILF/EIF没有子集合,则ILF/EIF被计算为一个RET。
ü 例如:在外贸订单系统中添加一个订单时会保存“订单信息、客户的ID、部门的ID”。
那么订单系统ILF中RET为:
1、 订单信息(必选的)
2、 客户信息(必选的)
3、 部门信息(可选的)因此ILF中RET的个数为3个。
Ø ILF/EIF复杂度的矩阵如下
1~19个DET | 20~50个DET | 超过51个DET | |
1个RET | 低 | 低 | 中等 |
2~5个RET | 低 | 中等 | 高 |
6个以上RET | 中等 | 高 | 高 |
FP功能点估算法的特点
第一部分EI、EO、EQ
EI是处理来自于应用程序边界外部的一组数据的输入,它的主要目的是维护一个或多个ILF,以及/或者更改系统的行为。 EO是输送数据到应用程序边界外部的过程。它的主要目的是通过逻辑处理过程向用户呈现信息。该处理过程必须包含至少一个数学公式或计算方法,或生成派生数据。一个EO也可以维护一个或多个ILF,并/或改变系统行为。 EQ是向应用程序边界外发送数据基本处理的过程。其主要目的是从ILF或EIF中通过恢复数据信息来向用户呈现。该处理逻辑不包括任何数学公式或计算方法,也不会生成任何派生数据。EQ不会维护任何一个ILF,也不会改变应用程序的系统行为。
l EO和EQ的共同点其主要目的都是通过基本操作过程展现数据给用户看。
Ø 主要目的
目的 | EI | EO | EQ |
改变应用程序的属性或行为 | 主要目的 | 次要目的 | 不允许 |
维护一个或多个ILF | 主要目的 | 次要目的 | 不允许 |
显示信息给用户 | 次要目的 | 主要目的 | 主要目的 |
Ø 主要行为
行为 | EI | EO | EQ |
数学公式或计算被执行 | 可以 | 至少选择一次 | 不可以 |
至少一个ILF被修改 | 至少选择一次 | 至少选择一次 | 不可以 |
至少一个ILF或EIF被引用 | 可选 | 可选 | 必选 |
数据被重新恢复 | 可选 | 可选 | 必选 |
派生数据被创建 | 可选 | 至少选择一次 | 可选 |
应用程序的行为或属性被修改 | 至少选择一次 | 至少选择一次 | 可选 |
准备或呈现信息到系统边界外 | 可选 | 必选 | 必选 |
接受进入系统边界内的数据的能力 | 必须 | 可选 | 可选 |
计算规则
在IFPUG的定义中有一个重要的单词“Elementary Process”基本处理过程。该过程对用户来说是一个有意义的最小的活动单位,并且是一个自包含的活动。功能点的分类EI、EO、EQ的识别都是基于“Elementary Process”基本处理过程的。
● EI的计算规则:
1. 从应用边界之外收到数据。
2. 如果进入系统边界内的数据不是一个改变系统行为的控制信息,那么至少一个ILF应该被改变。
3. 对于已识别的处理过程,至少满足下面三个条件之一。
ü 该基本处理过程的逻辑与本应用系统中其它基本处理过程的逻辑不同。该基本处理过程应该具有唯一性。例如:不能存在两个完全一模一样的存盘操作。
ü 在应用程序边界内,该基本处理过程所使用的这组数据应该与其他基本处理过程所使用的数据不同。
ü 在应用程序边界内,基本处理过程所引用的ILF或EIF是不同于其它基本处理过程所引用的ILF或EIF。
● EO和EQ通用计算规则必须全部满足以下内容才能被视为一个EO或EQ:
1、 从外部发送数据或控制信息到应用程序边界内。
2、 为了识别这个过程,以下三点必须满足一个:
ü 该基本处理过程逻辑上必须是唯一的,该唯一性是指其在应用程序中与其他EO或EQ的逻辑性上保持唯一。
ü 该基本处理过程所使用的数据应该是唯一的,该唯一性是指其在应用程序中与其他EO或EQ所使用的数据不同。
ü 该基本处理过程所引用的ILF或EIF文件应该是唯一的,该唯一性是指其在应用程序中与其他EO或EQ所引用的ILF或EIF文件不同。
● EO补充的计算规则除了要满足上面的通用规则外,还要满足下面其中一条:
ü 在基本操作过程中至少包含一个数学公式或计算方法
ü 在基本操作过程中要产生派生数据
ü 在基本操作过程中至少要维护一个ILF
ü 在基本操作过程中要改变系统的行为。
● EQ补充的计算规则除了要满足上面的通用规则外,还要满足下面其中一条:
ü 基本操作过程从ILF或EIF中获取数据。
ü 基本操作过程不能包含数学公式或计算方法。
ü 基本操作过程不能生成派生数据
ü 基本操作过程不能维护任何一个ILF
ü 基本操作过程不能改变系统的行为
第二部分:EI、EQ和EO的技术复杂的计算
复杂性取决于FIRs和DETs的数量。FTR是被一个事物操作读取或维护的一个ILF,或者是被一个事物操作读取的一个EIF。
EI中识别FTR规则
● 每一个ILF应该算做一个FTR。
● 通过EI读取操作的每个ILF或EIF都应该被计算为一个FTR。
● 即被EI维护又被读取的ILF仅计算一个FTR。
EI中识别DET规则
● 在EI的过程中,以用户角度识别的,通过应用系统边界输入系统内部的非重复的字段,那么该字段应算一个DET。
● 如果在EI过程中,只要没有通过系统边界输入,就算它存在于系统内的一个ILF中,也不能算为一个DET。
ü 例如外贸订单系统中,订单的金额是被单价和数量自动计算的,那么金额是没有通过系统边界输入的,因此在EI操作中就不应该算做一个DET。
● 在应用程序的EI操作时,系统提示的错误信息或完成操作的信息,应该被分别计算为一个DET。
ü 例如在网站注册用户信息时,由于输入错误系统会显示提示信息,那么这些提示信息应该被逐个计算为一个DET。
ü 当EI操作完成时系统提示并显示出来的信息,应该被计算为DET。
● 在EI操作中如果遇到主外键的字段,应该算作一个DET。
EO和EQ计算FTR的规则
● 通用规则:每个在EO/EQ处理过程中读取的ILF和EIF算一个FTR
● EO额外的FTR计算规则
ü 在EO处理过程中每个被维护的ILF算一个FTR
ü 在EO处理过程中既被读取又被维护的ILF算一个FTR
EO和EQ计算DET的通用规则
● 用户可识别的非重复的字段,进入应用边界并且指明处理什么,何时处理或处理方式,并且由EO/EQ返回或产生,那么这样的每个字段算一个DET
ü 例如在报表中的每个字段都是一个DET
● 在应用边界内以用户角度识别的,非重复字段算一个DET。
ü 例如在报表上起到解释或备注作用的文字信息,不管它是一个字、一个词或一段话,都当作一个DET
ü 例如某种编号或日期,就算它被物理存储在不同字段中,但从用户角度来看是一个整体的信息,因此被算作一个DET
ü 例如在饼图中百分比和分类算作不同的DET。
● 在EO或者EQ操作中,如果对系统进行输入或读取操作时,相同的字段只计算一个DET。
ü 例如在报表查询时,输入的字段在报表上也有显示,那么将算作同一个DET
● 在应用程序的EO或EQ操作时,系统提示的错误信息或完成操作的信息,应该被计算为DET。
ü 例如用户查询一个列表时被拒绝,那么拒绝的提示信息就算为一个DET。
● 在EO或EQ操作中如果遇到主外键的字段,应该算作一个DET。
● 如果在EO或EQ过程中,只要没有通过系统边界输入,就算它存在于系统内的一个ILF中,也不能算为一个DET。
ü 在公司发工资的时候,员工对应的状态信息被更新,但这个状态信息的更新是没有通过系统边界输入的,因此也不能算做一个DET。
● 页面的标题等类似的信息不计算DET
● 系统字段生成的记号不能被算作一个DET。
ü 例如:页码、位置信息、时间、上一页、下一页等信息。
EI复杂度计算矩阵
| 1~4个DET | 5~15个DET | 多于16个DET |
0~1个FTR | 低 | 低 | 中等 |
2个FTR | 低 | 中等 | 高 |
大于2个FRT | 中等 | 高 | 高 |
EO和EQ复杂度计算矩阵
| 1~5个DET | 6~19个DET | 多于20个DET |
0~1个FTR | 低 | 低 | 中等 |
2~3个FTR | 低 | 中等 | 高 |
多于4个FTR | 中等 | 高 | 高 |
未调整前功能点对应矩阵EI、EO、EQ、ILF和EIF计算出来的技术复杂度对应的功能点如下表所示
| 低 | 一般 | 高 |
EI | 3 | 4 | 6 |
EO | 4 | 5 | 7 |
EQ | 3 | 4 | 6 |
ILF | 7 | 10 | 15 |
EIF | 5 | 7 | 10 |
计算调整因子
功能点的调整系数是通过通用系统特性及其影响程度来评定的,对每个常规系统特性的评估由其影响程度(DI)而定,分为0-5级:0 毫无影响1 偶然影响2 适度影响3 一般影响4 重要影响5 强烈影响 然后依次对以下14个系统常规特性进行打分,并带入以下计算公式算出功能点的调整因子。Value Adjustment Factor=( sum of (DI) * 0.01 ) + 0.65
1数据通讯
数据通讯指的是应用程序直接与处理器通讯的程度。通常我们都是通过某种通讯手段来实现在一个应用中所使用的数据或者控制信息的。连接到本地控制器上的终端被认为是使用通讯设施,而协议指的是两个系统或者两个设备之间进行通讯时所使用的一种约定。所有的数据通讯链接都需要某种协议。
0 | 应用程序是单纯的批处理或者PC stand-alone |
1 | 应用程序是一种批处理过程,但是包含远程数据的录入或远程打印 |
2 | 应用程序是一种批处理过程,但是包含远程数据的录入和远程打印 |
3 | 应用程序包括在线数据收集或者包括批处理或查询系统的远程处理的前端应用 |
4 | 应用程序不单只是前端应用,但是仅支持一种远程处理通讯协议 |
5 | 应用程序不单只是前端应用,还支持多于一种的远程处理通讯协议 |
2分布式数据处理
分布式数据处理是应用在内部组件之间传递信息的程度。这个特性是在应用边界内体现的。
0 | 应用程序不支持组件之间的数据传输和处理功能 |
1 | 应用程序为用户可能进行的处理准备数据(例如使用电子表格或者数据库等) |
2 | 应用程序所准备的数据是为了在系统另外一个组件上传输和处理。并非为终端用户所处理。 |
3 | 分布式处理和数据传输是在线的,并且是单向的 |
4 | 分布式处理和数据传输是在线的,并且是双向的 |
5 | 由系统中最恰当的组件动态地执行处理功能 |
3性能
性能是吞吐量、处理时间等指标对开发的影响。用户所提出的性能要求将直接影响到系统的设计,实施,安装和支持。
0 | 用户没有提出性能方面的要求 |
1 | 用户提出了性能和设计方面的要求,但不需要采取特定措施 |
2 | 响应时间和吞吐量在系统峰值时是关键的,但是不需要采取相应的CPU 使用方面的特殊设计。处理的最后期限是在下一个工作日。 |
3 | 在任何时候响应时间和吞吐量都是关键的,但是不需要采取相应的CPU 使用方面的特殊设计。处理的完成期限比较严格 |
4 | 除了上面一项的要求外,由于对需求的要求比较严格,在设计阶段就要进行性能分析 |
5 | 除了上面一项的要求之外,在设计和实施阶段需要使用性能分析工具来判断性能要求的完成情况 |
4大业务量配置
大业务量配置指的是计算机的资源对应用开发的影响程度。大业务量的运行配置对设计有特殊要求,是必须考虑的一个系统特性。
0 | 没有提出明确的运行方面的限制 |
1 | 有运行方面的限制,但是不需要采取特别的措施以满足运行限制 |
2 | 提出了一些安全和时间方面的限制 |
3 | 应用程序的某些部分对处理器有特定的要求。 |
4 | 提出的运行限制对应用的中央处理器或者专用处理器有特殊的要求 |
5 | 除上面一项之外,还对应用的分布式组件提出了限制 |
5事务处理率
事务处理率是业务交易处理速度的要求对系统的设计,实施,安装和支持等的影响。
0 | 预计不会出现周期性的高峰事务处理期 |
1 | 预计会有周期性的高峰事务处理期(例如:每月、每季、每年) |
2 | 预计每周都会出现高峰事务处理期 |
3 | 预计每天都会出现高峰事务处理期 |
4 | 用户在应用程序需求或者服务级别协议中对事务率要求很高,因此必须在设计阶段进行性能分析。 |
5 | 用户在应用程序需求或者服务级别协议中对事务率要求很高,因此必须进行性能分析并在设计、开发和安装阶段中使用到性能分析工具。 |
6在线数据输入
在线数据输入是指数据通过交互的方式输入系统程度。系统中包括在线数据输入和控制信息功能。
0 | 所有事务都是批处理的。 |
1 | 1%~7%的事务是以交互式的方式进行数据录入 |
2 | 8%~15%的事务是以交互式的方式进行数据录入 |
3 | 16%~23%的事务是以交互式的方式进行数据录入 |
4 | 24%~30%的事务是以交互式的方式进行数据录入 |
5 | 30%以上的事务是以交互式的方式进行数据录入 |
7最终用户效率
最终用户效率是指对应用的人文因素以及使用的便捷方面的考虑程度。如下功能设计是针对最终用户效率的:
Ø 页面导航
Ø 菜单
Ø 在线帮助或文档
Ø 光标自动跳转
Ø 可以滚动
Ø 在线远程打印
Ø 预定义的功能键
Ø 在线做批量提交任务
Ø 光标可以选取界面上的数据
Ø 用户使用大量反白显示、重点显示、下划线或其他的标识
Ø 在线copy用户文档
Ø 鼠标拖动功能
Ø 弹出窗体
Ø 使用最少的界面完成某种商业功能
Ø 双语言支持(如果选择了这个就算4项)
Ø 多语言支持(如果选择了这个就算6项)
0 | 以上的一个都不包括 |
1 | 包括以上的1~3个 |
2 | 包括以上的4~5个 |
3 | 包括以上的6个或以上,但是没有用户对于效率的要求 |
4 | 包括以上的6个或以上,对用户使用效率有较高要求,因而必须考虑用户方面的设计(例如,最少击键次数、尽可能提供默认值、模版的使用) |
5 | 包括以上的6个或以上,用户对效率的要求使得开发人员必须使用特定的工具和流程以判定用户对效率的要求已经被达成 |
8在线更新
在线更新是指内部逻辑文件ILF 被在线更新的程度。应用系统提供在线更新内部逻辑文件的功能。
0 | 没有在线更新 |
1 | 包含1~3 个控制文件的在线更新。更新的流量低,恢复容易 |
2 | 包含对4 个以上控制文件的在线更新。更新的流量低,恢复容易 |
3 | 包含对主要ILF 的更新 |
4 | 除了3 之外,在设计和实施中要考虑对数据丢失的防范。 |
5 | 除了4 之外,大量的数据恢复工作要考虑成本因素,同时包含了高度自动化的恢复流程。 |
9复杂处理
复杂处理描述了逻辑处理对应用开发的影响程度。 它包含以下要素:
Ø 敏感控制(例如特殊的审核过程)和/或程序特定的安全处理
Ø 大量的逻辑处理
Ø 大量的数学处理
Ø 因为例外处理造成的需要重新处理的情况(例如,由TP中断、数据值缺少和验证失败导致的ATM事务)
Ø 多种可能的输入/输出造成的复杂处理
0 | 上面一个都不满足 |
1 | 只满足一个 |
2 | 只满足两个 |
3 | 满足三个 |
4 | 满足四个 |
5 | 都满足 |
10可复用性
应用系统中的应用和代码经过特殊设计、开发和支持,可以在其他应用系统中复用。
0 | 没有可复用的代码 |
1 | 代码在应用之内复用 |
2 | 应用中被其他用户复用的部分不足10% |
3 | 应用中被不止一个用户使用的部分超过10% |
4 | 应用遵从一种易于复用的方式被打包和文档化。用户在源代码级客户化该应用 |
5 | 应用按照一种易于复用的方式被打包和文档化。用户使用用户参数来对该应用进行客户化 |
11.易安装性
易安装性指应用系统的转换和安装容易度对开发的影响程度。系统测试阶段提供了转换和安装计划和/或转换工具。
0 | 用户对安装没有特定的要求 |
1 | 用户对安装没有特定的要求,但有特定的安装环境要求 |
2 | 用户提出了安装和转化的要求,转化/安装指南被经过测试提供给用户。但是转化的影响对该应用不重要 |
3 | 用户提出了安装和转化的要求,转化/安装指南被经过测试提供给用户。转化的影响对该应用来说是重要的 |
4 | 除了2 的要求之外,需要提供经过测试的自动化的安装和转化工具。 |
5 | 除了3 的要求之外,需要提供经过测试的自动化的安装和转化工具。 |
12.易操作性
易操作性指的是应用对运行的影响程度,如有效启动、备份和恢复规程的影响。易操作性是应用提供的一种特性,它最小化了手工操作的要求。
0 | 用户没有指定除正常备份程序外的其它特定操作 |
1 | 提供高效的启动、备份和恢复进程,但需要人手操作 |
2 | 提供高效的启动、备份和恢复进程,不需要人手操作(当作两项计算) |
3 | 应用程序对磁带的需求最小化 |
4 | 应用程序对硬拷贝处理的需求最小化 |
5 | 程序设计成无人操作模式。无人操作模式的意思是除了启动和关闭之外,不需要对系统进行操作。程序的其中一个功能就是错误自动恢复。 |
13.多场地
多场地指应用系统经特殊设计、开发可以在多个组织、多个地点应用的程度。
0 | 用户需求不含多场地和组织的要求 |
1 | 考虑了多场地的要求,但是设计要求应用在不同的场地使用相同的软硬件环境 |
2 | 考虑了多场地的要求,但是设计要求应用在不同的场地使用类似的软硬件环境 |
3 | 考虑了多场地的要求,同时设计支持应用在不同的场地使用不同的软硬件环境 |
4 | 在1 或者2 的要求之上,提供了经过测试的多场地的文档和支持计划 |
5 | 在3 的要求之上,提供了经过测试的多场地的文档和支持计划 |
14.支持变更
支持变更指的是应用在设计上考虑支持处理逻辑和数据结构变化的程度。可以具有如下的特性:
Ø 提供可以处理简单要求的弹性查询和报告功能,如对一个ILF进行与(或)逻辑
Ø 提供可以处理一般复杂度要求的弹性查询和报告功能,如对多于一个的ILF进行的与(或)逻辑(当作两项计算)
Ø 提供可以处理复杂要求的弹性查询和报告功能,如对一个或多个ILF进行的与(或)逻辑的组合(当作三项计算)
Ø 业务控制数据被保存到用户通过在线交互进程维护的表中,但变更只会在第二个工作日生效
Ø 业务控制数据被保存到用户通过在线交互进程维护的表中,且变更即时生效
0 | 一个都不满足 |
1 | 合计满足一个 |
2 | 合计满足二个 |
3 | 合计满足三个 |
4 | 合计满足四个 |
5 | 合计满足五个 |
计算调整后的功能点个数
国际的IFPUG组织将软件项目分为三类,功能点估算法适用于任何一类项目,其计算公式中的术语请详见表1。
l 功能点的原始计算公式:FP Count =UFP * VAF
l 新开发项目有时新开发的软件项目也需要与其他现存的软件系统进行整合,例如:一个企业新开发的MIS内部管理系统经常会与财务系统进行整合。这个时候除了考虑本身项目的功能点个数外,还要考虑系统整合或数据迁移部分的工作量,因此其功能点计算公式如下:FP Count =(UFP+CFP)* VAF
l 二次开发的项目有时新开发的软件项目是在原有基础上进行二次开发的,只是为了增加一些新的功能,因此其功能点计算公式如下:FP Count = ADD * VAF
l 功能增强的项目对于功能增强的项目功能点估算比较复杂,在功能点增强前大家需要计算有哪些是新增加的功能,有哪些是被修改的功能,还有哪些是属于数据迁移或系统整合的功能。然后计算新系统技术复杂度的调整因子“VAFA”,并在此基础上计算系统功能点的数量。当然此类项目也会去掉一些原有功能,那么在原有系统的技术复杂度基础上重新计算功能点的调整因子“VAFB”,再计算所去掉功能贡献的功能点数量,因此其功能点计算公式如下:FP Count = [(ADD+CHGA+CFP)* VAFA]+(DEL * VAFB) 表1 功能点技术公式术语
术语 | 英文 | 中文含义 |
ADD | Added functionality | 被添加的功能点个数 |
CFP | Conversion functionality | 被转换的功能点个数 |
CHGA | UFP of changed functionality after enhancement | 功能增强后所改动的功能所贡献的未调整的功能点个数 |
DEL | Deleted functionality | 被删除的功能点个数 |
UFP | Unadjusted functional point count | 未调整的功能点个数 |
VAF | Value adjustment factorVAF=(sum of(DI)* 0.01)+ 0.65 | 功能点的调整因子的计算公式VAF=(sum of(DI)* 0.01)+ 0.65 |
VAFA | Value adjustment factor after enhancement | 功能增强后的功能点调整因子 |
VAFB | Value adjustment factor before enhancement | 功能增强前的功能点调整因子 |
范例
以员工管理系统为范例,在添加一个员工资料时会使用到员工的一般信息、员工的教育情况、工作经历和家属信息。员工又会隶属于某个部门,在本系统中会有一个对部门进行维护的功能。员工的工资是由另外一个财务系统提供的。因此其用例图如下所示:
图 员工管理系统用例图
Ø 假设员工基本信息如下所示:
员工ID(标签控件)
员工名称
性别
生日
婚否
所属部门ID(标签控件)
所属部门名称
——受教育的时间
——学校名称
——所学专业
——工作时间
——工作单位
——工作部门
——工作职务
——亲属的姓名
——之间关系
——亲属年龄
——工作单位
Ø 假设部门信息如下所示:
部门ID(标签控件)
部门名称
Ø 假设工资表信息如下所示:
员工ID(标签控件)
员工姓名
金额
单位
本范例识别出来ILF和EIF功能点个数如下表所示。
ILF内部逻辑文件 | RET | DET个数 | 复杂度 | 未调整的FP个数 |
员工信息 | 员工基本信息、员工受教育情况、工作经历、亲属信息,共4个。 | 18个 | 低 | 7 |
部门信息 | 部门基本信息,共1个。 | 2个 | 低 | 7 |
| ||||
EIF外部接口文件 | RET | DET个数 | 复杂度 | 未调整的FP个数 |
工资表 | 员工基本信息、工资信息,共2个。 | 4个 | 低 | 5 |
合计:19个 |
本范例识别出来EI、EQ和EO功能点个数如下表所示。
EI | FTR | DET个数 | 复杂度 | 未调整的FP个数 |
添加员工信息 | 员工、部门、工资表 | 员工信息的两个标签控件的内容不是用户输入的,因此不算。共16个。部门信息与员工信息中的部门字段重复,因此一个都不算。工资表中的员工ID和名称不能重复,因此只能算金额和单位,所以共2个18个 | 高 | 6 |
修改员工信息 | 员工、部门、工资表 | 18个同上 | 高 | 6 |
删除员工信息 | 员工、部门、工资表 | 1个员工ID | 中等 | 4 |
添加部门信息 | 部门 | 1个一个标签控件的内容不是用户输入的,因此不算 | 低 | 3 |
修改部门信息 | 部门 | 1个一个标签控件的内容不是用户输入的,因此不算 | 低 | 3 |
删除部门信息 | 部门 | 1个部门ID | 低 | 3 |
合计:25个 | ||||
EQ | FTR | DET个数 | 复杂度 | 未调整的FP个数 |
查询员工信息 | 员工、部门、工资表 | 20个 | 高 | 6 |
查询部门信息 | 部门 | 2个 | 低 | 3 |
合计:9个 | ||||
EO | FTR | DET个数 | 复杂度 | 未调整的FP个数 |
统计员工年薪 | 员工、工资表 | 员工ID、员工名称年份、年薪、单位共5个 | 低 | 4 |
本系统的通用系统特性及其影响程度如下表所示:
系统特性 | 分数 |
数据通讯 | 3 |
分布式数据处理 | 2 |
性能 | 0 |
高强度配置 | 0 |
交易速度 | 0 |
在线数据输入 | 5 |
最终用户效率 | 2 |
在线更新 | 3 |
复杂的处理 | 0 |
可复用性 | 3 |
易安装性 | 0 |
易操作性 | 0 |
多场地 | 0 |
支持变更 | 1 |
合计:19 | |
调整因子 = 19 * 0.01 + 0.65 = 0.84 |
最终调整后的功能点数量为: (19 + 25 + 9 + 5)* 0.84 = 48.72个
总结
功能点估算法是一个非常有用的,而且是国际通用的一种对软件规模进行估算的技术,是项目管理人员必须掌握的工具。为了便于大家对功能点的技术进行理解和记忆,这里对其进行总结:
由于计算机软件就是为了实现无纸办公,那么在估算功能点时应该多以用户的纸质表单为依据,每个表单就是一个ILF或EIF,表单上显示的字段都是DET,一个表单上的“核心”内容不管是由几个数据表来分别存放数据的,每个表都是一个RET。 简单来讲ILF和EIF可以被看作数据库中的数据表,但是主从表将被视为一个ILF或EIF。那么ILF和EIF的复杂度就是由数据表中的字段DET和一个ILF或EIF自身所包含的主、从表个数RET来决定,但是在计算DET时主外键只能算作一个。
EI就是对应用户增加、修改、删除的操作,EO和EQ都是用于用户查询的操作,但是EO和EQ的区别是EO查询时使用了数学公式或计算方法。EI、EQ和EO的复杂度是由FTR和DET决定的。FTR的个数是由ILF和EIF的个数决定的,可以由主表中主外键的个数来计算。在计算EI的DET时,只有用户在界面上直接输入的信息才算作DET,通过页面自动计算或转换的数据不能算作EI的DET。在EO和EQ计算DET时,报表的标题、页码等信息不能被计算为一个DET。