软件规模估算方法软件成本及工作量估算永远不会是一门精确的科学。太多的变化——人员、技术、环境、策略——影响了软件的最终成本及开发所需的工作量。不过,软件项目估算可以从神秘的技巧向一系列系统化的步骤的转变的过程中,估算出可接受的风险。现在世界上比较流行的软件估算方法有:“模糊逻辑”法,功能点法,标准构件法,修改法,基于代码行(LOC)的估算方法,基于功能点(FP)的估算方法,基于过程的估算方法,基于COCOMO模型的估算方法,基于软件方程式的估算方法。今天,一个软件成本估算模型如果能够达到以下结果就相当不错了:估算的软件开发成本与实际的成本相差不到20%,时间估算相差不到70%,而且是在它自己的地盘上(即,是它适用的项目类型)……这可能不象我们所期望的那么精确,但已经足以在软件工程经济分析及决策中提供很大的帮助了。为了可靠地估算成本及工作量,结合雁联公司项目历史数据比较缺少的特点。我们建议采用基于功能点(FP)的估算方法来估算工作量。以下是基于功能点(FP)估算方法的估算流程及估算例子。基于FP估算的分解是集中于信息域值,而不是软件功能。根据功能点计算方法原理,项目经理要从软件的输入、输出、报表、接口、内部处理及其他六方面进行估算。为了达到这个估算目的,我们假设复杂度加权因子都是平均的。项目经理根据自己的经验,按要求填写好基于功能点(FP)估算方法的工作量估算表。项目估算表项目名称项目经理估算信息域值客户端信息域值乐观值可能值悲观值估算计数加权因子FP计数输入输出报表接口数内部处理其他计算复杂度调整因子(Fi(i=1到14)是基于对附表1中问题的回答而得到的“复杂度调整值”(0到5))因子值因子值备份和恢复质量等级数据通信(接口)重用模块设计分布式处理内部处理系统性能人员技能系统移植过程方法界面复杂度开发工具重用程度项目管理采用下面的公式来估算功能点:FP=总计数值×[0.65+0.01×ΣFi]FPestimated(功能点)=E(工作量)=FPestimated/a采用下面的公式来估算项目合适的人员数目N=E/DNestimated(人员数目)=表格说明:1、功能点分解说明功能类型功能点描述功能点权重(编码阶段)备注输入输入界面1~3由易到难输出输出界面1~3由易到难报表报表,凭证2~4由易到难接口报文接口,文件接口,调用接口等2~6由易到难内部处理逻辑处理1~10由易到难其他算法研究、数据转移等5~10由易到难注:权重的基准值为1人天2、各生命周期工作量比例阶段参考工作量阶段分布比例基准值(%)参考工作量阶段分布比例范围(%)需求分析155~20系统设计2010~30编码及单元测试3525~50集成测试53~8功能测试2010~30性能测试52~103、表格中估算计数为估算变量(规模)的期望值即EV(expectedvalue),可以通过乐观值(Sopt)、可能值(Sm)、及悲观值(Spess)估算的加权平均值来计算:EV=(Sopt+4Sm+Spess)/6(公式)其中给予“可能值”估算以最大的权重,并遵循β概率分布。4、表格中加权因子由估算人员根据其经验对软件的输入、输出、查询、文件、及外部接口五方面功能点复杂度和所花时间的加权。建议加权因子取值范围为整数(0-10)5、其中公式E(工作量)=FPestimated/a中系数a为生产率。6、D为项目开发周期。附表1功能点估算复杂度调整参考问题表功能点估算复杂度调整参考问题表Fi:Fi(i=1到14)是基于对表2中问题的回答而得到的“复杂度调整值”(0到5)1.备份和恢复由低到高0:系统不需要备份和恢复模块5:备份和恢复模块数占总模块数超过30%2.数据通信(接口)由低到高0:系统不需要数据通信(无接口)5:需要复杂的数据通信(接口多于3个)3.分布式处理由低到高0:不需要分布式处理功能5:需要复杂的分布式处理功能(功能多于3个)4.系统性能由低到高0:无性能要求或性能要求很低5:性能要求很高5.系统移植由低到高0:代码不需要平台移植5:50%以上的代码需要平台移植6.界面复杂度由低到高0:输入项(输出项)小于7项5:输入项(输出项)大于20项7.重用程度由低到高0:系统可重用模块占总模块数超过60%5:无可重用的系统模块8.质量等级由低到高0:系统不需要内部测试5:系统需要严格的内部测试9.重用模块设计由低到高0:设计不考虑5:设计中可重用模块占总模块数超过40%10.内部处理由低到高0:文件交互模块(内部接口)少于5个5:文件交互模块(内部接口)少于20个11.人员技能由低到高0:技术级别7级以上人员多于3人5:都是新手12.过程方法由低到高0:开发过程有明确定义5:开发过程无明确的定义13.开发工具由低到高0:开发工具熟悉并稳定可靠5:开发工具完全不熟悉14.项目管理由低到高0:客户关系良好、需求稳定5:客户关系一般、需求变化大估算例子根据功能点计算方法原理,项目计划者估算CAD软件的输入、输出、报表、接口、内部处理及其他六方面来分别估算。为了达到这个估算目的,我们假设复杂度加权因子都是平均的。信息域值乐观值可能值悲观值估算计数加权因子FP计数输入数20243024496输出数12152216580报表数16222822488内部处理44541040接口数2232612总计数值316估算信息域值表接着,估算14个复杂度加权因子,并计算复杂度调整因子,因子值因子值备份和恢复4质量等级4数据通信(接口)2重用模块设计3分布式处理0内部处理5系统性能4人员技能3系统移植3过程方法3界面复杂度4开发工具3重用程度4项目管理2计算复杂度调整因子表根据公式FPestimated=总计数值×[0.65+0.01×ΣFi]得出FP的估算值FPestimated=总计数值×[0.65+0.01×ΣFi]=316×[0.65+0.01×44]=344.44根据公式E(工作量)=FPestimated/aE=FPestimated/a=344.44/1=344.44人天折算成人月=344.44/22.5=15.31人月根据公式N=E/DN=E/D=15.31/3=约5人