软件估计规程
文档编号:FHI_CMMI_PP_PRD_SEST 文档信息:软件估计规程 文档名称:软件估计规程 文档类别:CMMI规程 密 级:内部秘密 版本信息:1.1 建立日期:2016-1-13
创 建 人:EPG 批 准 人:李庆林 批准日期:2016-2-25
存放位置:集成公司组织资产库/组织标准过程 编辑软件:Microsoft Office 2003 中文版
文档修订记录
版本编号或者更改记录编号 V1.0 V1.1 变化状态 C M 简要说明(变更内容和变更范围) 创建 文档编号去掉版本号 修改日期 2016-1-13 2016-4-17 变更人 张娜娜 邓沛沛 批准日期 2016-2-25 2016-4-17 批准人 李庆林 李庆林 *变化状态:C――创建,A——增加,M——修改,D——删除
目 录
1、简介 ........................................................................................................................................... 5
1.1 目的 ............................................................................................................................ 5 1.2 适用范围 .................................................................................................................... 5 1.3 术语表 ........................................................................................................................ 5 1.4 参考资料 .................................................................................................................... 5
2、
总体描述 ........................................................................................................................... 5 2.1概述 ............................................................................................................................. 5 2.2参与人员 ..................................................................................................................... 6 2.3入口准则 ..................................................................................................................... 6 2.4输入 ............................................................................................................................. 6 2.5出口准则 ..................................................................................................................... 6 2.6输出 ............................................................................................................................. 7 2.7资源和能力要求 ......................................................................................................... 7 2.8度量 ............................................................................................................................. 7
3、活动与规程 ............................................................................................................................... 7
3.1估计软件规模 ............................................................................................................. 7 3.2估计各阶段缺陷数量 ................................................................................................. 8 3.3估计难度等级 ............................................................................................................. 8 3.4估计工作量 ................................................................................................................. 8 3.5估计成本 ..................................................................................................................... 9 3.6估计关键计算机资源 ................................................................................................. 9 3.7估计软件工程设备和支持工具 ................................................................................. 9 3.8估计关键路径和关键依赖关系 ................................................................................. 9 3.9建立管理储备 ........................................................................................................... 10 3.10评审估计 ................................................................................................................. 10 3.11制定进度表 ............................................................................................................. 10 3.12建立项目挣值基线 ................................................................................................. 11
3.13阶段详细估计 ......................................................................................................... 11 3.14形成《软件估计书》 ............................................................................................. 11 3.15评审《软件估计书》 ............................................................................................. 12
3、
附录 ................................................................................................................................. 12 a) 估计方法 .................................................................................................................. 12
i. 历史数据估计方法 ........................................................................................... 12 ii. Delphi 估计方法 .............................................................................................. 12 iii. iv.
Pert Sizing Technique估计方法 ................................................................ 13 代码重用估计方法 .................................................................................... 14
v. 改善项目估计 ................................................................................................... 14 vi.
工作量估计的方法 .................................................................................... 14
b) 估计系数 .................................................................................................................. 15
i. 开发工具系数 ................................................................................................... 16 ii. 规模系数 ........................................................................................................... 16 iii. iv.
生产力系数 ................................................................................................ 16 成本系数 .................................................................................................... 17
v. SCM系数 ......................................................................................................... 17 vi. vii.
SQA系数 ................................................................................................... 17 改善项目规模系数 .................................................................................... 18
1、简介
1.1 目的
本文档的目的是为了描述对软件产品的规模、工作量、成本、关键计算机资源和进度等进行估计,描述了估计的步骤和过程。
1.2 适用范围
本文档适用于公司的所有软件项目。
1.3 术语表
无。
1.4 参考资料
无。
2、 总体描述
2.1概述
每一个项目都要进行估计,并将估计的结果作为项目计划的基础。估计是项目计划的核心。目的是为项目建立合理的预算,确定合适水平的员工,并为项目承诺提供基础。一个没有建立在合理估计基础上的计划会提供一种错误的安全感,可能比根本没有计划更糟。
估计的内容通常包括:规模、工作量/成本、外部成本、关键计算机资源、管理储备、进度表等。 估计和计划贯穿了整个项目。在项目的早期阶段,使用自上而下(top_down)的方式进行粗略的估计和制定进度表。随着项目的进展,在每个详细的计划阶段,使用自下而上(bottom_up)的方法为子阶段进行更详细的计划。下一阶段的底层WBS元素必须定义,并在WBS中进行记录。先对WBS的底层元素进行估计,然后汇总到较高层,用来更新总的软件估计。软件估计的流程如下:
从上到下估计外部成本估计制定进度表软件规模估计关键计算机资源估计建立项目基准工作量估计建立管理储备阶段详细估计
图表 1 软件估计流程
本文提供了几个估计方法及相关过程,它们主要应用于公司的软件项目规模、工作量及成本、关键计算机资源等的估计。如果这些估计方法不适用于特定的项目,项目经理必须为该项目提出另外的估计方法。
2.2参与人员
项目经理:组织召开估计会议,进行软件估计。
软件工程组:在项目经理组织下,共同完成项目的各项估计。 相关人员:主要是指对本项目情况较熟悉的人员。 CM人员:在项目经理组织下,完成CM工作的估计。 QA人员:在项目经理组织下,完成QA工作的估计。
2.3入口准则
《WBS》已完成(参见《软件估计书模板》)。 《风险管理列表》已完成
2.4输入
《软件需求规格说明书》
《WBS》(参见《软件估计书模板》) 《风险管理列表》
2.5出口准则
估计活动完成。 估计结果通过评审。
2.6输出
《软件估计书》
2.7资源和能力要求
项目经理、项目成员具有类似产品开发的经验。
2.8度量
项目经理进行以下统计:
软件估计所花费的工时;
实际结果和软件估计结果的偏差(项目结束时统计计算)。
3、活动与规程
3.1估计软件规模
规模估计的目的是为了判断待开发软件产品的规模,规模是成本估计、进度估计的基础,为了估计成本和进度,所以必须进行规模估计。WBS是软件规模估计的基础。
我们常用的估计整个软件产品的规模的单位是:
功能点(FP)。 代码行(LOC)。
其它:如交易数量、表数量等。
有时需要估计个别软件工作产品的规模,一般采用以下单位: 页:用于估计技术文档规模。 字数:用于估计技术文档规模。 测试用例的个数:用于估计测试规模。
规模度量单位的选用参照《软件规模度量单位选用规程》,且必须记录在《软件开发计划》中。 估计软件产品的规模主要依靠过去相关的经验,估计人员应当具有相似系统的开发经验,利用自上而下(top-down)或者自下而上(bottom-up)方式进行软件规模的估计。具体步骤如下:
1. 2. 3. 4.
将软件工作产品拆分成能实现精确估计的较小部分。 分析软件产品的WBS。 选择合适的度量单位。
选择估计方法,结合选择的技术解决方案(开发工具、语言、平台等),对WBS中的产品功能进行估计。 5. 6.
估计结果可能是一个最高值和最低值的范围偏差 使用适当的历史数据验证估计结果。
7. 8.
在项目策划过程中,评审和修正有关软件规模估计的问题,对软件产品的估计达成一致。 将规模估计的结果记录到《软件估计书》中。
3.2估计各阶段缺陷数量
具体估计方法和步骤参见《缺陷管理规程》。
3.3估计难度等级
估计人员估计任务的难度等级,可以根据以下几个方面:
数据通讯(Data Communications)
分布式数据处理(Distributed Data Processing) 性能(Performance)
使用强度高的配置(Heavily Used Configuration) 交易速度(Transaction Rate) 在线数据输入(Online Data Entry) 最终用户的效率(End-User Efficiency) 在线更新(Online Update) 复杂的处理(Complex Processing) 可重用性(Reusability)
安装的简易性(Installation Ease) 运行的简易性(Operational Ease) 多场地(Multiple Sites) 允许变更(Facilitate Change)
对于难度,我们现阶段采取较主观的方式去估计。
3.4估计工作量
完成项目规模估计后,应该确定完成这些工作需要的时间(以工时为单位),项目经理应该使用模型、历史数据和软件工作产品大小来确定项目工作量。
工作量估计的内容应当包含以下内容: 1. 2. 3. 4.
软件开发工作量,包括需求分析、设计、编码、测试、其它技术文档。 项目支持活动的工作量,包括:配置管理的工作量,质量保证活动的工作量。 项目管理活动的工作量。
工作量的估计可以按以下步骤进行: 选择估计方法,目前建议使用Delphi方法。 对WBS中的每个任务分别进行估计。
估计项目支持活动的工作量,使用下面公式分别估计CM、QA的工作量:
CM工作量 = 软件的工作量* 5% QA工作量 = 软件的工作量* 5%
软件工程组应和CM人员、QA人员讨论对配置管理、质量保证活动建立总体的估计。对于在最初使用该估计的项目,其估计大约为开发工作量的5%,然后将此工作量分配到各自WBS的具体活动中。随着历史数据的不断积累,可重新定义其占有开发工作量的比例,也可先对具体WBS活动进行估计,此时可采用Delphi方法及类比法。 估计出培训的工作量,大概是软件工作量的3%。
估计出项目管理活动的工作量,近似于软件工作量的15%~20%。 将估计的结果记录到《软件估计书》中。
3.5估计成本
估计出工作量后,应根据公司的财务要求,进行成本的估算。估算的内容有:
人力成本:人力成本(按日)*(工作量/8)。
直接费用:直接可以报销的费用,如饭费、车费、活动费用等。
3.6估计关键计算机资源
项目经理应该明确完成项目所需的关键计算机资源,并进行关键计算机资源估计。关键计算机资源可以是服务器环境、测试环境、目标环境等。
估计关键计算机资源的步骤如下: 1.
关键计算机资源是在软件开发和操作中受到约束的硬件资源,如:计算机内存、磁盘容量、网络容量、处理器性能。项目经理根据《软件需求规格说明书》中对关键计算机资源的描述,确定关键计算机资源的约束。 2. 3.
如果有关键计算机资源,则要估计软件开发或运行中的资源状况。
与估计的软件规模、计划的处理负载、预计的数据量、或其他因素相联系,来估计所需的资源的总量,作初始估计。 4. 5. 6. 7.
当初始估计做好后,应对每一项资源建立一定的储备。 设计或者选用资源的限度作为跟踪的目标,确定跟踪的方法。 与有资格的人员讨论估计,并使他们批准达成一致的估计内容。 将估计的结果写入到《软件估计书》中。
3.7估计软件工程设备和支持工具
软件工程设备和支持工具的估计是以软件工作产品和特性的规模估计为基础的。包括设备资源、设施和支持工具,获得或升级软件开发工具,提高网络容量,明确需要的许可证数量,以及关键设备等。项目经理负责详细说明所需的资源,并且协调影响项目进度和成本等的资源。
3.8估计关键路径和关键依赖关系
项目经理和软件工程组的相关人员、SQA负责人、SCM负责人、相关组负责人根据各活动间的关系确定关键路径和关键依赖关系。
3.9建立管理储备
建立管理储备是为了适应那些在项目中不可避免出现的变更。它代表了为用于批准的项目变更而保留的部分项目资金,动用管理储备必须经过高层经理批准。
管理储备的估计由项目经理负责完成。
管理储备的总额(在整个项目预算中的百分比)应基于预计的需求稳定性和评估的风险,一个有较高风险和不稳定需求的项目应比一个有较低风险和稳定需求的项目有较高的管理储备。对大多数项目来说,管理储备为项目预算的20%,管理储备应包括内部和外部的成本。下图说明了被批准的项目预算和管理储备是如何组成总的项目预算的。
开发工作量 1000小时 50小时 50小时 配置管理(5%) 质量保证(5%) 其他(培训) 24小时 220小时 1344小时 270小时 项目管理(20%) 总的已批准的预算: 管理储备(20%) 总的项目预算 1614小时 项目的管理储备估计结果写入到《软件估计书》。
3.10评审估计
《软件估计书》作为项目计划的一部分,在项目计划完成后或者每次估计变更后,项目经理应召集有类似项目经验的人对《软件估计书》的估计部分内容进行评审,内容包括:
1. 2. 3. 4.
确认规模、工作量和成本、进度估计所采用的方法是恰当的 确定估计的每个步骤的输入是正确的 确定软件估计结果是合理和正确的 确定估计的内容是完整的
3.11制定进度表
进度表的制定可以按以下流程进行: 1. 2.
项目经理和各负责人根据估计的工作量和关键路径确定每个活动的起止日期。
根据第2步的结果,结合项目人员的具体情况,项目经理和各负责人调整任务的起始日期、终止日期,甚至是调整某些任务的负责人和关键路径。(如:通过第2步的结果,发现某些
项目人员在某个时间段内工作超负荷,而有些人员在某些时间段内工作量不足,这样就需要调整。若实在调整不了,就有可能会调整关键路径)。 3.
项目经理在项目进度表中要安排里程碑点(里程碑点一般选在有特定意义的阶段点,如重要阶段的开始或结束),并形成进度表的草稿。 4.
将草稿提交给项目组的成员或负责人,得到他们的承诺或根据他们的意见进行修改,直至达成一致。 5.
CM人员和QA人员根据达成一致的进度表,确定自己的日程安排。
注意:
返工的问题:软件项目中的返工工作量是较大的,即在发现工作产品缺陷时的修改工作。一般
来说,应在每个阶段为返工的工作留出统一使用的储备时间。
有些项目较紧急,要求项目成员加班进行工作。对于这种情况,制定进度表一定要小心。因为
若有特殊情况或某项关键任务估计得过于乐观,会导致项目进度拖延,而无法再用加班的方式进行弥补。
管理活动的时间占用问题:项目经理根据软件估计中的管理估计和一些技术方面的LOE活动
的估计,确定项目各成员在各个阶段可以真正用于完成技术任务的时间。如:在编码阶段,某项目成员每周工作40小时,但评审、CM工作、项目会议以及一些技术方面的交流、培训就占去了18个小时,那么在安排该项目成员的技术任务时,只能按照他每周工作22(40-18)个小时去安排。
3.12建立项目挣值基线
1.
挣值基线,也叫做计划工作的预算成本(PV)。是通过把每个任务的预算成本和计划完成的指定时间段相联系建立起来的。(可参见《EV规程》) 2.
在项目的跟踪与监控过程中,通过获得挣值图对成本进行度量,具体参见《项目跟踪与监控过程》。 3.
在《软件估计书》的“挣值基线”页绘制挣值基线。
3.13阶段详细估计
1.
在项目每个阶段开始前,要作阶段详细估计(工作量和时间表)。估计的步骤同上述的过程相同。 2. 3.
把详细估计累计起来,确定项目和阶段的总估计。 完成后更新总体的软件估计和项目计划。
3.14形成《软件估计书》
将上述估计的结果记录到《软件估计书》中。(可参见《软件估计书模版》)
软件估计要在项目的不同阶段进行,一般是在本阶段完成时进行下一阶段的详细估计。《软件估计书》作为项目计划的一部分一起评审。
3.15评审《软件估计书》
软件工程组内部评审《软件估计书》。
4、附录
a) 估计方法
i.
历史数据估计方法
这种软件规模估计方法主要是利用已完成的项目数据来估计软件的代码量,通常用代码行数表示。使用此方法需注意以下几点:
充分了解系统需求
判断历史项目对现有软件的适用性
基于历史项目的相似性对软件规模进行相应的调整
历史数据估计方法的步骤如下:
1. 步骤一:分解软件系统
把软件系统模块化,通过系统模块化可以及早了解整个系统。系统分解程度要以历史项目为基础。
2. 步骤二:确定相似模块
使用历史项目要与当前项目有相似的应用和相似的语言。假如相似的模块不存在,也可以用其它方法估计该模块。
3. 步骤三:确定相似模块规模
使用历史项目可以通过标准的代码统计工具实现,在开发和估计当前项目规模时,要求使用同类型统计工具。
4. 步骤四:调整模块大小
软件模块估计的调整基于历史项目模块的相似程度或修改量。
5. 步骤五:记录估计数据
ii. Delphi 估计方法
鼓励使用此专业估计方法,它可以对软件规模(代码行数)、人员工作量、开发时间、费用等进行估计,其步骤如下:
1. 步骤一
项目经理选择三至六名有经验的工程师(可以是项目组外的工程师),他们应具备该项目的背景知识。
2. 步骤二
项目经理发给每位工程师一份估计参考资料(通常有:《立项报告》、《软件需求规格说明书》、《WBS》(参见《软件估计书模板》)、《风险管理列表》等)和一张记录估计值的表格,并进行估计。
3. 步骤三
每位工程师仔细研究估计参考资料的内容,然后项目经理召集小组会议。在会上,工程师与项目经理一起对估计问题进行讨论,填写估计表并交给项目经理。
4. 步骤四
每位工程师对该软件提出三个规模的估计值,即:
Ai——该软件可能的最小规模(最少源代码行数或最少功能点数) Mi——该软件最可能的规模(最可能的源代码行数或最可能的功能点数) Bi——该软件可能的最大规模(最多源代码行数和最多功能点数) 不记名填写表格,并说明做此估计的理由。
5. 步骤五
项目经理对每位工程师在表中填写的估计值进行综合和分类,完成以下内容: 计算每位工程师(序号为I, I=1,2,…,n)的估计期望值Ei和估计值的期望平均值E: Ei = (Ai + 4Mi +Bi)/6 ;
E = 1/4 ΣEi
对每位工程师的估计结果进行分类摘要。
6. 步骤六
项目经理召开会议,请工程师对其估计值的重大变动之处进行讨论。工程师对此估计值另做一次估计。
7. 步骤七
在综合工程师估计结果的基础上,组织工程师再次不记名填写表格。
步骤五到步骤七可适当重复几次,最终可获得一个得到多数工程师共识的软件规模。最后,通过与历史资料进行比较,根据过去完成项目的规模和成本等信息,推算出该软件每行源代码所需成本;然后再乘以该软件源代码行数的估计值,得到该软件的成本估计值。
8. 步骤八
将估计数据记录下来。
iii. Pert Sizing Technique估计方法
这种方法共估计三个值: 软件产品预期规模的一般值、最大值和最小值。通过这三个值的计算可得到一个统计学上的期望值和一个标准偏差。
公式:PERT公式估计的预期规模是E,标准偏差是SD:
E=(a+4b+c)÷6 SD=(c-a)÷6
例如:一个新的通信程序:
a=规模的最小值,例如:10KSLOC b=规模的一般值,例如 12KSLOC c=规模的最大值, 例如 15KSLOC 即:E=(10+4*12+15)÷6=12.167(KSLOC)
SD=(15-10)÷6=0.833
这就是说,此通信程序的规模可能会在11.334KSLOC(12.167-.833)和13KSLOC(12.167 + .833)之间。本估计方法的前提是对规模的估计没有偏见,经验表明,估计偏低的倾向大于偏高的倾向,使用时应加以考虑。
iv. 代码重用估计方法
本方法仅适用于对可重用模块的规模估计。本方法涉及三个参数,分别是新设计的百分比(%Redesign)、重新编码的百分比(%Recode)和重新测试的百分比(%Retest),使用这三个参数可以计算使用重用模块的代码规模计算公式为:
[(%Redesign + %Recode + %Retest) /3] *Existing Code = Equiv SLOC
例如:如果想重用一个有10000行代码的模块,其中40%需要重新设计,50%需要重新编码,60%需要重新测试,那么等价的新开发的代码量是:
[(40%+50%+60%)/3]*10000 = 5000 SLOC
v. 改善项目估计
本方法适合用于估计改善一个项目的规模,改善一个项目的规模和待改善的项目的规模相关,通过将待改善项目的规模乘以改善项目规模系数,可以估计出改善一个项目的规模,可以用如下的公式表示:
规模 = 待改善项目的规模 * 改善项目规模系数
vi. 工作量估计的方法
1. 运算法(ALGORITHMIC COST MODELS)
运算法是一种简单直观的估计方法,它根据规模估计的结果和相应的系数运算得到工作量估计:
工作量 = p*s*l*e
p = 软件产品的规模(SLOC) s = 生产力系数(1/每人月的代码行) l = 开发工具系数 e = 规模系数
组织应根据自身的实际情况,定义使用不同开发语言时的调整系数,并且应当根据历史信息,经常调整开发工具系数,当没有这些信息的时候,可以由组织中有经验的人决定,下表是开发工具系数表的例子:
开发工具 标准C 标准C++ VB PB VC C# 嵌入式C 嵌入式汇编 1.2 1.1 0.8 0.7 1.4 1.0 1.5 系数 软件规模的大小也是影响规模估计的参数之一,系统的规模越大,对工作量估计的影响就越小,这些数据的例子是:
规模(KSLOC) 50 100 300 500 1000 …. 1.09 1.08 1.05 1.04 1.03 ….. 系数 2. 专家判断法(EXPERT JUDGEMENT) 本估计方法需要使用者有类似系统的经验,结合规模估计的结果和WBS综合分析,形成对工作量
的估计,可以按照下面的步骤进行:
1. 2. 3.
结合WBS,根据经验和规模来估计WBS中每项原子功能的工作量。 根据每个功能点实现难度和风险的大小,适当调整工作量的估计 按阶段合计需要的工作量,形成总的工作量的估计
b) 估计系数
估计过程中需要使用很多的系数,这些系数在各个项目中是不同的,每个项目都可以根据实际情况确定自己的系数,可以参考其它项目或由项目内经验丰富的人来确定,随着软件过程数据库的丰富,不断的进行修正。
当系数表中没有合适的系数时,可以使用最相近的系数或由项目内经验丰富的人来确定,增加到系数表中。
所有系数的修改和增加,都应报告给SEPG,经高级管理者批准后更新到系数表中才可以使用。
i. 开发工具系数
在进行软件工作量的估计时,由于选用的开发工具不同,开发的效率会有差异,影响工作量的估计。估计时,必需根据使用的开发工具,选择合适的系数对估计结果进行修正,下面是常用工具的系数。
开发工具 标准C 标准C++ VB C# PB VC JAVA 系数 1.2 1.1 0.8 0.8 0.7 1.4 1.0 ii. 规模系数 软件规模的大小对工作量估计也有影响,规模和工作量一般情况下并非成线性关系,系统的规模越大,规模对工作量估计的影响就越小。使用时可以根据软件规模,选择合适的参数进行修正,当规模不在下表中的时候,请选择比估计规模小的最近似的系数,规模小于系数表中最小的规模时使用最小的规模。
下面是规模系数表:
规模(KSLOC) 50 100 300 500 1000 …. 1.09 1.08 1.05 1.04 1.03 ….. 系数 iii. 生产力系数 生产力系数是组织生产力水平的体现,是用平均每人月的代码行来计算的。这个平均每人月的代码行不仅仅指编码阶段,它包括从分析、设计、编码、测试的整个过程的平均,这个系数因为项目类型的不同有所不同,使用时可以从下面的表中选择。
项目类型 新开发项目 介入阶段 需求 概要设计 生产力系数 500
移植项目 升级项目 改善项目 详细设计 实现 测试 需求 分析 设计 实现 测试 需求调查 需求分析 设计 实现 测试 需求 分析 设计 实现 测试 600 850 700 800 1000 150 220
iv. 成本系数
成本系数反应的是组织内人力资源的平均成本,单位是元/人月,项目的工作量乘以成本系数,就是整个项目的开发成本。
劳动力系数的计算方法参见《开发成本及价格估算方法》的1.2节。劳动力系数定期重新计算,不以下表数据为依据。项目经理可以根据项目情况自己计算,以适合项目情况。
劳动力系数 18000 v. SCM系数 SCM系数是用于根据规模计算SCM所用的工作量的系数,用软件开发工作量乘以SCM系数可以计算出配置管理的工作量。
配置管理系数 0.05 vi. SQA系数
SQA系数是用于根据规模计算SQA的工作量的系数,用软件开发工作量乘以SQA系数可以计算
出质量保证活动所需要的工作量。
质量保证系数 0.05 vii. 改善项目规模系数 改善项目系数用于估计改善一个软件项目的规模,这个规模和待改善的项目的规模相关,将这个规
模乘(KSLOC)以改善项目规模系数,可以计算出改善一个项目的规模。
改善项目规模系数
0. 4
因篇幅问题不能全部显示,请点此查看更多更全内容