Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >软件开发工作量评估:基于FPA功能点分析法的深入解读

软件开发工作量评估:基于FPA功能点分析法的深入解读

原创
作者头像
Hopestarit
发布于 2021-12-02 08:06:15
发布于 2021-12-02 08:06:15
8.3K00
代码可运行
举报
运行总次数:0
代码可运行

功能点分析方法(Function Point Analysis,FPA)是一种可靠、有效的软件规模度量方法,功能点分析方法(FPA)作为一种理解和交流系统规模的手段,针对用户功能、性能的需求进行度量,具有可在项目早期进行度量,不依赖于项目的语言和技术等特点,在可用性和客观性方面都要优于传统的代码行方法(LOC)

软件工程项目建设中作为第三方的监理机构经常需要面临一些问题,如项目建设初期在用户需求不是很完善时,业主方需要了解项目的整体规模及合理项目进度安排;或者立项阶段需要了解项目的总体投资额;项目开发期间,需要第三方评估机构能够客观地对其完成的工作量进行审核与评估,确保其应得利益。

本文给出一种基于FPA方法与专家估算法相结合为主的多算法融合的方法,实现对软件工作量的评估,并在多个项目中进行实践,结果论证该方法既有可操作性又深受用户的认可,下面就由新星咨询为大家深入的对FPA功能点分析法进行解读!

一、模型及估算方法

1、模型要素说明

FPA是一种用来度量软件系统规模的方法。在FPA中,任何一个软件系统都被看作是由外部输入处理、外部输出处理、外部查询处理、内部逻辑文件和外部参照文件五种要素组成。估算系统中这五种要素的个数,并乘以适当的权值(权值即为每个要素的功能点数)就可以计算出系统的功能点数,进而估算出系统的规模。下图是在FPA中用到的信息系统模型。

FPA信息系统模型图
FPA信息系统模型图

在图中上述五种要素的含义如下:

  • 1、外部输入处理EI(External Input),是获取数据的过程,对终端用户的输入进行相关的处理。
  • 2、外部查询处理EQ(External Inquiry),针对终端用户的查询情况,输出相应的检索结果。
  • 3、外部输出处理EO(External Output),是反馈数据的过程,完成对票据、报表等的输出。
  • 4、内部逻辑文件ILF(Internal Logical File),在信息系统内部,为了完成相关功能使用的逻辑文件,包括顺序文件、数据库表、临时文件等。
  • 5、外部文件EIF(External Interface File),该系统和外部其他信息系统为交换数据而用的接口文件。

其中前三种要素属于处理,他们涵盖了终端用户和信息系统对象之间存在的所可能的交互内容,只要明确了该系统和终端用户的接口就可以正确估算上述三种处理。后两种要素属于文件,系统功能确定后,使用文件个数也可以被估算出来。

2、FPA功能点计算方法

完整的功能点计算流程包括6个步骤,如下图计算功能点的流程图所示:

计算功能点的流程
计算功能点的流程

1)识别确定系统范围:包括识别计数范围和应用边界。

计数范围定义了将被包含在一个特定功能点计数中的功能。它识别了哪些功能应该被包含在功能点计数中从而为其提供答案。它的划定是由执行功能点的目的决定的。比如,开发功能点计数包括项目活动所影响到的所有功能;升级功能点计数包括增加、修改和删除的所有功能。

应用边界定义了被计算系统和外部系统以及用户之间的界限。边界基于用户的角度确定。被度量软件与其他应用之间的边界位置是主观的,有时很难描绘一个应用从什么地方开始,另一个应用从什么地方结束。所以系统间的边界界定应尽量从业务功能的角度去理解而不应该基于技术或物理上的考虑来划定。应用边界一经界定,并不会因计数范围的改变而改变。

2)计算数据功能。

数据功能满足了对数据的存储或引用的功能性用户需求。计数范围内的所有数据功能应该被评估并求值。在计算数据功能时,首先会根据数据间的逻辑关系将数据划分为一个个的逻辑文件,接着根据是否被系统维护以及所在边界内外确定每个逻辑文件的类型,最后通过鉴定每个逻辑文件的记录元素类型(RET)和数据元素类型(DET)来确定其复杂度和功能点值(详见表1-1、表1-2)。

