功能点是基于软件信息领域的可计算的(直接的)测量及对其复杂性的评估而导出的。功能计算如图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)系统在一个已有的、很实用的操作环境中运行吗? (6)系统需要联机数据项吗?
(7)联机数据项是否需要在多个屏幕或多个操作之间切换以完成输入? (8)需要联机更新主文件吗?
(9)输入、输出、文件或查询很复杂吗? (10)内部处理复杂吗?
(11)代码需要被设计成可复用的吗? (12)设计中需要包括转换及安装吗?
(13)系统的设计支持不同组织的多次安装吗? (14)应用的设计方便用户修改和使用吗?
一旦计箕出功能点,则可以使用它以规范软件生产率、质量及其他属性的测量和估算,也可以类似于LOC的方法来对每个功能点的错误数、每个功能点的缺陷数、每个功能点的成本、每个功能点的文档页数、每人月完成的功能点数进行估算。
功能点也可以按照一定的条件转换为代码行(LOC),如表1就是一个转换表,这个表是根据业界的经验研究得出针对各种语言的转换率。 表1 功能点到代码行的转换表
语言 代码行/FP 汇编语言 320 C C++ VB128 64 32 30 12 JAVA SQL [编辑] 参考文献