项目工作手册
是什么。项目工作手册不是独立的一篇文档,它是对项目必须产出的一系列文档进行组织的一种结构。
项目所有的文档都必须是该结构的一部分。这包括目的、外部规格说明、接口说明、技术标准、内部说明和管理备忘录。
为什么。技术说明几乎是必不可少的。如果某人就硬件或软件的某一部分,去查看一系列相关的用户手册。他发现的不仅仅是思路,而且还有能追溯到最早备忘录的许多文字和章节,这些备忘录对产品提出建议或者解释设计。对于技术作者而言,文章的剪裁粘贴与钢笔一样有用。
基于上述理由,再加上“未来产品”的高质量手册将诞生于“今天产品”的备忘录,所以正确的文档结构非常重要。事先将项目工作手册设计好,能保证文档的结构本身是规范的,而不是杂乱无章的。另外,有了文档结构,后来书写的文字就可以放置在合适的章节中。
使用项目手册的第二个原因是控制信息发布。控制信息发布并不是为了限制信息,而是确保信息能到达所有需要它的人的手中。
项目手册的第一步是对所有的备忘录编号,从而每个工作人员可以通过标题列表来检索是否有他所需要的信息。还有一种更好的组织方法,就是使用树状的索引结构。而且如果需要的话,可以使用树结构中的子树来维护发布列表。
处理机制。同许多其他的软件管理问题一样,随着项目规模的扩大,技术备忘录的问题以非线性趋势增长。10人的项目,文档仅仅通过简单的编号就可以了。100人的项目,若干个线性索引常常可以满足要求。1 000人的项目,人员无可避免地散布在多个地点,对结构化工作手册的需要和手册规模上的要求都增加了许多。那么,用什么样的机制来处理呢?
我认为OS/360项目做得非常好。O.S.Locken强烈要求制定结构良好的工作手册,他本人在他的前一个项目1410-7010操作系统中,看到了工作手册的效果。
我们很快决定了每一个编程人员应该了解所有的材料,即在每间办公室中应保留一份工作手册的拷贝。
工作手册的实时更新是非常关键的。工作手册必须是最新的,如果每次变更都要重新打印所有的文档,那将很难做到。不过,如果采用活页夹的方式,则仅需更换变更页。我们当时拥有计算机文本编辑系统,它对实时维护有不可思议的帮助。编辑、排版、打印的工作直接在计算机和打印机上完成,周转时间不到一天。但即便如此,所有接收的人员还是会面临消化理解的问题。当他第一次收到更改页时,他需要知道,“修改了什么?”迟些时候,当他就问题进行咨询时,他需要知道,“现在的定义是什么?”
后一种需要可以通过不间断的文档维护来解决。文档变更的强调有若干个步骤。首先,必须在页面上标记发生改变的文本,例如,使用页边上的竖线标记每行变化的文字;第二,分发的变更页附带简短、独立的总结性文字,对变更的重要性以及批注进行记录。
这种机制在我们项目中碰到别的问题之前,稳定运行了6个月。工作手册大约厚达5英尺!如果将我们在曼哈顿Time-Life大厦办公室里所使用的100份手册叠在一起,它们比这座大厦还要高。另外,每天分发的变更页大约有2英寸厚,归入档案的页数大概有150页。工作手册的日常维护工作占据了每个工作日的大量时间。
这个时候,我们换用了微缩胶片,在为每个办公室配备了微缩胶片阅读机之后,节约了大量金钱,工作手册的体积减少了18倍。更重要的是,对数百页更新工作的帮助—— 微缩胶片大量地减轻了归档问题。
微缩胶片有它的缺点。从管理的角度而言,笨拙的文字归档工作确保了所有变更都会被阅读,这正是工作手册要达到的目的。微缩胶片使工作手册的维护工作变得过于简单,除非列举变化的文字说明和变更胶片一起分发。
另外,读者不能在微缩胶片上做强调、标记和批注。对作者来说,采用文档方式与读者沟通更加有效;对读者来说,文档也更加方便使用。
总之,我觉得微缩胶片是非常好的一种方法。对于大型项目,我建议把它作为文字工作手册的补充。
现在如何入手?在当今很多可以应用的技术中,我认为一种选择是采用可以直接访问的文件。在文件中,记录修订日期记录和标记变更标识条。每个用户可以从一个显示终端(打印机太慢了)来查阅。每日维护的变更小结以“后进先出”(LIFO)的方式保存,在一个固定的地方提供访问。编程人员可以每天阅读,但如果错过了一天,他只需在第二天多花一些时间。在他查看小结的同时,他可以停下来,去查询变更的文字。
注意工作手册本身没有发生变化。它还是所有项目文档的集合,根据某种经过细致设计的规则组织在一起。唯一发生改变的地方是分发机制和查询方法。斯坦福研究院的D.C.Engelbart和同事开发了一套系统,并用它在ARPA网络项目中建立和维护文档。
Carnegie-Mellon大学的D.L.Parnas提出了更彻底的解决方法[1]。他认为,当编程人员仅了解自己负责的部分,而不是整个系统的开发细节时,工作效率最高。这种方法的先决条件是精确和完整地定义所有接口。这的确是一个彻底的解决方法。如果能处理得好,的确是能解决很多“灾难”。一个好的信息系统不但能暴露接口错误,还能有助于改正错误。







