天天小说网

11.4 与错误打交道

删除对象)快速修复,并且通过有效单元的组装来实现扩展。

前面提到,在IBM的代码中有三十一处错误。而包含这些错误的模块充分说明了软件的一个特性——错误总是扎堆出现的。我们可以利用这个特性来达到质量管理上的希格玛精度。零缺陷运动的圣经《零缺陷软件》写道,“你发现的下一个错误,极有可能出现在你已经找出了十一个错误的模块里,而那些从未出过错误的模块,则可能会一直保持不败金身。”错误扎堆现象在软件中是如此普遍,以至于被当作一条“魔鬼定律”:当你发现一个错误的时候,也就意味着还有另外一堆你没看见的错误在什么地方等着你。

《零经》中提到的补救方法是这样的,“不要把钱花在错误百出的代码上,抛弃它!重写一段代码的代价和修补一个错误百出的模块的代价相差无多。如果软件的某个单元的错误率超过了一定的阈限,就把它扔掉,另找一个开发人员来重写代码。如果你手上正在编写的代码显示出某种容易出错的倾向,就放弃它,因为在前期出现错误的话,也就意味着后面还将不断地出错。”

随着软件的复杂性迅速增加,在最后关头对其进行详细检测是不可能的。因为它们是非连续的系统,所以总会隐藏着某些诡异的个例或是某种致命的响应——其被激活的几率可能只有百万分之一,无论是系统化的测试还是抽样测试都无法发现它们。另外,尽管统计抽样能够告诉我们是否有出错的可能,却无法确定出错的位置。

新生物学的解决之道是用一个个可以正常工作的单元来搭建程序,并在这个过程中不断地对其进行检测和修正。不过,我们还会面临这样的问题:尽管各个单元是没有漏洞的,但在搭建的过程中,仍然会发生意料之外的“突现行为”(即漏洞)。不过,你现在所要做的就是在更高一级的层面上进行测试(因为底层单元已经被证明是没有问题的),因而是有希望做到“零缺陷”的——这比要同时应付突现问题和深埋问题的情况要好得多了。

泰德靠发明新的软件语言谋生。他是面向对象程序语言的先行者,是SmallTalk和HyperCard的编写者,现在正在为苹果电脑研发一种“直接操作”(direct manipulation)式语言。当我问起苹果的零缺陷软件时,他一语带过:“我认为是有可能在产品化的软件中达到零缺陷的,譬如说你正在写的又一款数据库软件。只要你真正明白自己在干什么,就可以做到没有任何错误。”

泰德永远都不可能跟日本的那种软件作坊合得来。他说,“一个好的程序员可以对任何一个已知的、规律的软件进行重写,巧妙地减少代码。但是,在创造性编程过程中,没有任何已经被完全理解的东西。你不得不去编写自己也并不明白的东西……嗯,是,你是可以写出零缺陷的软件,但它会有好几千行超出所需的代码。”

自然亦是如此:它通过牺牲简洁性来换取可靠性。自然界中存在的神经元回路,其非最优化程度始终令科学家们瞠目结舌。研究小龙虾尾部神经细胞的科学家们揭示了这种回路是多么令人震惊地臃肿和丑陋。只要花点功夫,他们就能设计出一种紧凑得多的结构。不过,尽管小龙虾的尾部回路要比它真正需要的冗余很多,但却是不会出错的。

零缺陷软件的代价就是它的“过度设计”,超量建设,多少有点浮肿——永远不会处在泰德和他的朋友所经常逗留的那种未知的边缘。

它是用执行效率来换取生产效率。

我曾经问诺贝尔奖得主赫伯特·西蒙[17]如何让这个零缺陷哲学与他那个“满意化”概念——不求最优,但求够好——相包容。他笑着说,“哦,你可以去生产零缺陷的产品。但问题在于你是否能够以一种有利可图的方式来生产它?如果你关心的是利润,那么你就得对你的零缺陷概念进行满意化处理。

”哦,又是那个复杂性的妥协问题。

网络式经济的未来在于设计出可靠的流程,而不是可靠的产品。与此同时,这种经济的本质意味着这种流程是不可能最优化的。在一个分布式的、半活性[18]的世界中,我们的所有目标只能被“满意化”,而且这种满意也只能保持很短的一瞬。也许一天之后整个形势就完全变化了,正所谓“乱哄哄,你方唱罢我登场”。

更多内容加载中...请稍候...

若您看到此段落,代表章节内容加载失败,请关闭浏览器的阅读模式、畅读模式、小说模式,以及关闭广告屏蔽功能,或复制网址到其他浏览器阅读!

新书推荐

苟在美食的俘虏 下海后,遇见魔女小姐 致郁系编剧 魔法使苍崎青子事件簿 绝世唐门雨浩你变了 红楼道爷 人在柯南,但是修罗场 全民废土:我能无限强化避难所 诸天万古道 从有风的地方开始的文娱