草庐IT

软件项目管理 6.2.功能点估算法

软件项目管理 2023-03-28 原文

【公众号 “项目管理研究所” 将会第一时间更新文章并[分享行业分析报告]】
归档于软件项目管理初级学习路线
第六章 软件项目成本计划
《初级学习路线合集 》


前言

大家好,这节我们学习软件项目管理---功能点估算法。

  1. 最早提出功能点估算法的是阿尔布雷克特,1979年在IBM工作时提出,称为Albrecht功能点;
  2. 也称为IFPUG(国际功能点用户组织)功能点。
  3. 适用于信息系统。

一、功能点估算

代码行估算法与项目的实现语言等技术相关。而功能点估算与实现的语言和技术没有关系,用系统的功能数量来测量项目规模,是通过评估,加权,量化得出功能点。

功能点公式:FP=UFC*TCF。其中UFC为未调整功能点计数,是未调整之前的数量。TCF是技术复杂度因子,是对UFC的调整因子。

二、未调整功能点计数(UFC)

UFC是从五个角度得出的。五个功能计数项:“外部输入”,“外部输出”,“外部查询”,“外部接口文件”,“内部逻辑文件”。

1.外部输入(External Inputs: EI):
给软件提供面向应用的数据的项(如屏幕、表单、对话框、控件,文件等);在这个过程中,输入数据穿越外部边界进入到系统内部。

例如:登录某个系统需要输入用户名和密码等信息。


外部输入计数的大小可以通过输入的文件类型,数据元素等个数来进行决定权重,从而决定输入计数。

2.外部输出(External Outputs EO):
向用户提供(经过处理的)面向应用的信息,例如,报表和出错信息等。
同理,计数大小通过输出的文件类型,数据元素等个数进行决定权重,从而决定输出的计数。

3.外部查询(External Inquiry EQ) :
外部查询是一个输入引出一个即时的简单输出。没有处理过程。同理,计数大小通过输出的文件类型,数据元素等个数进行决定权重,从而决定输出的计数。

例如输入的学号是0001,查出的结果是学生 张三,没有处理过程。

4.外部接口文件(External Interface Files EIF’s):
外部接口文件是用户可以识别的一组逻辑相关数据,这组数据只能被引用。用这些接口把信息传送给另一个系统。

接口文件的权重通过其中的文件技术类型和数据元素类型来进行决定,然后再决定计数。

5.内部逻辑文件(Internal Logical Files: ILF’S):
用户可以识别的一组逻辑相关的数据,而且完全存在于应用的边界之内,并且通过外部输入维护,是逻辑主文件的数目。

例如关系数据库中的一个表,或者系统中的一个文件等...他们的权重是通过其中的文件或者记录类型,数据元素类型个数来进行决定权重,然后再决定计数。

最后我们看一下五个功能计数项的计数权重,他们的权重基本上通过文件,技术类型或者数据元素类型的个数决定的,分三个等级,既高中低。


那么国际功能点用户组织(IFPUG)发布FP计数的规则:
<IFPUG功能点估算方法使用指南>

这是外部输入,输出,查询的定级表。
例如引用或者更新两个文件类型(FIR’S),并且有7个外部输入数据元素,将定级为中级,相关的级数既外部输入计数权重为4。

这是内部逻辑文件和外部接口文件的定级表,通过记录元素类型和数据元素类型个数来决定他的高中低级别。

这是五个功能计数项的复杂度等级:

进行UFC计算的时候要计算各个功能计数项的个数(注意对应的计数权重),然后进行相加。

三、技术复杂度因子(TCF)

UFC只是功能点估算的一部分,为了确定功能点,还需要考虑技术实现的难度,他是从14个角度来看项目的复杂性。

这14个技术复杂度因子(注意:技术复杂度因子的取值范围)相加后乘以0.01再加上0.65得出TCF。

TCF最大值为1.35,最小值为0.65,相当于UFC的计数调整区间是正负35%。如果UFC等于100,则可调动的区间是65——135。

四、功能点估算方法例子

这是某外贸订单系统的用例图