表1-1:内部逻辑文件和外部接口文件复杂度分级表
表1-1:内部逻辑文件和外部接口文件复杂度分级表
表1-2:内部逻辑文件和外部逻辑文件的功能点值
表1-2:内部逻辑文件和外部逻辑文件的功能点值

3)计算事务功能。

事务功能表示应用提供给用户的处理数据的功能,他的计算包括三个步骤:

(1)识别基本过程:对用户有定义,本身有意义并且能够保持业务持续性的最小活动单元都会被识别为基本过程。并且,基本过程必须保证唯一性,防止重复计算。

(2)识别出基本过程类型:根据其主要目的区分为外部输入、外部输出或者外部查询。

(3)确定事务功能的复杂度:通过计数引用文件类型(FTR:是指被事务功能读取并/或者维护的数据功能)数和数据元素类型数确定事务功能的复杂度等级和功能点。(详见表1-3、表1-4、表1-5)

表1-3:外部输入复杂度分级表
表1-3:外部输入复杂度分级表
表1-4:外部输出和外部查询复杂度分级表
表1-4:外部输出和外部查询复杂度分级表
表1-5:三种事务功能在不同复杂度评级下的功能点值
表1-5:三种事务功能在不同复杂度评级下的功能点值

4)计算未调整功能点值。

除了数据功能和事务功能五种组件之外,功能点分析方法还定义了值调整因子(Value Adjustment Factor,V AF)。前面介绍的数据功能和事务功能是从用户的角度对系统做的划分,它考虑的是系统的功能需求。但是,一个系统开发除了满足客户的功能需求之外,必须同时满足客户对系统的非功能需求,如质量需求和技术需求。值调整因子正是基于这一考虑而引入的。它的基础是14项通用系统特性,其中每一项通用系统特性都与系统开发中某一方向的用户非功能性需求相联系。表1-6列出了14项通用系统特性以及特性描述。

表1-6:十四项通用系统特性及其调整系数
表1-6:十四项通用系统特性及其调整系数

5)确定值调整因子。

值调整因子的计算公式:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
TDI =DI i (i=1 to 14VAF = (TDI× 0.01) + 0.65

其中VAF代表值调整因子:TDI代表总影响程度,由14个通用系统特征的影响程度(DI)累加得到。

6)计算调整后功能点值。

开发项目功能点计数:DFP = UFP × VAF

其中DFP是开发项目功能点,UFP是安装后可用功能的未调整功能点,VAF是指调整因子。

3、专家判断模型

这一模型中,专家依据他们的知识、经验、以及对项目的理解来给出工作量估算值。在历史数据不存在的情况,这一方法是非常有价值的。但是专家判断法往往受到专家的经验以及主观性所限制,如个人偏见或对项目的不熟悉等。为避免以上现象采用专家组讨论的形式进行工作量评估。这里,给出的工作量评估模型描述如下:

1)协调人为每个估算专家提供一份系统需求说明和估算单;

2)协调人召开小组会议,就当前项目有关估算的问题进行讨论;

3)估算专家匿名提交单独得到估算值;

4)协调人在一张迭代表单上总结所有专家得到的估算结果并召开小组会议,讨论估算值中的差异。

5)小组投票表决是否接受这个估算值的均值,如果不接受则回到步骤三。

6)重复步骤三步骤五的过程直到得出一个足够收敛的估算结果。

4、综合评估算法

1)软件规模综合评估的计算。结合软件系统的需求文档、技术实施方案,分别采用功能点法、专家判断法等多种估算方法计算软件系统的规模即功能点数,单位:个。

按照各自方法确定的功能点数,根据评估对象确定两类方法在本次评估中的重要程度进行加权平均,最终形成软件项目最后的功能点数。

2)平均生产定额:根据项目的实施特点、技术复杂程度、承建单位所属地区等因素,通过类比和专家评估,综合确定工作人员每人每天承担的基准功能点数。单位:个/人日。3)工作量:根据项目总体的范围定义,完成某项工作(软件系统、模块等)所需要的总人日数。工作量的单位:人日。

4)人日单价:这里,根据辽宁省软件行业报价惯例,人日单价为800元/人日。(包含差旅费、交通费、人员管理费、餐补。)

5)工作量分配比例:按软件系统生命周期的不同阶段对应的基准工作量比例参考值:项目管理:需求调研:设计:开发:测试:实施支持= 0.5:1:1:2:1:0.5。

6)系统成本:经过评估后该项目建设最终的整体投资额。单位:万元。

