前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >基于功能点分析法(FPA)的度量体系建设简析

基于功能点分析法(FPA)的度量体系建设简析

作者头像
软件成本造价评估
修改于 2019-01-24 02:26:41
修改于 2019-01-24 02:26:41
2.2K0
举报

  随着信息技术的发展和应用系统规模的增大,无论是系统的建设方还是承建方,都迫切需要建设组织自身的数据度量体系,以便加强项目过程控制、提高生率、降低生产成本,提升市场竞争优势。

  组织要建设适合自身需要的度量体系,首先要确定度量所采用的工具和方法,其次要确定度量的要素,即要度量哪些数据,然后建设可信的度量数据库,最后根据度量的数据进行分析,持续改进过程绩效。以下通过某组织的基于功能点分析法的度量库建设实践,对建设度量体系的基本过程简述如下:

1、采用功能点分析法(FPA)

  功能点分析法具有30多年的发展历史,是由IBM的工程师Allan Albrecht在1984年第一个公开发布了用于软件功能规模度量的功能点分析方法。1986年国际功能点用户组(IFPUG)成立以来,其不断增强软件功能规模度量的Albrecht方法,现已形成了功能点度量方法的国际标准,即ISO/IEC 20926《IFPUG功能规模度量方法》。该标准规定了详细功能点度量方法,其是从用户的角度识别数据功能(ILF内部逻辑文件和EIF外部接口文件)和事务功能(EI外部输入/EQ外部查询/EO外部输出),通过计算其复杂度并结合14个调整因子,得出估算的功能点数(即软件规模数据)。NESMA(荷兰软件度量协会)对功能点度量方法进行了改进,形成了国际标准ISO/IEC 24570《功能点分析应用定义和计数指南》。该标准指出,在不同的需求阶段,采用不同的估算参数,比如在产品初期阶段,需求尚未完全明确以及拆分,FPA中只计数ILF和ELF 数据文件数即可初步获得软件规模。计算规则如下:总体UFP(未调整功能点)=35xILF+15xELF;在系统需求逐步明确后,则采用估算功能点方法计算功能点。计算规则如下:总体UFP(未调整功能点)=10xILF+7xELF+4xEI+5xEO+4xEQ。北京软件造价评估技术创新联盟(以下简称“联盟”)推出的计算规则,就是基于以上两种场景下的估算功能点方法,通过相应的调整因子,计算出调整后的应用系统的功能点数。

  功能点分析法(FPA)已经成为了国际标准,并得到了大多数国家的认可,该方法是一致性的标准,可以满足应用并且具有可接受的一致性准则。自2013年工信部行业标准《软件研发成本度量规范》以及北京市地方标准《信息化项目软件开发费用测算规范》发布以来,国内越来越多的软件建设方和承建方积极组织学习FPA方法,并在组织的度量体系建设中,以及项目实施中得到广泛的应用。

  应用系统建设方,可采用功能点分析法,结合行业基准数据,预估出项目的造价预估值,为申报预算、项目招标或审计提供基础依据;在应用系统建设过程中,可通过收集的过程数据,对承建方进行评价和管理,及时发现问题、化解项目风险。应用系统承建方,采用功能点方法,只需要估算出项目的功能点数,结合行业基准数据或组织自己的基准数据,乘以相应的调整因子,就能获得相应的度量数据。

  利用功能点分析法的好处在于,该方法是基于业务的角度,从用户的视角识别数据文件和基本流程,而不用关心技术上如何实现,利于用户理解和应用。对于组织度量的初始源数据来说,该方法具有高度的可信性。在组织度量体系建设过程中,功能点分析方法是核心能力,需要熟练掌握。

2、度量的要素

  组织要对项目进行有效的管理,提高项目和组织过程绩效,就必须通过建立组织级的度量数据库来完善度量体系。功能点分析法作为各方一致性理解的方法,有利于度量数据的采集和计算,目前越来越多的组织采用该方法获得所需的度量数据。

  根据软件过程改进的特点,组织进行软件度量的要素有很多,与功能点分析法相关的度量要素主要包括估算功能点数、最终功能点数、功能点偏差率、规模变更因子、缺陷密度、生产效率等数据。通过这些有效的量化数据,组织可以完善自身的软件项目度量体系,逐步形成组织的生产效率数据标准值,质量数据标准值等数据。与功能点数相关的度量要素如表1所示:

