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






