繁体
首页

第80章 错误、故障和风险(1)(2 / 3)

这里描述的事件只是许多可能会发生的事件中的一个采样。罗伯特·沙雷特(Robert Charette)是软件风险管理方面的专家,他强调计算机系统的错误和故障在所有国家都有发生,在为企业、政府和非赢利组织(大的和小的)开发的系统中也都有发生,“与他们的地位或名誉没有关联”。大多数情况下,在提到具体的公司或产品时,我不是专门把它们挑选出当作特别的反面教材。人们可以在新闻报道中、软件工程类期刊,以及在彼得·诺伊曼(Peter Neumann)的风险论坛摘要(Risks-Forum Digest)中,找到许多类似的故事。诺伊曼收集了成千上万的报告,它们描述的是各种各样的计算机相关问题。

8.1.2 对于个人的问题

账单错误

我们首先来看几个相对比较简单的错误,同时其负面影响也相对容易被撤销。

●一位女士收到630万美元的电费账单。正确的金额应该是$ 63。原因是有人在使用新计算机系统时输入错误。

●国税局往往是大错误的常见来源。一次他们修改了程序,以避免向美国中西部受到水灾影响的灾民收税,计算机却为近5000人产生了错误的账单。伊利诺伊州一对夫妇收到了一张几千美元的税收账单,另外还包括680亿美元的罚款。在一年时间里,国税局向3000人发送的账单金额都超过了3亿美元。有一位女士收到税单金额为40000001541美元。

●一位101岁的男子的车险费率突然增加了两倍。保险费用取决于年龄,但该程序能处理的年龄最多是100。它错误地把该男子归类为十八岁以下的小年轻。

●芝加哥数百名猫主人收到市政府寄来的账单,声称他们没有对腊肠狗进行登记,问题是他们根本没有养狗。该城市使用两个数据库来试图找到未注册的宠物。一个数据库使用DHC作为国产家猫(domestic house cat)的代码,而另一个数据库则使用DHC来表示腊肠狗(dachshund)。

程序员和用户可以避免其中的一些错误。例如,程序员可以采用测试,来确定账单金额是否超出了合理范围,或者与以前的账单相比发生了显著改变。换句话说,因为程序中可能包含错误,好的系统必须要拥有对结果进行检查的规定。如果你有一定的编程经验,你就会知道采用这样的测试,并生成一个案例清单来找人审查,这将会是多么容易的事情。这些错误可能会让人感到非常幽默。大错误是显而易见的,它们通常会很快得到修正。他们是值得研究的,因为同样的设计和编程错误,在不同的应用中可能会产生更严重的后果。在Therac-25的案例中(第8.2节),我们会看到,利用不一致或不恰当的输入测试,可以挽救生命。

我们应该期待账单系统应当如何接近完美呢?一家水厂给客户发送了一个22,000美元的不正确的账单。该发言人公司指出,在每月275,000个账单中,只有一个出错实际上已经相当好了。它的准确率高于99.999%。这样说合理的吗?在某个点上,为了改进系统所需的费用与其收益相比已经不值得了,特别是对于误差影响较小的应用,以及错误可以通过较小的代价检测和修复的情形。

数据中不准确和被曲解的数据

信用局的记录中有成千上万的新英格兰地区的居民的信用记录出错,说他们没有缴纳当地财产税。出现该问题的原因似乎只是一个输入错误。很多人因此被拒绝了贷款申请,直到有人认定了该问题的范围,信用局才对信息进行了修改。像 400亿美元的税单一样,影响了成千上万人的系统错误可能会很快被人发现。有关公司或机构就有可能迅速解决它。然而,也许更严重的是在个别人的记录中出现的那些错误。在一个案例中,一个县级机构在给信用局的报告中把一个没有支付子女抚养费用的父亲的中间名给弄错了。恰好有同一个县内的另一名男子的名字跟报告中的名字一模一样,他在购买汽车或房子都无法获得贷款。还有个人在申请几家零售店职位时,都遭到了拒绝。最终,他才了解到,这些商店都使用了一个数据库来筛选申请人,而该数据库将他列为一个商店扒手。事实上,是一个真正的商店扒手把偷来的钱包中的证件交给了警方。