APP下载

一种基于模糊理论的功能点分析方法

2021-03-17王斌

微型电脑应用 2021年2期
关键词:点数复杂度评判

王斌

(中国人民解放军91404部队42分队, 河北 秦皇岛 066001)

0 引言

软件规模估算是项目早期软件工作量及成本度量的基础。正确估算软件规模是软件成本度量工作和软件造价分析的重要前提。目前常见的软件规模估算方法包括代码行法、对象点法、故事点法、用例点法和功能点分析法[1]。目前国内研究和应用较多的是功能点分析法。该方法基于用户视角,从软件需求或其他等效文档出发,从功能角度衡量软件规模,与开发语言无关,可在项目早期进行估算。

虽然功能点分析法已经得到了广泛的应用,但是学术界一直对其存在一定的争议。尤其是组件复杂度确定方法存在一定问题,经常导致项目估算结果与实际项目规模存在较大差异。其他学者在以往的研究中给出了一系列解决方法。黄治凯等[2]提出了一种基于遗传-蚁群算法的IFPUG的复杂度权值修正方法合理修正了不同因素的权值,但未考虑多因素对复杂度的影响,而且蚁群算法迭代次数和收敛性之间还存在一些最优化问题[3];陈庆章等[4]提出的基于模糊插值的功能点分析法解决了复杂度等级不连续的问题,但仅考虑了一个输入因素,未考虑多个因素对复杂度的综合影响;付雅芳等[5]提出的改进FPA方法也是基于模糊理论的,但仅考虑了模糊隶属函数和解模糊化问题,未考虑输入因素的权重指标;计春雷等[6]的研究直接修正了复杂度矩阵,而这与经典估算模型相悖。其他学者的相关研究[7-9]亦未完美地解决这个问题。

本研究对常用功能点分析方法中的组件复杂度确定方法存在的问题进行分析,综合考虑组件复杂度等级确定的主观性和多因素等特点,采用模糊综合评判法,综合考虑多因素输入变量、权重分配等因素,对组件复杂度进行多指标综合评价,以解决复杂度划分不连续、不准确的问题。在评判结果生成时,对模糊综合评判法中的最大隶属度原则做了一定改进,使用线性加权生成最终的转换功能点数。为验证效果,将本方法应用于实际软件开发项目中,并将估算结果与主流方法和项目实际规模对比,考察方法的有效性。

1 功能点分析法和IFPUG方法简介

功能点分析法在20世纪70年代由IBM工程师Albrecht提出[10],后被国际功能点用户协会(International Function Point Users’ Group, IFPUG)所继承,经过40余年的演化与发展,逐渐形成了以IFPUG为主线,NESMA(NetherlandsSoftwareMetricsAssociation)、COSMIC(COmmonSoftware Measurement International Consortium)和Mark II这3个主要方法和众多的分支方法[11-13]。发展历程,如图1所示。

图1 功能点分析法演化历程

IFPUG方法从用户对软件功能需求实现的角度出发[14],以“功能点(Function Point, FP)”为计数单位,分别计算数据功能和事务功能的点数,用以描述软件规模。其中数据功能对最终用户不可见,包括内部逻辑文件(Internal Logical Files, ILF)和外部接口文件(External Interface Files, EIF);事务功能对最终用户可见,包括外部输入(External Inputs, EI)、外部输出(External Outputs, EO)和外部查询(External Query,EQ)。通过这五种组件对应的不同估算类型乘以相应的功能点数,再用调整因子修正,最终得到软件功能规模[15],如图2所示。

图2 IFPUG估算流程

2 复杂度确定方法存在的问题

在IFPUG指导手册中,功能点数量是按照各组件的复杂度转换而来。组件复杂度分为三个级别:Low、Medium、High,如表1所示。

表1 ILF复杂度矩阵

表1给出了ILF的复杂度判断表[15],复杂度与功能点数的对应关系[15],如表2所示。

表2 五类组件按复杂度与功能点数量的对应关系

从表1和表2中可以看出,ILF和EIF组件复杂度与记录元素数据类型(RecordElementTypes, RET)和数据元素数据类型(DataElementTypes, DET)两个因素有关,且取值不连续。假设某个ILF的RET为5个,DET为50个,此时其复杂度为Medium,若DET增至51个,则其复杂度为High。在DET仅相差1的情况下,功能点数量的偏差则会有5个之多。显然这种判断方法得到的结果存在断层,会造成功能点数偏差较大,无法准确描述被评估软件的功能规模。类似地,EI、EO和EQ组件的复杂度类型使用引用文件类型(File Type Referenced, FTR)和DET描述,亦存在此问题。

3 模糊理论和模糊综合评判法

3.1 模糊理论

模糊理论是以模糊集合为基础,以处理概念模糊不确定的事物为研究对象。对于影响因素多且复杂,又难以得到确切结果的情况,模糊理论是一种有力的工具[16]。

3.2 模糊综合评判法

模糊综合评判法[16]的基本思想是利用模糊线性变换原理和最大隶属度准则,考虑与被评价事物相关的各个因素,对其做出合理的综合评价。其核心的要素有以下三种。

(1) 因素集:U={u1,u2,…,un},设与被评判对象相关的因素有n个;

(2) 评语集:V={v1,v2,…,vm},设所有可能出现的评语有m个;

(3) 权重集:A={a1,a2,…,an},其中ai为第i个因ui对应的权重(1≤i≤n),它表示为第i个功能因素对整个评价对象的影响程度,它们满足归一化条件,即a1+a2+…+an=1。

模糊综合评判法的基本步骤,如图3所示。

图3 模糊综合评判法的基本步骤

4 基于模糊综合评判的功能点分析法

