功能点估算法(四)

本文探讨了功能点估算法(FP)在项目管理中的重要性,特别是对于财务系统开发。FP作为一种非定量的软件度量方法,用于估算软件规模和复杂性。通过理解教育背景下的FP概念,可以更准确地预估项目的工作量,从而提升项目管理的效率和准确性。
范例
     以员工管理系统为范例,在添加一个员工资料时会使用到员工的一般信息、员工的教育情况、工作经历和家属信息。员工又会隶属于某个部门,在本系统中会有一个对部门进行维护的功能。员工的工资是由另外一个财务系统提供的。因此其用例图如下所示:

图 员工管理系统用例图   
Ø 假设员工基本信息如下所示:
员工ID(标签控件)
员工名称
性别
生日
婚否
所属部门ID(标签控件)
所属部门名称
——受教育的时间
——学校名称
——所学专业
——工作时间
——工作单位
——工作部门
——工作职务
——亲属的姓名
——之间关系
——亲属年龄
——工作单位
Ø 假设部门信息如下所示:
部门ID(标签控件)
部门名称
Ø 假设工资表信息如下所示:
员工ID(标签控件)
员工姓名
金额
单位 
本范例识别出来ILF和EIF功能点个数如下表所示。
ILF内部逻辑文件RETDET个数复杂度未调整的FP个数
员工信息员工基本信息、员工受教育情况、工作经历、亲属信息,共4个。187
部门信息部门基本信息,共1个。27
 
EIF外部接口文件RETDET个数复杂度未调整的FP个数
工资表员工基本信息、工资信息,共2个。45
合计:19个
    
本范例识别出来EI、EQ和EO功能点个数如下表所示。
EIFTRDET个数复杂度未调整的FP个数
添加员工信息员工、部门、工资表员工信息的两个标签控件的内容不是用户输入的,因此不算。共16个。部门信息与员工信息中的部门字段重复,因此一个都不算。工资表中的员工ID和名称不能重复,因此只能算金额和单位,所以共2个186
修改员工信息员工、部门、工资表18同上6
删除员工信息员工、部门、工资表1员工ID中等4
添加部门信息部门1一个标签控件的内容不是用户输入的,因此不算3
修改部门信息部门1一个标签控件的内容不是用户输入的,因此不算3
删除部门信息部门1部门ID3
合计:25个
EQFTRDET个数复杂度未调整的FP个数
查询员工信息员工、部门、工资表206
查询部门信息部门23
合计:9个
EOFTRDET个数复杂度未调整的FP个数
统计员工年薪员工、工资表员工ID、员工名称年份、年薪、单位共5个4
本系统的通用系统特性及其影响程度如下表所示:
系统特性分数
数据通讯3
分布式数据处理2
性能0
高强度配置0
交易速度0
在线数据输入5
最终用户效率2
在线更新3
复杂的处理0
可复用性3
易安装性0
易操作性0
多场地0
支持变更1
合计:19
调整因子 = 19 * 0.01 + 0.65 = 0.84
 最终调整后的功能点数量为:(19 + 25 + 9 + 5)* 0.84 = 48.72个
总结    
功能点估算法是一个非常有用的,而且是国际通用的一种对软件规模进行估算的技术,是项目管理人员必须掌握的工具。为了便于大家对功能点的技术进行理解和记忆,这里对其进行总结:    
由于计算机软件就是为了实现无纸办公,那么在估算功能点时应该多以用户的纸质表单为依据,每个表单就是一个ILF或EIF,表单上显示的字段都是DET,一个表单上的“核心”内容不管是由几个数据表来分别存放数据的,每个表都是一个RET。简单来讲ILF和EIF可以被看作数据库中的数据表,但是主从表将被视为一个ILF或EIF。那么ILF和EIF的复杂度就是由数据表中的字段DET和一个ILF或EIF自身所包含的主、从表个数RET来决定,但是在计算DET时主外键只能算作一个。    
EI就是对应用户增加、修改、删除的操作,EO和EQ都是用于用户查询的操作,但是EO和EQ的区别是EO查询时使用了数学公式或计算方法。EI、EQ和EO的复杂度是由FTR和DET决定的。FTR的个数是由ILF和EIF的个数决定的,可以由主表中主外键的个数来计算。在计算EI的DET时,只有用户在界面上直接输入的信息才算作DET,通过页面自动计算或转换的数据不能算作EI的DET。在EO和EQ计算DET时,报表的标题、页码等信息不能被计算为一个DET。如果大家对功能点的内容有什么不懂或有其他意见,请通过张瑾的博客jinzhang.csai.cn与我进行探讨。  
功能点估算法是一种基于软件功能需求的量化估算技术,广泛应用于软件开发项目中,尤其是在需求相对稳定、功能明确的项目中表现尤为出色。该方法的核心原理是通过对系统功能的详细分析,将软件划分为多个功能点,每个功能点代表一个具体的业务需求或用户功能。通过计算功能点的数量,并结合每个功能点的复杂度和资源消耗,最终得出整个项目的开发成本和时间估算。 功能点估算法的原理主要包括以下几个步骤:首先,识别系统的外部输入、外部输出、外部查询、内部逻辑文件和外部接口文件等五类主要功能;其次,根据每类功能的复杂度(如低、中、高)进行加权计算,得出未调整的功能点数;最后,通过考虑技术复杂性因子(如系统性能、可靠性、易用性等)对未调整的功能点数进行调整,得出最终的功能点数[^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、付费专栏及课程。

余额充值