如果你问100家软件公司的CEO,问他们是否愿意发布包含bug的软件。他们会说什么50根本不会回答,会说某些软件错误是行业中的大问题,需要修复;40会说“当然不是!”诬告将追究法律责任。九会垂下头说“无能为力”。最后一个会看着你的眼睛说“当然。”我不知道最后一个是如何领导一家软件公司的,因为他显然是学经济学的。软件不可能没有错误。如果你想发布一个完美的软件,你必须解决所有隐藏在代码中的错误。(想要将它们拒之门外?不可能,单元测试、敏捷方法、scrum以及您今天能想到的任何方法都无法阻止错误进入您的代码库。如果我错了,我相信您会在评论告诉我。)正如您所料,您投入越多的时间和金钱来修复错误,您可以解决的错误就越多。但是,不幸的是,我们经济学的宿敌,收益递减法则,也适用于这个过程。从技术上讲,该规律是指在投入生产要素后,单位生产要素所能提供的产出增量逐渐减少的现象。通俗地说,这就是你从这个过程中得到的,不等于你投入的。相反,你的产出会随着投入的增加,形成一个快速下降的曲线。在曲线的末端,输入在轴上,最后变成一条长长的尾巴。例如,如果一个程序有100个错误,我们知道需要100分的努力才能找到并修复所有100个错误。收益递减定律告诉我们,前40分钟的努力会找到70个错误,接下来的30分钟会找到20个错误,剩下的30分钟会找到最后10个错误。也就是说,前70个bug(非常简单的bug)成本低,容易找到,每个bug只消耗40/70=0.571点功夫。接下来的20个错误(深层错误)要昂贵得多,每个花费30/20=1.5点努力,而最后10个错误(真的很难找到错误)非常昂贵,每个花费30/20=1.5点努力.每个消耗30/10=3点精力。与杀死前70个bug相比,杀死前10个bug花费的时间或金钱是每个bug的5倍。从努力的角度来看,消除大部分错误(70%-90%)和消除所有错误的成本存在巨大差异。从数值上看,相差两倍之多。而在现实中,现实比这更糟糕。因为你不知道什么时候可以杀死最后一个虫子——没有像上面例子那样的倒计时——你必须继续寻找更多的虫子,即使它们都被杀死了,你也无法证明它们都是杀了。如果你想消除所有的错误,你还需要计算你的成本。因此,消除程序中的所有错误是一件非常昂贵的事情。让我们花点时间这样想:一家软件公司最终决定这样做。软件公司不会设定像“发布无错误软件”这样的目标——他们设定的目标是“11月19日发布”——所以这个目标改变了公司的测试计划和开发计划(有或没有程序),这必然意味着一个增加预算。现在,您想象一下,谁将为这笔额外预算买单?公司?(嗨!)如果你没有在软件公司工作过,让我给你一个提示:没有。软件公司将成本转嫁给客户。因此,可以得出结论,你喜欢的软件就是你买得起的软件。我的信息是:你喜欢有缺陷的软件。(开源软件也是如此。除非你愿意支付更多的钱或等待更长的时间。你很可能会接受并接受劣质软件可用的事实。)现在澄清一下,我并不是说软件公司应该发布大量有严重错误的软件。我的意思是他们的软件中可能存在少量小错误。你怎么知道一个错误是大还是小?你应该想想谁会遇到它,遇到时会发生什么样的糟糕情况。如果用户转到三级菜单,打开高级配置窗口,选中三个复选框,并在按下“A”键时收到奇怪的错误消息,这是一个小错误。它被埋得很深,以至于人们在触摸它时会说“狗屎”,然后点击一个按钮,然后愉快地做其他事情。如果在你的程序中使用一个普通的操作时它崩溃了,那就是一个大错误。当遇到这样的错误时,大多数人都会感到愤怒。因此,我将提出一个黄金法则来判断您的软件何时可以发布。黄金法则是您应该不断地测试和修复软件中的错误,直到您发现这些错误:不会给您的公司带来耻辱。不会激怒您的客户。与一些用户遇到不存在的错误的成本相比,查找程序中的所有错误并确保它们都得到纠正的成本太高了。前提是,不要让用户成为你的测试人员——如果你这样做,你肯定会违反黄金法则——而是相信并非所有的错误都是平等的,有些会影响产品发布,而另一些则不会。不要害怕带有错误。如果你正在构建人们想要的好软件,一些错误不会打扰他们,特别是如果软件更新很容易做到,例如通过SaaS或Web应用程序。如果您的软件测试符合黄金法则,那么您的客户最渴望得到您的软件,而不是希望您修复那些小错误。所以,准备发布吧!哦,还有别忘了向那个该死的总裁请教炒股技巧。经济学家的公文包里总是备有最新数据。原文链接:http://www.aqee.net/the-economics-of-perfect-software/