具体计算模型:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
工作量= 软件系统规模÷生产定额
系统成本=工作量×人日单价

案例应用

新星咨询就以东北电网有限公司做的“财务集约化系统”工作量评估项目为实例,简单阐述应用基于FPA的软件工作量综合评估法对该系统软件的如何进行工作量评估。(以一个小模块为实例)

1、系统规模估算

1)采用FPA的方法估算“调度子系统”的工作量,整体工作量为2572;

2)组织5名信息化建设方面的专家(其中包括从事过类似项目建设的专家)组成专家评估小组,对该子系统需求文档及技术建设方案进行研究,最终评估出结果为2588;

3)本次FPA和专家判断法重要程度相同,因此权重分别为1,则最后的评估结果为2580。

具体详见表2-1系统规模评估结果明细表;

4)在专家不清楚FPA方法评估结果的前提下得出的功能点数与FPA得到的功能点数很接近,从而相互验证了评估结果的有效性。

表2-1系统规模评估结果明细表
表2-1系统规模评估结果明细表

2、系统工作量估算

软件项目建设主要包括需求阶段、设计阶段、开发阶段、测试阶段、实施培训及试运行阶段,项目管理贯穿整个项目建设阶段,根据相关资料描述这些阶段工作量占总工作量的比例分配为“项目管理:需求调研:设计:开发:测试:实施支持= 0.5:1:1:2:1:0.5”,基于该比例关系确定比例系数((1/12):(1/6):(1/6):(1/3):(1/6):(1/12))。平均生产定额根据项目不同阶段参与人员的技术水平、工作能力的不同其具体定额值也略有差异,平均生产定额值通过专家评估而确定。通过模型公式项目总体评估工作量为492人日,具体各阶段人日分布情况详见表2-2工作量评估明细表。

表2-2工作量评估明细表
表2-2工作量评估明细表

3、系统成本估算

根据辽宁省内软件行业惯例及相关行业文件确定辽宁省内人日单价费为800元/人日,其中包括差旅费、交通费、通讯费、餐费。根据公式:系统成本= 工作量×人日单价。

总结

