软件成本度量国家标准实施指南:理论、方法与实践
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

2.1 功能点分析方法

功能点分析法是目前最为常用的软件规模测量方法,它关注的重点不是软件的实现方式,而是根据软件用户所要求的功能来测量软件规模,该方法也是软件开发成本和测试成本度量标准中所采用的规模测量方法。功能点分析法在软件行业中的实践应用超过30年,并逐步形成了IFPUG、MkⅡ、COSMIC、NESMA和FiSMA 5种方法和相应的国际标准:

(1)ISO/IEC 20926:2009《软件与系统工程软件测量IFPUG功能规模测量方法2009》。

(2)ISO/IEC 20968:2002《软件工程MKⅡ功能点分析 计算实践手册》。

(3)ISO/IEC 19761:2011《软件工程COSMIC:功能规模测量方法》。

(4)ISO/IEC 24570:2018《软件工程NESMA功能规模测量方法 功能点分析应用的定义和计数指南》。

(5)ISO/IEC 29881:2010《信息技术 软件与系统工程FiSMA 1.1功能规模测量方法》。

IFPUG标准由国际功能点用户组提出,是国际上应用最为广泛的软件功能规模测量标准,其余4个标准是在IFPUG标准基础上发展而成的。MkⅡ标准由英国软件度量协会(United Kingdom Software Metrics Association,UKSMA)提出,着重帮助用户提高测量过程效率,降低软件开发、更改、维护的成本,目前主要在英国使用。COSMIC标准是由通用软件度量国际联盟(Common Software Measurement International Consortium)与全面功能点组织(Full Function Point)共同合作提出的,作为新一代的功能点规模测量方法,它通过计算系统中4种数据移动类型(输入、输出、读、写)的数量来测量软件规模,计算规则简单直接,不需要调整因子,易于掌握。NESMA标准由荷兰软件度量协会(NEtherland Software Measurement Association)于1990年提出,NESMA方法在基本兼容IFPUG方法计数规则的同时,很好地体现了软件估算应逐步求精的思想并可有效地运用于早期估算,因而在欧美及中国都有广泛的应用。FiSMA标准由芬兰软件度量协会(Finnish Software Measurement Association)提出,目前主要在芬兰使用。FiSMA方法虽然也借鉴了IFPUG方法的设计思想,但是两者之间的差异是很明显的,该方法突出了“服务”概念,而不再强调“功能”。

2.1.1 IFPUG方法

1979年,IBM的Albrecht A.J发表了Measuring Application Development Productivity一文,这是公认的所有功能点分析方法的文献源头。

1988年,国际功能点用户组发布了Function Point Counting Practices Manual(《功能点计数实践手册》)2.0版本。在之后的几十年里,该实践手册的内容不断更新和完善。2003年10月,国际标准化组织基于《国际功能点协会(IFPUG)4.1版本未调整功能点计算手册》,发布了ISO/IEC 20926:2003。该标准提供了一种清楚详细的计算功能点的方法,并且确保计算结果的一致性;同时提供了工作指南,以及一个可以支持自动化测试的框架。

IFPUG方法从用户对应用系统功能需求出发,对应用系统的两类功能需求进行分析,即对最终用户可见的事务功能(Transaction Function)和对最终用户不可见的数据功能(Data Function)。事务功能进一步分为3种子类型:外部输入(External Input,EI)、外部查询(External inQuiry,EQ)和外部输出(External Output,EO);数据功能分为内部逻辑文件(Internal Logic File,ILF)和外部接口文件(External Interface File,EIF)。内部逻辑文件是指可由用户确认的、在应用程序内部进行维护的、逻辑上相关的数据块或控制信息,外部接口文件是指可由用户确认的、由被度量的应用程序引用但在其他应用程序内部进行维护的、逻辑上相关的数据块或控制信息,外部输入是指应用程序对来自其边界以外的数据或控制信息的基本处理,外部输出是指应用程序向其边界之外提供数据或控制信息的基本处理,这种处理逻辑中可能包含数学计算或衍生数据等。外部查询是指应用程序向其边界之外提供数据或控制信息的基本处理,与外部输出不同的是,处理逻辑中既不可以包含数学计算也不产生衍生数据,处理过程中不可以维护内部逻辑文件,也不可以改变系统行为。

