功能点(Function Point, FP)分析是一种用于估计软件项目的规模和复杂性的方法,它最初由Allan J. Albrecht于1979年在IBM开发,并由国际功能点用户组(IFPUG)进一步修改。FP分析不仅用于估算 1软件项目及其测试的功能性或功能大小,还可以用于产品的测试估算。功能大小以功能点为单位进行衡量,这是衡量软件应用程序的标准测量单位。
1 功能点分析的目标
功能点分析的基本目的是根据客户需求、顾客及利益相关者的请求,测量并提供软件应用的功能大小。此外,它还用于在整个项目周期中一致地测量软件项目的开发和维护,无论使用何种工具和技术 2。
2 关于功能点的关键点
- 功能点的计算:通过计数应用程序中使用的函数数量和类型来确定功能点。应用程序中的各种功能可以根据以下五种类型分类:
测量参数 | 例子 |
---|---|
外部输入(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;
功能点表征系统的复杂性:FP可以用来描述项目的预计时间和人力需求。
项目依赖于软件功能:开发项目所需的精力取决于软件的具体功能。
编程语言无关:FP分析不依赖特定的编程语言。
适用于数据处理系统和信息系统:FP方法广泛应用于数据处理系统、业务系统如信息系统等。
信息域特征:上述五个参数也被称为信息域特征。
分配权重:每个参数都分配了一些实验确定的权重,如下表所示:
测量参数 | 低 | 平均 | 高 |
---|---|---|---|
外部输入(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的软件度量,许多其他指标也可以被计算出来,例如错误率、成本、缺陷密度、文档页数等。
LOCs 和 FPs 的互换:可以通过“反向推导”过程(backfiring)从FP估算应用程序的源代码行数(LOCs),反之亦然。例如,1 FP大约等于100行COBOL代码。
FP 度量主要用于 MIS 软件:功能点度量通常用于衡量管理信息系统(MIS)软件的规模。
考虑通用系统特性调整 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) |