表1 度量的要素

  基于功能点分析法的度量要素确定后,组织就可以完善或建设自己的度量库了。

3、建设度量数据库

  组织度量数据库是多项目度量数据的集合。要建设度量数据库,组织必须通过相应的统计模板或建设度量应用系统来完成。此外,组织还要通过制度的形式规定项目组什么时候提供什么数据,通过什么方式提供,以及哪个部门进行收集、整理和验证等。度量数据的收集和管理必须由专人负责,领导重视,不能流于形式,否则收集上来的数据就是不准确的、无用的数据,达不到建设度量库的目的。

  下面通过某组织的度量库建设样例做具体说明,如表2所示。除了表格中展示的度量要素外,该组织还收集了其他度量数据,如挣值分析数据、客户满意度等。

  注1:表2中功能点的初始数据来源于估算功能点方法,默认项目需求已经明确,否则可按预估功能点方法进估算。

  注2:对于应用系统交付后的系统维护任务,由于涉及的因素较多,相关数据需要采用改进的功能点方法度量,不在本文的讨论范围内。

表2 项目度量数据

4、    度量数据分析

  组织获得了每个项目的度量数据,达到一定项目数量规模后,就形成了项目数据度量库。组织有了度量库是第一步工作,关键是如何充分利用这些数据,组织可对度量数据进行不同维度的分析,发现项目的特征和规律,辨证施策。例如,上述组织通过分析近3年的数据,发现财务管理类应用系统的平均生产效率是11.2人时/功能点、核心业务类应用系统的平均生产效率为14.6人时/功能点、办公自动化类应用系统的平均生产效率为9人时/功能点,这样在做类似项目或售后维护时,就可将该类应用的平均生产效率作为基准,结合调整后的功能点数,估算应用系统工作量。此外,经过统计分析,该组织3年内承接的应用系统的平均规模变更系数为1.2,则在估算功能点时将规模变更调整因子定为1.2。这些数据的取得,有效地指导了该组织项目的顺利开展,项目实施过程清晰,数据收集和统计准确及时。同时,利用度量库的数据分析结果,也可对个案项目的绩效进行评价,或通过过程数据的比对,及时发现问题,降低项目实施风险。在组织层面上,可以通过数据分析的结果,为持续改进组织绩效、考核项目、更新组织度量基准数据等方面提供有力的支持。

  因此,基于功能点分析法(FPA)的度量体系建设,对于提升组织和项目的过程控制和管理能力是十分有效的。相信随着信息技术的发展、国家标准的发布,以及功能点分析方法的不断完善,越来越多的组织必然会通过认识、学习和利用功能点分析法,打造组织自身的度量数据库,建设高效的度量体系。

(田代军  北京软件造价评估技术创新联盟 高级咨询师)

本文系转载,前往查看

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

本文系转载,前往查看

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

