软件产品设计是指从外部视角设计软件系统,制定软件产品的功能、特性和对外交互细节,满足客户需求和愿望的活动。产品设计主要使用业务设计、人机交互设计、市场营销等方面的技能。
软件工程设计是指从系统内部结构视角设计软件系统,使用模块、类、方法、数据结构、算法等实体建立系统的组织结构和运行逻辑,在满足软件产品设计外部视角的同时尽可能提升软件质量。工程设计需要编程、算法、数据结构、软件设计原则、软件设计方法、体系结构和模式等方面的技能。
系统需求分析和软件需求分析联合起来完成软件系统的产品设计,决定了系统的功能和效用。
软件体系结构设计、软件详细设计和程序设计联合起来完成软件系统的工程设计,重点是保障软件系统的质量。
程序设计是一种特殊的工程设计,它使用的不是完全抽象的模型,而是特定的程序设计语言,这意味着程序设计的上下文限制比较明确和具体。
各个设计层次都有审美要求。产品设计的审美侧重于人机交互的舒适性和界面美观。工程设计的审美侧重于系统结构上的美感,类似于数学上所说的数学美感,例如简洁、清晰、一致等。
除非特别提及,本书所讲述的软件设计主要是工程设计。需要了解产品设计的读者可以参见软件需求工程方面的著作。