Windows 机密苦干,非巧干

Raymond Chen

对于软件开发人员,Windows 错误报告的最大优势之一是它能提供有关其程序故障根源的实际信息。任何已在 winqual.microsoft.com 在线注册的软件供应商都可以使用这些错误报告。当然,您可以在实验室运行所有类型的测试,但实验室情况与实际情况之间始终存在着鸿沟。这可能会导致一些错误在您的测试中始终没有出现,但会把您的客户搞得焦头烂额。

几年前有一位程序员向我讲述了这样一个故事,其产品的可靠性团队为其分配了一项任务。团队想解决某个特定组件中导致崩溃和挂起的主要原因。经过一些协商后,双方同意力图将此类故障数量减少为原来的一半。他们想修复至少对该组件 50% 的崩溃和挂起负责的错误(通过 Windows 错误报告测度)。

我们都知道故障并不是均匀分布的。有一些故障非常罕见,一些则很常见,还有一些非常猖獗(相对而言)。工程就是一场权衡游戏;如果资源(时间、金钱和技术力量)有限,您必须将您的资源用在它们能发挥出最大作用的地方。由于现在的目标是减少崩溃和挂起的次数,因此明智的方法是研究 Windows 错误报告所报告的最常见故障,了解根源,然后尝试修复这些常见故障。

fig00.gif

Windows 错误报告提供有关程序故障的实际信息(单击图像可查看大图)

当程序员研究故障数据时,发现在所报告的错误中,有五个特定的崩溃和挂起占总数的 60% 以上。如果程序员可以修复导致这五个故障的错误,他便可将崩溃和挂起次数减少到原来的五分之二(优于我们的目标值二分之一)。

Microsoft 自身的 Windows 错误报告数据的分析显示:帕拉图原理是解决 Windows 崩溃和挂起的一个绝好经验法则;约有 20% 的错误导致 80% 的故障。这一研究还揭示了一个更令人惊讶的结果:仅 1% 的错误便导致了 50% 的故障。并不是所有错误都是均等的,但了解这种分布的不均匀程度会非常令人大开眼界。

在更加仔细地对这五个故障进行研究之后,程序员发现这些故障都来自同一个根源。崩溃和挂起只是同一基本错误的不同表现。因此他与一些质量保证人员共同开发并测试了修复程序,并在下一个补丁中加入了这一修复程序。有了这一错误修复,该组件的理论失败率立刻减少为原来的五分之二。通过这一相当简单的代码他成功完成了修复。

当我听到这个故事时,我对该组件的错误分布曲线比 Windows 的更加突兀倍感惊讶。几乎一半以上的崩溃和挂起是由一个错误导致的。如果没有诸如 Windows 错误报告这类工具所收集的数据,您是无法在代码中获知这些信息的。

您可能会认为这么快便达到了其目标会令可靠性团队非常兴奋。仅在两周之内通过一次修复便超出了约定的目标。但是他们却非常生气。

“这真让人无法接受,我们预计这要用两个月的时间。这太简单了!”很明显,他们想让程序员埋头苦干,而不是巧干。

Raymond Chen 的网站“The Old New Thing”及同名著作均讲述了 Windows 的发展史及 Win32 编程。他衣服中的 20% 为洗衣房带去了 80% 的工作量。