功能点估算法(三)

本文深入探讨了功能点估算法,详细介绍了如何计算调整因子,并在财务系统估算中进行了实例应用,对于软件工程的通讯、文档编写、测试等方面具有指导意义。
 

计算调整因子

功能点的调整系数是通过通用系统特性及其影响程度来评定的,对每个常规系统特性的评估由其影响程度(DI)而定,分为0-5级:0 毫无影响1 偶然影响2 适度影响3 一般影响4 重要影响5 强烈影响 然后依次对以下14个系统常规特性进行打分,并带入以下计算公式算出功能点的调整因子。Value Adjustment Factor=( sum of (DI) * 0.01 ) + 0.65 

1数据通讯

数据通讯指的是应用程序直接与处理器通讯的程度。通常我们都是通过某种通讯手段来实现在一个应用中所使用的数据或者控制信息的。连接到本地控制器上的终端被认为是使用通讯设施,而协议指的是两个系统或者两个设备之间进行通讯时所使用的一种约定。所有的数据通讯链接都需要某种协议。

0应用程序是单纯的批处理或者PC stand-alone
1应用程序是一种批处理过程,但是包含远程数据的录入或远程打印
2应用程序是一种批处理过程,但是包含远程数据的录入和远程打印
3应用程序包括在线数据收集或者包括批处理或查询系统的远程处理的前端应用
4应用程序不单只是前端应用,但是仅支持一种远程处理通讯协议
5应用程序不单只是前端应用,还支持多于一种的远程处理通讯协议

 2分布式数据处理

分布式数据处理是应用在内部组件之间传递信息的程度。这个特性是在应用边界内体现的。

0应用程序不支持组件之间的数据传输和处理功能
1应用程序为用户可能进行的处理准备数据(例如使用电子表格或者数据库等)
2应用程序所准备的数据是为了在系统另外一个组件上传输和处理。并非为终端用户所处理。
3分布式处理和数据传输是在线的,并且是单向的
4分布式处理和数据传输是在线的,并且是双向的
5由系统中最恰当的组件动态地执行处理功能

3性能

性能是吞吐量、处理时间等指标对开发的影响。用户所提出的性能要求将直接影响到系统的设计,实施,安装和支持。

0用户没有提出性能方面的要求
1用户提出了性能和设计方面的要求,但不需要采取特定措施
2响应时间和吞吐量在系统峰值时是关键的,但是不需要采取相应的CPU 使用方面的特殊设计。处理的最后期限是在下一个工作日。
3在任何时候响应时间和吞吐量都是关键的,但是不需要采取相应的CPU 使用方面的特殊设计。处理的完成期限比较严格
4除了上面一项的要求外,由于对需求的要求比较严格,在设计阶段就要进行性能分析
5除了上面一项的要求之外,在设计和实施阶段需要使用性能分析工具来判断性能要求的完成情况

4大业务量配置

大业务量配置指的是计算机的资源对应用开发的影响程度。大业务量的运行配置对设计有特殊要求,是必须考虑的一个系统特性。

0没有提出明确的运行方面的限制
1有运行方面的限制,但是不需要采取特别的措施以满足运行限制
2提出了一些安全和时间方面的限制
3应用程序的某些部分对处理器有特定的要求。
4提出的运行限制对应用的中央处理器或者专用处理器有特殊的要求
5除上面一项之外,还对应用的分布式组件提出了限制

5事务处理率

事务处理率是业务交易处理速度的要求对系统的设计,实施,安装和支持等的影响。

0预计不会出现周期性的高峰事务处理期
1预计会有周期性的高峰事务处理期(例如:每月、每季、每年)
2预计每周都会出现高峰事务处理期
3预计每天都会出现高峰事务处理期
4用户在应用程序需求或者服务级别协议中对事务率要求很高,因此必须在设计阶段进行性能分析。
5用户在应用程序需求或者服务级别协议中对事务率要求很高,因此必须进行性能分析并在设计、开发和安装阶段中使用到性能分析工具。

6在线数据输入

在线数据输入是指数据通过交互的方式输入系统程度。系统中包括在线数据输入和控制信息功能。

