软件工程 软件的估计为什么这么难

前两年在网上看到一个笑话集锦, 列举电视剧中的穿帮情节。 其中一个是在某缠绵冗长的言情剧中, 一个叫 “书桓” 的角色沉痛地说 - “长达八年的抗日战争就要开始了…”  书桓同学当时是怎么估计到抗日战争要打八年的?  这一技术让软件工程师和项目经理望尘莫及。

image

软件项目计划的一个重要环节就是估计项目各类工作(特别是各种功能)所需的时间。 如果你没有书桓同学的能力, 你得好好练习这一技术。 “估计” 这一技术看似容易, 其实大有学问。 Steve McConnell 还专门写了 《Software Estimation: Demystifying the Black Art》 一书, 希望能把软件估计这一神秘技术 “去神秘化”。

在开始估计之前, 我们先分清楚几个概念 - 目标,  估计和决心, 。

目标: 表明一个希望达到的状态.  例如:  软件五一之前要投放市场!  在建校一百周年之时把我校建成世界一流大学!  不论这类目标如何重要, 它们未必能够实现。

估计: 以当前了解的情况和掌握的资源, 要花费多少人力物力时间才能实现某事。

决心: 保证在某个时间之前完成预先规定的功能和质量。 例如: 我们跑步前进, 全民炼钢, 两年超英赶美!

如果我们混淆了目标, 估计和决心, 那就会犯错误, 我们历史上就有这样的例子:

- 1958年5月中共八大二次会议肯定了当时中国出现的“大跃进”形势,认为中国正经历着 “一天等于二十年” 的伟大时期。调整了“二五”计划指标,钢产量由1200万吨提高到3000万吨,粮食从5000亿斤上升到7000亿斤。提出要使中国在15年或更短的时间内,在主要工业产品产量方面在十年内超过英国、十五年内赶美国(所谓“超英赶美”)。 这是一个估计。

- 伟大领袖在他的批语中写道:“赶超英国,不是十五年,也不是七年,只需要两年到三年,两年是可能的。”  这是一个目标。

- 大跃进开展只过了半年的时间,中央在伟大领袖的影响力之下,  把赶超英国的时间由十五年改为两年。下面各级组织纷纷动员, 停止其他正常工作, 全民大炼钢铁.  这是一个决心。 

后来全国各地出现了大量的卫星, 和不能用的钢铁,  钢产量, 粮食产量在后面两年不升反降。再后来… 

 

到了1976-77 年, 中国钢产量终于超过英国。 用了18 - 19 年时间。 扣除当年瞎折腾的几年, 这和当初估计的时间差不多! 

 

这样痛心的例子在软件项目也可以看到,  软件项目的延迟更是比比皆是 - 为什么我们估计得不准呢?  因为难么?   为什么软件估计这么难呢?  其实所有的估计都难.  不信的话, 我们做一些估计的练习,  不查搜索引擎, 你估计一下下面的数目 (数量级正确就行):

 

中国陆地边界长度 (参考答案)

非洲人口密度  (参考答案)

长江一年的流量  (参考答案)

2009年中国货币流通的总量 (参考答案)

一个80岁的人一生说过多少句话 (参考答案)

 

怎么样? 你的估计和实际情况差几个数量级?

一些硬件项目的估计相对容易 - 例如: 这边有一堆砖头, 估计有 X 块, 我们 N 个人要把这些砖头搬到那边, 每人每小时可以搬 M 块, 那么我们估计大概要 X / N / M 小时。 这个估计还是比较靠谱的。

软件项目的难度还体现在另一个方面, 写软件的人的能力也是要估计出来的数值, 而且没有合适的衡量单位,  例如:  如果王屋村的移山公司程序员果冻一天能写1000 行C++ 代码。 那他 10 天就能写好10,000 行代码?!  而且什么叫 写好 10,000 行代码?  如果你估计一个项目的代码量是10万行, 难道 10个像果冻这样的人 10 天就能做完? 

所以我们做软件的估计, 事实上是 (估计的工作量 / 估计的人员能力), 如果两个估计都差一两个数量级, 那么我们最终估计的结果就会偏离十万八千里. 

我在上课的时候给学生布置这样的课堂练习:

 

一个小组的同学 (6-8 人) 决定要徒步遍历中国陆地边界,  假设硬件装备齐全, 估计需要多长时间?

 