我们可以得出以下信息,然后根据文件类型,数据元素类型确定了级别既权重,最后计算了UFC等于45。


然后这项目14个技术复杂度因子,每个因子都有平均的影响,所以为3.既最后技术复杂度因子为 TCF=0.65+0.01143=1.07 。

五、其他功能点估算方法

Mark II 功能点方法主要应用在英国,是对阿尔布雷克特方法的一个改进。

阿尔布雷克特主要适用于信息系统,他不适合于实时系统或者嵌入式系统,因此COSMIC-FFP功能点方法正好满足这个条件。

我们知道代码行估算法与实现的语言相关,功能点则不同,那么这个表展示了功能点对应的不同语言代码行数,那么他是通过经验数据统计得出的。

总结

总之 功能点估算是从需求功能出发来估算,这节主要介绍阿尔布雷克特功能点方法,他适用于信息系统,如果开发的是实时系统或者嵌入式系统可以采用COSMIC-FFP功能点方法。

到这里,第六章 第二节 功能点估算法就讲解完毕了!下一节介绍用例点估算法~

如果您觉得这篇文章有帮助到您的的话不妨点赞支持一下哟~~?

后续将持续更新【软件项目管理初级学习路线】的全知识点,大家感兴趣的多多关注博主哟~
————————————————

