思步网

思步网 门户 查看主题

怎样估算更加精准【总结】

发布者: 思步学堂 | 发布时间: 2013-9-29 13:20| 查看数: 55676| 评论数: 55|帖子模式

2013年9月16日下午14:30-17:00,思步网邀请思步科技资深咨询顾问james做了题为“怎样估算更加精准”的微讲坛,微讲坛地址:http://www.step365.com/wb/wjt 。现将现场讲座及互动部分的内容总结如下。

wjt-gs.jpg


******************************************************************************
一、讲座部分
******************************************************************************


第一节      为什么要做估算

首先谈一下为什么要估计?为什么要更加准确的估计?大家想到没有,我们投标,我们签订一个项目,肯定是有前提的,就是项目能赚钱,能盈利。所以,一般都会计算盈利的空间有多少。

怎么计算盈利的空间?就是合同额减去成本。成本怎么能得到,就要通过估算的方法,事先进行测定。我们说一个项目如果毛利有 60%,甚至更多,这时候,估算可以粗一些,偏差大一些。

可是目前,软件行业的毛利率在逐年下降,利润空间越来越窄。所以,如果能更加准确的估计,就能提高项目的成功率。

因此,估算的准确性和估算的精度就显得越发重要了。

比如,一个项目,预估的毛利率空间是30%,如果你估算的误差在+/- 50%,那么这个项目是否要投标,是否要做,就出现疑问了。因为,不赚钱的概率出现了

那么怎么能更加准确的估计?用什么样的估算方法能提高估算的精度?有没有快速的方法和有效的方法进行估算?

今天讲的几个方法,是最常用的一些估算的方法。方法没有最好的,最好的形式是用一种方法,坚持不断的进行估算,并结合历史数据,坚持下来,即使最简单的方法,其精度也可以逐步提高。

有一些企业,有一些公司,今天用这个方法,明天用另外的估算方法,方法使用了不少,但都是浅尝辄止,然后说估算不行。导致精度一直不能提高。所以,方法一旦确定下来,就要坚持下去,持续改进,而不是更换方法。




第二节      如何进行估计

良好估算的前提,是确定项目的范围。项目范围明确了,估算就更加便利一些。项目范围可以以顶层WBS形式进行描述

估算前,要明确假设和约束,比如客户可能的变更,比如我们自己的开发能力

在估算中,容易出现的问题是,直接给出工作量。比如某个功能,有经验的工程师往往会给出,这个功能大概几天能做完。这个就是直接估算工作量。这种形式在企业里很常见。这类估算,是否可以呢?结论是肯定的,当然可以。

但是,它还有一个问题需要注意。问题是,这些数据没办法作为历史数据为以后采用。因为,估算的依据没有,没办法横向比较。所以,以后要用这些数据就比较麻烦。因此,不建议直接估算工期、工作量,建议先引入一些中间的量作为替代。

中间的量可以是代码行,可以是功能点。中间量在CMMI中称之为规模。PP.sp1.2有详细的描述。

有了规模,可以做不同项目之间的横向比较,历史数据就要价值了。当然规模的种类可以是代码行KLOC,也可以是功能点,用例点,故事点。总之,要找到研发软件的规律,然后制定规模识别的标准

所以,直接估算工期、工作量,不是不可以,而是不好。历史数据会不好用。原因就在这里。



第三节      各种估计方法之一:Pert Sizing

好了,有了上面的一些原则,就可以开始估计了。估计的方法很多,简单的估计方法,精度比较差,但估算快速;复杂的估算方法,精度高,但需要学习,需要训练。简单的估算方法:有Pert sizing,Delphi,类比法

复杂一些的有IFPUG(标准功能点)NESMA(快速估计)COCOMO II

Pert Sizing是一种加权平均法,可以用于估计软件项目的规模、工作量和成本等。这个是最简单的估算方法。

Pert Sizing是一种加权平均法,可以用于估计软件项目的规模、工作量和成本等。在估计每一项任务时,首先按最佳的、可能的、悲观的三种情况给出估计值,记作:amb6

然后用以下公式计算期望值,期望值就是最终的估计值:期望值 =a + 4 * m + b/ 6