评论
登录后参与评论
暂无评论
推荐阅读
Android动态加载入坑指南
曾几何时,国内各大公司掀起了一股研究Android动态加载的技术,两年多过去了,动态加载技术俨然成了Android开发中必须掌握的技术。那么动态加载技术是什么呢,这里谈谈我的个人看法,如有雷同,纯属偶然。 什么是动态加载技术 对于动态加载的概念,没有一个权威的定义,参考网上的解释,我们举一个例子,动态加载代码就是通过在运行时加载外部代码(磁盘,网络等)改变程序行为的技术(感觉有点像装饰者模式)。主要目的是为了达到让用户不用重新安装APK就能升级应用的功能。 为了加深大家对这种概念的理解,我们结合pc端来说说
xiangzhihong
2018/02/05
2.3K0
Android动态加载入坑指南
【Android 逆向】整体加固脱壳 ( DexClassLoader 加载 dex 流程分析 | DexFile loadDexFile 函数 | 构造函数 | openDexFile 函数 )
上一篇博客 【Android 逆向】整体加固脱壳 ( DexClassLoader 加载 dex 流程分析 | DexPathList 中根据 File 加载 DexFile | loadDexFile 分析 ) 中 , 介绍了 DexPathList 中通过 File 生成 DexFile 的源码 , 在 makeDexElements 中调用了 loadDexFile 方法 , 在 loadDexFile 又有调用了 DexFile.loadDexFile 函数 , 用于生成 DexFile 实例对象 ;
韩曙亮
2023/03/30
5140
【Android 逆向】整体加固脱壳 ( DexClassLoader 加载 dex 流程分析 | 查找 DexFile 对应的C代码 | dalvik_system_DexFile.cpp 分析 )
上一篇博客 【Android 逆向】整体加固脱壳 ( DexClassLoader 加载 dex 流程分析 | DexFile loadDexFile 函数 | 构造函数 | openDexFile 函数 ) 中 , 介绍了 DexFile 中加载 Dex 文件的流程 , 入口函数是 DexFile 的 loadDexFile 函数 , 然后在该函数中调用了 DexFile 的构造函数 , 之后再构造函数中调用了 openDexFile 函数 , 最终调用了 openDexFileNative 方法 ;
韩曙亮
2023/03/30
5260
【Android 逆向】整体加固脱壳 ( DexClassLoader 加载 dex 流程分析 | 查找 DexFile 对应的C代码 | dalvik_system_DexFile.cpp 分析 )
Android类加载之PathClassLoader和DexClassLoader
任何结论在没有经过实际检验之前都不能够确定一定没问题。三年前写的文章回过头来发现有些部分内容是有问题的(PS:这的确比较尴尬),再次对结果进行验证之后重新修改了之前的结论。幸亏文章阅读量不是很多,希望被误导的同学能够在其他地方得到正确结论。
静默加载
2020/05/29
2.6K0
【Android 逆向】整体加固脱壳 ( DEX 优化流程分析 | dvmDexFileOpenPartial | dexFileParse | 脱壳点 | 获取 dex 文件在内存中的首地址 )
上一篇博客 【Android 逆向】整体加固脱壳 ( DEX 优化流程分析 | DexPrepare.cpp 中 dvmContinueOptimizati() 函数分析 ) 中 , 分析了 DexPrepare.cpp 中 dvmContinueOptimizati() 方法 , 在其中调用了 rewriteDex() 方法 , 重写 DEX 文件 ;
韩曙亮
2023/03/30
4050
【Android 逆向】ART 脱壳 ( DexClassLoader 脱壳 | oat_file_assistant.cc 中涉及的 oat 文件生成流程 )
在上一篇博客 【Android 逆向】ART 脱壳 ( DexClassLoader 脱壳 | DexClassLoader 构造函数 | 参考 Dalvik 的 DexClassLoader 类加载流程 ) 中 , 分析了 ART 虚拟机下 DexClassLoader 类加载器加载 dex 文件的 Java 层流程 , 与 Dalvik 虚拟机下基本一致 , 从 native 层开始不一致 , 本篇博客开始分析 native 层的类加载流程 ;
韩曙亮
2023/03/30
8500
【Android 逆向】整体加固脱壳 ( DexClassLoader 加载 dex 流程分析 | RawDexFile.cpp 分析 | dvmRawDexFileOpen函数读取 DEX 文件 )
上一篇博客 【Android 逆向】整体加固脱壳 ( DexClassLoader 加载 dex 流程分析 | 查找 DexFile 对应的C代码 | dalvik_system_DexFile.cpp 分析 ) 中 , dalvik_system_DexFile.cpp 的 Dalvik_dalvik_system_DexFile_openDexFileNative() 方法中 , 调用了 RawDexFile.cpp 中的 dvmRawDexFileOpen() 方法 ;
韩曙亮
2023/03/30
3150
【Android 逆向】整体加固脱壳 ( DEX 优化流程分析 | DexPrepare.cpp 中 dvmOptimizeDexFile() 方法分析 | /bin/dexopt 源码分析 )
上一篇博客 【Android 逆向】整体加固脱壳 ( DexClassLoader 加载 dex 流程分析 | RawDexFile.cpp 分析 | dvmRawDexFileOpen函数读取 DEX 文件 ) 中 , 在 RawDexFile.cpp 中的 dvmRawDexFileOpen() 方法中 , 调用了 DexPrepare.cpp 的 dvmOptimizeDexFile() 函数 , 对 DEX 文件进行了优化 ;
韩曙亮
2023/03/30
6150
【Android 逆向】整体加固脱壳 ( DEX 优化流程分析 | DexPrepare.cpp 中 dvmOptimizeDexFile() 方法分析 | /bin/dexopt 源码分析 )
Android 2.3中的LinearAlloc
在2.3版本Apk安装时 , 会进行Dexopt , 如果单个Dex中的class过大/method过多 , 就会导致LinearAlloc为Class/Method的内存分配不足 , 从而让Dexopt进程挂掉.
None_Ling
2020/12/03
7120
Android 2.3中的LinearAlloc
【Android 逆向】整体加固脱壳 ( DEX 优化流程分析 | DexPrepare.cpp 中 dvmContinueOptimizati() 函数分析 )
上一篇博客 【Android 逆向】整体加固脱壳 ( DEX 优化流程分析 | DexPrepare.cpp 中 dvmOptimizeDexFile() 方法分析 | /bin/dexopt 源码分析 ) 中 , DexPrepare.cpp 中的 dvmOptimizeDexFile() 方法是用于优化 dex 文件的 , 其中调用了 /bin/dexopt 可执行程序优化 dex 文件 ; 在 /dalvik/dexopt/OptMain.cpp 源码中的 main 函数的 dex 优化分支中 , 调用了 fromDex() 函数 , 在该函数中 , 又调用了 DexPrepare.cpp 中的 dvmContinueOptimizati() 方法 , 执行真正的 dex 优化操作 ;
韩曙亮
2023/03/30
3080
【胖虎的逆向之路】04——脱壳(一代壳)原理&脱壳相关概念详解
在上文中,我们讲解了关于Android脱壳的基本办法和实际操作,现在我们来针对脱壳(一代壳)的原理和脱壳相关的基础知识介绍,由于作者能力有限,会尽力的详细描述 一代壳脱壳 的流程及原理,如本文中有任何错误,烦请指正,感谢~
胖虎哥
2023/05/10
9190
【胖虎的逆向之路】04——脱壳(一代壳)原理&脱壳相关概念详解
Dalvik,ART与ODEX简析
如果你有这样的问题: 1.Dalvik和ART的区别 2.DEX在Dalvik转化为ODEX和ART中转化为ODEX的过程有上面区别 3.multidex在dalvik上起作用,ART上使用的也是multidex么(如果不是的话在application中写入multidex.install会对apk启动造成影响么)
Anymarvel
2018/10/22
1.6K0
Dalvik,ART与ODEX简析
【Android 逆向】整体加固脱壳 ( 脱壳点简介 | 修改系统源码进行脱壳 )
在上一篇博客 【Android 逆向】整体加固脱壳 ( DEX 优化流程分析 | DexPrepare.cpp 中 rewriteDex 函数分析 | 脱壳点 | 获取 dex 文件在内存中的首地址 ) 中 , 提到了
韩曙亮
2023/03/30
1.6K0
dex文件解析(第三篇)「建议收藏」
dex文件是Android系统中的一种文件,是一种特殊的数据格式,和APK、jar 等格式文件类似。 能够被DVM识别,加载并执行的文件格式。 简单说就是优化后的android版.exe。每个apk安装包里都有。包含应用程序的全部操作指令以及运行时数据。 相对于PC上的java虚拟机能运行.class;android上的Davlik虚拟机能运行.dex。
全栈程序员站长
2022/08/03
1.7K0
dex文件解析(第三篇)「建议收藏」
Android逆向笔记 —— DEX 文件格式解析
系列第一篇文章就分析过 Class 文件格式,我们都知道 .java 源文件经过编译器编译会生成 JVM 可识别的 .class 文件。在 Android 中,不管是 Dalvik 还是 Art,和 JVM 的区别还是很大的。Android 系统并不直接使用 Class 文件,而是将所有的 Class 文件聚合打包成 DEX 文件,DEX 文件相比单个单个的 Class 文件更加紧凑,可以直接在 Android Runtime 下执行。
路遥TM
2021/08/31
1.5K0
一个一年没解决的ClassNotFoundException|类加载机制探索
在一开始写Android的时候经常碰到一些ClassNotFoundException,大部分情况下是少导入了什么包导致的。我碰到一个困扰了一年之久的ClassNotFoundException,终于在这两天我解决了这个问题,下面让我给大家表演一下真正的技术。
逮虾户
2020/10/15
2.2K0
一个一年没解决的ClassNotFoundException|类加载机制探索
Android中dex文件的加载与优化流程
逻辑上,可以把dex文件分成3个区,头文件、索引区和数据区。索引区的ids后缀为identifiers的缩写。
全栈程序员站长
2022/09/14
3.1K0
Android中dex文件的加载与优化流程
【Android 逆向】ART 脱壳 ( DexClassLoader 脱壳 | ART 虚拟机下 DexClassLoader 类加载器脱壳点总结 )
从 /art/runtime/dex_file.cc#DexFile::Open 函数开始分析脱壳点位置 ;
韩曙亮
2023/03/30
8290
模仿手写andfix的实现原理
当公司的项目出现问题了,早期的老套路子是解决bug,重新发新版本apk,但是随着技术不断的更新,线上项目出现严重问题,可以通过进行热修复,在不需要发布新版本的情形下进行问题处理。常见的热修复:阿里家的andfix和sophix, 腾讯家的tinker和QQ空间补丁技术...等等。
包子388321
2020/06/19
6630
模仿手写andfix的实现原理
【Android 逆向】整体加固脱壳 ( DexClassLoader 加载 dex 流程分析 | DexPathList 中根据 File 加载 DexFile | loadDexFile 分析 )
上一篇博客 【Android 逆向】整体加固脱壳 ( DexClassLoader 加载 dex 流程分析 | DexPathList 构造函数分析 | makeDexElements 函数分析 ) 中 , 介绍了在 DexPathList 构造函数中调用了 makeDexElements 方法 , 在 makeDexElements 方法中执行了加载 dex 文件的操作 , 将加载后的 dex 文件封装在了 Element 实例对象中 , 并生成了 Element[] 数组 , 每个 dex 文件都对应 Element[] 数组 中的一个元素 ;
韩曙亮
2023/03/30
4620
推荐阅读
Android动态加载入坑指南
2.3K0
【Android 逆向】整体加固脱壳 ( DexClassLoader 加载 dex 流程分析 | DexFile loadDexFile 函数 | 构造函数 | openDexFile 函数 )
5140
【Android 逆向】整体加固脱壳 ( DexClassLoader 加载 dex 流程分析 | 查找 DexFile 对应的C代码 | dalvik_system_DexFile.cpp 分析 )
5260
Android类加载之PathClassLoader和DexClassLoader
2.6K0
【Android 逆向】整体加固脱壳 ( DEX 优化流程分析 | dvmDexFileOpenPartial | dexFileParse | 脱壳点 | 获取 dex 文件在内存中的首地址 )
4050
【Android 逆向】ART 脱壳 ( DexClassLoader 脱壳 | oat_file_assistant.cc 中涉及的 oat 文件生成流程 )
8500
【Android 逆向】整体加固脱壳 ( DexClassLoader 加载 dex 流程分析 | RawDexFile.cpp 分析 | dvmRawDexFileOpen函数读取 DEX 文件 )
3150
【Android 逆向】整体加固脱壳 ( DEX 优化流程分析 | DexPrepare.cpp 中 dvmOptimizeDexFile() 方法分析 | /bin/dexopt 源码分析 )
6150
Android 2.3中的LinearAlloc
7120
【Android 逆向】整体加固脱壳 ( DEX 优化流程分析 | DexPrepare.cpp 中 dvmContinueOptimizati() 函数分析 )
3080
【胖虎的逆向之路】04——脱壳(一代壳)原理&脱壳相关概念详解
9190
Dalvik,ART与ODEX简析
1.6K0
【Android 逆向】整体加固脱壳 ( 脱壳点简介 | 修改系统源码进行脱壳 )
1.6K0
dex文件解析(第三篇)「建议收藏」
1.7K0
Android逆向笔记 —— DEX 文件格式解析
1.5K0
一个一年没解决的ClassNotFoundException|类加载机制探索
2.2K0
Android中dex文件的加载与优化流程
3.1K0
【Android 逆向】ART 脱壳 ( DexClassLoader 脱壳 | ART 虚拟机下 DexClassLoader 类加载器脱壳点总结 )
8290
模仿手写andfix的实现原理
6630
【Android 逆向】整体加固脱壳 ( DexClassLoader 加载 dex 流程分析 | DexPathList 中根据 File 加载 DexFile | loadDexFile 分析 )
4620
相关推荐
Android动态加载入坑指南
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档