程序员]估算- -
快!通过56k modem线发送《战争与和平》需要多少时间?存储一百万个姓名与地址需要多少磁盘空间?1000字节
的数据块通过路由器需要多少时间?交付你的项目需要多少个月?
在某种程度上,这些都是没有意义的问题——它们都缺少信息。然而它们仍然可以得到回答,只要你习惯于进行估
算。同时,在进行估算的过程种,你将会加深对你的程序所处的世界的理解。
通过学习估算,并将此技能发展到你对事物的数量级有直觉的程度,你就能展现出一种魔法般的的能力,确定它们
的可行性。当有人说"我们将通过ISDN线路把备份发给中央站点"时,你将能够直觉地知道那是否实际。当你编码时,你
将能够知道哪些子系统需要优化,哪些可以放在一边。
Estimate to Avoid Surprises!
估算,以避免发生意外!
多准确才足够准确
在某种程度上,所有的解答都是估算。只不过有一些要比其他的更准确。所以当有人要你进行估算时,你要问自己
的第一个问题就是,你解答的问题的语境是什么?他们是需要高度的准确性,还是在考虑棒球场的大小?
● 如果你的奶奶问你何时抵达,她也许只是想知道该给你准备午餐还是晚餐。而一个困在水下、空气就块用光的潜水员
很可能对精确到秒的答案更感兴趣。
● π的值是多少?如果你想知道的是要买多少饰边,才能把一个圆形花坛围起来,那么"3"很可能就足够好了。如果你在
学校里,那么"22/7"也许就是一个好的近似值。如果你在NASA,那么也许要12个小数位。
关于估算,一件有趣的事情是,你使用的单位会对结果的解读造成影响。如果你说,某事需要130个工作日,那么
大家会期望它在相当接近的时间里完成。但是,如果你说"哦,大概要六个月",那么大家就知道它会从现在开始的五到
七个月内完成。这两个数字表示相同的时长,但"130天"却可能暗含了比你的感觉更高的精确程度。我们建议你这样度
量时间估算:
时长 报出估算的单位
1-15天天
3-8周 周
8-30周月
30+周 在给出估算前努力思考一下
于是,在完成了所有必要的工作之后,你确定项目将需要125个工作日(25周),你可以给出"大约六个月"的估算。
同样的概念适用于对任何数量的估算:要选择能反映你想要传达的精确度的单位。
估算来自哪里
所有的估算都以问题的模型为基础。但在我们过深地卷入建模技术之前,我们必须先提及一个基本的估算诀窍,它
总能给出好的答案:去问已经做过这件事情的人。在你一头钻进建模之前,仔细在周围找找也曾处在类似情况下的人。
看看他们的问题是怎么解决的。你不大可能找到完全相符的案例,但你会惊奇有多少次,你能够成功地借鉴他人的
经验。
理解提问内容
任何估算练习的第一步都是建立对提问内容的理解。除了上面讨论的精确度问题以外,你还需要把握问题领域的范
围。这常常隐含在问题中,但你需要养成在开始猜想之前先思考范围的习惯。常常,你选择的范围将形成你给处的解答
的一部分:"假定没有交通意外,而且汽车例还有汽油,我会在20分钟内赶到你那里。"
建立系统的模型
这是估算有趣的部分。根据你对所提问题的理解,建立粗略、就绪的思维模型骨架。如果你是在估算响应时间,你
的模型也许要涉及服务器和某种到达流量(arriving traffic)。对于一个项目,模型可以是你的组织在开发过程中所用的
步骤、以及系统的实现方式的非常粗略的图景。
建模既可以是创造性的,又可以是长期有用的。在建模的过程中,你常常会发现一些在表面上不明显的底层模式与
过程。你甚至可能会想要重新检查原来的问题:"你要求对X所需的时间进行估算。但好象X的变种Y只需一半时间就能
完成,而你只会损失一个特性。
建模把不准确性引入了估算过程中。这是不可避免的,而且也是有益的。你是在用模型的简单性与精确性做交易。
使花在模型上的努力加倍也许只能带来精确性的轻微提高。你的经验将告诉你何时停止提炼。
把模型分解为组件
一旦拥有了模型,你可以把它分解为组件。你需要找出描述这些组件怎样交互的数学规则。有时某个组件会提供
一个值,加入到结果中。有些组件有着成倍的影响,而另一些可能会更加复杂(比如那些模拟某个节点上的到达流量的
组件)。
你将会发现,在典型情况下,每个组件都有一些参数,会对它给整个模型带来什么造成影响。在这一阶段,只要确
定每个参数就行了。
给每个参数指定值
一旦你分解出各个参数,你就可以逐一给每个参数赋值。在这个步骤中你可能会引入一些错误。诀窍是找出哪些
参数对结果的影响最大,并致力于让它们大致正确。在典型情况下,其值被直接加入结果的参数,没有被乘或除的那些
参数重要。让线路速度加倍可以让1小时内接受的数据量加倍,而增加5毫秒的传输延迟不会有显著的效果。
你应该采用一种合理的方式计算这些关键参数。对于排队的例子,你可以测量现有系统的实际事务到达率,或是找
一个类似的系统进行测量。与此类似,你可以测量现在服务1个请求所花的时间,或是使用这一节描述的技术进行估算
。事实上,你常常会发现自己以其他子估算为基础进行估算。这是最大的错误伺机溜进来的地方。
计算答案
只有在最简单的情况下估算才有单一的答案。你也许会高兴地说:"我能在15分钟内走完五个街区。"但是,当系统
变得更为复杂时,你酒会避免做出正面回答。进行多次计算,改变关键参数的值,直到你找出真正主导模型的那些参数
。电子表格有很大帮助。然后根据这参数表述你的答案。"如果系统拥有SCSI总线和64MB内存,响应时间约为四分之三
秒;如果内存是48MB,则响应时间约为一秒。"(注意,"四分之三秒"怎样给人以一种与750毫秒不同的精确感。)
在计算阶段,你可能会得到看起来很奇怪的答案。不要太快放弃它们。如果你的运算是正确的,那你对问题或模型
的理解就很可能是错的。这是非常宝贵的信息。
追踪你的估算能力
我们认为,记录你的估算,从而让你看到自己接近正确答案的程度,这是一个非常好的主意。如果总体估算涉及子
估算的计算,那么也要追踪这些子估算。你常常会发现自己估算的非常好——事实上,一段时间之后,你就会开始期待
这样的事情。
如果结果证明估算错了,不要只是耸耸肩走开。找出事情为何与你的猜想不同的原因。也许你选择了与问题的实际
情况不符的一些参数。也许你的模型是错的。不管原因是什么,花一点时间揭开所发生的事情,如果你这样做了,你的
下一次估算就会更好。
估算项目进度
在面对相当大的应用开发的各种复杂问题与反复无常的情况时,普通的估算规则可能会失效。我们发现,为项目确
定进度表的唯一途径常常是在相同的项目上获取经验。如果你实行增量开发、重复下面的步骤,这不一定就是一个悖论:
● 检查需求
● 分析风险
● 设计、实现、集成
● 向用户确认
一开始,你对需要多少次迭代,或是需要多少时间,也许只有模糊的概念。有些方法要求你把这个初始计划的一部
分定下来,但除了最微不足道的项目,这是一个错误。除非你在开发与前一个应用类似的项目,拥有同样的团队和同样
的技术,否则,你就只不过是在猜想。
于是你完成了初始功能的编码与测试,并将此标记为第一轮增量开发的结束。基于这样的经验,你可以提炼你原来
对迭代次数、以及在每次迭代中可以包含的内容的猜想。提炼会变得一次比一次好,对进度表的信心也将随之增长。
Iterate the Schedule with the Code!
通过代码对进度表进行迭代!
这也许并不会受到管理部门的欢迎,在典型情况下,他们想要的是单一的,必须遵守的数字——甚至是在项目开
始之前。你必须帮助他们了解团队、团队的生产率、还有环境将决定进度。通过使其形式化,并把改进进度表作为每次
迭代的一部分,你将给予他们你所能给予的最精确的进度估算。
在被要求进行估算时说什么
你说:"我等会儿回答你。"
如果你放慢估算的速度,并花一点时间仔细检查我们在这一节描述的步骤,你几乎总能得到更好的结果。在咖啡
机旁给出的估算将(像咖啡一样)回来纠缠你。
讨论:
有人问你:"1Mbps的通信线路和在口袋里装了4GB磁带、在两台计算机间步行的人,哪一个的带宽更高?"
你要对你的答案附加什么约束,以确保你的答复范围是正确的?你的假设下答案是什么?(比如,你可以说,
访问磁带所花时间忽略不记。)
假设:
1.磁带中含有我们需要传送的信息;
2.知道行走人的速度;
3.知道两台机器间的距离;
4.不考虑磁带读写时间;
5.在磁带上存储数据的开销与通过线路传送数据的开销相等;
结论:
4GB的磁带含有的320亿的比特信息,于是1Mbps的线路上传送相同数量的信息需要约32000秒,约9小时.如果人以9Km/h行走,那么两台机器至少要相距80km,通信线路才能胜过我们的传信人.
分享到:
相关推荐
估算活动持续时间是根据资源估算的结果,估算每个活动需要的工作时段的数据的过程,其作用是确定完成每个活动所需花费的时间量,为制订进度计划过程提供主要输入。估算方法主要有: ① 类比估算:根据历史项目的数据...
常用设计编程工具 NOVEX切削数据估算.zip常用设计编程工具 NOVEX切削数据估算.zip常用设计编程工具 NOVEX切削数据估算.zip常用设计编程工具 NOVEX切削数据估算.zip常用设计编程工具 NOVEX切削数据估算.zip常用设计...
本文不是泛泛的理论介绍,而是从实际应用角度出发,对功能点估算法进行介绍,加入了较多的评论和观点,具备实用价值。 章节目录如下:背景、概述、简介、基本概念、计算方法、延伸计算、优缺点、总结。 应用场景 1....
软件估算软件估算软件估算软件估算软件估算软件估算软件估算软件估算软件估算软件估算软件估算软件估算
电池技术发展至今,用来估算SOC的方法已经出现了很多种,既有传统的电流积分法、电池内阻法、放电试验法、开路电压法、负载电压法,也有较为创新的Kalman滤波法、模糊逻辑理论法和神经网络法等,各种估算方法都有...
资源名称:软件估算——“黑匣子”揭内容简介:在《软件估算——“黑匣子”揭秘》一书中,著名的软件开发书籍的作者Steve McConnell揭开了围绕在软件估算周围的层层迷雾。作者在深入浅出地介绍了与软件估算有关的...
软件成本估算从20 世纪60 年代发展至今,在软件开发过程中一直扮演着重要角色.按照基于算法模 型的方法非基于算法模型的方法以及组合方法的分类方式,全面回顾分析了软件成本估算的各种代表性方 法,也归纳讨论了与成本...
现公布《公路工程基本建设项目投资估算编制办法》(JTG M20-2011)和《公 路工程估算指标》(JTG/T M21-2011),自 2012 年 1 月 1 日起执行。原《公路基本 建设工程投资估算编制办法》和《公路工程估算指标》(交...
银行个人储蓄系统规模成本估算银行个人储蓄系统规模成本估算银行个人储蓄系统规模成本估算
非常详细规范的项目估算表,对于大项目前期工作量测算会有很大的指导和帮助,测算模板内容主要有:测算单元标准、单元估算、阶段工作量估算、资源估算、估算总结等。
软件开发成本估算 软件开发成本主要是指软件开发过程中所花费的工作量及相应的代价。它不包括原材料和能源的消耗,主要是人的劳动的消耗。 人的劳动消耗所需代价就是软件产品的开发成本。 软件产品开发成本的计算...
服务器处理性能估算 系统的建设,必须满足未来5年业务发展和管理的需求,所以下面对服务器性能指标的估算,将以满足未来5年的需要为基准。 1. 数据库服务器 1.1. TPCC值估算 约定: 系统同时在线用户数为100人(U1)...
已知漆包线直径或者扁平漆包线长宽,确定绕制空心电感量层数、线圈内径和线圈长度(单位:mm),即可估算出空心电感的电感量。由于在实际绕制时存在缝隙影响,计算结果与实际电感量有一定的误差,文档只作设计参考...
安时积分法是蓄电池荷电状态估算过程中常用的方法,但是,安时积分法不能估算初始荷电状态,难于准 确测量库伦效率和电池可用容量变化的问题。基于此问题,文章结合传统的开路电压法和负载电压法,对安时积分 法估算...
FP功能点估算方法,FP功能点估算方法课件,FP功能点估算方法PPT
资源名:自适应卡尔曼滤波估算SOC模型_锂电池模型_SOC估算模型_卡尔曼滤波算法_锂电池SOC估算模型_matlab仿真 资源类型:matlab项目全套源码 源码说明: 全部项目源码都是经过测试校正后百分百成功运行的,如果您...
资源名:递推最小二乘参数辨识方法_电动车电池仿真_电动汽车动力电池SOC估算模型_电动汽车动力电池参数辨识模型_matlab仿真 资源类型:matlab项目全套源码 源码说明: 全部项目源码都是经过测试校正后百分百成功运行...
污水处理厂工程投资估算表
电动汽车动力电池锂电池SOC估算SOC相关研究技术论文资料100个合集: ISAD混合动力汽车蓄电池SOC估算方法的研究_1000000844147811.pdf SOC估算方法和SOC估算装置以及电动汽车_1800001388085511.pdf SOC值及其续驶里程...
永磁同步电机无感foc位置估算源码 无刷直流电机无感foc源码,无感foc算法源码 1。 速度估算位置估算的代码所使用变量全部用实际值单位,能非常直观的了解无感控制电机模型,使用简短的代码实现完整的无感控制位置...