功能点估算法
出自 MBA智库百科(https://wiki.mbalib.com/)
目录 |
面向功能的软件度量使用软件的功能作为测量的规范化值。因为“功能”不能直接测量,所以必须通过其他直接测量来导出,用得最多的是功能点技术。功能点(Function Point,FP)技术是Albrecht在1979年首先提出来的一种比较流行的估算方法,它将估算的关注点集中于程序的“功能性”和“实用性”上,而不是LOC的计数上。可以说,功能点估算法是指一种基于软件功能的度量方法。与代码行估算法不同的是,功能点估算法是对软件和软件开发过程的间接度量。
功能点是基于软件信息领域的可计算的(直接的)测量及对其复杂性的评估而导出的。功能计算如图1所示。针对每个功能确定了外部输出数、外部输入数、文件数、用户查询数和外部接口数等五个信息域特征,每个信息域特征值按下列方式定义。
1)用户输出数
计算每个用户输出,外部输出是为用户提供的面向应用的输出信息,这些信息通常包括报告、屏幕信息、错误信息等方面的内容。每一个外部输出数据都要进行计数,获得外部输出数。
2)用户输人数
计算每个用户输入,它们向软件提供面向应用的数据。外部输入是每个用户输入的面向不同应用的输入数据,输入应该与查询区分开来,分别计算。
3)文件数
计算每个逻辑的主文件。逻辑文件是软件修改或保存的逻辑记录集合,它可以是一个大的数据库的一部分,也可以是一个独立的文件。
4)用户查询数
一个查询被定义为一次联机输入,它引发软件以联机方式产生某种即时响应,是软件以联机输出方式产生的独立查询信息。每一个不同的查询都要计算。
5)外部接口数
外部接口是所有用来将信息与其他系统进行交互或共享的端口(如磁带或磁盘上的数据文件),利用这些接口可以将信息从一个系统传送到另一个系统。
收集到以上五个信息域特征值后,就将每个计数与一个复杂度值(加权因子)关联上。采用功能点的组织建立了一个标准,以确定某个特定条目是简单的、平均的还是复杂的。不过复杂的确定多少有些主观。
每个功能的总计数值可以作为这个功能的功能点使用,以估算该功能的成本和工作量。整个项目的估算还应考虑一些全局性的因素,并不是所以功能总计数值的简单相加。整个项目的功能点计算采用下面的公式:
总FP=∑每个功能的总计数值×(0.65+0.01×∑Fi)
其中,Fi(i=1,2,…,14)是基于对图2中问题的回答而得到的“复杂度调整值(0~5)”。等式中的常数是根据经验确定的。
Fi的取值在0~5之间:
Fi:
(1)系统需要可靠的备份和复原吗?
(2)需要数据通信吗?
(3)有分布处理功能吗?
(4)性能很关键吗?
(5)系统在一个已有的、很实用的操作环境中运行吗?
(7)联机数据项是否需要在多个屏幕或多个操作之间切换以完成输入?
(8)需要联机更新主文件吗?
(9)输入、输出、文件或查询很复杂吗?
(10)内部处理复杂吗?
(11)代码需要被设计成可复用的吗?
(12)设计中需要包括转换及安装吗?
(13)系统的设计支持不同组织的多次安装吗?
(14)应用的设计方便用户修改和使用吗?
一旦计箕出功能点,则可以使用它以规范软件生产率、质量及其他属性的测量和估算,也可以类似于LOC的方法来对每个功能点的错误数、每个功能点的缺陷数、每个功能点的成本、每个功能点的文档页数、每人月完成的功能点数进行估算。
功能点也可以按照一定的条件转换为代码行(LOC),如表1就是一个转换表,这个表是根据业界的经验研究得出针对各种语言的转换率。
表1 功能点到代码行的转换表
语言 | 代码行/FP |
汇编语言 | 320 |
C | 128 |
C++ | 64 |
VB | 32 |
JAVA | 30 |
SQL | 12 |
- 李彤,王炜,郁湧编著,软件工程概论,科学出版社,2012.02,第249页