完美软件的经济学分析

如果问100个软件公司的CEO,问他们是否愿意发布含有bug的软件。他们会说什么?50个根本不愿意回答,会说一些软件bug是这个行业中一个需要解决的大问题等不着边的话;40个会说“当然不会!”,并立即给他们的投资者打电话说这是诬陷,会追究法律责任。9位会低着头说“无能为力”。而这最后一位会直盯着你的眼睛说“当然会。”

我不知道这最后一位是如何领导一个软件公司的,因为他明显学过经济学

软件不可能没有bug,如果你希望发布一个完美的软件,你必须解决藏在代码里的所有bug。(想把它们挡在门外?不可能,单元测试,敏捷方法,scrum,以及任何当今你能想到的方法论,都不能防止bug进入你的代码库。如果我错了,我相信你会在评论里告诉我。)

正如你期望的,你在修补bug中投入越多的时间和资金,你就能解决越多的bug。但是,不幸的是,我们的来自经济学的死对头,受益递减法则,同样适用于这个过程。专业的讲,这个法则指在投入生产要素后,每单位生产要素所能提供的产量增加发生递减的现象。用通俗的话讲,这就是说,你能从这个过程中得到的并不等同于你所有投入的。相反,你的产出会随着投入到增加形成一条迅速下降的曲线,曲线的末端、投入到轴线上,最终成为一条长尾。

举个例子,假如一个程序有100个bug,我们知道这需要投入100分的努力来找到并修复这所有100个bug。受益递减法则告诉我们,头40分努力将会找到70个bug,而接下来的30分努力能找到20个bug,剩下的30分努力能找到最后的10个bug。这就是说,头70个bug(很简单的bug)很便宜,容易找到,算起来每个bug只消耗40 / 70 = 0.571分努力。接下来的20个bug(藏的较深的bug)要昂贵的多,每个消耗30 / 20 = 1.5分努力,而最后的10个bug(真正难发现的bug)惊人的昂贵,每个消耗30 / 10 = 3分努力。消灭这最后的10个bug要比消灭起初的70个bug,每个bug需要投入的时间或资金要多出5倍。从付出的努力看,消灭大多数bug(70%-90%)和消灭所有bug,它们的成本有巨大差别,从数字上看相差两倍之多。

而在现实中,实际情况比这更糟糕。因为你不知道何时能干掉这最后一个bug——没有一个像上面例子那样的倒计数——你不得不不断的去寻找更多的bug,即使是它们已经全部被干掉了,你也要去证明它们确是全部被干掉了。如果你想消灭所有的bug,你还要计算你的成本。

所以,消灭一个程序中所有的bug是一件代价很大的事。不妨让我们花一分钟这样思考一下:一个软件公司最终决定要这么做。软件公司并没有设定像“发布没有bug的软件”的目标——他们设定的目标是“11月19号发布”——于是,这个目标改变了公司的测试计划和开发计划(不论有没有计划),这必然意味着的预算的增加。现在,你想象一下,谁会为这多出的预算买单?公司?(嗨!)如果你没有在软件公司工作过,让我来给你一点提示:非也。软件公司会把成本转嫁到客户身上。因此可以得出,你喜欢的软件都是你支付的起的软件。我得到的消息是:你喜欢有bug的软件。(开源软件也是如此。除非你愿意花更多的钱或等更长的时间。很有可能你会接受去忍受次等的软件事实。)

现在澄清一下,我并不是说软件公司应该发布有大量严重bug的软件。我是说他们的软件里可以有少量的小bug。

如何知道一个bug是大还是小?你应该思考谁会遇到它,当遇到时会发生什么样的坏情况。如果一个用户,进入第三层菜单,打开一个高级配置窗口,选中三个复选框,在敲击“A”键时得到了一个奇怪的错误信息,这是小bug。它埋的很深,当碰到它时人们会说“靠”,然后改为点击按钮,然后就会愉快的做其它事情去了。如果在使用你的程序中一个常用的操作时崩溃,那这就是个大bug。大部分人遇到这样的bug时都会愤怒不已。

所以,我要提出一个判断你的软件何时满足发布条件的黄金法则。这个黄金法则内容是,你应该不断的测试并修复软件中的bug,直到发现这些bug是:

  1. 不会让你的公司蒙羞。
  2. 不会激怒你的客户。

相比起让一些用户遇到这些并不在于的bug的代价,你的要找出程序中所有bug并确保全部纠正的做法代价实在太高。前提条件是,不要让用户做你的测试员——如果你这样做,必定会跟黄金法则冲突——宁愿相信所有的bug并非生来平等,有些能影响一个产品的发布,而另一些则不然。不要害怕发布的产品中有bug。如果你开发的是人们想要的好软件,一些bug的存在并不会打搅他们,尤其是当软件升级操作简便时,比如通过SaaS或Web应用。

如果你的软件测试符合黄金法则,那么,你的客户最迫切得到的是你的软件,而不是希望你去修改那些小bug。所以,准备发布吧!

哦,别忘了去问那最后一个CEO关于炒股的技巧。经济学家的公文包里总有最好的数据。

[英文原文:The Economics of Perfect Software ]
分享这篇文章:

7 Responses to 完美软件的经济学分析

  1. 忧郁 says:

    以前发布软件时总是担心软件中的bug,不敢发布;现在我明知道软件中还有很多bug还是照样发布,修改bug是个无休无止的事情,不能为了修改bug而延误甚至不发布你的软件。至于发布后怎么办,那就只有祈祷老天爷了,在用户正在忍受你的bug时去睡个觉或者轻松一下吧,等他们实在忍受不了你的bug打你电话骚扰你或者准备投诉你时你在对他们做些小小的修正吧,这时他们会很感激你的!!

    • ever says:

      软件随想录里面也说道,你也可以用你无比强大的客服使那些可以用自己的时间抱怨你的bug的用户,在发现bug时比没有发现bug时更开心

      • jaxer says:

        哈哈,这让我想起来,今天做了一件好事。
        有个平安银行的客服MM打营销电话给我,我讲了两个笑话给她。
        ========
        现在突然觉得,她不会是有接受过培训,存在听到客户的笑话必须笑的条例吧。有吗?有吗?

  2. fuchao_pku says:

    没有BUG是不可能的,控制BUG是必要的。软件的生命力就是在修缮BUG的过程中逐渐成熟,借此不断上镜。
    BUG与软件的关系犹如毒药与解药的关系,相辅相成,相互促进。
    楼主见地新颖,希望能够坚持。

  3. bright says:

    其实和我想的一样.嘿嘿…

  4. martian 对这篇文章的反应是飘过~

发表评论

邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据