![](http://img.tongji.cn.yahoo.com/868619/ystat.gif)
1.
计算功能点的总体流程
FPA的计算流程比较复杂,主要分为三大步骤:定义分析目标;计算未调整功能点;计算调整功能点。具体图示请参见图一。
图表
1 FPA
计算流程
FPA 的主要步骤如下:
1)
决定分析类型和目的:开发项目、升级项目、应用。小特性开发属于应用类型。
2)
识别分析范围和应用边界。
3)
计算未经调整的功能点数UPFC。
(1) 列出系统的所有功能,包括数据功能和处理功能。
(2) 计算每一个功能的功能点。
i.
识别该功能的类型:ILF、EIF、EI、EO、EQ。
ii.
统计该功能包含元素的数目。数据功能统计DET和RET;处理功能统计DET和FTR。
iii.
根据该功能包含元素的数目,和相应功能类型的复杂度矩阵,确定其复杂度。
iv.
根据相应功能类型的复杂度和功能点对照表,找到改功能的功能点数。
(3) 统计所有功能的功能点总和。
4)
确定调整系数。根据14个GSC确定VAF。
5)
计算调整后的功能点:AFP = UPFC * VAF
1.1.
|
Determine Type of Count
|
Identify Counting Scope and Application Boundary
|
Count Data Functions
|
Count Transactional Functions
|
Determine Unadjusted Function Point Count
|
Determine Value Adjustment Factor
|
Calculate Adjusted Function Point Count
|
FPA可应用于各类软件项目和应用系统。对于不同的项目和系统,FPA计算流程是一样的,但一些具体算法和规则上各有不同。FPA的目的也不尽相同。分析类型有三种:
l
新开发项目 Development Project
估算或度量系统的所有新功能点,包括新增的或系统切换的功能。度量的目的有:
n
定义需求
n
为项目计划提供估算数据:工作量,成本,人员,进度。
n
度量质量。
n
度量生产率。
l
升级项目 Enhancement Project
估算或度量系统中变化的功能点,包括新增,改变,减少和系统切换的功能。
l
应用软件Application
官方定义是度量已安装的应用软件的功能点。Appliction是指已经交付或从第三方获得的软件、软件包。小软件工具的开发也可算作应用类型。每次新开发项目完成后,都应当把交付的系统按应用软件度量一次。度量应用软件的目的有:
l
作为升级项目的基线。
l
度量软件质量
l
确定维护策略
l
确定维护的生产率
三种类型的分析关系如下图所示。
![](https://i-blog.csdnimg.cn/blog_migrate/b56c322e8a00739f9c24e65bf4c61c87.png)
图表
2
项目
FPA
与应用
FPA
的关系
1.2. 定义范围边界
FPA是从用户视角和系统见交互的角度来分解功能。只有严格的界定了分析的范围和边界,才能很好的识别和分解功能。基于用户视角定义边界,用户能够理解和描述边界。
l
相关应用之间的边界是由用户看到的不同功能区域划分,而不是由技术考虑来划分。
l
应用之间的初始边界不会因为功能点分析而改变。
定义边界的技巧
l
获得一个系统的流程图,在系统周围画上边框,作为边界。
l
察看数据的维护方式。
l
察看数据的应用范围。
2. 计算未调整功能点UFPC
未调整功能点是从具体功能的复杂度计算得到,它包括三个步骤:分解功能,分析功能的复杂度,根据复杂度确定功能点数。
2.1. 识别,分解具体功能
所有系统的具体功能都可分为两种:数据功能和处理功能。正确识别出数据功能和处理功能的数目是FPA的关键。
l
数据功能:指为满足用户数据需求而提供的功能。它以文件为单位计数。文件分为两类:ILF和EIF。
n
内部逻辑文件ILF :系统内部维护的文件,如系统创建和更新的文件。
n
外部接口文件EIF :被目标系统应用,但由外部系统维护的文件。
l
处理功能:指为满足用户通过系统处理数据或控制信息而提供的功能。它以处理元
为单位计数。处理必然是发生在系统边界内外的一个交互过程,可分为三种:EI,EO和EQ。
n
外部输入EI :指处理来自系统外的文件的处理元。它的基本目的是维护一个或多个ILF,或者改变系统的行为。
n
外部输出 EO :指把文件发送到系统外的处理元。他的基本目的是给用户提供处理的结果。EO包含至少一个逻辑处理运算过程。
n
外部查询 EQ :EQ也是指把文件发送到系统外的处理元。它的基本目的是为用户获取指定的信息。EQ部包含逻辑处理运算过程。
请注意,FPA是从用户角度分析系统的。这里的文件和处理元也是从用户角度来定义的,完全与实现技术无关。特被是文件,一定要时刻记住他仅仅是一组数据,与计算机文件没有关系。
l
文件:一组用户可识别的,有逻辑关联的数据或控制信息。它不一定计算机系统实际产生,存储或使用的文件。
l
处理元:对用户有意义的最小活动单元。它与实际程序中的方法,进程和API无关。
2.2. 确定具体功能的复杂度
对于具体的文件和处理元,FPA采用三个指标度量其复杂度:RET,DET和FTR。这些指标都是直观的,可计量的。其中文件用RET和DET来度量,处理元用DET和FTR来度量。
l
记录元素类型RET :在一个文件内,一个用户可识别的数据元素组。
l
数据元素类型DET :用户可识别的,不重复的字段。
l
引用文件类型FTR :处理涉及到的文件,包括读取,更新和修改的文件。
FPA给概念术语的名称都比较冗繁。个人感觉把这三个术语中的“类型(Type)”去掉,会更易懂。这里的“类型(Type)”都是强调对相同的东西不能重复计算的。比如同一个ILF中的两个RET都包含同一个DET,只能记为一个DET。
2.3. 数据功能点权重矩阵
对于每一个文件(ILF或EIF),FPA是根据其复杂度来确定其功能点数。复杂度又根据文件所含的DET和RET的数量分为三级:低,中(平均)和高。
表格
1
文件功能点计算矩阵
DET
个数
RET
个数
|
1 ~ 19
|
20 ~50
|
>= 50
|
|
复杂度
|
ILF
功能点数
|
EIF
功能点数
|
1
|
低
|
低
|
中
|
低
|
7
|
5
| |
2 ~ 5
|
低
|
中
|
高
|
中
|
10
|
7
| |
>= 6
|
中
|
高
|
高
|
高
|
15
|
10
|
2.4. 处理功能点权重矩阵
同数据功能点类似,处理功能点也是根据三级复杂度确定的。而每个处理元的复杂度根据DET和FTR计算得来。但EI 、EQ和EO三者的计算方法不尽相同。
表格
2
处理元复杂度矩阵
EI
复杂度
|
EQ
、
EO
复杂度
| ||||||
DET
个数
RET
个数
|
1 ~ 4
|
5 ~15
|
>=16
|
DET
个数
RET
个数
|
1 ~ 5
|
6 ~19
|
>= 20
|
1
|
低
|
低
|
中
|
1
|
低
|
低
|
中
|
2
|
低
|
中
|
高
|
2 ~ 3
|
低
|
中
|
高
|
>= 3
|
中
|
高
|
高
|
>= 4
|
中
|
高
|
高
|
从表中可见同样文件作为输入要比输出的复杂度高。
表格
3
处理元功能点计算表
复杂度
|
低
|
中
|
高
|
EI
、
EQ
功能点数
|
3
|
4
|
6
|
EO
功能点数
|
4
|
5
|
7
|
2.5. 汇总未调整功能点
把系统中所有ILF, EIF,EI,EO,EQ的功能点数汇总,就是系统的总的未调整功能点数UFPC。
3. 计算调整功能点AFP
未调整功能点数是从用户角度计算得出的,完全没有考虑不同系统或不同功能的实现复杂度。FPA通过分析14个通用系统特性(GSC)对系统的影响程度(DI)得出每个系统的功能点值调整因子VAT。最后根据VAF调整功能点数,得出在系统和功能点可类比的调整功能点数。UFP、VAT和AFP三者的关系是:
AFP = UFP * VAT
请注意,一个系统只有一个
VAT,它是所有14个GSC分析汇总的结果。
3.1. 通用系统特性GSC
GSC是由IFPUG统一指定的标准。一共有14种GSC,适用于所有类型的系统和项目。
(1)
数据通讯 (Data Communications)
(2)
分布式数据处理 (Distributed Data Processing)
(3)
性能 (Performance)
(4)
使用强度高的配置 (Heavily Used Configuration)
(5)
事务速度 (Transaction Rate)
(6)
在线数据输入 (Online Data Entry)
(7)
最终用户的效率 (End-User Efficiency)
(8)
在线更新(Online Update)
(9)
复杂的处理 (Complex Processing)
(10)
可重用性 (Reusability)
(11)
安装的简易性 (Installation Ease)
(12)
运行的简易性 (Operational Ease)
(13)
多场地 (Multiple Sites)
(14)
允许变更 (Facilitate Change)
3.2. 影响程度DI和TDI
GSC对系统的影响程度分为6级,从0到5。各级定义如下:
0 不存在或者没有影响
1 偶尔的影响
2 轻微的影响
3 中等的影响
4 显著的影响
5 强烈的影响
IFPUG针对每一中GSC,给出了详细的DI等级指南。对于一些实在没有参考等级标准,用户也可以自己定义。
把14种GSC的DI都加起来,就得到系统的总影响程度TDI,即:TDI = ∑(DI)
3.3. 值调整因子VAF
在得出TDI后,VAF按如下公式计算。
VAF = (TDI * 0.01 ) + 0.65。
VAF只能在正负35%的范围调整功能点数。
AFP = UFP * VAT
4. 不同项目的调整功能点AFP
4.1. 开发项目功能点
DFP = (UFP + CFP) * VAF
l
DFP: 开发项目功能点。
l
UFP: 项目应用的UFPC。
l
CFP:额外的转换功能的UFPC。
l
VAFA:调整系数。
4.2. 升级项目功能点
EFP = (ADD + CHGA + CFP) * VAFA + DEL * VAFB
l
EFP:升级项目功能点。
l
ADD:升级项目新增UFPC。以升级后项目为基准。
l
CHGA:升级项目改变的UFPC。以升级后项目为基准。
l
CFP:额外的转换功能的UFPC。
l
VAFA:升级后的调整系数。
l
VAFB:升级前的调整系数。
l
DEL:升级项目中删除的UFPC。
4.3. 应用功能点
AFP = ADD * VAF
l
AFP:应用功能点
l
ADD:安装的功能UFPC。
l
VAF:调整系数。
4.4. 升级应用功能点
AFP = [( UFPB + ADD + CHGA) – (CHGB +DEL)] * VAFA
l
AFP:应用功能点
l
ADD:安装的功能UFPC。
l
VAFA:调整系数。
l
UFPB:升级前的UPFC。
l
CHGA:升级后改变的UFPC
l CHGB
:升级前改变的UFPC ?!
5. 附录
5.1. 度量功能点的工作量
很多公司不能推行FPA ,并非主观上认为它没用。其主要原因有二:
1.
没有FPA的专家指导,不知从何做起,如何持续。
2.
迫于项目进度压力,担心FPA带来大量额外的工作量。
这里就推行FPA带来的额外工作量,给出一些参考数据。大多数组织是平均每小时估算出100个功能点。具体如下:
|
项目
/
应用系统的规模
| ||||
很小
|
小
|
中
|
大
|
很大
| |
功能点数
|
5 ~ 20
|
20 ~ 100
|
100 ~ 500
|
500 ~ 10K
|
10K ~ 100K
|
C++
代码行
|
265 ~ 1K
|
1K ~ 5K
|
5K ~ 26K
|
26K ~ 500K
|
500K ~ 5M
|
开发工作量
|
0.5
人天
~ 1
人月
|
1
人月
~ 10
人月
|
10
人月
~ 72
人月
|
72
人月
~ 200
人年
|
200
人年
~ 8K
人年
|
FPA
工作量
|
15
分钟
~ 30
分钟
|
30
分钟
~ 1
小时
|
1
小时
~ 5
小时
|
5
小时
~ 100
小时
|
100
小时
~ 1K
小时
|
5.2. 推行FPA的建议
应当做的事情
l
得到老板的支持和指导。
l
是度量成为每一个人工作的一部分。
l
安排专人总管和支持度量活动,不一定是全职。
l
培训技术人员和用户。让用户有功能点的概念。
l
关注在项目团队的收益上,不要一上来就资产管理什么的。
l
提供自动化的支持。
l
与组织的过程模式整合。
l
度量的结果应当发布出来,并得到利用。
不应当做的事情
l
不要觉得度量可有可无,或不可达到。
l
不要苛求完美的度量系统和环境。
l
不要依赖不准确的数据。
l
不要用于衡量个人的绩效。
5.3. 术语表
术语
|
英文
|
中文
|
说明
|
FPA
|
Function Point Analysis
|
功能点分析法
|
|
UFP
|
Unadjusted Function Point
|
未调整的功能点
|
|
AFP
|
Adjusted Function Point
|
调整功能点
|
|
VAF
|
Value Adjustment Factor
|
值调整因子
|
|
ILF
|
Internal Logic File
|
内部逻辑文件
|
|
EIF
|
External Interface File
|
外部接口文件
|
|
EI
|
External Input
|
外部输入
|
|
EO
|
External Output
|
外部输出
|
|
EQ
|
External Query
|
外部查询
|
|
GSC
|
General System Characteristic
|
通用系统特征
|
|
DET
|
Data Element Types
|
数据元素类型
|
|
RET
|
Record Element Types
|
记录元素类型
|
|
FTR
|
File Type Referenced
|
引用文件类型
|
|
DI
|
Degree of Influence
|
影响程度
|
|
TDI
|
Total Degree of Influence
|
整体影响程度
|
|
EP
|
Elementary Process
|
处理元
|
|
转载于:https://blog.51cto.com/welkinhu/114784