早段时间看到一篇Early Function Point Counting,觉得挺好就将他翻译过来共享给大家。
有需要的同事可以向我索要我整理的英文或中文版的Word版本.
NESMA (译者注:世界第二大功能点组织)承认的计算功能点的方法有如下三种:
ü 详细(Detailed)功能点计算方法
ü 估计(Estimated)功能点计算方法
ü 抽象(Indicative)功能点技术方法
“估计(Estimated)功能点计算方法”和“抽象(Indicative)功能点技术方法”由NESAM开发的,适合于应用在软件开发生命周期早期的功能点计算方法。NESMA的“抽象(Indicative)功能点技术方法”世界著名,且被命名为“荷兰人的方法”。
本文讨论这几种功能点计算方法的适用性,研究结果和每种方法的精确度。
详细(Detailed)功能点计算方法
详细(Detailed)功能点计算方法就是我们所熟知的功能点计算方法(译者注:由IBM开发工程师首先开发出来,且从1986年开始由国际功能点用户组织IFPUG维护和提供培训和认证。培训要6k/人), 执行过程如下:
ü 决定功能点类别 (类别有:ILF, EIF, EI, EO, EQ)
ü 确定每个功能的复杂度 (复杂度分为:Low, Average, High)(译者注:这个过程比较复杂,繁琐,耗时)
ü 计算总功能点数量
估计(Estimated)功能点计算方法
估计(Estimated)功能点计算方法执行过程如下:
ü 决定功能点类别 (类别有:ILF, EIF, EI, EO, EQ)
ü 确定数据类型功能(ILF, EIF)的复杂度为Low, 交互类型功能(EI, EO, EQ)的复杂度为Average
ü 计算中的功能点数量
很明显,“详细(Detailed)功能点计算方法”与“估计(Estimated)功能点计算方法”的区别是:后者省去了确定每个功能点的复杂度的复杂繁琐过程,而是将数据类型功能的复杂度默认为Low,交互类型功能(EI, EO, EQ)的复杂度默认为Average。
抽象(Indicative)功能点计算方法
抽象(Indicative)功能点计算方法的执行过程如下:
ü 决定数据类型的功能点(ILFs and EIFs)数量
ü 利用下公式计算总功能点数量
抽象(Indicative)功能点数量= 35 x ILFs + 15 x EIFs
这个估计只是基于当前的逻辑文件 (ILFs and EIFs)
抽象(Indicative)功能点技术方法基于:假设每个ILF有三个EIs(如增、删、改),2个EOs(如2个报表),1个EQ(如查询功能); 每个EIF有1个EO和一个EQ.(译者注:只有满足上条件用参数35,15计算出来的结果的精度才高,否则要参考前面两种方法的复杂度与功能点数量关系适当调整这两个参数)
三种计算方法示例
这节通过一个简单的小案例来说明这三种功能点计算方法。刚开始用户只说个一句话的需求:我们的系统需要维护客户在产品数据,且要查看到供应商数据。
如果你需要越精确的功能点计算结果,则需要越详细的用户需求。我们是按照用户需求由简到详细的过程来展现三种不同的功能点计算方法,也更好的体现三者的区别。
抽象功能点(Indicative)计算方法
用户需求:
ü 系统需要维护客户在产品数据,且要查看到供应商数据。
这个粗糙的需求已经足够进行我们的抽象(Indicative)功能点计算:
ü ILF: 客户、产品
ü EIF: 供应商
|
数据类型的功能
|
功能点类型
|
功能点(用计算公式中的默认值)
|
|
客户
|
ILF
|
35
|
|
产品
|
ILF
|
35
|
|
供应
|
EIF
|
15
|
|
抽象(Indicative)功能点总数
|
85
|
估计(Estimated)功能点计算方法
要执行估计(Estimated)功能点计算,我们必须知道交互功能,所以更具体的用户需求是必须的:
用户需求:
ü 用户要求系统能增加,修改,删除客户数据;需要查询客户数据;并且要4个不同的具有一定计算的客户报表
ü 用户要求系统能增加,修改,删除产品数据;需要查询产品数据;并且要1个具有一定计算的产品报表
ü 用户要求系统能查询供应商数据;并且需要1个有汇总功能的供应商报表
这个相当详细的用户需求显示了真实的交互功能点的数量,所以我们能够进行估计(Estimated)功能点计算。
|
数据或交互功能点
|
功能点类型
|
复杂度
(默认值)
|
功能点数量(确定的历史数据)
|
|
客户
|
ILF
|
Low
|
7
|
|
产品
|
ILF
|
Low
|
7
|
|
供应商
|
EIF
|
Low
|
5
|
|
客户Add
|
EI
|
Average
|
4
|
|
客户Change
|
EI
|
Average
|
4
|
|
客户Delete
|
EI
|
Average
|
4
|
|
客户查询
|
EQ
|
Average
|
4
|
|
客户报表 1
|
EO
|
Average
|
5
|
|
客户报表2
|
EO
|
Average
|
5
|
|
客户报表3
|
EO
|
Average
|
5
|
|
客户报表4
|
EO
|
Average
|
5
|
|
产品Add
|
EI
|
Average
|
4
|
|
产品Change
|
EI
|
Average
|
4
|
|
产品Delete
|
EI
|
Average
|
4
|
|
产品查询
|
EQ
|
Average
|
4
|
|
产品报表
|
EO
|
Average
|
5
|
|
供应商查询
|
EQ
|
Average
|
4
|
|
供应商报表
|
EO
|
Average
|
5
|
|
估计(Estimated)功能点总数
|
85
|
详细(Detailed)功能点计算方法
要执行详细(Detailed)功能点计算,我们不仅要各种类别(EI, EO, EQ, ILF, EIF)的功能点数量,我们还必须确定每个功能点的复杂度 (Low, Average, High)。
在 FPA(Function Point Analysis)中,决定功能点的复杂度是基于DETs,RETs的数量和被引用的功能数量。
(译者注:一般EI, EO, EQ的复杂度决定于被更新和引用的功能和DET数量,而ILF和EIF的复杂度决定于DET和RET的数量)
下面就是为什么用户需求需要分析得更加的详细:哪些数据元素(DETs)和逻辑文件(文件类型被引用的,也就是ILF, EIF )被交互功能使用(EI, EO, EQ),那些逻辑数据组(也叫记录元素) (RETs)和数据元素 (DETs)被数据类型的功能(ILF, EIF)包含。
下面是详细的分析用户需求得出的功能点数量结果:
|
数据或交互功能点
|
功能点类型
|
复杂度
(默认值)
|
功能点数量(确定的历史数据)
|
|
客户
|
ILF
|
Average
|
10
|
|
产品
|
ILF
|
Low
|
7
|
|
供应商
|
EIF
|
Low
|
5
|
|
客户Add
|
EI
|
High
|
6
|
|
客户Change
|
EI
|
Average
|
4
|
|
客户Delete
|
EI
|
Low
|
3
|
|
客户查询
|
EQ
|
Low
|
3
|
|
客户报表1
|
EO
|
Low
|
4
|
|
客户报表2
|
EO
|
Average
|
5
|
|
客户报表3
|
EO
|
Low
|
4
|
|
客户报表4
|
EO
|
High
|
7
|
|
产品Add
|
EI
|
Average
|
4
|
|
产品Change
|
EI
|
Low
|
3
|
|
产品Delete
|
EI
|
Low
|
3
|
|
产品查询
|
EQ
|
Average
|
4
|
|
产品报表
|
EO
|
Average
|
5
|
|
供应商查询
|
EQ
|
Low
|
3
|
|
供应商报表
|
EO
|
Average
|
5
|
|
详细(Detailed)功能点总数
|
85
|
结论
在这个特别的案例中,所有三种方法的结果都是85个功能点。通常的,这些结果不会严格一样的,但是都会相当接近的。接着,在这篇文章后面你将看到估计(Estimated )功能点计算和抽象(Indicative)功能点计算方法精确度的研究结果。
什么时候使该用哪一种功能点计算方法
详细(Detailed)功能点方法计算的数字当然要比估计(Estimated)功能点计算方法计算的数字或抽象(Indicative)功能点计算方法计算 的数字要精确得多。但是详细(Detailed)功能点方法也将要花费更多的时间,需要更详细的需求。具体是使用哪种功能点计算方法取决于我们的项目经理和我们所处在的系统生命周期阶段。
在很多系统中,我们应用抽象(Indicative)功能点计算方法得出了今人惊讶的好的估计。经常的,比较起来使用抽象(Indicative)功能点计算方法更容易,因为数据模型(译者注:数据类型的功能点,也就是ILF,ELF)是可得到的,且可以毫不费力的得到。
基于 100+ 个项目的研究结果
NESMA使用大约100个已开发且实施的系统做了一些关于估计和抽象功能点计算方法精确度的研究。NESMA对这些实施的系统同时严格的利用三种不同的计算方法进行了计算。结构是下面展示的两张图:
ü 估计(Estimated )功能点计算方法得出的规模与详细(Detailed )功能点计算方法得出的规模对比

ü 抽象(Indicative)功能点计算方法得出的规模与详细(Detailed )功能点计算方法得出的规模对比

我们看见一个很好的相互关系(直线)在两个图片中。然而,我们在 抽象(Indicative)计算中,我们看到相当大的偏离(多达大约50%) 在一些案例中。这就是为什么我们要小心使用抽象(Indicative)计算方法的原因。这种方法的优点是我们可以在很短的时间内很容易的得到一个粗糙的系统规模估计。
在一个系统中拥有更多的 (或者更少) 的输出,我们可能需要去修改乘数35和15;但是计算的方法和公式我们仍然可以使用。
估计(Estimated )功能点计算方法和详细(Detailed) 功能点计算方法的结果则十分接近。