复杂度矩阵中每个组件对应的Low、Medium、High的级别既与RET有关,又与DET有关,显然,应考虑使用多因素模糊综合评判来判断其复杂度等级,具体步骤如下。

4.1 确定因素集、评语集、权重向量

① 因素集确定:显然,根据组件类型不同,因素集由RET和DET构成,或者由FTR和DET构成,如式(1)。

UILF/EIF={u1,u2}={RET,DET}

(1)

或者式(2)。

UEI/EO/EQ={u1,u2}={FTR,DET}

(2)

② 评语集确定:评语集为Low、Medium、High,如式(3)。

V={v1,v2,v3}={Low,Medium,High}

(3)

③ 采取适当的方法确定权重集,如式(4)。

A={a1,a2}

(4)

4.2 单因素评价

根据被估算软件组件的RETs和DETs数量,将组件固定属于某个等级改为采用模糊数表示,可以避免人为判断的主观性,得到单因素评价结果。

(5)

(6)

(7)

(8)

4.3 多指标综合评价

在得到模糊矩阵后,就可以利用权重向量进行多指标综合评价并得到结果向量,评价模型,如式(9)。

B=A∘R=(b1,b2,b3)

(9)

式中,B表示评价结果向量;运算符∘表示某种模糊合成算子,可视情选择M(∨,∧)、M(×,∨)、M(×,⊕)、M(∧,⊕)等。

4.4 去模糊处理并计算转换功能点数

由于模糊综合评判法中的最大隶属度准则存在一定的问题[17],故本次研究中直接根据得到的权重向量B计算相应组件的功能点数,如式(10)。

(10)

式中,FPt表示转换功能点数;si表示类型t的组件对应的功能点数量向量。

5 实践应用及验证

以某型信息管理系统为例,验证本方法的有效性。该系统使用Microsoft Visual C++ 2010开发,数据库采用Microsoft SQL Server 2008,运行于Windows 7 SP1 32位系统上。受篇幅限制,文中仅给出了主要ILF组件信息。该系统的主要ILF组件以及对应的RET和DET,如表3所示。

表3 系统的主要ILF组件

5.1 应用方法

以“专题新闻”ILF组件为例,使用本文所提方法确定其转换功能点数。

步骤1:确定因素集、评语集、权重向量,如式(11)、式(12)。

U={u1,u2}={RET,DET}

(11)

V={v1,v2,v3}={Low,Medium,High}

(12)

根据实践经验和专家意见,确定权重集如下。

A={a1,a2}={0.4,0.6}

步骤2:确定模糊数取值,进行单因素评价得到模糊矩阵。

此ILF组件包含3个RET和45个DET,显然

根据式(6)、式(7)、式(8),可算得

R1=(0.225,0.775,0)

R2=(0,0.875,0.125)

式中,R1代表含有3个RETs的ILF组件有22.5%属于复杂度Low,有77.5%属于复杂度Medium,有0%属于复杂度High。

将单因素评价结果向量拼接,可得到模糊矩阵,如式(13)。

(13)

步骤3:结合权重向量进行多指标综合评价。

根据式(9),选择合成算子M(×,⊕),得到评价结果向量,如式(14)。

(0.09, 0.835, 0.075)

(14)

步骤4:去模糊处理得到转换功能点数。

将以上数据代入式(10),如式(15)。

(15)

因此,包含3个RET和45个DET的“专题新闻”ILF组件转换后的功能点数为10.105FP。

5.2 结果对比

为进行结果的对比研究,应用本研究所提方法进行功能点估算,同时使用IFPUG方法进行功能点估算;在项目完成第一阶段开发后,使用代码统计工具CLOC统计项目中实际开发的代码行数,以验证估算结果的准确性,如表4所示。

表4 功能点数与实际代码行数

可以看出,本研究所提方法估算出的功能点数更精确,且消除了传统方法中复杂度划分缺陷导致的功能点数断层,随着输入变化,功能点数的增减呈线性变化。

实际代码行数与功能点数对比,如图4所示。

图4 功能点数与代码行数对照

从数据中可以看出,本方法对ILF组件的功能点数估算准确率提升在6%~13%之间。

从估算结果、实际开发代码行数和变化趋势来看,本研究所提方法对软件规模的估算结果能够较好地反应项目实际开发工作量的大小,优于IFPUG方法。

6 总结

本文首先介绍了常用的功能点分析法及其发展历程,然后针对IFPUG方法中组件复杂度确定中存在的不连续性问题,采用基于模糊理论的数学方法,将传统的复杂度判定矩阵转换为基于模糊理论的隶属度函数,利用多因素模糊综合评判法进行基于RET和DET的多指标综合评价,以此为基础去模糊化,得到不同复杂度的组件与功能点数量的转换关系,消除了复杂度等级划分不连续带来的负面影响,从而使得到的转换功能点数更加精确,较好解决了IFPUG方法中复杂度划分不连续,不同输入得到相同结果的问题。从后期的工程实践验证情况来看,本方法得到的结果也更加贴合功能点数转化率和软件工程实践。

在模糊综合评判中,不同的权重值会导致评判结果的变化,下一步研究中将研究适合的方法确定权重集,并进行合理性检验;对于模糊综合评判结果向量的有效性研究也是未来研究需重点关注的问题。

猜你喜欢

点数复杂度评判
不要用街头小吃来评判北京
基于学习的鲁棒自适应评判控制研究进展
一种低复杂度的惯性/GNSS矢量深组合方法
看不到的总点数
求图上广探树的时间复杂度
画点数
某雷达导51 头中心控制软件圈复杂度分析与改进
多核并行的大点数FFT、IFFT设计
出口技术复杂度研究回顾与评述
评判改革自有标准