很多软件项目就是这样雄心勃勃地开始的, 大家觉得当年某某牛人/公司也这样做出来世界级的软件,  我们现在还有互联网, 我们小组里还有人精通设计模式, 这有什么可怕?   他们甚至连硬件装备都不齐全, 就开始行军了.

 

你觉得他们会花多长时间?  用什么样的办法能让同学们方便地交流各自的估计, 最后到达大致理性和统一的共识?

 

答案明天揭晓。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/500476.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java php html,java和html的区别是什么

区别:1、HTML主前端,呈现数据,Java主处理加工数据。2、JAVA主要用于桌面应用程序和分布式网络应用程序的开发;HTML用于前端页面的开发。3、JAVA的运行环境是JDK和WEB服务器,HTML的运行环境是浏览器。本教程操作环境&am…

软件工程 估计方法

上回书说到 - 一个小组的同学 (6-8 人) 决定要徒步遍历中国陆地边界, 假设供给装备齐全, 估计需要多长时间? 用什么样的办法能让同学们方便地交流各自的估计, 最后到达大致理性和统一的共识? 一般这个时候教室里一定非常热闹, 大家各抒己见, 争执得不亦乐乎。 但是最后往往…

现代软件工程 10 绩效管理

[现代软件工程 讲义 ] 我们前文讲了怎样衡量软件工程师的能力, 工程师如何成长, 如何证明自己的成长, 等等. 这些都是在一个独立的, 不受外界干扰的空间中做出来的判断。 我们假设一个有能力的工程师, 到了另一个团队, 仍然是一个有能力的工程师。 如何衡量个人在团队中的绩…

电子计算机和多媒体教材分析,电子计算机多媒体教学设计模板

电子计算机多媒体教学设计模板教学目的:1、知识与技能(1)会写5个生字,理解词语意思。(2)理解课文内容,了解什么是计算机,什么是多媒体设备。(3)了解.电脑与多媒体之间的关系并能口述。2、过程与方法(1)通过查找资料感悟计算机飞速…

软件工程 - 团队博客第二阶段成绩

正如我在学期开始的时候跟大家介绍的那样, 如果所有团队都做同样的事情, 那么分数就采用 1/n 的体系。 第一名得满分, 第二名得 1/2 的分数, 第三名得 1/3 的分数… 大家都在一个地方写博客, 项目都是同样有趣, 所以我们采用 1/n 体系, 满分 20 分. 第一组: Seven …

计算机java培训总结,java培训总结范文

java培训总结范文在现在这个科技飞速发展的时代,计算机已经悄然走进我们的生活,并且占据了不可动摇与替代的地位,无论是在工作还是生活,学习还是娱乐中,当我们意识到的时候,却突然发现我们已经离不开这个叫…

戴尔r720服务器增加内存,dell r720服务器加了一根内存后,开机显示configuring memory,卡在这里进不了系统,请问这是什么情况?...