这种方法运用了一些心理学和统计学的观点,主要利用的是人们的心理。一些人为了表现自己的能力,往往会少报一些规模,而另外一些人为了争取某些利益,想多报一些

这种方法,就是减少估算人员这些波动的心理。

没有经过训练的估计,一般其精度在 -50%(少估计)~150(多估计)%之间,使用Pert sizing方法,可以把精度提高到 +/- 50%之间。

应该说精度提高了,但相对于项目的毛利,这样的精度是远远不够的。需要靠历史数据的帮助,靠其他方法的配合,比如类比的方法,也可以继续提高精度。



第四节      各种估计方法之二:Wideband Delphi

接下来讲DelphiDelphi也被称为专家法。Delphi的工作原理是这样的:首先选择一些对系统比较熟悉的专家(比如系统的需求分析员,开发人员,上下游接口人员,做过类似系统的人员)

一般专家选择3~7名。让这些专家对系统的各个模块进行估计。估计完成后,由主持人匿名找到每个模块的最大值,最小值,让他们把估算的理由写下来。写完后,有主持人向大家宣布,为什么每个模块的最大最小的原因。

大家了解到模块的最大最小值后,如果最大最小偏差大于20%,再进行第二轮估计。如此类推,最多进行三轮。

当到第三轮时,有两种情况,1.最大最小偏差小于20%,这时候可以结束估算;2.最大最小值仍大于20%,这时候为了节约估算成本,也停止进行估算。最后的估计结果,可以取所有估算数据的算数平均,也可以去掉最大值,最小值,再进行算术平均

这种方法就是专家法。这种方法,经过长期的积累和训练,可以提升到比较高的精度,特别是做产品的项目。一个版本一个版本提升和发布的,精度会提升的很高。

比如华为,就是用的这种方法,没有使用更加复杂的方法,用了7,8年,精度最终可以达到+/-10%

所以说不是越复杂的方法,约难理解的方法越有效,而是用一种方法,积累的越多,经验越丰富,准确度就越高。

建议大家做估计到时候,用自己最熟悉的方法,找项目的规律,定义项目的各种估算属性,这样积累的越多,估算就月精确。而不是去找各种千奇百怪的方法,把自己绕晕了。重要的还是积累,也就是经验。

这种方法对于项目型的企业就不太适合了,因为项目型的企业,项目类型,种类,客户情况偏差大,不容易做积累。因此精度提高的速度就相对比较慢。

这里没办法做练习,能做个练习就好了。之前给客户做咨询的时候,让他们做个估算,大家都不熟悉的例子,结果三轮过后,他们的估算精度是-8%




第五节      各种估计方法之三:类比法

接下来谈一下类比法。类比法就更是利用历史数据和经验了。比如估算一个页面要花多少工作量,这时候用类比或者叫代理估算,就更加容易和准确一些。

页面有复杂的有简单的,怎么进行类比或者做代理呢?我们那页面的构造做类比,一个复杂的页面,可能有几个输入框,几个选择框,几个按钮,数这些控件,就业估算一个页面的复杂度。

简单的界面,只有一个输入框,一个确定,一个取消,如登陆框,复杂的页面,有多个按钮,多个输入,多个选择,因此,可以用多个页面与简单的页面进行比较,简单的页面用一天时间,复杂的页面,按照线性的估算,也可以估算大致复杂需要做几天。

类比法或者代理法,是用一个大家都知道的规模,推算一个不太了解的规模。找到可以对比或者可以代理的,就比较容易推算新功能的规模了。

这个方法的难点在于怎么样更好的对比。常见的有刚才说的用数界面的控件的方法。也有数表的方法,比如某公司做BI的项目,就是用数每个检索需要调用多少个表结构,多少个存储过程。找到了能比较的要素,类比的意义就更大了。

pert sizing(三点法)wide bandDelphi(专家法),类比法,这三种方法是可以交叉起来使用的。不局限一种方法,可以互相穿插在一起。以进一步提高精度。
我个人的建议是,如果大家觉得其他估算方法麻烦,只要用这三种方法,也可以达到很高的精度。因此,不想用特别复杂方法的公司,就要在这三种方法上下功夫,积累数据,我相信5年之后,你们也能达到华为的高度,至少偏差控制在15%之内是可能的。



第六节      各种估计方法之四:Function Point (IFPUG)

