功能点(FP)分析是一种用于估算软件项目规模和复杂性的方法。FP分析独立于编程语言,适用于数据处理系统和信息系统。最终FP值通过未调整功能点(UFP)与价值调整因子(VAF)计算得出,帮助评估项目时间和资源需求。

功能点(Function Point, FP)分析是一种用于估计软件项目的规模和复杂性的方法,它最初由Allan J. Albrecht于1979年在IBM开发,并由国际功能点用户组(IFPUG)进一步修改。FP分析不仅用于估算 1软件项目及其测试的功能性或功能大小,还可以用于产品的测试估算。功能大小以功能点为单位进行衡量,这是衡量软件应用程序的标准测量单位。

1 功能点分析的目标

功能点分析的基本目的是根据客户需求、顾客及利益相关者的请求,测量并提供软件应用的功能大小。此外,它还用于在整个项目周期中一致地测量软件项目的开发和维护,无论使用何种工具和技术 2

2 关于功能点的关键点

  1. 功能点的计算:通过计数应用程序中使用的函数数量和类型来确定功能点。应用程序中的各种功能可以根据以下五种类型分类:
测量参数 例子
外部输入(EI) 输入屏幕和表格
外部输出(EO) 输出屏幕和报告
外部查询(EQ) 提示和中断
内部文件(ILF) 数据库和目录
外部接口(EIF) 共享数据库和共享例程

所有这些参数随后将根据其复杂性单独评估。

graph TD;
    A[用户] --> B[输入];
    A --> C[查询];
    B --> D[系统];
    C --> D;
    D --> E[输出];
    D --> F[内部逻辑文件(ILF)];
    D --> G[外部接口(EIF)];
    F --> H[其他应用程序];
    G --> H;
    E --> A;
  1. 功能点表征系统的复杂性:FP可以用来描述项目的预计时间和人力需求。

  2. 项目依赖于软件功能:开发项目所需的精力取决于软件的具体功能。

  3. 编程语言无关:FP分析不依赖特定的编程语言。

  4. 适用于数据处理系统和信息系统:FP方法广泛应用于数据处理系统、业务系统如信息系统等。

  5. 信息域特征:上述五个参数也被称为信息域特征。

  6. 分配权重:每个参数都分配了一些实验确定的权重,如下表所示:

测量参数 平均
外部输入(EI) 7 10 15
外部输出(EO) 5 7 10
外部查询(EQ) 3 4 6
内部文件(ILF) 4 5 7
外部接口(EIF) 3 4 6

3 功能点的计算公式

功能复杂度与相应权重相乘后,所有值相加得出子系统的未调整功能点(Unadjusted Function Point, UFP)。FP最终计算公式如下:

FP = Count-total * [0.65 + 0.01 * ∑(fi)]
= Count-total * CAF

其中:

  • Count-total 是从上表获得的总和。
  • CAF = [0.65 + 0.01 *∑(fi)]
  • ∑(fi) 是所有14个问卷的回答总和,表示复杂性调整值/因子-CAF(i范围从1到14)

注意 ∑(fi) 的取值范围是0到70,即 0 <  = ∑(fi) <  = 70,因此 CAF 的范围是从0.65到1.35。

基于FP的软件度量,许多其他指标也可以被计算出来,例如错误率、成本、缺陷密度、文档页数等。

  1. LOCs 和 FPs 的互换:可以通过“反向推导”过程(backfiring)从FP估算应用程序的源代码行数(LOCs),反之亦然。例如,1 FP大约等于100行COBOL代码。

  2. FP 度量主要用于 MIS 软件:功能点度量通常用于衡量管理信息系统(MIS)软件的规模。

  3. 考虑通用系统特性调整 UFP:上述得到的功能点是未调整的功能点(UFP),这些UFP还需要根据一些额外的通用系统特性(General System Characteristics, GSC)进行调整。GSC包括一套14个特性,具体步骤如下:

  • 对这14个GSC中的每一个评估其影响力程度(Degree of Influence, DI),评分范围为0到5。
  • 如果某个GSC没有影响,则其权重设为0;如果有强烈影响,则权重设为5。
  • 所有14个GSC的得分总计决定总的影响力程度(Total Degree of Influence, TDI)。
  • 然后使用以下公式计算价值调整因子(Value Adjustment Factor, VAF): VAF = (TDI * 0.01) + 0.65
  • 记住VAF的值在0.65到1.35之间变化。
  • 最终FP计数为:FP = VAF * UFP

4 示例计算

假设我们有以下数据:

  • 用户输入数量 = 24
  • 用户输出数量 = 46
  • 查询数量 = 8
  • 文件数量 = 4
  • 外部接口数量 = 2
  • 努力 = 36.9人月
  • 技术文档页数 = 265页
  • 用户文档页数 = 122页
  • 成本 = 每月7744美元

以及各种处理复杂性因素分别为:4, 1, 0, 3, 3, 5, 4, 4, 3, 3, 2, 2, 4, 5。

4.1 解决方案

首先计算UFP:

测量参数 数量 权重 结果
外部输入(EI) 24 4 96
外部输出(EO) 46 4 184
外部查询(EQ) 8 6 48
内部文件(ILF) 4 10 40
外部接口(EIF) 2 5 10
总计 378

接着求解∑(fi)的值,即所有14个复杂性因素之和为43。

最后计算FP:

        FP = Count-total * [0.65 + 0.01 *∑(fi)]
           = 378 * [0.65 + 0.01 * 43]
           = 378 * [0.65 + 0.43]
           = 378 * 1.08 = 408

生产率 = {FP}/{工作量}=408/36.9 ~=11.1

总文档页数 = 技术文档 + 用户文档 = 265 + 122 = 387页

文档比率 = 文档页数 / FP = 387 / 408 = 0.94

每个功能的成本 = {成本}/{生产率}=7744/11.1 ~= 700美元

5 FP与LOC的区别

特性 FP LOC
基础 规格说明 类比
语言独立性
用户导向性 设计导向
可扩展性 可转换为LOC 可转换为FP (backfiring)