软件项目管理--软件工作量估算

软件项目管理 软件工作量估计

image-20221030145612588

image-20221030145650701

本章要点

  • 估算过程概念
  • 估算方法
  • 成本预算
  • 案例分析
  • 课程实践

关于估算

  • 估算不是很正确,有误差
  • 项目经验数据非常重要
  • 不要太迷信某些数学模型

软件项目规模

  • 软件项目规模即工作量
  • 软件规划,软件管理,需求,设计,编码,测试以及后期的维护等任务

软件规模单位

  1. loc源代码长度的测量
  2. fp 用系统的功能数量来测量

工作量

  1. 人月
  2. 人天
  3. 人年

软件项目成本

  1. 完成软件规模相应付出的代价
  2. 待开发的软件项目需要的资金
  3. 人的劳动的消耗所需要的代价是软件产品的主要成本

软件规模和软件成本的关系

  • 规模是成本的主要因素,是成本估算的基础
  • 有了规模就确定了成本

成本估算结果

  • 直接成本:与具体项目相关的成本,例如参与项目的人员成本
  • 间接成本:可以分摊到各个具体项目中的成本
    • 培训
    • 房租水电
    • 员工福利
    • 市场费用
    • 管理费
    • 其他等

下面关于估算的说法,错误的是( )

A、估算是有误差的

B、估算时不要太迷信数学模型

C、经验对于估算来说不重要

D、历史数据对于估算来说非常重要

( )是成本的主要因素,是成本估算的基础。

A、计划

B、规模

C、风险

D、利润

估算方法

软件工作量估计–两种基本的成本估算形式

  • 自顶向下:首先定义整个项目的工作量,然后分解到各个部分
  • 自底向上:各个部分的工作量先估算出来,然后进行合成

自顶向下方法

是对整个工程项目的总开发时间和总工作量作出估算,然后将他们按阶段,步骤和任务进行分配

自底向上方法

  • 该方法首先将项目分成部件任务,然后估算每个任务所需的工作量
  • 在大型的项目中,分解任务的过程是一个叠代的过程,直到最下面的任务不可分解,产生wbs
  • 该方法适合与项目规划的后期,如果应用在前期,那么必须对最终的系统走出一些假设,加入对软件模块的数量和大小进行假设
  • 如果项目是全新的或者没有历史数据,建议用该方法

自顶向下方法和参数模型法

  • 自定向下的方法和参数模型相关
  • 一般采用对比方法确定总的工作量
  • 对比是建立在一些列参数的基础上的,通过这些参数可以计算出新系统的工作量
  • 系统规模*生产率
    • 例如系统规模可以用kloc来计算,生产率以40/kloc
    • 预测软件开发工作链的模型由两部分 ,第一部分为估算软件大小,第二部分为估算工作效率

学生要求每学期写一篇有关IT的报告,如果你想建立一个估算学生完成这样一份报告的模型,你用什么来衡量报告的大小,什么因素会影响学生完成报告的难度?

最明显的工作量驱动因子是:

字数

难度因子可能包括:

材料的可获得性

学生对主题的熟悉程度

需要的宽度/深度

技术难度

专家判断

  • 具有应用领域或者开发环境只是的人员对任务的评估
  • 该方法特别是在对原有系统进行替换时有用,评估者对影响的代码的比例进行分析,从而得到工作量评估

类比估计

类比方法又被称为基于案例的推理

评估者寻找已经完成的项目,这些项目与需要开发的新项目在许多特征上必须是类似的

如何选择与带预测的项目相近的项目?

  • 欧几里得数学公式
  • distance

假定要匹配的案例基于两个参数,构造系统的输入和输出参数。新的系统有7个输入,15个输出,过去有一个项目A有8个输入,17个输出,这两个项目的欧几里的距离是多少?

image-20221030151111416

估算基本方法

  • 代码行估算法
  • 功能点估算法
  • 用例点估算法
  • 类比(自顶向下)估算法
  • 自上而下估算法
  • 参数估算法
  • 专家估算法

基于分解技术的估算

基于问题的估算

  • 利用loc/pm,fp/pm等生产率度量,我们能得到功能的成本和工作量
  • 对于loc估计,分解越详细越好
  • 对于fp估计,需要五个信息域
  • 估算的三点或期望值估算
  • 为各个功能或信息域的计数值分别估算出一个乐观值、可能值和悲观值

