2.6.1 什么是系统设计
很多人都写过系统设计文档。但是,我多次在与软件工程师交流的现场,问过大家一个问题:在系统设计文档中应该写什么。很多人都无法给出准确的回答。
在维基百科(Wikipedia)中,系统设计的定义如下。
Systems design is the process of defining the architecture, modules, interfaces, and data for a system to satisfy specified requirements.
(系统设计是定义系统的架构、模块、接口和数据以满足特定需求的过程。)
这个定义总结得非常好,其中提到了系统设计中需要包含的几个要点:架构(Architecture)、模块(Modules)、接口(Interfaces)、数据(Data)。
这个定义中还提到了非常重要的一点,就是系统设计要满足指定的需求(Specified Requirements)。在系统设计中,经常要做出一些设计权衡(Tradeoff),这时候需要依据需求来做出决策。如果在需求分析阶段工作做得不够充分,那么在系统设计阶段也很难做出正确的决定。
另外,这个定义没有提到以下两点,但是它们也需要包含在系统设计中。
一个是系统中使用的“关键算法”。对于某些系统来说,算法是比较复杂的,需要花费不少精力来设计。
另一个是“系统设计思路”,也就是2.4.2节中提到的“为什么”(Why)。仅仅在系统设计中留下最后的结果是不够的,如何推导出这个结果,其“过程”也同样重要。当前的系统设计并不是终点,未来也会有优化或重构。对于未来从事这些工作的同事来说,系统设计中所留下的“设计思路”是非常有价值的。我们有时也会看到很多系统在重构后,并没有比以前的更好,甚至在很多地方重蹈了之前的错误,这和系统设计文档中“设计思路”的缺失有很大关系。