0所有事务都是批处理的。
11%~7%的事务是以交互式的方式进行数据录入
28%~15%的事务是以交互式的方式进行数据录入
316%~23%的事务是以交互式的方式进行数据录入
424%~30%的事务是以交互式的方式进行数据录入
530%以上的事务是以交互式的方式进行数据录入

7最终用户效率

最终用户效率是指对应用的人文因素以及使用的便捷方面的考虑程度。如下功能设计是针对最终用户效率的:

Ø  页面导航

Ø  菜单

Ø  在线帮助或文档

Ø  光标自动跳转

Ø  可以滚动

Ø  在线远程打印

Ø  预定义的功能键

Ø  在线做批量提交任务

Ø  光标可以选取界面上的数据

Ø  用户使用大量反白显示、重点显示、下划线或其他的标识

Ø  在线copy用户文档

Ø  鼠标拖动功能

Ø  弹出窗体

Ø  使用最少的界面完成某种商业功能

Ø  双语言支持(如果选择了这个就算4项)

Ø  多语言支持(如果选择了这个就算6项)  

0以上的一个都不包括
1包括以上的1~3个
2包括以上的4~5个
3包括以上的6个或以上,但是没有用户对于效率的要求
4包括以上的6个或以上,对用户使用效率有较高要求,因而必须考虑用户方面的设计(例如,最少击键次数、尽可能提供默认值、模版的使用)
5包括以上的6个或以上,用户对效率的要求使得开发人员必须使用特定的工具和流程以判定用户对效率的要求已经被达成

8在线更新

在线更新是指内部逻辑文件ILF 被在线更新的程度。应用系统提供在线更新内部逻辑文件的功能。

0没有在线更新
1包含1~3 个控制文件的在线更新。更新的流量低,恢复容易
2包含对4 个以上控制文件的在线更新。更新的流量低,恢复容易
3包含对主要ILF 的更新
4除了3 之外,在设计和实施中要考虑对数据丢失的防范。
5除了4 之外,大量的数据恢复工作要考虑成本因素,同时包含了高度自动化的恢复流程。

9复杂处理

复杂处理描述了逻辑处理对应用开发的影响程度。 它包含以下要素:

Ø  敏感控制(例如特殊的审核过程)和/或程序特定的安全处理

Ø  大量的逻辑处理

Ø  大量的数学处理

Ø  因为例外处理造成的需要重新处理的情况(例如,由TP中断、数据值缺少和验证失败导致的ATM事务)

Ø  多种可能的输入/输出造成的复杂处理 

0上面一个都不满足
1只满足一个
2只满足两个
3满足三个
4满足四个
5都满足

10可复用性

应用系统中的应用和代码经过特殊设计、开发和支持,可以在其他应用系统中复用。

0没有可复用的代码
1代码在应用之内复用
2应用中被其他用户复用的部分不足10%
3应用中被不止一个用户使用的部分超过10%
4应用遵从一种易于复用的方式被打包和文档化。用户在源代码级客户化该应用
5应用按照一种易于复用的方式被打包和文档化。用户使用用户参数来对该应用进行客户化

11.易安装性

易安装性指应用系统的转换和安装容易度对开发的影响程度。系统测试阶段提供了转换和安装计划和/或转换工具。

0用户对安装没有特定的要求
1用户对安装没有特定的要求,但有特定的安装环境要求
2用户提出了安装和转化的要求,转化/安装指南被经过测试提供给用户。但是转化的影响对该应用不重要
3用户提出了安装和转化的要求,转化/安装指南被经过测试提供给用户。转化的影响对该应用来说是重要的
4除了2 的要求之外,需要提供经过测试的自动化的安装和转化工具。
5除了3 的要求之外,需要提供经过测试的自动化的安装和转化工具。

12.易操作性

易操作性指的是应用对运行的影响程度,如有效启动、备份和恢复规程的影响。易操作性是应用提供的一种特性,它最小化了手工操作的要求。

