第四讲-成本估算估算的目标生成一个简单的表,描述要完成的任务、要实现的功能、以及完成每一项所需的成本、工作量和时间。3、估算1.对估算的观察。2.项目策划过程。3.软件范围和可行性。4.资源。5.软件项目估算。6.分解技术。7.经验估算模型。8.面向对象项目估算9.特殊的估算技术。10.自行开发或购买的决策。3、估算-对估算的观察估算是对未来的一种预测。有很大的不确定性。采用实用技术,对时间和工作量进行估算。估算是所有其他活动的基础。好的估算方法和可靠的历史数据提供了好的希望。估算的风险:取决于对资源、成本及进度的定量估算中存在的不确定性。采用现代软件工程的方法,可以在一定程度上接受用户需求的变更所带来的风险。3、估算-项目策划过程软件项目策划的目标是提供一个能使管理人员对资源、成本及进度做出合理估算的框架。3、估算-软件范围软件范围描述了将要交给最终用户的功能和特性、输入和输出的数据、使用软件时要呈现给用户的内容,以及界定系统的性能、约束条件、接口和可靠性。确定软件范围的方法:与所有相关人员交流之后,写出对软件范围的叙述性描述。由最终用户开发的一组用例。3、估算-软件可行性四个固定因素:技术:项目在技术上是可行的吗?它在技术水平范围内吗?能够将缺陷减少到一定程度而满足应用要求吗?经济:它在经济上可行吗?能以开发组织、客户或市场负担起的成本完成开发吗?时间:项目投入市场的时间可以击败竞争者吗?资源:组织拥有取得成功所需要的资源吗?3、估算-资源人力资源。可复用软件资源。环境资源。项目人员可复用软件环境位置数量技能网络硬件工具成品构件新构件部分经验构件完全经验构件项目资源图对每种资源必须描述的特征1、资源的描述。2、可用性说明。3、何时需要该资源。4、使用资源的持续时间。3、估算-软件项目估算软件成本和工作量的估算从来没有成为一门精确的科学。所以,一般是在一定的可接受的风险范围内的估算。把估算推迟到项目的后期进行。根据已完成的类似项目进行估算。使用比较简单的分解技术,生成项目的成本和工作量估算。使用一个或多个经验模型来进行软件成本和工作量的估算。3、估算-分解技术软件估算是一种解决问题的形式,在多数情况下,要解决的问题非常复杂,不能作为一个整体考虑。因此,要针对问题进行分解,把它分解成一组小的问题,再定义他们的特性。软件规模估算。基于问题的估算。基于过程的估算。基于用例的估算。调和不同的估算方法。3、估算-分解技术-基于规模的估算规模:是指软件项目可量化的结果。直接的方法是代码行技术,间接的方法是功能点技术。3、估算-分解技术-基于规模的估算四种不同方法:1、模糊逻辑:计划人员先确定应用类型,定性地确定其量级,然后在初始范围内在细化该量级。2、功能点法:计划人员对信息域进行估算。3、标准构件:项目计划人员估算每个标准构件出现的次数,再根据历史数据来确定每个标准构件交付时的规模。4、修改法:计划人员要估算必须完成修改的数量和类型。3、估算-分解技术-基于规模的估算采用LOC或FP方法之后,再采用三点估算法(期望值估算法)进行校正。S=(Sopt+4Sm+Spess)/6Sopt--乐观值。Sm--可能值。(遵循ß概率分布)Spess–悲观值。3、估算-分解技术-基于问题的估算代码行技术。任务估算技术。Delphi法。类比法。功能点估计法。PERT估计法。代码行技术LOC是指所有的可执行的源代码行数,包括可交付的语句、数据定义、数据类型声明、等价声明、输入/输出格式声明等。一代码行(1LOC)的价值和人月均代码行数可以体现一个软件生产组织的生产能力,开发组织可以根据对历史项目的审计来核算组织的单行代码价值。L=(a+4m+b)/6;任务估算技术项目计划人员首先给出一个有界的软件范围的叙述,再由此叙述把软件分解成一些小的可分别独立进行估算的子功能。然后对每一个子功能估算其FP(即估算变量)。生产率度量(FP/PM)用做特定的估算变量,导出子功能的成本或工作量。将子功能的估算进行综合后就能得到整个项目的总估算。计算公式:L=(a+4m+b)/6;Delphi法Delphi法是最流行的专家估算法。是依靠一个或多个专家对项目做出估计,它要求专家具有专门知识和丰富的经验,是一种近似的猜测。1.向专家提供项目规格和估计表格。2.协调人召开专家讨论。3.各专家匿名填写估计表格。4.协调人整理估计表格,再将迭代表返回专家。5.协调人再次召开专家会,讨论较大的估计差异。6.专家重新填写估计表。7.重复4-6,直到达到一个最低和最高估计的一致。类比法将新项目与历史项目比较,估算出各功能的估计值。等价代码行=[(重新设计%+重新编码+重新测试)/3]*已有代码行3、估算-分解技术-基于过程的估算最通用的项目估算技术是根据将要采用的过程进行估算。即,将过程分解为一组较小的任务,并估算完成每个任务所需的工作量。具体方法:先抽取功能,在针对每个功能所必需的一系列框架活动;计算每个功能的持续时间和所需要的人数(不同级别的人的工资不同),就可以计算工作量和成本了。3、估算-分解技术-基于用例的估算建立基于用例的估算方法的困难:1、没有标准形式。2、用例表现的是软件的外部视图。3、用例没有标识它所描述的功能和特性的复杂性。4、用例没有描述出涉及很多功能和特性的复杂行为。3、估算-分解技术-基于用例的估算当一个大型系统按层次分解完成后,并要求每个层次由不超过10个用例,每个用例的场景不超过30个时,可以采用如下的经验公式:但是,最终还要落实到LOC或FP上。基于用例估算的经验公式LOC估算=N*LOCavg+[(Sa/Sh-1)+(Pa/Ph-1)*LOCadjustN:实际用例数。LOCavg在这种类型的子系统中,每个用例包含的平均场景数。LOCadjust校正值。以LOCavg的n%来表示。Sa:每个用例实际包含的场景数。Sh:在这类子系统中,每个用例包含的平均场景数。Pa:每个用例的实际页数。Ph:在这类系统中,每个用例的平均页数。3、估算--经验模型IBM模型。Putnam模型COCOMO模型(COnstructiveCostMOdel)3、估算--经验模型--IBM模型1977年,IBM的Walston和Felix提出。估算公式:E=5.2×L0.91L是源代码行数。以KLOC计。E是工作量。以PM计。D=4.1×L0.36,D是项目持续时间(以月计)。S=0.54×E0.6,S是人员需要量(以人计)。DOC=49×L1.01。DOC是文档数量(以页计)。在此模型中,一般指一条机器指令为一行源代码。一个软件的源代码行数不包括程序注释、作业命令、调试程序在内。对于非机器指令编写的源程序,如汇编语言或高级语言程序,应转换成机器指令源代码行数来考虑。3、估算--经验模型--Putnam模型1978年Putnam对从美国军队计算机指挥系统的软件项目中收集到的数据分析而得的估算模型。Putnam模型是一个基于Norden-Rayleigh曲线的动态模型,在工作量、提交时间和程序规模之间有一个非线性的折中平衡功能。适用项目规模:30人年的项目。Putnam模型td是开发持续时间(以年计)。K是软件开发与维护在内的整个生存期所花费的工作量(以人年计)。L是源代码行数(以LOC计)。Ck是技术状态常数。Ck值开发环境2000差8000好11000优3、估算--经验模型--COCOMO这是由TRW公司开发。Boehm提出的结构型成本估算模型,是一种精确、易于使用的成本估算方法。基本参数:DSI(源指令条数)KDSI=1000DSI。MM(度量单位为人月)。TDEV(度量单位为月)表示开发进度。Putnam模型中Ck值效益分析案例一个公司实际项目预算审批流程:项目经理提出-部门经理审核-项目管理部审核-公司领导批准。各项控制指标:软件开发部门可控的费用:50%。与实际发生成本误差控制在±10%。公司管理费大约占20-30%。平均利润在30%左右。