本章的主要身体力行的传授了制作一份文档的细节;流程图的心得;以及探讨了自文档化。

需要什么样的文档

首先根据不同受众,应分不同级别的文档。

用户手册(使用程序)

每个用户都需要一段对程序进行描述的文字。

  1. 目的。主要的功能是什么?开发程序的原因是什么?
  2. 环境。程序运行在什么样的机器、硬件配置和操作系统上?
  3. 范围。输入的有效范围是什么?允许显示的合法范围是什么?
  4. 实现功能和使用的算法。精确地阐述它做了什么。
  5. 输入-输出格式。必须是确切和完整的。
  6. 操作指令。包括控制台及输出内容中正常和异常结束的行为。
  7. 选项。用户的功能选项有哪些?如何在选项之间进行挑选?
  8. 运行时间。在指定的配置下,解决特定规模问题所需要的时间?
  9. 精度和校验。期望结果的精确程度?如何进行精度的检测?

测试用例(验证程序)

除了程序的使用方法,还必须附带一些程序正确运行的证明,即测试用例。

  1. 常规的 、主功能的;
  2. 极限的 ,边界的。
  3. 错误的 ,不符合规范的,用于测试异常情况。

开发文档(修改程序)

和一般用户一样,修改者迫切需要一份清晰明了的概述,不过这一次是关于系统的内部结构。那么这份概述的组成部分是什么呢?

  1. 流程图或子系统的结构图,对此以下有更详细的论述。
  2. 对所用算法的完整描述,或者是对文档中类似描述的引用。
  3. 对所有文件规划的解释。
  4. 数据流的概要描述——从磁盘或者磁带中,获取数据或程序处理的序列——以及在每个处理过程完成的操作。
  5. 初始设计中,对已预见修改的讨论;特性、功能回调的位置以及出口;原作者对可能会扩充的地方以及可能处理方案的一些意见。另外,对隐藏缺陷的观察也同样很有价值。

流程图

流程图是 被吹捧得最过分 的一种程序文档。事实上, 很多程序甚至不需要流程图,很少有程序需要一页纸以上的流程图。
流程图显示了程序的流程判断结构,它仅仅是程序结构的一个方面。
当流程图绘制在一张图上时,它能非常优雅地显示程序的判断流向,但当它被 分成几张时 ,也就是说需要采用经过编号的出口和连接符来进行拼装时, 整体结构的概观就严重地被破坏了

大家完全可以丢掉流程图,使用文字列表来表达这些内容

自文档化(self-documenting)

在作者的年代自文档化刚刚萌芽,大意包括不限于

  1. 规范的格式,请大家遵守各自语言的“最佳实践”;
  2. 重复模块的抽象;
  3. 良好而规范的注释,有些工具甚至可以通过注释生成API文档;
  4. 好的版本号,推荐语义化版本