image-20221030152305027

一个例子

loc估算方法,机械设计计算机辅助设计开发软件包

image-20221030152347080

image-20221030152353052

这类系统的组织平均生产率是620loc/pm

如果一个劳动力价格=8000/月,则每行代码的成本约为13美元 8000/620=13

13*33200=431000

33200/620=54

根据loc估算及历史生产率数据,该项目总成本的估算值是431000美元,工作量的估算值是54人月

lDo a functional decompostion of the robot software.Estimate the size of robot system as 6450 LOC .Assuming that your organization produces 450 LOC/pm with a burdened labor rate of $7000 per person-month,estimate the effort and cost required to build the software using the LOC-based estimation technique described in this chapter.

l对机器人软件进行功能分解。估计机器人系统的规模为6450个LOC。假设您的组织生产450个LOC/pm,人工负担为每人每月7000美元,使用本章所述的基于LOC的估计技术估计构建软件所需的工作量和成本。

7000/450=15.5

100333

14.333

适用代码行估算方法的项目特点

从软件程序量的角度定义项目规模

  • 与具体的编程语言有关
  • 分解足够详细
  • 有一定经验数据(类比和经验方法)

代码行技术的主要优点

代码是所有软件开发项目都有的产品,而且很容易计算代码行数

代码行估算方法的缺点

  1. 对代码行没有工人的可接受的标准定义
  2. 代码行数量依赖于所用的编程语言和个人的编程风格
  3. 在项目早期,需求不稳定,设计不成熟,实现不确定的情况下很难准确的估算代码量
  4. 代码行强调编码的工作量,只是项目实现阶段的一部分

功能点估算法

  • 与实现的语言和技术没有关系
  • 用系统的功能数量来测量其规模
  • 通过评估、加权、量化得出功能点

功能点共识

fp=ufc*tfc

ufc:未调整功能点计数

tcf:技术复杂度因子

ufc-未调整功能点计数

功能计数项(从逻辑处理的角度)

  • 外部输入
    • 给软件提供面向应用的数据的项(如屏幕、表单、对话框、控件、文件等)在这个过程中,数据穿越外部边界进入到系统内部
    • image-20221030153837392
  • 外部输出
    • 向用户提供(经过处理的)面向应用的信息,例如,报表和出错信息等
    • image-20221030153903110
  • 外部查询
    • 外部查询是一个输入引出一个及时的简单输出,没有处理过程
  • 外部接口文件
    • 外部接口文件是用户可以识别的一组逻辑相关数据,这组数据只能被引用。用这些接口把信息传送给另一个系统
    • image-20221030154102063
  • 内部逻辑文件
    • 用户可以识别的一组逻辑相关的数据,而且完全存在与应用的边界之内,并且通过外部输入维护,是逻辑主文件的数目
    • image-20221030154135179

ufc-微调整功能点计数

功能计数项的复杂度等级

复杂度权重因素
简单一般复杂
外部输入346
外部输出457
外部查询346
外部接口文件5710
内部逻辑文件71015

还有哪些因素会影响实现功能点的难度?

调整因子值(0-5)
1.需要备份和恢复4
2.需专门数据通信2
3.存在分布式处理吗0
4.性能是关键的吗4
5.运行在现有的紧张操作环境吗3
6.系统需要在线数据项吗4
7.需要多屏幕输入切换吗5
8.主文件联机更新吗3
9.输入输出文件或查询是复杂的吗5
10.内部处理是否复杂5
11.设计的代码可复用吗4
12.转换与安装包含在设计中吗3
13.为多个安装而设计的吗5
14.具有易于变更,易于用户设计的应用设计5
复杂度校正因子1.17

image-20221030154531364复杂度矫正因子

最后得出的fp的估算值为