IFPUG方法规定的5种功能类型如图2-1所示,IFPUG方法的功能点计数过程如图2-2所示。在IFPUG的功能点实践手册中,按照组件的复杂性程度分别对某个组件按若干功能点进行计算。复杂性程度分为低、中、高3级别。对数据功能来说,复杂性程度取决于两个因素:一是看逻辑文件所包含的数据元素类型个数(Data Element Types,DET),二是看用户可以识别的记录元素类型的个数(Record Element Types,RET)。对于事务功能,复杂性程度取决于交易时所引用的所有逻辑文件的个数(File Type Referenced,FTR),以及交易处理过程中输入/输出所涉及的数据元素类型个数。

IFPUG中规定的各功能类型的复杂性程度确定方法分别见表2-1~表2-3。

图2-1 IFPUG方法规定的5种功能类型

图2-2 IFPUG方法的功能点计数过程

表2-1 内部逻辑文件(ILF)和外部接口文件(EIF)的复杂性程度级别

表2-2 外部输入(EI)的复杂性程度级别

表2-3 外部输出(EO)和外部查询(EQ)的复杂性程度级别

5类功能按复杂性程度级别与功能点数之间的对应关系见表2-4。

表2-4 5类功能按复杂性程度级别与功能点数之间的对应关系

确定了每个组件的复杂性程度级别,然后按照IFPUG给出的计算方法,可以计算出该系统的未调整功能点数(UFP),即对这5个功能分量的加权累加:

为了有效反映非功能规模对规模估算的影响,IFPUG方法使用14个通用系统特征修正最终估算结果,包括数据通信、分布式数据处理、性能、重度配置、处理速率、在线数据输入、最终用户使用效率、在线升级、复杂处理、可重用性、易安装性、易操作性、多场所、支持变更。根据上述14个通用系统特征对系统影响程度的不同分别赋予0~5中的某个权值,然后按以下公式对应用系统的功能点进行调整,最终得到被度量系统的功能点数:

式中,UFP为未调整的功能点数,VAF为值的调整因子。

式中,Ai的取值范围为0~5,因此VAF的取值范围为0.65~1.35。

在适用范围方面,IFPUG方法适用于所有项目,尤其适用于所有类型的软件开发项目和软件维护项目。

2.1.2 MkⅡ方法

1987年,Charles Symons针对IFPUG方法的一些缺点,正式提出了MkⅡ方法,并在1991年出版的《软件的规模和评估:MkⅡ功能点分析》中首次清晰地定义了MkⅡ方法。之后,国际标准化组织正式发布了ISO/IEC 20968:2002,该标准定义了MkⅡ方法中的功能规模测量术语和活动过程。

MkⅡ方法将整个应用软件描述成一系列逻辑事务的集合,与IFPUG方法相比,MkⅡ方法最大的差异是减少了逻辑文件识别的主观性。MkⅡ方法的操作步骤如图2-3所示。

图2-3 MkⅡ方法的操作步骤

MkⅡ方法得到的功能点数是指度量输入数据元素类型的数量(Ni)、引用数据实体类型的数量(Ne)以及输出数据元素类型的数量(No)的加权和,即

式中,∑表示对全部逻辑事务求和。

输入数据元素类型、引用的数据实体类型和输出数据元素类型的业界平均权重分别如下:

W i——输入数据元素类型权重,业界平均值是0.58;

W e——引用的数据实体类型权重,业界平均值是1.66;

W o——输出数据元素类型权重,业界平均值是0.26。

MkⅡ方法共规定了19个技术特征,这些特征会影响应用程序的技术复杂性程度的调整。每个计数特征的值为0~5。MkⅡ方法的前14个技术特征和IFPUG的一样,另外,还增加了5个关于技术复杂性程度调整的特性。

基于技术特征的得分来计算TCA,计算公式如下:

式中,

TDI——上述19个(或更多个)技术特征的得分之和;

C——业界平均值是0.005;

TCA的值为0.65~1.125(对19个技术特征的得分,分别取最小值或最大值)。

