软件开发成本估算
- 格式:docx
- 大小:21.06 KB
- 文档页数:11
软件开发成本估算
软件开发成本估算主要指软件开发过程中所花费的工作量及相应的代价。不同与传统的工业产品,软件的成本不包括原材料和能源的消耗,主要是人的劳动的消耗。另外,软件也没有一个明显的制造过程,它的开发成本是以一次性开发过程所花费的代价来计算的。因此,软件开发成本的估算,应是从软件计划、需求分析、设计、编码、单元测试、集成测试到认证测试,整个开发过程所花费的代价作为依据的。
软件开发成本估算的经验模型
1.Putnam 模型
1978年Putnam提出的,一种动态多变量模型。
L = Ck * K1/3 * td4/3
其中: L-----------源代码行数(以LOC计)
K-----------整个开发过程所花费的工作量(以人年计)
td-----------开发持续时间(以年计)
Ck----------技术状态常数,它反映“妨碍开发进展的限制”,取值因开发环境而异,见下表
从上述方程加以变换,可以得到估算工作量的公式: K = L3/(Ck3*td4) 还可以估算开发时间: td = [L3/(Ck3*K)]1/4
2.COCOMO模型(constructive cost model)
这是由TRW公司开发,Boehm提出的结构化成本估算模型。是一种精确的、易于使用的成本估算方法。
COCOMO模型中用到以下变量:
DSI-------源指令条数。不包括注释。1KDSI = 1000DSI。
MM-------开发工作量(以人月计) 1MM = 19 人日 = 152 人时 =1/12 人年TDEV-----开发进度。(以月计)
COCOMO模型中,考虑开发环境,软件开发项目的类型可以分为3种:
1.组织型(organic): 相对较小、较简单的软件项目。开发人员对开发目标
理解比较充分,与软件系统相关的工作经验丰富,对软件的使用环境很
熟悉,受硬件的约束较小,程序的规模不是很大(<50000行)
2.嵌入型(embedded): 要求在紧密联系的硬件、软件和操作的限制条件下
运行,通常与某种复杂的硬件设备紧密结合在一起。对接口,数据结构,算法的要求高。软件规模任意。如大而复杂的事务处理系统,大型/超大型操作系统,航天用控制系统,大型指挥系统等。
3.半独立型(semidetached):介于上述两种软件之间。规模和复杂度都
属于中等或更高。最大可达30万行。
估算公式:
基本COCOMO模型估算工作量和进度的公式如下
工作量:MM = r*(KDSI)c
进度:TDKV = a(MM)b
其中经验常数 r, c, a, b 取决于项目的总体类型。
COCOMO模型按其详细程度可以分为三级:基本COCOMO模型,中间COCOMO模型,详细COCOMO模型。其中基本COCOMO模型是是一个静态单变量模型,它用一个以已估算出来的原代码行数(LOC)为自变量的经验函数计算软件开发工作量。中级COCOMO模型在基本COCOMO模型的基础上,再用涉及产品、硬件、人员、项目等方面的影响因素调整工作量的估算。详细COCOMO模型包括中间COCOMO模型的所有特性,但更进一步考虑了软件工程中每一步骤(如分析、设计)的影响。
基本COCOMO模型
通过统计63个历史项目的历史数据,得到如下计算公式。
新增人员的开支是不能被忽略的.这需要在实际开发过程中统计得到数据,来精确计算.
项目策划任务集:
1.明确项目范围
2.确定可行性
3.分析风险
4.确定需要的资源
a.确定需要的人力资源
b.确定可复用的软件资源
c.标识环境资源
5.估算成本和工作量
a.分解问题
b.使用规模,功能点,过程任务或用例等方法进行两种以上的估算
c.调和不同的估算
6.制定项目进度计划
a.建立一组有意义的任务集合
b.定义任务网络
c.使用进度计划工具制定时间表
d.定义进度跟踪机制
在项目策划任务集中,每一步都涉及到软件开发成本.对人员,环境,可复用软件的资源的统一调度,将直接影响成本.其中受软件开发的特殊行,人力资源成本是最不好控制的.相对来说环境资源就容易控制得多.
环境资源包括软件工具,硬件,网络资源等,当然还要包括公司的日常费用(刨除开发团队佣金与开支,因为这部分属于人力资源成本).这些无非是买来或者维持,成本是很容易计算的.
可复用软件资源就要考虑到软件的具体设计,功能模块的关系以及系统架构等具体信息.专家建议是将软件资源分为如下四部分:
1.成品构件:指能够从第三方直接购买的商品构件.或者以前项目中完全相同的构件.
2.具有完全经验的构件:以前项目开发过的,与当前需求相似的功能构件.
3.具有部分经验的构件:为以前项目开发,与当前项目要构造的软件有关的已有规格,设计,代码或测试数据.但是需要从新架构.
4.新构件
开发的成本可像而知,是升序排列的.所以在软件开发的一开始就应该考虑的使用以后技术,对可复用软件资源进行整理,不能在开发过程中才考虑,要知道一个关键构件的重用会为软件开发带来多大的效益.不过凡事也不是必然,不已有构件的扩展要考虑到原构件设计,开发文档的完整性等因素.
还是就人力资源进行分析,由于跟人能力与技术方向的不同,programmer 不可能像一般意义上的工人或者机器一样有效地预期成本.我们可以开发一个原型,利用原型数据来对应分析每个人的价值与成本.但是应该考虑的是,随着
程序员的个人因素的变更(年龄,职务,时间,身体状况等),原型数据只能作为一个一般参考.例如SARS期间,或流行性感冒的传播,人力成本就会变得不好控制.(极限情况下,这将使一个项目面临流产~)
目前流行的估算模式大致可分为如下几类:
分解估算:
1.软件规模估算.
2.基于问题的估算.
3.基于loc估算.(loc:代码行数)
4.基于fp估算.(fp:functionpoint 功能点)
5.基于过程估算.
6.基于用例估算.
......
经验估算:
典型的经验估算模型是通过回归分析从以往的软件项目中收集的数据得来的.这种模型的总体结构表现为下面的形式:
E=A+B*(e)^C
其中A,B,C都是经验常量.E是工作量(单位:人*月),e是估算变量(loc 或者fp).除了公式表达的方式以外,还有一些形式的项目调整成分,如问题的复杂程度,开发人员经验,开发环境等,一下列出些常用的调整系数: