13.5.3 经验的作用

拥有丰富经验的设计人员对于一个操作系统项目来说至关重要。Brooks指出,大多数错误不是在代码中,而是在设计中。程序员正确地做了吩咐他们要做的事情,而吩咐他们要做的事情是错误的。再多测试软件都无法弥补糟糕的设计说明书。

Brooks的解决方案是放弃图13-11a的经典开发模型而采用图13-11b的模型。此处的想法是首先编写一个主程序,它仅仅调用顶层过程,而顶层过程最初是哑过程。从项目的第一天开始,系统就可以编译和运行,尽管它什么都做不了。随着时间的流逝,模块被插入到完全的系统中。这一方法的成效是系统集成测试能够持续地执行,这样设计中的错误就可以更早地显露出来。实际上,拙劣的设计决策导致的学习过程在软件生命周期中应该更早就开始。

阅读 ‧ 电子书库
图 13-11 a)传统的分阶段软件设计过程;b)另一种设计在第一天开始就产生一个(什么都不做的)工作系统

缺乏知识是一件危险的事情。Brooks注意到被他称为第二系统效应(second system effect)的现象。一个设计团队生产的第一件产品经常是最小化的,因为设计人员担心它可能根本就不能工作。结果,他们在加入许多功能特性方面是迟疑的。如果项目取得成功,他们会构建后续的系统。由于被他们自己的成功所感动,设计人员在第二次会包含所有华而不实的东西,而这些是他们在第一次有意省去的。结果,第二个系统臃肿不堪并且性能低劣。第二个系统的失败使他们在第三次冷静下来并且再次小心谨慎。

广告:个人专属 VPN,独立 IP,无限流量,多机房切换,还可以屏蔽广告和恶意软件,每月最低仅 5 美元

就这一点而言,CTSS和MULTICS这一对系统是一个明显的例子。CTSS是第一个通用分时系统并且取得了巨大的成功,尽管它只有最小化的功能。它的后继者MULTICS过于野心勃勃并因此而吃尽了苦头。MULTICS的想法是很好的,但是由于存在太多新的东西所以多年以来系统的性能十分低劣并且绝对不是一个重大的商业成功。在这一开发路线中的第三个系统UNIX则更加小心谨慎并且更加成功。