本书展示了系统设计和项目设计的结构化工程方法。本书的结构反映了方法论的两个部分:系统设计(通常称为架构)和项目设计。这两部分相辅相成,是成功的必要条件。附录提供了一些补充内容。 在大多数技术书籍中,每一章只针对一个主题并深入探讨,这样更容易编写,但这通常不是人们学习的方式。相比之下,在这本书中,讲解是螺旋式的。本书的两大部分中的每一 章都重申了前几章的观点,通过多方面的洞察来进行更深入的研究或观点的演进。这模仿了自然的学习过程,每一章都依赖于前面的章节,所以你应该按顺序阅读这些章节。本书的两大部分均包含了详细的案例研究,以展示这些观点以及其他方面。同时,为了保持迭代的简洁性,作为一般规则,我通常避免内容重复,因此即使是关键知识点,也只讨论一次。 以下是对各章和附录的简单介绍: 第1章 元设计方法 本章介绍了下列关键思想:要想成功,必须同时设计系统和用来构建系统的项目。这两种设计对于最终成功都是不可或缺的。没有架构就无法设计项目,设计一个无法构建的系统是毫无意义的。 第2章 分解 本章致力于将系统分解为组成其架构的组件。大多数人以最坏的方式来分解系统,所以本章首先解释了不该做什么。一旦这个观念建立起来,你将学会如何正确地分解系统,在该过程中掌握一组有用的、简单的分析工具并获得观察结果。 第3章 结构 本章提升了第2章的思想,引入了结构。你将看到如何捕获需求、如何对架构分层、架构组件的分类及相互关系、特定的分类指导原则以及一些相关的问题,如子系统设计。 第4章 组合 本章说明如何将系统组件组装成满足需求的有效组合。这简短的一章包含了本书的几个关键设计原则,并将前两章的内容转化为将在每个系统中使用的强大的思维工具。 第5章 系统设计示例 本章是一个广泛的案例研究,展示了迄今为止所讨论的系统设计思想。系统设计螺旋结构的最后迭代提供了一个实际的系统,使系统设计与业务保持一致,并展示了如何生成架构并对其进行验证。 第6章 动机 由于大多数人从来没有听说过项目设计(更不用说实践了),本章介绍了项目设计的概念和参与项目设计的动机。这是项目设计螺旋的第0次迭代。 第7章 项目设计综述 本章概述了如何设计一个项目,首先定义了“软件研发的成功”,然后介绍了明智的决定、项目人员配备、项目网络图、关键路径、安排活动和项目费用等关键概念。本章涵盖了随后各章中使用的大多数思想和技术,最后重点讨论了角色和责任。 第8章 网络和浮动时间 本章介绍了项目网络及其作为设计工具的使用。你将看到如何将项目建模为一个网络图,学习浮动时间的关键概念,了解如何在人员配备和调度中使用浮动时间,并了解浮动时间与风险的关系。 第9章 时间和成本 本章定义了在所有项目中时间和成本之间可能的权衡,并讨论了通过正确工作来加速所有项目的方法。除此之外,你还将学习压缩的关键概念、时间-成本曲线和成本要素。 第10章 风险 本章介绍了大多数项目中缺少的要素:量化风险。你将看到如何度量风险并将其映射到上一章的时间和成本概念中,以及如何基于网络计算风险。风险通常是评估选项的最佳方式,也是一流的规划工具。 第11章 实践中的项目设计 本章通过对设计一个项目所涉及的步骤进行系统的演练,将前几章的所有概念付诸使用。其目标是演示设计项目时使用的思维过程,以及如何为业务决策者审查做准备。 第12章 高级技巧 遵循螺旋式学习模型,本章介绍了高级技巧和概念。这些技巧在各种复杂程度(从简单到具挑战性)的项目中都很有用,是对前几章的补充,而且经常会结合起来使用。 第13章 项目设计示例 本章是与第5章的系统设计示例相对应的项目设计示例。它也是一个案例研究,展示了设计项目端到端的过程。本章的重点是案例研究,而不是技巧。 第14章 总结 最后一章从设计的技术方面进行了回顾,提供了一系列的指导、技巧、视角和开发过程思想。它从“回答何时设计项目这个重要问题”开始,以“项目设计对质量的影响”结束。 附录A 项目跟踪 附录A展示了如何在计划方面跟踪项目的进度,以及如何在需要时采取纠正措施。项目跟踪更多的是关于项目管理,而不是项目设计,但它对于确保你在工作开始后履行承诺至关重要。 附录B 服务契约设计 架构本身是粗略的,你必须设计其每个组件的细节,而这些细节中最重要的是服务契约。附录B指出了设计服务契约的正确方法。此外,关于模块化、规模和成本的讨论也很好地契合了本书大多数章节的内容。 附录C 设计标准 附录C汇总了本书中提到的关键原则、指南和禁忌事项。该标准是简洁的,是关于“什么”,而不是“为什么”。这个标准背后的原理可以在本书的其余部分找到。