0用户没有指定除正常备份程序外的其它特定操作
1提供高效的启动、备份和恢复进程,但需要人手操作
2提供高效的启动、备份和恢复进程,不需要人手操作(当作两项计算)
3应用程序对磁带的需求最小化
4应用程序对硬拷贝处理的需求最小化
5程序设计成无人操作模式。无人操作模式的意思是除了启动和关闭之外,不需要对系统进行操作。程序的其中一个功能就是错误自动恢复。

13.多场地

多场地指应用系统经特殊设计、开发可以在多个组织、多个地点应用的程度。

0用户需求不含多场地和组织的要求
1考虑了多场地的要求,但是设计要求应用在不同的场地使用相同的软硬件环境
2考虑了多场地的要求,但是设计要求应用在不同的场地使用类似的软硬件环境
3考虑了多场地的要求,同时设计支持应用在不同的场地使用不同的软硬件环境
4在1 或者2 的要求之上,提供了经过测试的多场地的文档和支持计划
5在3 的要求之上,提供了经过测试的多场地的文档和支持计划

14.支持变更

支持变更指的是应用在设计上考虑支持处理逻辑和数据结构变化的程度。可以具有如下的特性:

Ø  提供可以处理简单要求的弹性查询和报告功能,如对一个ILF进行与(或)逻辑

Ø  提供可以处理一般复杂度要求的弹性查询和报告功能,如对多于一个的ILF进行的与(或)逻辑(当作两项计算)

Ø  提供可以处理复杂要求的弹性查询和报告功能,如对一个或多个ILF进行的与(或)逻辑的组合(当作三项计算)

Ø  业务控制数据被保存到用户通过在线交互进程维护的表中,但变更只会在第二个工作日生效

Ø  业务控制数据被保存到用户通过在线交互进程维护的表中,且变更即时生效

0一个都不满足
1合计满足一个
2合计满足二个
3合计满足三个
4合计满足四个
5合计满足五个

计算调整后的功能点个数

国际的IFPUG组织将软件项目分为三类,功能点估算法适用于任何一类项目,其计算公式中的术语请详见表1。

l  功能点的原始计算公式:FP Count =UFP * VAF 

l  新开发项目有时新开发的软件项目也需要与其他现存的软件系统进行整合,例如:一个企业新开发的MIS内部管理系统经常会与财务系统进行整合。这个时候除了考虑本身项目的功能点个数外,还要考虑系统整合或数据迁移部分的工作量,因此其功能点计算公式如下:FP Count =(UFP+CFP)* VAF 

l  二次开发的项目有时新开发的软件项目是在原有基础上进行二次开发的,只是为了增加一些新的功能,因此其功能点计算公式如下:FP Count = ADD * VAF 

l  功能增强的项目对于功能增强的项目功能点估算比较复杂,在功能点增强前大家需要计算有哪些是新增加的功能,有哪些是被修改的功能,还有哪些是属于数据迁移或系统整合的功能。然后计算新系统技术复杂度的调整因子“VAFA”,并在此基础上计算系统功能点的数量。当然此类项目也会去掉一些原有功能,那么在原有系统的技术复杂度基础上重新计算功能点的调整因子“VAFB”,再计算所去掉功能贡献的功能点数量,因此其功能点计算公式如下:FP Count = [(ADD+CHGA+CFP)* VAFA]+(DEL * VAFB) 表1 功能点技术公式术语

术语英文中文含义
ADDAdded functionality被添加的功能点个数
CFPConversion functionality被转换的功能点个数
CHGAUFP of changed functionality after enhancement功能增强后所改动的功能所贡献的未调整的功能点个数
DELDeleted functionality被删除的功能点个数
UFPUnadjusted functional point count未调整的功能点个数
VAFValue adjustment factorVAF=(sum of(DI)* 0.01)+ 0.65功能点的调整因子的计算公式VAF=(sum of(DI)* 0.01)+ 0.65
VAFAValue adjustment factor after enhancement功能增强后的功能点调整因子
VAFBValue adjustment factor before enhancement功能增强前的功能点调整因子
  