新添加硬盘,需要进BIOS进行检测之后保存新的硬件配置再进入。BIOS检测方法:1、开机按F2进行BIOS设置 。2、进入BIOS,将启动模式选择成UEFI。3、开机按F11进行UEFI启动。4、进入Boot Manager,选择UEFI Boot Menu。5、选光驱(插入系…

现代软件工程讲义 0 课程概述

这门课的教学方案在这里. 根据学生和学校的具体情况, 可以进行调整。 师生关系 首先要明确的是, 在这门课中的师生关系是什么样的. 大学目前的师生关系是怎样, 什么样才是理想的师生关系? 我们先看一些例子: Retailer / customer (餐馆/食客)? 一些学生说, 我既然交了…

现代软件工程讲义 1 软件工程概论

几乎所有程序员都知道“数据结构+算法 程序 ” 这句名言。但是在实际的学习和工作中,也有不少人产生了疑问。例如: 1. 我写了二叉树的周游算法实现,在这里,二叉树是数据结构,周游的实现细节是算法。…

qq修改群名服务器失败,如何解决qq群名片改不了的问题

我们在进入一个qq群的时候,一般都会修改自己的群名片,但是有时我们会发现改不了的问题,这时我们应该怎么办呢?下面就让学习啦小编告诉你如何解决qq群名片改不了的问题的方法,希望对大家有所帮助。解决qq群名片改不了的方法电脑登…

软件工程 项目管理的目标和细节

项目管理的最高目标并不是要保证让 “ideal” 和 “actual” 的线吻合, 因为项目中出现意外和需求的变化是很正常的事。 项目管理的目标是处理这些意外和变化, 让软件能如期发布, 尽量满足客户的要求。 例如: http://www.cnblogs.com/takeitandgo/archive/2011/05/26/2059363…

现代软件工程 学生自我评价表

每年上完 <现代软件工程课>, 我都要收集同学们对自己上课前/后的评价。这样可以看到同学们到底在什么地方得到提高, 提高了多少. 这样可以分析课程设计各个环节的效果, 以便跟踪和改进。 下面是我使用的自我评价表: 匿名调查&#xff0c;整个学期, 你在这门课平均每周花…

IT 行业的创新 - 创新的迷思 (1-4)

[这是和北大同学交流的讲稿, 暑期课程-职业规划与领导力发展 课程的一部分] Myths of innovation 创新, 创新型人才, 创新型企业, 创新型国家, 这些都是最近时髦的词汇, 我在微软亚洲研究院创新工程组工作, 看过创新的猪跑, 也吃过创新的猪肉, 在这里和同学们分享一下我的…

IT 行业的创新 - 创新的迷思 (5-6)

[这是和北大同学交流的讲稿, 暑期课程-职业规划与领导力发展 课程的一部分] Myths of innovation 创新, 创新型人才, 创新型企业, 创新型国家, 这些都是最近时髦的词汇, 我在微软亚洲研究院创新工程组工作, 看过创新的猪跑, 也吃过创新的猪肉, 在这里和同学们分享一下我的体会…

IT 行业的创新 - 创新的迷思 (7-8)

[这是和北大同学交流的讲稿, 暑期课程-职业规划与领导力发展 课程的一部分] Myths of innovation 创新, 创新型人才, 创新型企业, 创新型国家, 这些都是最近时髦的词汇, 我在微软亚洲研究院创新工程组工作, 看过创新的猪跑, 也吃过创新的猪肉, 在这里和同学们分享一下我的体会…

创新 - 王屋村的魔方们

最近我和一些同学们讨论了一些有关 “创新” 的问题。 我不由得想起王屋村发生的一个故事。 王屋村原来没有人玩过魔方. 有一年开学, 一个叫果冻的同学从爪哇国带了这个新奇玩意到学校。 他口里念念有词, 转来转去, 居然能把魔方从凌乱的颜色组合还原成整齐的六面。 哇, 太神奇…

技能的反面 - 魔方和模仿

魔方的故事 大概是在我小学五年级的时候, 大家开始玩魔方&#xff0c;我们家也买了一个。 我和几个小孩折腾了一会, 没搞出什么名堂。我哥摆弄了好一会, 嘿! 弄出一面一样的颜色。后来我也琢磨出来怎么把一面颜色拼出来。 再后来我才知道魔方有一些模式和一些口诀&#xff0c…

软件工程讲义 3 两人合作(2) 要会做汉堡包

[上回书说到这里: http://www.cnblogs.com/xinz/archive/2011/08/07/2130332.html ] 很多同学憧憬在大型软件团队中和各式各样的人打交道, 推动项目进展, 但是他们往往连一对一的合作的技巧和经验都很缺乏。 请问, 从小学到高中, 大家有没有练习过 1:1 的合作? 上课? 没有…

现代软件工程讲义 4 团队和流程

Advanced Software Engineering, Team Structure and Development Process 软件团队和开发流程 非团队和团队 在讲团队之前, 我们要讲什么是“非团队”。王屋村里经常发生这样的一幕: 王屋村的大智要把一堆砖头从村头搬到村尾。 他到顶球酒吧前, 看到前面三三两两地蹲着一…

现代软件工程讲义 12 绩效管理

我们前文讲了怎样衡量软件工程师的能力, 工程师如何成长, 如何证明自己的成长, 等等. 这些都是在一个独立的, 不受外界干扰的空间中做出来的判断。 我们假设一个有能力的工程师, 到了另一个团队, 仍然是一个有能力的工程师。 如何衡量个人在团队中的绩效? 如果一个工程师能…