接下来讲功能点法,这个有点抽象。功能点法在国际标准上叫做 IFPUG,或者funciton point,现在ifpug已经是国际标准了,最新的标准是5.2版本的,大家感兴趣可以下载来看看。里面介绍的是识别功能点的各种规则。

IFPUGIBM的一个项目经理发明的。他在上世纪80年代做项目经理的时候,也经常遇到估算不准确的情况,越是,他开始找规律,找项目、需求、实现的规律,于是发明了这种估算法。后来他离开IBM,专门成立了一个咨询公司,讲如何进行估算

再后来,这个就被ISO纳入了国际标准。所以估算就是实践出来的。

国际标准号是ISO/IEC 20926:2003 ,大家感兴趣可以检索一下。我这里也有电子档的,如果大家需要,可以留下您的邮箱地址,我发给你。

现在讲IFPUG,就是FUNCTION POIT怎么做。只能简单的讲一些,很多规则建议大家翻看手册和标准。要了解IFPUG,先讲几个术语,这些术语记不住的话,容易听晕了。

1.ILF (Internal Logic File)内部逻辑文件,类似于系统里面的各种表,各种记录(如数据文件,或配置文件);2.EIF(External interface file),外部接口文件,可以是数据接口,可以是消息接口,可以是逻辑接口,可以是文件接口。

内部逻辑文件(ILF)是一组用户能够识别、存在内在逻辑关联、在系统边界之内被控制的数据或控制信息。可理解为一个实体联系模型或一组关联的数据表。外部接口文件(EIF)是另外一个系统的ILF。在本系统中被引用、在系统边界之外被控制。

这两个称之为静态的,因为都是数据,不牵扯逻辑,只不过一个在系统内部,一个在系统外部。

举个例子:比如做一个 京东的交易系统,ILF,就是京东里面各种商品的数据。EIF,就是支付时,需要支付数据接口。

各种商品数据保存在一个表里,所以ILF是一个。支付时,有多个接口,比如有支付宝,有腾讯的支付,这样,EIF就是2.

刚才的ILFEIF叫做数据功能元素,光有数据功能元素,系统是不完整的,还需要统计事务功能元素。

数据功能元素包括三类:EI(外部输入)EO(外部输出),EQ(外部查询)。外部输入(EI),一个接受来自系统边界之外的数据或控制信息的基本处理。其目的是维护一个内部逻辑文件,或改变系统的行为。

外部输出(EO) -个向系统边界之外发送数据或控制信息的基本处理。其目的是向用户展示一组经过了(除提取之外的)逻辑处理的数据或控制信息,也可能包括对内部逻辑文件的维护或改变系统的行为。

外部查询(EQ) -个向系统边界之外发送数据或控制信息的基本处理。其目的足向用户展示一组经过提取处理的数据或控制信息,不会引起对内部逻辑文件的维护或系统行为的改变。

ILF,EIF,EI,EO,EQ要熟记,不然理解起来就会搞乱了。

理解了ILF,EIF,EI,EO,EQ,就可以开始计数了。首先,按照刚才京东的例子,数ILF,EIF。例如,刚才数的是一个货品的数据 1ILF2个支付接口,2EIF,这样够不够?这样还不够。原因是没有考虑到这些数据的复杂度。

