zoukankan      html  css  js  c++  java
  • 软件工程 软件的估计为什么这么难

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

    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 人) 决定要徒步遍历中国陆地边界,  假设硬件装备齐全, 估计需要多长时间?

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

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

    答案明天揭晓。

  • 相关阅读:
    LeetCode 485. Max Consecutive Ones
    LeetCode 367. Valid Perfect Square
    LeetCode 375. Guess Number Higher or Lower II
    LeetCode 374. Guess Number Higher or Lower
    LeetCode Word Pattern II
    LeetCode Arranging Coins
    LeetCode 422. Valid Word Square
    Session 共享
    java NIO
    非阻塞IO
  • 原文地址:https://www.cnblogs.com/xinz/p/2005978.html
Copyright © 2011-2022 走看看