基于FPA的软件工作量综合评估方法的应用,已经得到用户的认可,实践表明了综合评估方法的有效性和可操作性。随着方法的研究与应用将完善软件监理项目中对系统软件工作量的评估,并且推动监理平台对IT咨询业务的开展。该方法还需继续完善,为了更加准确的对软件项目工作量的评估,还需要不断完善软件项目历史经验库,相关数据越丰富,得到的评估结果就越客观。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
java简易爬虫Crawler
一,介绍: >这是我的第一个爬虫,比较简单,没有队列,广度优先算法等,用list集合代替了队列。 >而且只爬取一个网址上面的图片,并不是将网址中的链接<href>加入队列,然后下载一个网址一个网址下载其中的图片。 >不过,这是前期的,处于摸索阶段,后期学完队列和广算后,在涉及一点多线程,肯定会比想象中的更实用。
全栈程序员站长
2022/07/01
3840
java简易爬虫Crawler
AndroidStudio——利用APIStore获取网络新闻
public class HttpJsonActivity extends AppCompatActivity {
用户7886150
2020/12/31
5870
微信公众号获取token,上传素材
public static JSONObject getToken(String appId,String appSecret){ String url="https://api.w
JQ实验室
2022/02/10
1.8K0
JDK原生的HttpURLConnection请求实例
不想说啥,上代码! package com.my.https; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStream; import java.net.HttpURLConnection; import java.net.URL; import java.security.SecureRandom; import j
JQ实验室
2022/02/09
2600
Java Web Service Get请求使用指南
在当今互联网时代,Web Service已经成为了现代软件开发中不可或缺的一部分。而Java作为一种广泛使用的编程语言,自然也提供了丰富的工具和库来支持Web Service的开发。本文将为大家介绍如何使用Java编程语言进行Web Service的Get请求。
用户10354340
2023/08/07
4870
android和javaEE更完美的通信-传递对象
继续完善上一篇中的那个代码片,《android和javaEE通信的代码片》中只是简单的向服务器发送请求,没有获取服务器返回数据的操作。
the5fire
2019/02/28
6000
RestPack Java实现Html转PDF文件
最近公司需要将前端一个图表统计导出为pdf。前端导出显示的pdf还是可以的,但是将会导致页面不可用与卡死状态。所以由后端寻找解决方案。
用户1518699
2020/09/28
1.7K0
腾讯云短信接口服务
做个小程序需要发送验证码,短信接口是腾讯云的。了解官方的sdk和demo发现对于我这种浅层次的人来说太麻烦了,然后就从网上找了一版。短信服务开通可以访问 腾讯云短信服务
聚优云惠
2019/12/26
22.9K0
Redis的数据记录与回放
前文介绍了byteman的基本语法以及流量回放平台,今天一起看下如何使用byteman如何对 Redis 相关命令进行数据记录和回放.
一个架构师
2022/06/27
5030
Java调用飞信API
//由于某些原因,现在只有http://w.ibtf.net/f.php?phone=xxxxxx&pwd=xxx&to=xxxx&msg=xxxx&type=x //package com.test
黄啊码
2020/05/29
1.7K0
httpServletRequest.getParameter 参数中存在“&”导致获取不到完整参数的问题
账管有个信用卡绑定接口,我的调用的时候需要传号码、地址等信息,使用的是 HttpURLConnection,发送的时候将参数转为key=value&key=value 的形式,账管那边使用 httpServletRequest.getParameter() 进行获取参数。 问题就是当某些地址中存在 & 符号的时候,因为账管获取参数的时候是通过 & 符号进行截取的,就会导致他们获取参数不全。 如:a=123&b=park¢er 本来 b 的 value 应该是 park¢er,现在他们那边只能获取到 park,这就导致两边参数不一样,签名也不一样,然后验签失败。
Li_XiaoJin
2022/06/10
8870
Android多线程+单线程+断点续传+进度条显示下载
效果图 download.gif 白话分析: 多线程:肯定是多个线程咯 断点:线程停止下载的位置 续传:线程从停止下载的位置上继续下载,直到完成任务为止。 核心分析: 断点: 当前线程已经下载的数
用户2032165
2018/06/05
2.1K0
java小工具,使用Swing展示左树右表结构
java -Dfile.encoding=utf-8 -jar your.jar pause
JQ实验室
2022/02/10
8820
如何使用Java爬取指定链接的网页内容
在当今信息时代,互联网上的数据量庞大且不断增长。为了获取特定网页的内容,爬虫技术成为了一种非常有用的工具。本文将介绍如何使用Java编程语言来实现爬取指定链接的网页内容。
小白学大数据
2023/09/18
6720
Java实现Http的Post、Get、代理访问请求
Java实现Http的访问请求。包含基本的Get访问、Post访问。Post包含使用代理模式访问
似水的流年
2018/01/14
1.8K0
postman自动生成Cookie java代码怎么实现
在接口测试中,有时候需要在请求中携带Cookie信息,为了方便测试,我们可以使用Postman来自动生成Cookie,并将其转换为Java代码,以便在自动化测试中使用。下面将介绍如何实现这一功能。
大盘鸡拌面
2024/05/13
3960
Java IO异常处理:在Web爬虫开发中的实践
在当今的互联网时代,Web爬虫技术已经成为数据采集的重要手段之一。它们能够自动地从网页中提取信息,为数据分析、搜索引擎优化、内容聚合等提供了强大的支持。然而,Web爬虫在执行过程中可能会遇到各种输入/输出(IO)异常,如网络错误、文件读写问题等。因此,有效地处理这些异常对于确保爬虫的稳定性和可靠性至关重要。本文将探讨Java中IO异常处理的机制,并展示如何在Web爬虫开发中实践这些机制。
小白学大数据
2024/09/05
1570
Java IO异常处理:在Web爬虫开发中的实践
实践:使用JenkinsActive参数,让参数动起来~
在使用Pipeline项目时一般都是参数化构建作业,在Jenkins的构建时,可能需要使用参数类型有复选框,单选按钮,多选值等输入的情景。
DevOps云学堂
2021/09/07
1.5K0
HttpURLConnection发送中文乱码问题解决
重点在于:替换out.writeBytes(json);为 out.write(json.getBytes());
JQ实验室
2022/01/11
1.1K0
Java代码忽略https证书:解决No subject alternative names present问题 HttpURLConnection https请求
Java代码忽略https证书:解决No subject alternative names present问题
oktokeep
2024/10/09
3310
推荐阅读
相关推荐
java简易爬虫Crawler
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验