调整后的软件功能规模的计算公式如下:

式中,

AS——调整后的软件功能规模;

FS——软件功能规模;

TCA——技术复杂性程度调整系数。

在可操作性方面,MkⅡ方法只需进行简单的加权计算即可,操作方便,但是其对应的标准缺乏对基本元素的识别规则,在实际操作中容易出现歧义。

在适用性方面,MkⅡ方法适用于所有项目,尤其是管理信息系统(MIS)类项目。

2.1.3 COSMIC方法

不同于第一代功能点分析方法,1997年被提出的全功能点(Full Function Point,FFP)分析方法是一种针对实时系统和嵌入式系统的功能规模测量方法,后来被通用软件度量协会继承和发展,并且得到了广泛的推广和使用。软件度量国际协会(Common Software Measurement International Consortium,COSMIC)成立于1998年,并在1999年3月正式发布了COSMIC全功能点分析方法(以下简称COSMIC方法)的第一个版本,此后进行了多次修正。

COSMIC方法关注每个功能过程所引起的数据移动,数据移动是移动单个数据组的基本功能部件,数据组具有唯一、非空、无序、无冗余的数据属性,各个数据属性互相补充,分别描述了同一个关注对象某个方面的特征。这些数据移动计为功能点,软件的整体规模由这些功能点累加而成。数据移动的分类如下:进入、退出、读取、写入。进入是功能用户穿越被度量系统的边界传输数据到达系统内部,功能用户既包括人员也包括其他系统;退出是一个数据组从一个功能处理通过边界移动到达需要它的功能用户;读取是从持久性的存储设备读取数据;写入是存储数据到达持久性的存储设备。

COSMIC方法的度量过程分以下几个步骤:FSM目的和范围的确定、FUR的识别、软件层的识别、功能性用户的识别、软件边界的识别、功能过程的识别、数据组的识别、数据移动的识别、数据移动的分类、功能规模的计算、FUR变更的规模计算。

在COSMIC方法中,每一个有效的数据移动被看成一个COSMIC功能点(CFP)。在为每一个功能过程都找到其应有的所有数据移动之后,将它们累加在一起便是这个功能过程的规模,即

式中,

N e——功能规模过程中“进入”的数量;

E us——进入的单元规模(=1CFP);

N x——功能规模过程中“退出”的数量;

X us——退出的单元规模(=1CFP);

N r——功能规模过程中“读取”的数量;

R us——读的单元规模(=1CFP);

N w——功能规模过程中“写入”的数量;

W us——写的单元规模(=1CFP)。

在可操作性方面,COSMIC方法很好地借鉴了IFPUG方法中基于规则约束的实践经验,并且计算规则简单直接,无须调整因子。同时COSMIC方法引入了分层模型操作的概念,对度量复杂系统有一定的合理性,但度量结果会受技术实现方案的影响。

在适用性方面,COSMIC方法尤其适用于以数据处理为主的商务应用软件、实时系统及嵌入式系统。

2.1.4 NESMA方法

NESMA方法是1989年由荷兰软件度量协会(Netherlands Software Metrics Association,NESMA)提出的,最新版本为2018年发布的2.3版本。与之前的版本相比,2.3版本使用高级别功能点分析(High Level Function Point Analysis)代替估算功能点计数(Estimated Function Point Count);使用外部逻辑文件(External Logical File)代替外部接口文件(External Interface File)。

NESMA方法与IFPUG方法在发展过程中相互借鉴,与IFPUG方法完全兼容,需要识别的功能类型及其复杂性程度的确定与IFPUG方法相似,其估算过程分以下6个步骤:

(1)收集现有文档。

(2)确定软件用户。

(3)确定估算类型。

(4)识别功能类型并确定其复杂性程度。

(5)与用户验证估算结果并进行结果校正。

(6)与功能点分析专家验证估算结果。

NESMA方法在各功能类型的复杂性程度确定后,可用表2-5所列的复杂性程度矩阵来确定各组件的功能点值。

表2-5 NESMA方法复杂性程度矩阵

