繁体
首页

第84章 错误、故障和风险(5)(2 / 3)

我们刚才所描述的大多数事件都发生在没有使用计算机的系统中。一些人认为,一个良好的计算机系统可能会避免这些问题。而不管一个处理系统是否是由计算机控制,许多这些问题依然会发生。这些例子提醒我们,无论我们使用什么技术,个人和管理责任,良好的培训和问责机制都是非常重要的。

8.3 提高可靠性和安全性

要想成功,实际上就需要避免可能导致失败的多种原因。

——贾里德·戴蒙德(Jared Diamond)

8.3.1 专业技术

纽约证券交易所安装了一个造价20亿美元的系统,包括数百台计算机、200英里的光缆、8000条电话线路、300个数据路由器。为了应付可能的交易峰值,交换管理人员按照正常交易量的三倍和四倍对系统进行了压力测试。有一天,交易所处理的交易量超过了此前最高记录的76%,该系统都能正常处理所有交易,没有出现错误或延误。我们在本章描述了许多故障案例。然而,有许多大型、复杂的计算机系统工作得非常好,我们每天都要依靠它们。我们怎样才能设计、建造和运营能够运作良好的系统呢?

为了制造良好的系统,我们必须在开发的各个阶段使用良好的软件工程技术,包括需求说明、设计、实现、文档和测试等阶段。与几乎所有的领域一样,在不良的工作和良好的工作之间有很大的范围。专业人员、程序员和管理人员都必须要学习和使用现有的专业技术和工具,并遵循在各种相关道德准则和职业实践中所建立的既定规范和指南。(附录A中列出了其中两个重要的一般性规范和指南:《软件工程职业道德规范和实践要求(The Software Engineering Code of Ethics and Professional Practice)》,以及ACM道德规范和职业操守(ACM Code of Ethics and Professional Conduct).

管理和交流

管理专家使用术语高可靠性组织(high reliability organization, HRO)来指代在恶劣的环境下运作的组织机构(企业或政府),他们通常拥有复杂的技术,在这些技术中故障可能产生极端的后果(例如,空中交通管制,核电厂等)。研究人员针对做得非常好的HRO,总结了它们的特征。对于关键应用和非关键应用,这些特征都可以用于改进其中的软件和计算机系统。其中一个特点是“专注于失败”。这意味着总是会假设某些意想不到的事情都可能出错:不仅仅是针对团队可以预见的所有问题进行规划、设计和编程,而且总是要意识到他们可能会错过一些东西。“专注于失败”包括对可能表明有错误出现的线索保持警觉。它包括对接近失败的情形进行完全分析(而不是因为它躲过了实际故障的发生,就假定系统可以“正常工作。”),以及寻找关于错误或失败的系统性原因,而不只是狭隘地专注于出错的细节。(例如,为什么火星气候探测者号的有些程序员假设度量单位是英制,而其他程序员却假设使用的是公制单位?)

成功组织的另一个特点是松散的结构。它应该让设计师或程序员可以很容易与公司内其他部门的同事或上司进行交流,而不是一定要通过严格死板的渠道,因为这样会阻碍沟通。在组织内和公司与客户之间建立一种开放、坦诚沟通的气氛对于尽早发现问题和减少处理它们所需的工作是至关重要的。

在组织特定的领域中,还有更多可以鼓励成功的因素。对于项目经理、创业公司的创始人和任何管理人士来说,花点时间来研究它都是非常有必要的。

安全攸关的应用

计算机科学中有一个子领域专门关注安全攸关软件的设计和开发。安全专家强调,开发人员必须从一开始就把安全“设计进去”。通过危险性分析技术,可以帮助系统设计人员识别风险和防范它们。在安全攸关应用领域工作的软件工程师应接受专门的培训。软件专家南希·勒沃森(Nancy Leveson)强调,如果拥有良好的技术实践和良好的管理,你就可以正确地开发大型系统:“一个教训是,大多数事故并不是因为对科学原理不了解,而是由于在应用某个众所周知的标准工程实践的时候出了问题。