那么ILF,EIF的复杂度怎么算?这里又出现了两个术语:数据元素类型(DET,记录类型元素(RET

千万别搞混了,这块有点绕。没图形,不容易理解。

例如京东的货物表,是一个内部逻辑文件 1ILF,怎么算这个逻辑文件的复杂度?通过DETRET来计算。 DET相当于表有几个字段,RET相当于货物表有几个关联表。

比如货物表有10个字段,那么DET=10;又比如货物表还要关联:仓库表,厂家、,那么这个货物表的RET = 2 这时候就可以计算货物表(1ILF)的复杂度了。计算的方法是通过查表得到的,表的内容是标准里规定的。

通过查表,我们发现 10个字段,2个关联表的ILF复杂度是LOWLOW对应的功能点是7,因此我们现在可以知道,做一个京东货物的1ILF =7个功能点。

7个功能点是什么含义?

国际上有个组织叫ISBSG,在澳大利亚,专门收集全世界跟功能点相关的项目数据,到目前已经收集了几十万个项目的数据,根据他们的数据统计,一个CMMI 5级的公司,每个功能点,要花1.5人天来完成。所以1天的生产率大概是0.7个功能点

于是,我们知道 7个功能点需要10.5人天做完。这样估算有含义了。

EIFILF类似,如法炮制,但查询的表格是另外的,也可得到类似的结论。
以上是ILFEIF的估计,也就是数据的估计;

下面开始事务的估计

我们知道事务类型有三种:EI,EO,EQ,这个怎么估计呢。这里要用到事务的复杂度(不要搞混,刚才是数据的复杂度)

事务的复杂度怎么统计?又用到两个复杂度计算的术语:DET (数据处理类型)FTR(引用文件类型)

DET (相当于表格中的字段)如,进入或者输出该应用的边界的不重复的数据项数.(通常为字段数,只计算被事务处理参照和维护的字段,包括用户从GUI输入的字段、命令键、提示信息)。输入的字段:命令键,提示信息

引用文件类型( File Type Referenced )为关联文件数(即某项功能处理过程中涉及到的引用和维护的文件数)

比如在京东网站购物,我首先输入一个查询条件,找到购买的商品,输入银行账号,然后购买,这个怎么识别

首先一个查询是一个 EQ(多个查询条件,也是一个EQ),输入银行账号,是一个EI,购买完成后,系统提示我一个购买成功,那么是一个EO

这时候怎么计算EI,EO,EQ的复杂度呢。就通过RETFTR进行计算。

类似于ILFEIF,通过数对应的数据字段,关联的外部文件,检索到EI,EO,EQ的复杂度对应的功能点数。

好了,现在 ILFEIFEIEOEQ都数完了,现在可以统计功能点。

平均 合计 外部输入 __×3 __×4 __×6 外部输出 __×4__×5 __×7 外部查询 __×3 __×4 __×6 内部逻辑文件 __×7 __×10 __×15 外部接口文件 __×5 __×7 __×10

用这个公式计算功能点即可。这个功能点叫未调整的功能点UAFP

有了未调整的功能点,还要考虑系统的复杂度,所以还需要调整。系统的复杂度有14类,分别按照1~5来打分。这个叫调整因子

数据通信联机更新 分布式处理 复杂处理 性能 可重用性 配置负载 易安装 事务率 易操作 联机数据登录 多个场所 最终用户效率 设施变更

这些是常见的调整因子。

调整后的功能点(AFP)由以下公式计算: AFP = UAFP * [0.65 + 0.01 * VAF]

最后得到了最终的功能点。

这个就是IFPUG,最简单的介绍。因为如何数ILF,EIF,EI,EO,EQ还有一系列的规则和要求,不能随意数。具体的要求可以参加我推荐的IFPUG5.2标准

IFPUG可以实现很高的估算精度。因此,印度,韩国,澳大利亚,已经把这种方法形成了国家标准,为国家做项目,必须要按照这种方法估计,才能有投标的机会。



第七节      各种估计方法之五:NASMA(快速功能点估计)

可是,这个方法太麻烦了,我相信我讲的大多数不知道这个方法的人还是云里雾里的。不知道怎么操作。是的,这个方法确实比较复杂,而且只适用于交易,数据库等这类型的系统,对于电信的系统不适用。

于是,有人对这个方法做了简化,为了快速估计,简化估计,于是有了,快速功能点估算,叫NASMA

NASMA怎么估计?NASMAIFPUG做了简化,保留ILFEIF,去掉EIEOEQILFEIF的计数方法跟IFPUG一样。最后得到功能点是FP=ILF×35+EIF×15。至于为什么这样,留个小尾巴,以后再讲。

好的,讲座时间到了,现在请大家提问问题。




******************************************************************************
二、互动环节
******************************************************************************

1. @清清水草2012: 公司目前在组织的估算,感觉是做样子的,拍脑袋定的。怎么样委婉一点给领导提建议呢?
答: 可以把我一开始的例子举给他,就说项目如果估算不准确,项目是不是应该做就成问题了,可能不盈利。

2. @思步学堂:多种估算方法如何并用?
答: 专家法和类比法,可以把类比的内容和专家估计进行整合,形成一张估算表。如何选择专家是个问题。最好不要选择领导,因为领导会左右估算的结果,类似于同行评审,选择同行将进行估算,包括上下游接口,包括熟悉系统的工程师

3. @西北偏北I:个人觉得估算这个事情呢,需要循序渐进,而且需要高层的支持。慢慢累积才能做的好,估算才能越来越准确,否则到了后期,大家又都是在拍脑袋决定了。
答: 是的一定要高层支持,因为估算不是一个人的事情。

4. @大懒虫子丫头:代码行估算现在是不是应该被淘汰了,适用度不大啊。
答: 怎么能淘汰呢,代码行是一个很客观的方法。当然最好用功能点。华为用的就是代码行。微软、IBM,MOTO都是用的代码行

5. @有个性的个性:我们一直在用功能点,一开始用代码行,实在太累,后面就用专家估算,结果沟通协调起来太麻烦。现在用功能点,项目组自己就弄出来了,这样合理吗?
答: 功能点有一些是不标准的,类似于类比法的功能点,这样也可以,但这个不是标准的功能点
再问:我们跟考核结合起来就乱了,现在头疼呢。
再答:怎么个结合法?估算精度跟考核结合?一开始不要这么做。

6. @淡淡淡淡蓝色:我们一直用代码行,估算比较准确,就是费时。有什么简易的方法不?
答:  坚持下去,想办法简化,通过工具进行简化。不知道你们用代码行估算使用的是什么方法。
再问:纯人肉。
再答:可以进行分类,如配置,如通信




上一篇:如何有效进行度量【总结】
下一篇:我们想在上海办一些CMMI免费沙龙

最新评论

ljaabb44 发表于 2013-9-29 13:30:05
学习学习
lanj 发表于 2013-9-29 14:08:25
好好学习学习~!
游客 发表于 2013-9-29 14:15:01
#思步专题#微讲坛:#怎样估算更加精准#【总结】,7000多字精品奉献,详见:<a href="" target="_blank"></a>。【该微讲坛内容涵盖:为什么要做软件估算?为什么要先估算规模而不直接估算进度?三点估算、delphi估算、功能点估算、快速功能点估算、故事点估计(敏捷)是怎样操作的?如何提升估算的准确性?…】

 来自 思步网 的腾讯微博
sunny 发表于 2013-9-29 14:15:14
内容很丰富,收藏、学习。
森林 发表于 2013-11-11 10:18:14
好活动,下次一定要参加。
菜菜子-521 发表于 2014-2-7 10:33:16
好活动,下次一定要参加。
健康之友 发表于 2014-2-12 17:27:17
好活动,下次一定要参加。
西门庆 发表于 2014-4-23 12:08:23
顶,这样的活动真心好啊~
岛屿失梦 发表于 2014-6-6 21:31:14
下次有相关活动时再说一下哦~
雪ジ吖头 发表于 2014-6-10 08:12:30
好活动,下次一定要参加。
美人痣iii 发表于 2014-6-11 19:51:04
想参加,不知道什么时候还有。
習慣成型 发表于 2014-7-14 15:59:52
好活动,下次一定要参加。
幸福是被你需要 发表于 2014-7-14 18:18:57
顶,这样的活动真心好啊~
染指旳沵唇。 发表于 2014-7-24 20:44:32
不能到现场真是遗憾。
1234下一页


思步组织思步科技|思步网|火花学堂|思步文库|思步问答|思步英才|天下心
© 2007 思步网 浙ICP备10212573号-4(首次备案号:浙ICP备07035264号)|邮箱:service#step365.com(将#换成@)|服务热线:0571-28827450
在线培训课程|求职招聘|思步文库|官方微信|手机APP|思步问答|微博平台|官方QQ群|交流论坛|软件工程透析|关于我们|申请友链|
点击这里给我发消息     点击这里给我发消息
思步 step365 过程改进 CMMI中文 质量保证 质量管理 流程体系 需求跟踪矩阵 敏捷开发 Scrum 软件度量 项目评审 全员改进 流程管理 人力资源 6sigma 信息安全 ISO27001认证 IT服务管理 ISO20000认证 ISO9000认证 软件测试 SQA 配置管理 IPD 软件工程 PMP认证 PMP试题 PMBOK中文 精益研发 agile 顾问式管理培训
返回顶部