针对IFPUG方法分析过程比较复杂、计算工作量大且不适用于软件项目早期规模估算的缺陷,NESMA方法提供了3种类型的功能点分析方法:详细(Detailed)功能点分析方法、估算(Estimate)功能点分析方法及预估功能点分析方法。

详细功能点分析是常规的方法,步骤如下:

(1)确定每个功能的类型(ILF、EIF、EI、EO、EQ)。

(2)为每个功能测量复杂性程度级别(低、中、高)。

(3)计算整体未调整功能点。

估算功能点分析是指在确定每个功能部件(数据功能部件或事务功能部件)的复杂性程度时使用标准值:数据功能全部采用“低”级复杂性程度,事务功能全部采用“中”级复杂性程度计量。步骤如下:

(1)确定每个功能的功能类型(ILF、EIF、EI、EO、EQ)。

(2)为所有的数据功能选择“低”级复杂性程度,事务性功能选“中”级复杂性程度。

(3)计算整体未调整功能点。

该方法与详细功能点分析的唯一区别是不用为每个功能识别分配的复杂性程度,而是采用“默认值”。

预估功能点分析是指在度量时,只识别出软件需求的数据功能数量,根据经验公式得出软件规模。步骤如下:

(1)先确定数据功能的数量(ILF、EIF)。

(2)用公式35×NroILFs+15×NroEIFs直接计算未调整功能点的数量。

其中,NroILFs表示ILF的数量,NroEIFs表示EIF的数量。

估算功能点分析方法与预估功能点分析方法的计算结果,与详细功能点分析方法的计算结果有很强的相关性和一致性。在软件项目早期,选择预估功能点分析方法较好。

2.1.5 FiSMA方法

FiSMA方法是由芬兰软件测量协会(Finnish Software Measurement Association)组织研究并推广的方法,最新版本是2010年颁布的1.1版本,以下简称FiSMA 1.1方法。

FiSMA方法借鉴了IFPUG方法的设计思想,但两者差异明显,与其他功能点分析方法相比较,FiSMA方法突出了“服务”概念,不再强调“功能”概念。

FiSMA 1.1方法对7个不同的基础功能模块(Base Function Components,BFC)类进行了标识:

(1)最终用户互动导航和查询服务(q)。

(2)最终用户互动输入服务(i)。

(3)最终用户非互动输出服务(o)。

(4)提供给其他应用的接口服务(t)。

(5)接收其他应用的接口服务(f)。

(6)数据存储服务(d)。

(7)算法和操纵服务(a)。

FiSMA 1.1方法中每一个BFC可以再进一步被分解为多个BFC子类,共计28种子类。BFC类及其子类组件的关系即FiSMA的功能服务结构如图2-4所示,对每个BFC类,在后续章节做出解释。

图2-4 FiSMA的功能服务结构

FiSMA 1.1方法的测量过程由如下步骤组成:

(1)收集文档和软件开发产品来描述待开发或已开发完软件的功能性用户需求。

(2)确定FSM的范围。

(3)通过确定范围,决定使用FiSMA 1.1方法测量的功能性用户需求,只包括软件所执行工作和任务的用户需求。

(4)从上述两点的功能性用户需求中标识基本功能部件。主要分两部分:一是测量最终用户界面服务,二是测量间接服务。两部分中如果有一个在一段软件中不存在,那么这个测量过程只包括测量存在的服务。

(5)将BFC划分到合适的BFC子类。

(6)利用计算规则给每个BFC子类分配合适的数字值。

(7)计算功能规模。

(8)利用电子表格或其他软件工具可以清晰地标识FiSMA 1.1方法的计数详情,并记录到文档中。

在可操作性方面,FiSMA服务类型划分较为细致,更能反映出软件的特性,但也因其繁多的分类数量,降低了本方法的操作性。

在适用性方面,FiSMA适用于所有软件项目,但要求用户了解被度量应用的技术实现方式。

2.1.6 5种功能点分析方法比较

从前几节可以看出,IFPUG、NESMA、Mk II、COSMIC和FiSMA这5种功能点分析方法的计算规则各不相同,它们之间的区别见表2-6。

表2-6 功能点规模度量标准的区别

续表