有关软件项目管理 6.2.功能点估算法的更多相关文章

  1. ruby - i18n Assets 管理/翻译 UI - 2

    我正在使用i18n从头开始​​构建一个多语言网络应用程序,虽然我自己可以处理一大堆yml文件,但我说的语言(非常)有限,最终我想寻求外部帮助帮助。我想知道这里是否有人在使用UI插件/gem(与django上的django-rosetta不同)来处理多个翻译器,其中一些翻译器不愿意或无法处理存储库中的100多个文件,处理语言数据。谢谢&问候,安德拉斯(如果您已经在ruby​​onrails-talk上遇到了这个问题,我们深表歉意) 最佳答案 有一个rails3branchofthetolkgem在github上。您可以通过在Gemfi

  2. ruby - 如何在 buildr 项目中使用 Ruby 代码? - 2

    如何在buildr项目中使用Ruby?我在很多不同的项目中使用过Ruby、JRuby、Java和Clojure。我目前正在使用我的标准Ruby开发一个模拟应用程序,我想尝试使用Clojure后端(我确实喜欢功能代码)以及JRubygui和测试套件。我还可以看到在未来的不同项目中使用Scala作为后端。我想我要为我的项目尝试一下buildr(http://buildr.apache.org/),但我注意到buildr似乎没有设置为在项目中使用JRuby代码本身!这看起来有点傻,因为该工具旨在统一通用的JVM语言并且是在ruby中构建的。除了将输出的jar包含在一个独特的、仅限ruby​​

  3. ruby-on-rails - 项目升级后 Pow 不会更改 ruby​​ 版本 - 2

    我在我的Rails项目中使用Pow和powifygem。现在我尝试升级我的ruby​​版本(从1.9.3到2.0.0,我使用RVM)当我切换ruby​​版本、安装所有gem依赖项时,我通过运行railss并访问localhost:3000确保该应用程序正常运行以前,我通过使用pow访问http://my_app.dev来浏览我的应用程序。升级后,由于错误Bundler::RubyVersionMismatch:YourRubyversionis1.9.3,butyourGemfilespecified2.0.0,此url不起作用我尝试过的:重新创建pow应用程序重启pow服务器更新战俘

  4. ruby-on-rails - 新 Rails 项目 : 'bundle install' can't install rails in gemfile - 2

    我已经像这样安装了一个新的Rails项目:$railsnewsite它执行并到达:bundleinstall但是当它似乎尝试安装依赖项时我得到了这个错误Gem::Ext::BuildError:ERROR:Failedtobuildgemnativeextension./System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/rubyextconf.rbcheckingforlibkern/OSAtomic.h...yescreatingMakefilemake"DESTDIR="cleanmake"DESTDIR="

  5. ruby-on-rails - 获取 inf-ruby 以使用 ruby​​ 版本管理器 (rvm) - 2

    我安装了ruby​​版本管理器,并将RVM安装的ruby​​实现设置为默认值,这样'哪个ruby'显示'~/.rvm/ruby-1.8.6-p383/bin/ruby'但是当我在emacs中打开inf-ruby缓冲区时,它使用安装在/usr/bin中的ruby​​。有没有办法让emacs像shell一样尊重ruby​​的路径?谢谢! 最佳答案 我创建了一个emacs扩展来将rvm集成到emacs中。如果您有兴趣,可以在这里获取:http://github.com/senny/rvm.el

  6. Ruby 从大范围中获取第 n 个项目 - 2

    假设我有这个范围:("aaaaa".."zzzzz")如何在不事先/每次生成整个项目的情况下从范围中获取第N个项目? 最佳答案 一种快速简便的方法:("aaaaa".."zzzzz").first(42).last#==>"aaabp"如果出于某种原因你不得不一遍又一遍地这样做,或者如果你需要避免为前N个元素构建中间数组,你可以这样写:moduleEnumerabledefskip(n)returnto_enum:skip,nunlessblock_given?each_with_indexdo|item,index|yieldit

  7. ruby-on-rails - Cucumber 是否只是 rspec 的包装器以帮助将测试组织成功能? - 2

    只是想确保我理解了事情。据我目前收集到的信息,Cucumber只是一个“包装器”,或者是一种通过将事物分类为功能和步骤来组织测试的好方法,其中实际的单元测试处于步骤阶段。它允许您根据事物的工作方式组织您的测试。对吗? 最佳答案 有点。它是一种组织测试的方式,但不仅如此。它的行为就像最初的Rails集成测试一样,但更易于使用。这里最大的好处是您的session在整个Scenario中保持透明。关于Cucumber的另一件事是您(应该)从使用您的代码的浏览器或客户端的角度进行测试。如果您愿意,您可以使用步骤来构建对象和设置状态,但通常您

  8. ruby-on-rails - 事件管理员日期过滤器日期格式自定义 - 2

    是否有简单的方法来更改默认ISO格式(yyyy-mm-dd)的ActiveAdmin日期过滤器显示格式? 最佳答案 您可以像这样为日期选择器提供额外的选项,而不是覆盖js:=f.input:my_date,as::datepicker,datepicker_options:{dateFormat:"mm/dd/yy"} 关于ruby-on-rails-事件管理员日期过滤器日期格式自定义,我们在StackOverflow上找到一个类似的问题: https://s

  9. 区块链之加解密算法&数字证书 - 2

    目录一.加解密算法数字签名对称加密DES(DataEncryptionStandard)3DES(TripleDES)AES(AdvancedEncryptionStandard)RSA加密法DSA(DigitalSignatureAlgorithm)ECC(EllipticCurvesCryptography)非对称加密签名与加密过程非对称加密的应用对称加密与非对称加密的结合二.数字证书图解一.加解密算法加密简单而言就是通过一种算法将明文信息转换成密文信息,信息的的接收方能够通过密钥对密文信息进行解密获得明文信息的过程。根据加解密的密钥是否相同,算法可以分为对称加密、非对称加密、对称加密和非

  10. 软件测试基础 - 2

    Ⅰ软件测试基础一、软件测试基础理论1、软件测试的必要性所有的产品或者服务上线都需要测试2、测试的发展过程3、什么是软件测试找bug,发现缺陷4、测试的定义使用人工或自动的手段来运行或者测试某个系统的过程。目的在于检测它是否满足规定的需求。弄清预期结果和实际结果的差别。5、测试的目的以最小的人力、物力和时间找出软件中潜在的错误和缺陷6、测试的原则28原则:20%的主要功能要重点测(eg:支付宝的支付功能,其他功能都是次要的)80%的错误存在于20%的代码中7、测试标准8、测试的基本要求功能测试性能测试安全性测试兼容性测试易用性测试外观界面测试可靠性测试二、质量模型衡量一个优秀软件的维度①功能性功

随机推荐