软件开发成本估算的
经验模
补充资料
软件开发成本估算的经验模型
• 软件开发成本估算是依据开发
成本估算模型进行估算的。
• 开发成本估算模型通常采用经
验公式来预测软件项目计划所
需要的成本、工作量和进度数
据。
• 用以支持大多数模型的经验数
据都是从有限的一些项目样本
中得到的。
IBM模型
E = ×
D = × = ×
S = ×
DOC = 49×
• L 是源代码行数 (KLOC),E 是
工作量 (PM),D 是项目持续时
间(月),S 是人员需要量 (人)
,DOC是文档数量 (页)。
• IBM模型是静态单变量模型。
• 在此模型中,一般指一条机器指
令为一行源代码。
• 一个软件的源代码行数不包括程
序注释、作业命令、调试程序在
内。
• 对于非机器指令编写的源程序,
例如汇编语言或高级语言程序,
应转换成机器指令源代码行数来
考虑。
转换系数表
定义: 转换系数=机器指令条数/非机
器语言执行步数。
Putnam模型
• Putnam模型是一种动态多变量
模型。适用于大型项目,但也
可以应用在一些较小的软件项
目中。
• 它是假定在软件开发的整个生
存期中工作量有特定的分布。
• 大型软件项目的开发工作量分
布可以用Rayleigh-Norden曲线
表示。
• 用Rayleigh-Norden曲线可以导
出一个“软件方程”
• td 是开发持续时间 (年), K是
软件开发与维护在内的整个生
存期所花费的工作量 (人年),
L是源代码行数 (LOC),Ck是技
术状态常数,因开发环境而异。
技术状态常数Ck的取值
COCOMO模型
(COnstructive COst MOdel)
• 结构型成本估算模型是一种精
确、易于使用的成本估算方法。
• DSI(源指令条数)定义为代码
的源程序行数。若一行有两个
语句,则算做一条指令。它包
括作业控制语句和格式语句,
但不包括注释语句。KDSI=
1000DSI。
• MM(度量单位为人月)表示
开发工作量。
• TDEV(度量单位为月)表示
开发进度。它由工作量决定。
• 软件开发项目的分类
软件开发项目的总体类型:
– 组织型
– 嵌入型
– 半独立型
• COCOMO模型的分类
COCOMO模型按其详细程度分
成三级:
– 基本COCOMO模型
– 中间COCOMO模型
– 详细COCOMO模型
• 基本COCOMO模型是静态单变
量模型,用源代码行数(LOC) 为
自变量的经验函数计算软件开发
工作量。
• 中间COCOMO模型在用LOC
为自变量的函数计算软件开发
工作量(称为名义工作量)的
基础上,用涉及产品、硬件、
人员、项目等方面的影响因素
调整工作量估算。
• 详细COCOMO模型包括中间
CO COMO模型的所有特性,
但用上述各种影响因素调整工
作量估算时,还要考虑对软件
工程过程中每一步骤(分析、
设计等)的影响。
基本COCOMO模型
• 基本COCOMO模型的工作量
和进度公式
中间COCOMO模型
• 进一步考虑15种影响软件工作
量的因素,通过定下乘法因子,
修正COCOMO工作量公式和进
度公式,可以更合理地估算软
件(各阶段)的工作量和进度。
• 中间COCOMO模型的名义工作
量与进度公式如下所示。
中间COCOMO模型的名义工作量
与进度公式
15种影响软件工作量的因素 fi
• 产品因素:软件可靠性、数据
库规模、产品复杂性
• 硬件因素:执行时间限制、存
储限制、虚拟机易变性、环境
周转时间
• 人的因素:分析员能力、应用
领域实际经验、程序员能力、
虚拟机使用经验、程序语言使
用经验
• 项目因素:现代程序设计技术、
软件工具的使用、开发进度限
制
• 此时,工作量计算公式改成
• 例1. 一个32KDSI的声音输入系
统是一个输入原型,或是一个可
行性表演模型。所需可靠性非常
低。把此模型看做半独立型软件。
则有
MM = (32) = 146
又查表知 f1=,其它 fi=
,则最终有MM = 146×
= 110.
• 例14. 一个规模为10KDSI的商
用微机远程通信的嵌入型软件,
使用中间COCOMO模型进行
成本估算。
• 程序名义工作量
MM = (10) =
(MM)
• 程序实际工作量
MM = ×
= × =
(MM)
• 开发所用时间
TDEV = () =
(月)
• 如果分析员与程序员的工资都
按每月6,000美元计算,则该项
目的开发人员的工资总额为
×6,000 = 309,000 (美元)
• 做为对比,现在用IBM模型计
算:
PM = (10) = (人
月)
D = (10) = (月)
S = () = (人)
详细COCOMO模型
• 详细COCOMO模型的名义工作
量公式和进度公式与中间
COCOMO模型相同。
• 工作量因素分级表分层、分阶
段给出。针对每一个影响因素,
按模块层、子系统层、系统层,
有三张工作量因素分级表,供
不同层次的估算使用。每一张
表中工作量因素又按开发各个
不同阶段给出。
• 例如,关于软件可靠性
(RELY)要求的工作量因素分
级表(子系统层),如表所示。
• 使用这些表格,可以比中间
COCO MO模型更方便、更准
确地估算软件开发工作量。
软件可靠性工作量因素分级表(子
系统层)
进度安排
• 软件开发项目的进度安排有两
种方式:
(1)系统最终交付日期已经
确定,软件开发部门必须在规
定期限内完成;
(2)系统最终交付日期只确
定了大致的年限,最後交付日
期由软件开发部门确定。
• 进度安排落空,会导致市场机
会的丧失,使用户不满意,而
且也会导致成本的增加。
• 因此,在考虑进度安排时,要
把工作量与花费时间联系起来,
合理分配工作量, 利用进度安
排的有效分析方法严密监控软
件开发的进展情况,使软件开
发进度不致拖延。
软件开发小组人数与软件生产率的
关系
• 当几个人共同承担软件开发项
目中的某一任务时,人与人之
间必须通过交流来解决各自承
担任务之间的接口问题,即所
谓通信问题。通信需花费时间
和代价,会引起软件错误增加,
降低软件生产率。
• 若两个人之间需要通信,则称
在这两个人之间存在一条通信
路径。如果一个软件开发小组
有 n 个人,每两人之间都需要
通信,则总的通信路径有 n(n-
1)/2 (条)。
• 设一个人单独开发软件,生产
率是5000行/人年。若 4 个人
组成一个小组共同开发这个软
件,则需要 6条通信路径。若
在每条通信路径上耗费的工作
量是 250 行/人年。则小组中
每个人的软件生产率降低为
5000-6×250/4 =
= 5000-375 =
= 4625 行/人年。
• 从上述分析可知,一个软件任
务由一个人单独开发,生产率
最高;而对于一个稍大型的软
件项目,一个人单独开发,时
间太长。因此软件开发小组是
必要的。
• 但是,开发小组不宜太大,成
员之间避免太多的通信路径。
• 在开发进程中,切忌中途加人,
避免太多的生产率损失。
任务的确定与并行性
• 当参加同一软件工程项目的人
数不止一人的时候,开发工作
就会出现并行情形。
• 软件开发进程中设置许多里程
碑。里程碑为管理人员提供了
指示项目进度的可靠依据。
• 软件工程项目的并行性提出了
一系列的进度要求。
• 因为并行任务是同时发生的,
所以进度计划表必须决定任务
之间的从属关系,确定各个任
务的先后次序和衔接,确定各
个任务完成的持续时间。
• 项目负责人应注意构成关键路
径的任务,即若要保证整个项
目能按进度要求完成,就必须
保证这些任务要按进度要求完
成。
制定开发进度计划
• 40-20-40规则
–在整个软件开发过程中,编码工
作量仅占 20%,编码前工作量
占40%,编码后工作量占 40%。
– 40-20-40 规则只应用来做为
一个指南。实际的工作量分配比
例必须按照各项目的特点来决定。
• COCOMO模型
–开发进度TDEV与工作量MM的
关系:
TDEV = a(MM)b
–如果想要缩短开发时间,或想
要保证开发进度,必须考虑影
响工作量的那些因素。按可减
小工作量的因素取值。
– 按此比例确定各个阶段工作量的
分配,从而进一步确定每一阶段所
需的开发时间,然后在每个阶段,
进行任务分解,对各个任务再进行
工作量和开发时间的分配。
进度安排的方法
• 可以把用于一般开发项目的进
度安排的技术和工具应用于软
件项目。
• 为监控软件项目的进度计划和
工作的实际进展情况,为表现
各项任务之间进度的相互依赖
关系,需要采用图示的方法。
• 在图示方法中,必须明确标明:
– 各个任务的计划开始时间,完
成时间;
– 各个任务完成标志(即○文档编
写和△评审);
– 各个任务与参与工作的人数,
各个任务与工作量之间的衔接情
况;
– 完成各个任务所需的物理资源
和数据资源。
(1) 甘特图(Gantt Chart)
• 在甘特图中,每一任务完成的
标准,不是以能否继续下一阶
段任务为标准,而是以必须交
付应交付的文档与通过评审为
标准。因此在甘特图中,文档
编制与评审是软件开发进度的
里程碑。
(2) PERT技术和CPM方法
• PERT技术叫做计划评审技术,
CPM方法叫做关键路径法,它
们都是安排开发进度,制定软
件开发计划的最常用的方法。
• 它们都采用网络图来描述一个
项目的任务网络,也就是从一
个项目的开始到结束,把应当
完成的任务用图或表的形式表
示出来。
三个模块开发的网络图
• 通常用两张表来定义网络图。
• 一张表给出与一特定软件项目
有关的所有任务(也称为任务
分解结构WorkBreakdown
Structure);
• 另一张表给出应当按照什么样
的次序来完成这些任务(有时
称为限制表RestrictionList)。
PERT技术和CPM方法都为项目
计划人员提供了一些定量的工
具。
¶ 确定关键路径,即决定项目开
发时间的任务链。在关键路径
上的各个任务都是时间余量为
零的关键任务,不能有任何时
间延误。
· 应用统计模型,对每一个单独
的任务确定最可能的开发持续
时间的估算值。
¸ 计算边界时间,以便为具体的
任务定义时间窗口。