IFPUG功能点分析介绍

引言
IFPUG的功能点分析(FPA)方法是一种目前被广泛接受的关于软件规模度量的有效方法。目前越来越多的组织在运用这个方法进行软件规模的度量。故在此对功能点分析做一些简单的介绍,以供大家了解。
FPA简介
FPA是从用户角度出发度量软件规模的一种方法。它从用户的角度出发,将系统分为数据功能和交易功能两大类,分别根据具体的规则来计算功能点,最后结合系统的特征因子来调整功能点数,从而得到最终的系统规模。
具体的度量步骤如下所示:
  1. 确定功能点计数类型
  2. 识别软件的应用边界
  3. 识别数据功能以确定其复杂度以及UFP
  4. 识别事务功能以确定其复杂度以及UFP
  5. 确定UFP数
  6. 确定值调整因子
  7. 计算调整FP数
这里的用户指的是用户功能性需求的任何人和/或任何时候与软件通信或互动的任何人或事物。
所谓用户可识别是指为处理而定义的需求或/和能被用户和软件开发者赞同和读懂的数据组。
所以一定要注意功能点评估的方法一定是从用户角度出发,并能够得到用户的认可,它与具体采用何种开发语言,何种技术方案无关。
关于功能点计数类型
功能点计数类型在IFPUG的FPA中分为三类:新开发类型、增强类型、应用系统。
其中新开发类型简单的来说就是从无到有的开发一个系统;
增强类型简单的来说就是在原有系统基础上新增、完善甚至删除已有的功能。
应用系统则是指对已经存在的系统进行功能点计数。
这三种类型的系统在计算功能点的时候会采用不同的计算方法。
关于应用边界
在FPA中强调在进行FPA之前一定要定义应用的边界。因为这关系到后续在计算功能点的时候相关类型功能的识别以及最终的规模。
而所谓应用边界就是定义范围,从用户的角度出发,确定哪些业务包含在应用中,而哪些业务在应用之外。
关于数据功能
在FPA中将数据功能分为两类:
1、内部逻辑文件(Internal Logical File, ILF)
2、外部接口文件(External Interface File, EIF)
这里的文件指的是一组用户可识别的逻辑数据或者控制信息。它与我们在具体实现时设计出来的物理模型是无关的。
内部逻辑文件(ILF)指的是一组用户可识别的在应用边界内且被维护的逻辑相关数据或者控制信息。ILF的主要目的是通过应用的一个或几个基本处理过程维护数据。
而外部接口文件(EIF)指的是一组在应用边界内被查询,但是在其它应用中被维护的、用户可识别的、逻辑相关数据或者控制信息。
从以上的定义可以看出来ILF与EIF的最大区别在于ILF会被应用维护,而EIF不会被应用维护。
识别ILF和EIF的有效工具是数据流图。
具体的ILF和EIF的识别规则在这里不详述,可以参照IFPUG的实践手册(CPM)。
在我们识别了ILF和EIF之后,我们就需要计算它们的复杂度。在FPA中采用下面两个指标来计算ILF和EIF的复杂度:
1、数据元素类型(Data Element Types, DET)
2、记录元素类型(Record Element Types, RET)
其中一个DET就是一个唯一的用户可认知的,不重复的数据域。类似于数据库表中的字段,但不完全相同。
而一个RET就是一个ILF或者EIF内用户可认知的数据元素子集。
在FPA中有给ILF和EIF的DET以及RET定义详细的计算规则,可参考CPM。
根据对每个ILF和EIF计算出来的DET和RET的数量,在FPA中就会将ILF和EIF划分为低,中,高三个复杂度等级。具体的划分规则可参照CPM。
关于交易功能
在FPA中将交易功能划分为三种:
1、 外部输入(External Input, EI)
2、 外部输出(External Output, EO)
3、 外部查询(External inQuery, EQ)
这里的EI指的是处理来自应用边界之外的数据或控制信息的基本处理过程。EI的主要目的是维护一个或多个ILF并且/或者改变系统的行为。
EO指的是向应用边界之外发送数据或控制信息的基本处理过程.EO的主要目的是通过逻辑处理方式向用户呈现信息,而不只是直接恢复数据或控制信息。该处理逻辑必须包含至少一个数学公式或计算过程,或生成派生数据。一个EO也可能维护一个或多个ILF和/或改变系统行为。
EQ指的是向应用边界之外发送数据或控制信息的基本处理过程. EQ的主要目的是通过恢复数据或控制信息向用户呈现信息。该处理逻辑不包括任何的数学公式或计算过程,不会生成任何的派生数据。EQ处理过程中既不会维护任何ILF,也不会改变系统行为。
在FPA中有定义详细的对EI、EO、EQ三者的识别规则,在此不详述。通常,这三种功能就是对用户提出的功能性需求的分类。它关注的对象是具体的每一个功能。
对于交易功能,在FPA中采用DET和FTR(引用文件类型)两个指标来计算它们的复杂度。
其中FTR指的是一个被交易功能读取或维护的ILF或者是一个被交易功能读取的EIF。
根据对每个EI、EO、EQ计算出来的DET和FTR的数量,在FPA中也将它们划分为低、中、高三个复杂度等级。具体划分规则可参见CPM。
根据以上计算出来的数据功能和交易功能的复杂度,FPA综合很多软件项目的数据,提供了一个复杂度与功能点的对应表,具体参见CPM。
根据上表识别出每个数据功能和交易功能的功能点,然后求和即为未经调整的功能点数(Unadjusted Function Point)
关于调整系数
在上面计算出来的未经调整的功能点数没有考虑到系统的非功能性需求,因此,FPA有定义14个系统调整因子来针对系统的非功能性需求来计算调整系数。这14个系统调整因子分别是:
1.数据通讯             8.在线升级
2.分布式数据处理     9.复杂处理
3.性能                  10.可重用性
4.资源需求             11.易安装性
5.事务频率             12.易操作性
6.在线数据输入        13.多点运行
7.终端用户效率        14.易变更
对于以上的每一个影响因子,FPA将其影响程度定义为以下的5个等级。
  • 0 毫无影响
  • 1 偶然影响
  • 2 偏下影响
  • 3 一般影响
  • 4 重大影响
  • 5 强烈影响
每个特征因子都有定义详细的识别规则,可参考CPM。
功能点调整系数(Value Adjustment Factor, VAF)=(TDI×0.01)+0.65。
其中TDI指以上14个特征因子影响程度分值的和。根据以上的公式可以知道,VAF的值在0.65~1.35范围内。
计算已调整功能点(Adjusted Function Point AFP
根据在第一步中识别的功能点计数类型,计算已调整功能点的公式有不同。其中新开发项目功能点计算公式为:
AFP=(UFP+CFP)×VAF
其中,UFP=未调整功能点总数
CFP=转换功能点
此处转换功能指系统安装时需要用到,但不直接提供给最终用户使用的功能。通常是实现诸如数据转换这样的功能。
有关其他两种类型的已调整功能点计算公式参见CPM。
关于功能点的应用
功能点计算出来了,那它跟我们的工作有什么样的联系呢?通常,在项目规划及执行阶段,可以利用功能点来预估项目的人力费用、品质等。
例如,根据行业经验数据,Java语言开发时,一个功能点的生产时间在1~1.4天内(此处的生产时间仅指软件开发活动,它通常包含需求分析、设计、编码、测试等活动,但不包含项目管理、软件维护等支持性且因项目要求的不同而差异较大的活动)。那么我们就可以根据计算出来的功能点推算出项目可能的人力。典型公式:项目总生产人力=项目功能点数×生产效率。
在项目结束后来计算功能点,有助于我们根据实际的生产时间来计算单位内部的生产效率等度量指标。典型公式:生产效率=项目总生产人力/项目功能点数
重要的是,由于功能点分析是一个从用户角度出发的,与实现细节无关的评估方法,所以利用功能点计算出来相关数据(诸如生产效率、缺陷率等),有助于增强企业间生产能力比较的可信度,也有助于在行业内形成有比较基准的数据,作为企业运营过程中的参考。
后记
以上仅仅对IFPUG的FPA的相关概念进行了简单的介绍。目的是起到一个引导的作用,让读者了解IFPUG的FPA的基本内容。真正要实践FPA还需要读者仔细去研习CPM(Counting Practices Manual),当前最新版本为4.2.1。
  • 收藏
  • 评论
  • 举报
提问和评论都可以,用心的回复会被更多人看到 评论
发布评论
相关文章