功能点估算方法FunctionalSizeMeasurement,FSMFPA2014年1月FP方法概述内容FP估算过程FP估算案例FP估算演练•概念•价值•应用•步骤•规则•案例一•案例二项目倒排期加班赶工期项目延期资源抱怨压力太大不够敬业?不思进取?监控不足?技能不够?资源投入不够?提口号时拍脑袋做事情时拍胸脯出事情后拍大腿最后拍屁股走人1.FP估算方法概述概念功能点估算•用于对软件规模进行度量•软件量化管理的基础•非标准度量方法——主观性强,难以保证估算的一致性•标准度量方法——客观标准,保证估算的一致性软件源代码行、对象点、需求数量、用例数、文档页码20世纪70年代提出,演进为一个总标准(ISO14143)与5个子标准MarkII、COSMIC、NESMA、FISMA、IFPUG概念软件功能规模是指通过量化功能用户需求而得到的软件规模。软件规模用功能点(FP)来表示,即功能点是IFPUG功能规模的度量单位。IFPUG功能规模度量(FunctionalSizeMeasurement,FSM)是用功能点分析(FPA)方法来度量软件功能规模的活动。FP的目的•一个成功的软件项目首先要有一个好的起点,也就是一个合理的项目计划;一个好的项目计划,离不开一个准确的、可信的、客观的项目估算数据作为基础。•之所以要先制定项目计划,目的就是为了让项目更加可控。•加班是对不负责任的进度承诺的惩罚。缺乏有效的估算方法与过程导致无法制定出准确的项目计划更准确的项目规模更客观的项目进度和预算项目的可预测性更早的风险识别•仅仅通过估算实践本身并不能获得准确的估算结果,还需要通过有效的项目控制。•FP的首要目标不是预测项目的结果,而是确定项目目标是否足够现实,从而让项目在可控的状态下达到这些目标。•估算无需非常准确,但是要有用。FP估算计划监控FP的价值工作量估算人力成本预算FP的应用生产率工资平均成本项目能否按期交付?项目的收益?FP项目功能点/生产率=项目工作量资源个数*平均工资=资源成本2.FP估算过程FP估算步骤1.确定项目的计数范围2.分析需求,识别边界3.识别功能点类型4.计算功能复杂度5.调整影响因子TDIVAF=0.65+0.01*TDI6.输出计算结果确定项目的计数范围•新开发项目•开发并交付软件应用的第一个正式版本项目•升级项目•开发并交付修改后的项目,包括所有被增加、修改和删除的功能•功能增强性项目•单一功能改造的项目分析需求,识别边界IFPUG标准中给出了识别应用边界的规则•边界的定义必须基于用户的视角,边界必须是用户能够理解和描述的;•相关应用之间的边界是由用户看到的不同功能区域来划分,而不是由技术考虑来划分的;•应用之间初始的边界不会因为功能点分析而改变。在升级项目中,如果原先的应用已经识别了边界,则边界不需要重新识别•事务功能•EI:ExternalInput外部输入•用户通过界面向系统输入,目的是维护ILF或更改系统的行为。•如:增、删、改的操作。•EO:ExternalOutput外部输出•系统向用户输出,通过逻辑处理派生数据。•如:导出、报表、打印、出错信息。•EQ:ExternalQueries外部查询•系统向边界外发送数据,该数据未经加工。•如:查询区分功能点•数据功能•ILF:InternalLogicalFiles内部逻辑文件•用户角度识别的,被系统边界内维护的数据或控制信息。•数据库的表、独立的文件•用户看到的一个完整业务逻辑对象,在系统内部可能对应多个数据表。•EIF:ExternalInterfaceFiles外部接口文件•被其他系统维护的,本系统需要调用的数据几个关注点每个事务功能都是唯一的基本过程每个基本过程都由一个或多个处理逻辑来实现代码数据不能算作数据功能数据功能的维护、获取都需要通过事务功能来进行控制信息是影响基本过程的数据,也需要考虑数据功能功能点识别规则•识别EI\EO\EQ的规则有哪些?•EI的识别规则•EQ\EO的识别规则•如何正确区分EI\EO\EQ?•EI\EO\EQ的区分•如何正确识别ILF\EIF?•ILF的识别规则•EIF的识别规则•事务型功能点复杂度•DET:通过界面录入的具体数据项•FTR:事务功能需要操作的数据文件的数目•数据存储类的复杂度•DET:具体数据存储文件的数据项(字段)的数目。•RET:一个EIL\ILF中用户可以识别的DET的集合。计算功能点的复杂度•EI复杂度计算规则•EO/EQ复杂度计算规则•ILF复杂度计算规则•EIL复杂度计算规则调整影响因子影响程度级别影响状况0不存在或者没有影响1偶尔的影响2轻微的影响3中等的影响4显著的影响5强烈的影响●1.数据通讯●2.分布式数据处理●3.性能●4.使用强度高的配置●5.事务处理率●6.在线数据输入●7.最终用户的效率●8.在线更新●9.复杂的处理●10.可重用性●11.安装的简易性●12.运行的简易性●13.多场地●14.允许变更•新开发项目•DFP=UFP*VAF•二次开发项目(若有前期估算基础)•EFP=[(ADD+CHGA+CFP)×VAFA]+(DEL×VAFB)•功能增强(若有前期估算基础)•AFP=[(UFPB+ADD+CHGA)-(CHGB+DEL)]×VAFA计算结果输出术语中文含义UFP未调整的功能点复杂度VAF功能点的调整因子的计算公式ADD新增的功能点复杂度CHGA修改的功能点,未调整的功能点复杂度CFP转换功能的功能点复杂度VAFA升级后的功能点调整因子DEL被删除的功能点复杂度VAFB升级前的功能点调整因子UFPB改造前的未调整的功能点复杂度CHGB修改的功能点,修改之前的功能点复杂度小结FP计算过程•收集可得到的文档•确定计数范围和边界,识别功能用户需求•度量数据功能•度量事务功能•调整因子,计算功能规模数据功能度量过程•识别数据功能(借助识别规则)•分类数据功能ILF\EIF•判断RET和DET(借助计算规则)•根据复杂度判定表计算复杂度•根据复杂性转换表计算功能规模事务功能度量过程•识别事务功能(借助识别规则)•分类事务功能EI\EO\EQ•判断FTR和DET(借助计算规则)•根据复杂度判定表计算复杂度•根据复杂性转换表计算功能规模3.FP估算案例案例一:卡bin风控接口参数校验获取银行信息风控•业务方提供卡bin,卡bin系统匹配后返回相应的发卡行机构代码、发卡行名称、卡片类型。匹配失败则返回“无匹配结果”需求描述用例图区分功能点•数据型•card_bin_info_mgr-ILF•BankNo※•CardBin•CardType※•BankName※•RespCode-系统计算结果•RespDesc-系统计算结果•事务型•获取银行信息—接收卡bin,查询对应银行信息,返回结果;对卡bin进行参数校验,校验不通过则返回校验失败信息。确定数据分类•card_bin_info_mgr用户可识别的数据表或控制信息,并且数据是逻辑成立的数据表是被边界内的基本处理过程来维护的BankNo※CardBinCardType※BankName※RespCode-系统计算结果RespDesc-系统计算结果结论:一个ILF确定事务分类•获取银行信息该事务是否符合EI/EO/EQ的目的?EI:以修改ILF为目的EO:返回一个经过计算的结果EQ:返回查询的结果结论:一个EO计算ILF\EIF复杂度ILFRETDET个数复杂度未调整的FP个数card_bin_info_mgr16低7RET计数规则是否适用该规则ILF或EIF的每个可选的或强制的分组算作一个RET如果没有分组,则将ILF或EIF作为一个RET无强制分组一个ILFDET计数规则是否适用该规则唯一的字段,通过程序维护的用户可区分的非重复字段,算作一个DET每个字段都是唯一的当两个程序引用同一个ILF\EIF,但各自维护、引用的是各自的DET,则只计算各自使用的DET用户需要用来与另一个ILF\EIF建立关系的每一条数据都计算为一个DET---主外键计算EI\EO\EQ的复杂度EOFTRDET个数复杂度未调整的FP个数获取银行信息FTR计数规则是否适用该规则在基本进程的处理过程中每读取一个ILF或EIF计为一个FTR读取card_bin_info_mgr每个被维护的ILF计为一个FTR否即被读取又被维护的ILF算作一个FTR否1EO-DET计数规则是否适用该规则用户可识别的非重复的字段进入应用边界并且指明处理什么、何时处理或处理方式并且由EO/EQ返回或产生,那么每个字段算一个DET否每个发出应用边界的用户可识别的非重复字段算一个DET6如果字段同时进入发出边界,对该EO/EQ来说,只算一个DET如果应用能够发送一个系统响应信息(如:说明过程中发生错误,确认处理过程已经完成,确认处理过程应该继续)到应用边界之外,这种能力算一个DET1即使有多种方法调用同一逻辑过程,也只能为这一特定动作计算一个DET对那些虽然被保存、返回、派生的没有穿越边界的字段不计算DET文字的,页面的,系统产生的标签不计算DETEOFTRDET个数复杂度未调整的FP个数获取银行信息17低4(调整前)总FP的个数:UFP=11调整因子参数参数名称影响程度等级(TDI)T1数据通讯5T2分布式数据处理1T3性能3T4使用强度高的配置0T5交易速度3T6在线数据输入5T7最终用户的效率0T8在线更新3T9复杂的处理0T10可重用性3T11安装的简易性0T12运行的简易性0T13多场地0T14允许变更3影响程度级别影响状况0不存在或者没有影响1偶尔的影响2轻微的影响3中等的影响4显著的影响5强烈的影响(调整系数)VAF=0.65+0.01*TDI=0.91TDI=26计算调整因子计算结果DFP=UFP*VAF=11*0.91=10.01UFP=11VAF=0.65+0.01*TDI=0.91TDI=26EI、EO、EQ、ILF、EIF的复杂度总和调整因子总和调整系数FP计算结果用户需求•用户要求保存客户的销售交易情况。在信息保存之前,可以查看每项交易金额的交易总额。若用户不存在提示出错。SalesTransactionCustomerName:TransactionDate:CostItemQtyatItemCostItemTotal¥.¥.¥.¥.¥.¥.¥.¥.SubTotalSalesTaxTotal¥.¥.¥.F1=Save案例二:客户交易记录处理•客户姓名•交易日期•单项•数量•商品单价•商品总价•交易小计•销售税•交易合计商品库销售记录EOEIEQEIFTRDET个数复杂度未调整的FP个数销售记录保存销售商品、销售记录2客户姓名、交易日期、单项、数量、商品单价、商品总价、交易小计、销售税、交易合计、F1保存、报错信息11中4数据功能RETDET个数复杂度未调整的FP个数EIF销售商品1单项、商品单价低5ILF销售记录1客户姓名、交易日期、单项、数量、商品总价、交易小计、销售税、交易合计低7保存算一个EI,查询并汇总算一个EO吗?计算过程第一步:分析项目特点,确定计算范围和边界第二步:度量数据功能第三步:度量事务功能第四步:计算功能规模•识别数据功能•把数据功能分类为ILF或EIF•识别数据功能的DET和RET•识别基本过程并确定其唯一性•把基本过程分类为EI\EO\EQ•识别事务功能的FTR和DET•调整计算因子•按公式计算结果,输出估算文档•确定数据功能的复杂性•计算数据功能的功能规模•确定事务功能的复杂性•计算事务功能的功能规模识别数据功能•识别计算范围内所有逻辑相关的用户可识别的数据组或控制信息•排除不被任何应用维护的实体•分组实体依赖的相关实体•排除代码数据实体•排除不包含用户要求的属性的实体•去掉包含非用户要求的附加属性的关联实体以及仅包含外键的关联实体;销售记录(维护)、销售商品(读取)把数据功能分类为ILF或EIF•ILF的识别规则、EIF的识别规则客户的销售交易情况被应用维护,因此是一个IL