软件系统开发费用的估算——功能点方法
文章目录
- 一、前文
- 二、功能点方法的简介
- 三、功能点方法的用途
- 四、功能点方法的特点
- 五、功能点方法的完整过程
- 5.1 确定计数类型
- 5.2 识别系统边界
- 5.3 识别功能点计数项
- 5.3.1 ILF(内部逻辑文件)
- 5.3.2 EIF(外部接口文件)
- 5.3.3 EI(外部输入)
- 5.3.4 EO(外部输出)
- 5.3.5 EQ(外部查询)
- 六、其他要点
- 七、其他类似功能点的方法
- 八、应用实例
一、前文
我们接到甲方的软件系统需求单,我们如何报价?
或者我们有一个软件系统需要外包给乙方,我们如何定价?
一般来说,分为几步走。
- 确认系统模块边界
- 是否需要云端服务器开发
- 是否需要Web前端开发
- 是否需要移动端开发
- 是否需要嵌入式软件开发
- 是否需要硬件开发
- 等等
- 系统模块单独报价
- 有界面的,如Web前端和移动端,画出原型图
- 无界面的,如云端服务器开发和嵌入式开发,列出功能点
- 根据经验,预估工作量和工时
- 根据商务/关系/市场/技术/时间紧急程度等,给与适当的溢价
- 每个系统模块,都单独给出报价
以上,是我们常规给客户报价的方法。
客户根据自身的感知(对专业程度的感知 / 对关系的远近亲疏 / 对价格的货比三家)等,确定合作商的选择。
这些都是企业对企业的常规做法。
但是,如果甲方是政府机构 / 国企 / 央企 等单位,那这一套就完全行不通。
对象不同,要求不同。政府机构 / 国企 / 央企 等单位需要更加严格的规章制服和标准流程,不能这么草率。
所以,这里引入了软件系统开发费用的估算——功能点方法
。
功能点方法目前也是政府机构 / 国企 / 央企 等单位的开发费用估算的标准方法。
二、功能点方法的简介
- 功能点是度量软件规模的一种单位,例如生活中我们采用平方米度量房子的面积
- 功能点方法从用户视角(即业务价值)度量软件的大小
- 功能点方法的核心思想是系统维护的信息及处理的复杂程度决定了系统价值
- 功能点方法已成为软件规模度量的国内外标准,目前应用的比较广泛的是国际功能点用户组(IFPUG)发布的标准功能点法和荷兰软件度量协会(NESMA)发布的快速功能点法
三、功能点方法的用途
- 规模估算或测量
- 每类功能点计数项根据复杂度不同均有特定权值
- 例如中等复杂度的ILF/EIF/EI/EO/EQ的权值分别为10/7/4/5/4
- 所有功能点计数项数值之和就是未调整的功能规模,单位为FP
- 工作量/工期/成本估算
- 规模估算是项目估算的基础
- 项目范围管理
- 功能规模的变化对项目工作量产生重大影响
- 规模估算与范围定量管理相结合对于需求不确定的增强开发项目尤其重要
四、功能点方法的特点
- 更快的速度
- 足够准确的规模估算
- 采用国际标准(NESMA)
五、功能点方法的完整过程
5.1 确定计数类型
- 新开发
- 识别所有新增功能
- 增强开发
- 识别变化功能
- 包括新增、修改及删除
- 已有系统计数
- 识别最终交付功能
5.2 识别系统边界
- 标准功能点方法
- 从用户视角
- 实际情况
- 产品型研发组织按照产品架构划分居多
- 项目型研发组织按照项目划分居多
- 金融行业
- 通常按照产品(系统)确定边界
5.3 识别功能点计数项
- 数据功能:系统使用或维护了哪些数据(业务对象/业务规则)?
- ILF(内部逻辑文件):在本系统维护的业务对象/业务规则
- EIF(外部接口文件):本系统引用,在其他系统维护的数据
- 事务功能:系统如何使用或维护这些数据?
- EI(外部输入):对数据进行维护或改变系统行为的事务
- EO(外部输出):对数据加工后呈现或输出的事务
- EQ(外部查询):对已有数据直接呈现或输出的事务
因此,功能点规模与业务复杂度相关,但与技术实现方式无关
- 估算早期(如编制预算)可采用预估功能点方法,只需要识别ILF/EIF,但要注意对于增强开发项目可能不适用
- 估算中期(如技术方案、立项、项目计划)通常采用估算功能点方法,需要识别ILF/EIF/EI/EO/EQ
- 估算中后期(如需求分析、变更、项目决算)可根据管理需求决定是否采用详细功能点方法(通过对DET/RET/FTR计数对各功能点计数项的复杂度进行调整)
本博文主要介绍估算功能点方法
5.3.1 ILF(内部逻辑文件)
- ILF(内部逻辑文件):在本系统维护的业务对象/业务规则
- 复杂程度:10
识别规则
- ILF指在待计数系统内部逻辑上的一组数据
- 对单个ILF平均执行6种左右的操作(经验而非规则!),而且一定包含写操作
5.3.2 EIF(外部接口文件)
- EIF(外部接口文件):本系统引用,在其他系统维护的数据
- 复杂程度:7
识别规则
- 本系统“引用”
- 是一个“逻辑”上的文件
- 在系统外部维护
关键点
- 是文件,而非系统或接口
- 引用的实现方式不影响计数结果
- 维护是指逻辑上而非物理上的维护或存储
5.3.3 EI(外部输入)
- 复杂程度:4
识别规则
- 是一个完整的基本过程
- 其主要目的是对内部逻辑文件进行维护或接受某个控制信号使软件行为发生改变
主要目的
- 对内部逻辑文件进行维护
- 输入信号并改变系统行为
示例
- 如增/删/改
- 如启动服务
5.3.4 EO(外部输出)
- 复杂程度:5
识别规则
- 是一个完整的基本过程
- 即通过处理逻辑(计算/产生衍生数据/维护逻辑文件/改变系统行为)表示/发送信息
主要目的
- 向系统边界之外发送/呈现数据
示例
- 例如:针对某业务数据的复杂报表/统计分析等(含计算)
- 查询3月份贷款记录,并计算贷款总额
- 输出报表
- 生成对账单
- 大额交易统计
- 员工所得税报表
5.3.5 EQ(外部查询)
- 复杂程度:4
识别规则
- 是一个完整的基本过程
- 对内部数据的简单输出(不能计算,不能产生衍生数据,也不可维护ILF或改变系统行为,可以排序、筛选、等值代换等)
- 以原始状态查看信息
- 可以排序、筛选、分组、简单的等值代换等
主要目的、
- 是向系统边界之外发送/呈现数据
示例
- 列表显示某业务数据基本信息
- 只显示未处理的授信申请
- 按日期显示收支记录
- 搜索某个ID的客户
- 帮助系统(搜索帮助条目)
- 帐号交易记录
- 人员信息查询
- 显示“我的待办
六、其他要点
- 快速功能点方法要点—预估功能点
- 正确评估ILF/EIF的必要性
- 准确计算ILF/EIF的数目
- 快速功能点方法要点—估算功能点
- 准确计算ILF/EIF的数目
- 正确认识“基本过程”
- 准确计算EI、EO、EQ的总数
- EO和EQ混淆仅产生少量误差
- 关于功能点方法的定制及优化
- 提高计数一致性
- 提高规则合理性
七、其他类似功能点的方法
- 功能项数
- 页面数/窗体数
- Use case数量(UCP)
- User story数量(Story point)
以上方法尚未形成国际标准
八、应用实例
软件系统开发费用的估算——功能点方法 应用实例
觉得好,就一键三连呗(点赞+收藏+关注)
软件系统开发费用的估算——功能点方法相关推荐
- 软件系统开发费用的估算——功能点方法 应用实例
文章目录 一.前文 二.项目特征 2.1 规模计数时机 2.2 应用类型 2.3 质量特性 2.4 开发语言 2.5 开发团队背景 三.规模估算 四.开发费用估算 4.1 调整后规模(单位:功能点) ...
- 软件项目工作量估算中使用的功能点方法是什么?
简单的说,功能点方法是一种估算软件项目大小的方法,它是从用户视角出发,通过量化系统功能来度量软件的规模,这种度量主要基于系统的逻辑设计.功能点规模度量方法在国际上的应用已经比较广泛,并且已经取代代码行 ...
- 软件项目工作量评估方法简述之COSMIC功能点方法
(一) 简介 COSMIC 是通用软件度量国际联盟的简写(Common Software Measurement International Consortium,COSMIC),它成立于1998 年 ...
- 功能连接方法及其在fMRI数据中的应用
文章来源于微信公众号(茗创科技),欢迎有兴趣的朋友搜索关注. 导读 强大的非侵入性神经成像技术的可用性引发了各种旨在绘制人类大脑的研究.这些研究不仅聚焦于发现大脑激活信号,还聚焦于理解大脑网络中功能性 ...
- android添加截图功能,Android应用开发之Android 5.0及以上编程实现屏幕截图功能的方法...
本文将带你了解Android应用开发Android 5.0及以上编程实现屏幕截图功能的方法,希望本文对大家学Android有所帮助. 本文实例讲述了Android 5.0及以上编程实现屏幕截图功能 ...
- Python实现打印螺旋矩阵功能的方法
Python实现打印螺旋矩阵功能的方法 本文实例讲述了Python实现打印螺旋矩阵功能的方法.分享给大家供大家参考,具体如下: 一.问题描述 输入N, 打印 N*N 螺旋矩阵 比如 N = 3,打印: ...
- php绘制历史曲线,thinkphp浏览历史功能实现方法
这篇文章主要介绍了thinkphp浏览历史功能实现方法,可实现浏览器的浏览历史功能,是非常实用的技巧,需要的朋友可以参考下 本文实例讲述了thinkphp浏览历史功能实现方法,分享给大家供大家参考.具 ...
- html tab与jQuery,js与jquery分别实现tab标签页功能的方法
本文实例讲述了js与jquery分别实现tab标签页功能的方法.分享给大家供大家参考,具体如下: 首先列出样式和html标签 *{margin: 0;padding: 0;} #myul li {li ...
- 小米手机系统服务组件是干什么的_怎么查看小米手机MIUI系统的基本功能-小米手机MIUI系统基础功能查询方法讲解...
小米手机是国产品牌手机中口碑较好的手机之一,受到大家的喜爱,配置功能丰富,价格实惠.亲们或许都不知道怎么查看小米手机MIUI系统的基本功能,小编很高兴为大家解决这个问题,接下来就为大家奉上小米手机MI ...
- mysql scws_php利用scws实现mysql全文搜索功能的方法,_PHP教程
php利用scws实现mysql全文搜索功能的方法, 本文实例讲述了php利用scws实现mysql全文搜索功能的方法.分享给大家供大家参考.具体方法如下: scws这样的中文分词插件比较不错,简单的 ...
最新文章
- 阿里JAVA面试题剖析:一般实现分布式锁都有哪些方式?使用 Redis 如何设计分布式锁?...
- 基于mysql 5.5+mysql-master-ha实现mysql ha架构
- 【codeforces】【比赛题解】#849 CF Round #431 (Div.2)
- . NET5一出,. NET岗面试普遍喊难,真相是…
- linux 安装mysql 8.0_Linux安装mysql 8.0的详细方法介绍(代码示例)
- 在linux 下编译c程序时“ error:dereferencing pointer to incomplete type”的问题
- python爬取下载有妖气漫画网站免费漫画
- 身份证阅读器在人事管理中的運用
- Apple MDM 开发
- 串口485接法图_RS232转换为RS485的接线方法最好有图
- java 实现打印机_JAVA实现连接本地打印机并打印文件的实现代码
- c语言中实型变量的三种类型,在C语言中的实型变量分为两种类型..doc
- 计算机交叉专业考研方向,与理工科交叉的计算机专业考研方向有哪些?
- 2021年4月2日 星期五 农历二月 阴
- 通俗讲解MOSFET
- C语言程序设计-同一天生日[综合应用]
- 物联网项目(二)初建团队
- 微软-2020暑期实习生招聘-笔试
- 关于EZDML的数据类型
- python图片识别之 easyocr
热门文章
- sql convert 转换时间格式
- CRM客户关系管理系统HR人事OA系统APP源码
- x265中checkMerge2Nx2N_rd0_4()分析(版本2.8)
- sqlitedev 注册码
- acer软件保护卡怎么解除_Acer软件保护卡
- 终点与起点——诺基亚 N9 初步上手
- 易编远航第七套大漠多线程多开入门高级篇
- centeros安装mysql_CenterOS上安装MySQL具体步骤
- Windows自带硬盘测试工具使用教程
- CV+Deep Learning——网络架构Pytorch复现系列——classification(一:LeNet5,VGG,AlexNet,ResNet)