fp=总计**[(0.65+0.01*sum(fi)]

在学院工资系统项目中需要开发一个程序,该程序将从会计系统中提取每年的工资额,并从两个文件中分别提取课程情况和每个老师教的每一门课的时间,该程序将计算每一门课的老师的成本并将结果存成一个文件,该文件可以输出给会计系统,同时该程序也将产生一个报表,以显示对于每一门课,每个老师教学的时间和这些工时的成本。

假定报表是具有高度复杂性的,其它具有一般复杂性

image-20221030155450005

  • 外部输入:无
  • 外部输出:报告,1
  • 内部逻辑文件:财务输入文件,1
  • 外部接口文件:工资文件,人员文件,课程文件,财务输入文件,4
  • 外部查询:无

考虑加权

  • 外部输入:无 外部输出:1*7
  • 内部逻辑文件1*10
  • 外部接口文件4*7=28
  • 外部查询:无

总45

fp估算方法举例

image-20221030155905715

根据那个面的外贸订单项目的需求评估

外部输入:3项 外部输出:1项 外部查询:1项

外部接口文件:1项 内部逻辑文件:2项

image-20221030160012170

TCF-技术复杂度因子

image-20221030160045220

技术复杂度因子
F1可靠的备份和恢复F2数据通信
F3分布式函数F4性能
F5大量使用的配置F6联机数据输入
F7操作简单性F8在线升级
F9复杂界面F10复杂数据处理
F11重复使用性F12安装简易性
F13多重站点F14易于修改

功能点方法:复杂性判定

如何判定功能的复杂性

国家功能点用户小组

  • 内部逻辑文件、外部接口文件
  • image-20221030160218260
  • 外部输入文件
  • image-20221030160229416
  • 外部输出文件
  • image-20221030160253303
  • 如何确定记录个数和数据个数
    • 如某系统内部逻辑文件,订单文件,包含订单信息(包含订单号,供应商名称,订单日期)和订单项(包括商品号,价格和数目),则记录个数为2,数据个数为6,在表中可以确定该功能点复杂性为低

技术复杂度因子的取值范围

image-20221030160410351

外贸订单项目

fp=ufc*tcf

ufc=45

tcf=0.65+0.01(14*3)=1.07

fp=45*1.07=48

如果pe=15工时/功能点

则effort=48*15=720工时

功能点与代码行的转换

语言代码行**/FP**
Assembly320
C150
COBOL105
FORTRAN105
PASCAL91
ADA71
PL/165
PROLOG/LISP64
SMALLTALK21
SPREADSHEET6

Compute the function point value for a project with the following information domain characteristics:

number of user inputs:32

number of user outputs:60

number of user inquiries:24

number of files:8

number of external interfaces:2

Assuming the project is simple and all complexity adjustment values are average.

image-20221030160626387

基于过程的估算

image-20221030160833228

  • 估算项目最常用的方法是基于过程的估算
  • 将过程分解为一组相对较小的活动、行动和任务,并估计完成每个活动、行动和任务所需的工作量
  1. 基于过程的估算从描述项目范围获得软件功能开始
  2. 必须为每个功能执行一系列框架活动
  3. 功能和相关框架活动可以用类似下表的一部分表示

image-20221030161024423

在表中,功能和过程活动被融合。我们可以估计完成每个软件功能的每个软件过程活动所需的工作量,例如人月

这些数据构成了表格中心矩阵

然后平均人工费率(成本/单位工作量)*每个过程活动的估算工作量,并得出成本

1.请说出 基于过程的估算 步骤

2.请说出 下图中 行列 内容表示什么意思

3.从下图中哪个过程需要的工作量大,为什么

image-20221030161158942

image-20221030161217610

如果一个平均劳动力价格是每月8000美元,则项目总成本的估算值是368,000美元,工作量的估算值是46人月

分析设计,编码 ,测试 各自应该占总工作量的比例大概是多少(百分比)

40-20-40原则

image-20221030161328370

用例点估算

image-20221030161345538

image-20221030161350607

1.计算未调整的角色的权值UAW;

2.计算未调整的用例的权值UUCW ;

3.计算未调整的用例点UUCP;

4.计算技术和环境因子TEF;

5.计算调整的用例点UCP ;

6.计算工作量( man-hours) 。

计算为调整的角色的权值

UAW=image-20221030161449251

image-20221030161504455

计算未调整的用例的权值UUCW

UUCW=image-20221030161526105

image-20221030161534368

计算为调整的用例点UUCP

UUCP=UAW+UUCW

image-20221030161558896

计算技术因子TCF

image-20221030162233671

image-20221030162300598

image-20221030162323094

image-20221030162350220

前面除了客观技术方面的因素能影响到项目工作量

主观方面,人的哪些因素 能影响到项目工作量?

计算环境因子ECF

image-20221030162430191

image-20221030162433295

image-20221030162435309

image-20221030162439235

计算调整的用例点UCP

image-20221030162503031

image-20221030162507555

计算工作量

image-20221030162522308

image-20221030162526060

  • 如果沒有歷史数据可供参考,行业专家推荐使用15-30之间的一个数字,典型的,你可使用20小时/ucp
  • 与专家估算法相比,用例点估算可能偏高,公式中的变量需要进行调整,特别是刚开始这样估算时
  • 场景中的步数,很多的步数将复杂性偏高,用例点增大,较少的步数使复杂性偏低
  • 包含和扩充用例增大了复杂性,将这些记为单独的用例
  • 用例中的角色数也影响估算。如果可能,将角色归纳为更高层次的角色,浙江减少复杂性而不影响用例
  • 技术和环境因素需要根据不断获得实际数据来做调整,越多项目使用用例点数来估算,估算将越准确

生产力因素智能从历史资产中获得。在没有得到符合公司生产的生产力基准数据前。将生产力划分为三个等级。高级工程师15人时/ucp;中级工程师20人时/ucp;初级工程师30人时/ucp

类比(自顶向下)估算法

估算人员根据以往的完成类似项目所消耗的总成本,来推算将要开发的软件的总成本。然后按比例将他分配到各个开发任务单园中

是一种自上而下的估算形式

自顶向下发是对整个工程项目的总开发时间和,然后将他们按阶段,步骤任务进行分配

类比估算–使用情况

  1. 有类似的历史项目数据
  2. 信息不足的时候(例如市场招标)
  3. 要求不是很精确估算的时候

image-20221030163359267

类比估算–主观判断举例

证券交易网站

  • 需求类似
  • 历史数据:10万
  • 类比估算:10万

自下而上估算

利用任务分解图,对各个具体工作包进行详细的成本估算,然后将结果累加起来得出项目总成本

image-20221030163529583

  • 相对比较准群,他的准确度来源于每个任务的估算情况
  • 花费时间

自下而上估算举例

image-20221030163606287

软件项目成本计划

参数估算法

  • 通过项目数据,进行回归分析,得出回归模型
  • 通过参数模型估算(规模)成本的方法
  • image-20221030163714213
  • 具有良好的项目数据为基础
  • 存在成熟的项目估算模型

特点

比较简单,而且也比较准确

如果模型选择不当或者数据不准,也会导致偏差

参数模型(规模、成本模型)

面向loc驱动的

image-20221030163853943

建议掌握

Walston-Felix模型

image-20221030163941812

image-20221030163950089

Cocomo模型

image-20221030164003818

image-20221030164047060

image-20221030164059946

image-20221030164133276

乘法因子的成本驱动属性

  • 产品属性
  • 平台属性
  • 人员属性
  • 过程属性

n在企业中,绝大多数系统技术上,产品,计算机和项目等属性都是类似的。只有人员的属性有所差异。该企业制定了下表:

image-20221030164228240

image-20221030164232965

分析员非常优秀,编程人员也很优秀但是对该项目面向的领域不熟悉并准备用新的编程语言。他们对操作系统很熟悉。请计算dem。如果名义工作量是4人月,则估算的工作量是多少?

image-20221030164250522

image-20221030164643970

高级COCOMO

  • 讲项目分解为一系列的子系统或者子模型
  • 更加精确的调整一个模型的属性

image-20221030164720514

一个明显的特点是该模型适应了项目在执行过程中变得越来越确定的状态,因而是一种渐进性评估

COCOMO II

  • 应用组装模型–规划阶段
  • 早起设计模型–设计阶段
  • 后体系结构模型–开发阶段

image-20221030165005748

image-20221030165011279

image-20221030165019858

  • 在应用构成阶段,采用对象点计算的方法
  • 在早期设计阶段,采用功能点计算的方法,功能点可以转换为KLOC
  • pm=AxSIZEXEM1XEM2X…XEMN
  • pm为人月工作量,A是一个常数,size以kloc为单位,sf是指数比例因子
  • sf=1.01+0.01x指数驱动因子的和

计算规模因素的质量(0-5)

先前经验(Precedentedness): 是否有先前的经验

开发的灵活性(Development Flexibility): 是否需求能够以多种方式来满足;

体系结构/风险解决(Architecture/Risk Resolution):是否方案已经被确定和解决的程度

团队的凝聚性(Team cohesion)

过程的成熟性(Process Maturity)

对于某一个软件企业,一个新的项目的新颖性一般,因而在先前经验方面给3分,开发灵活性方面很低,因而给以0分,但是需求可能会变化得比较厉害,因而风险解决指数给4分,团队很融洽,给1分,但是过程不标准,因而过程成熟性给4分,请计算规模因素sf:

image-20221030165225665

计算工作量乘法算子em

类似于dem的计算

在不同的阶段有不同的em

如果每一项对于项目而言无特别影响,则取1

image-20221030182247682

image-20221030182250917

image-20221030182253926

专家估算法

由多位专家进行成本估算,一个专家可能会有偏见,最好由多位专家进行估算。取得多个估算值,最后得出综合的估算值

  • 组织者确定专家,这些专家互相不见面
  • 组织者发送给每位专家一份软件规格说明
  • 专家以无记名对该软件给出3个规模的估算值
    • 最小ai
    • 最可能的mi
    • 最大bi
  • 组织者计算每位专家的ei=(ai+4mi+bi)/6
  • 如果各个专家的估算差异超出规定的范围,则需重复上述过程
  • 最终可以获得一个多数专家共识的软件规模取平均

image-20221030182534567

实用软件估算步骤

是一种自下而上和参数法的结合模型,步骤如下

  1. 对任务进行分解:1,2,…,i,…n
  2. 直接成本=E1+E2+…EI+…+EN
  3. 间接成本估算
  4. 项目总估算成本=直接成本+间接成本
  • 直接估算成本Ei
  • 先估算规模Qi,然后估算成本Ei=Qi*人力成本参数

直接成本估算

直接成本组成

  • 开发成本
  • 管理成本
  • 质量成本

人力成本参数=5万/人月 30人月包括开发、管理、质量规模的项目的直接成本是150万

image-20221030182913113

image-20221030182928208

项目总估算成本

  • 估算成本=直接成本+间接成本
  • 估算成本=直接成本+直接成本*间接成本系数
  • 估算成本=直接成本(1+间接成本系数)
  • 估算成本=规模*人力成本参数(1+间接成本系数)
  • 成本系数=人力成本参数*(1+间接成本系数)

简易算法

  • 估算成本=规模*成本系数
  • 例如:成本系数=8万/人月

成本预算

成本预算是将项目的总成本按照项目的进度分摊到各个工作单元中去

成本预算的目的是产生成本基线

分配项目成本预算包括3中情况

  1. 给任务分配资源成本

    1. 与资源的基本费率紧密相连
    2. 设置资源费率
      1. 标准费率
      2. 加班费率
      3. 每次使用费率
  2. 给任务分配固定资源成本

    1. 当一个项目的资源需要固定数量的资金时,可以项任务分配固定资源成本。例如,项目中的一个兼职人员成本
  3. 给任务分配固定成本

    1. 有些任务是固定成本的类型的任务,也就是说,管理者知道某项任务的成本不变,不管任务的工期有多长,或不管人物使用了哪些资源,在做这种情况下,管理者向任务直接分配成本

      1. 某外包任务、培训任务

image-20221030183434235

案例分析 :医疗信息商务平台成本估算

MED的2个估算方法

  • 自下而上的估算
  • image-20221030183508790
  • 用例点估算

计算开放成本

  1. 通过自下而上的计算,得知项目开发规模是396人/天,开发人员成本参数=1000元/天,则内部的开发成本=1000元/天*396天=39.6万元
  2. 加上外包部分软件成本2.4万元,则开发成本=39.6+2.4=42

计算管理成本

管理成本=开发成本*10%

管理成本为42*10%=4.2

计算直接成本=开发成本+管理成本

直接成本=42万元+4.2=46.2

计算间接成本=直接成本*20%

46.2*20%=9.24

项目纵观算出

image-20221030184410772

image-20221030184414440

计算未调整的角色的权值:UAW

UAW=18

image-20221030184438504

计算未调整的用例权值UUCW

image-20221030184459050

计算未调整的用例点UUCP

UUCP=UAW+UUCW=18+240=258

规模Effort

PF=20工时/用例点

218.7*20=4374

4374/8=547人天

如果1000元/人天 成本为54.7万元

小结

成本估算

  • 代码行估算法
  • 功能点估算法
  • 用例点估算法
  • 类比(自顶向下)估算法
  • 自下而上估算发
  • 参数估算法
  • 专家估算法

成本预算

  • 8
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值