功能点估算法是一种基于软件功能需求的量化估算技术,广泛应用于软件开发项目中,尤其是在需求相对稳定、功能明确的项目中表现尤为出色。该方法的核心原理是通过对系统功能的详细分析,将软件划分为多个功能点,每个功能点代表一个具体的业务需求或用户功能。通过计算功能点的数量,并结合每个功能点的复杂度和资源消耗,最终得出整个项目的开发成本和时间估算。 功能点估算法的原理主要包括以下几个步骤:首先,识别系统的外部输入、外部输出、外部查询、内部逻辑文件和外部接口文件等五类主要功能;其次,根据每类功能的复杂度(如低、中、高)进行加权计算,得出未调整的功能点数;最后,通过考虑技术复杂性因子(如系统性能、可靠性、易用性等)对未调整的功能点数进行调整,得出最终的功能点数[^1]。 该方法在软件开发中的应用场景非常广泛,尤其适用于业务系统开发项目。例如,在开发一个财务核算系统时,由于其功能模块清晰且需求明确,功能点估算法可以通过对各个功能模块的详细分析,提供较为准确的成本估算,从而为项目预算制定提供可靠依据[^1]。 此外,功能点估算法还可以与其他估算方法结合使用,以提高估算的准确性。例如,在项目启动阶段,可以使用Delphi方法进行初步估算,而在项目进入详细设计阶段后,再使用功能点估算法进行更精确的估算。相比Delphi方法,功能点估算法虽然在估算时间上可能稍长,但其结果更加准确,尤其适用于需求稳定、功能明确的项目[^2]。 ### 功能点估算法的优势与挑战 功能点估算法的主要优势在于其基于功能需求的量化分析,能够提供较为准确的估算结果。这种方法不仅适用于大型复杂系统的估算,也适用于中小型项目的成本预测。然而,功能点估算法的实施需要较高的专业知识和经验,尤其是在功能点的划分和复杂度评估方面。此外,如果需求频繁变更,功能点估算法的准确性可能会受到影响。 ### 功能点估算法的实施步骤 1. **识别功能类别**:将系统功能分为外部输入、外部输出、外部查询、内部逻辑文件和外部接口文件五类。 2. **评估复杂度**:根据每类功能的复杂度(低、中、高),赋予相应的权重。 3. **计算未调整功能点数**:根据权重和功能数量,计算出未调整的功能点数。 4. **调整功能点数**:考虑技术复杂性因子,对未调整的功能点数进行调整,得出最终的功能点数。 5. **估算成本和时间**:根据最终的功能点数,结合历史数据和团队效率,估算出项目的开发成本和时间。 ### 示例代码 以下是一个简单的Python示例,展示如何计算功能点数: ```python def calculate_function_points(external_inputs, external_outputs, external_queries, internal_files, external_interfaces): # 定义各类功能的权重 weights = { 'external_input': {'low': 3, 'medium': 4, 'high': 6}, 'external_output': {'low': 4, 'medium': 5, 'high': 7}, 'external_query': {'low': 3, 'medium': 4, 'high': 6}, 'internal_file': {'low': 7, 'medium': 10, 'high': 15}, 'external_interface': {'low': 5, 'medium': 7, 'high': 10} } # 假设所有功能的复杂度为中等 complexity = 'medium' # 计算未调整功能点数 unadjusted_points = ( external_inputs * weights['external_input'][complexity] + external_outputs * weights['external_output'][complexity] + external_queries * weights['external_query'][complexity] + internal_files * weights['internal_file'][complexity] + external_interfaces * weights['external_interface'][complexity] ) # 假设技术复杂性因子为1.2 technical_factor = 1.2 # 调整功能点数 adjusted_points = unadjusted_points * technical_factor return adjusted_points # 示例:计算一个包含5个外部输入、3个外部输出、2个外部查询、1个内部逻辑文件和1个外部接口文件的系统 adjusted_points = calculate_function_points(5, 3, 2, 1, 1) print(f"Adjusted Function Points: {adjusted_points}") ``` ### 功能点估算法的适用性 功能点估算法适用于需求明确、功能划分清晰的项目,尤其是在业务系统开发中表现出色。对于需求频繁变更或功能不明确的项目,功能点估算法可能不太适用。在这种情况下,可以考虑使用其他估算方法,如Delphi方法或PERT方法,以适应项目的不确定性[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值