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

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

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

徐海学院计算机专业好吗,2019中国矿业大学徐海学院专业排名

中国矿业大学徐海学院是中国矿业大学以新机制举办的独立学院,成立于1999年,2003年经教育部批准作为独立学院办学,是江苏省最早批准办学的独立学院之一。为了让大家更好的了解这所大学的专业排名,下面是学习啦小编给大家带来的中国…

软件工程 团队博客分数 (第一阶段)

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

高中学生计算机软件,中学生计算器

一款非常实用好用的手机计算器软件中学生计算器分享给大家强大的软件,完美快捷的输入方式,中学生计算器app拥有很多函数公式计算功能,让你完美的完成各种考试作业的计算,功能多多。中学生计算器软件介绍隐私计算器app是一款比自带…

软件工程 - 团队重组

In software companies, as in many corporations, the only thing that is not changed is “change” itself. A change in team membership and structure is usually called “re-organization”, or “re-org”. In sports, we call it “转会季节”. At the begi…

计算机组成原理实用教程课后答案,王万生《计算机组成原理实用教程》课后习题答案..doc...

王万生《计算机组成原理实用教程》课后习题答案.习题1参考答案一、选择题1.微型计算机的分类通常是以微处理器的 D 来划分。A.芯片名B.寄存器数目C.字长 D.规格2. 将有关数据加以分类、统计、分析,以取得有价值的信息,…

软件工程 团队作业 #9

Write a blog to describe in detail how you’re going to test your software based on scenario and persona 1.(link to your test plan, this was last week’s homework) 2.(link to your persona) 3.How do you expect different personas (some teams have 3 persona…

大学计算机基础水平,大学计算机基础心得.docx

大学计算机基础心得《大学计算机基础》与《大学计算机基础实践教程》假期学  习心得  在科学技术日新月异的发展的今天,人类进入了信息时代,随之而来的是越来越普遍的信息处理工作,计算机的应用在日渐广泛与深入,社会对计算机…

现代软件工程 10 绩效管理

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

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

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

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

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

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

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

中大型计算机代表型号,目前个人计算机主要机型.doc

目前个人计算机的主要机型HYPERLINK "/wiki/PC" \t "_blank" PC (Personal Computer) HYPERLINK "/wiki/%E4%B8%AA%E4%BA%BA%E8%AE%A1%E7%AE%97%E6%9C%BA" \t "_blank" 个人计算机:一种设计用于一次由一个人使用的计算机&a…

戴尔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 (餐馆/食客)? 一些学生说, 我既然交了…

shiro ajax权限拦截器,Shiro Ajax请求权限不满足,拦截后解决方案

Java模拟Http请求Java模拟Http请求使用的是org.apache.httpcomponents中的httpclient,因为post请求涉及到传输文件,所以需要使用httpmime这个包...centos7 上安装mysql5.7后登录报错ERROR 1045 (28000): Access denied for user rootlocalhost安装完mysq…

软件工程 Beta 阶段 团队贡献分数

为了衡量一个团队中不同人的贡献, 我们在软件工程课中设计了 “团队贡献分”。 下面是Beta 阶段的得分。 Now for beta stage, here are the rules, pretty much the same, but with some technical changes: a) Each team member brings in 10 points. b) a team member ca…

苹果断开电脑连接服务器无响应,mac电脑iTerm2链接linux服务器断线解决方案

问题用windows链接linux服务器,方式很多,我最经常用的是xshell。但是xshell没有mac版,那用mac电脑,比较好的命令行软件是什么呢?我用的是iTerm2 ,这个功能确实蛮强大,很多人都在用。但是&#x…

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

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