Category of Software Design

1. About Software Design

软件设计是一个创建软件工件规格说明的过程,目的是使用一组原始组件并对其进行约束以实现目标。软件设计可能指的是“概念化、构造、实现、调试和最终修改复杂系统所涉及的所有活动”,或者“在程式化的软件工程过程中,遵循需求规格说明并在编程之前进行的系列活动”。

软件设计通常包括解决问题和规划软件解决方案。这包括低级的组件和算法设计以及高级的架构设计。

1.1. Overview

软件设计是对一组或多组问题的设想和定义软件解决方案的过程。软件需求分析(SRA)是软件设计的一个主要组成部分。SRA 是列出软件工程中使用的规格说明的软件开发过程的一部分。如果软件是“半自动化的”或以用户为中心的,软件设计可能涉及用户体验设计,产生一个故事板来帮助确定那些规格。如果软件是完全自动化的(意味着没有用户或用户界面),软件设计可能像流程图或描述计划事件序列的文本一样简单。也有一些半标准的方法,如统一建模语言和基本建模概念。在任何一种情况下,计划的一些文档通常是设计的产物。此外,软件设计可能是独立于平台的,也可能是特定于平台的,这取决于实现具体设计的技术。

软件分析和设计之间的主要区别是,软件分析的输出由要解决的更小的问题组成。此外,不应该在不同的团队成员或组之间设计非常不同的分析。相反,设计关注的是功能,因此针对同一问题的多种设计可能并且将会存在。根据环境的不同,设计常常会有所不同,无论它是根据可靠的框架创建的,还是使用合适的设计模式实现的。设计的例子包括操作系统、网页、移动设备,甚至新的云计算范例。

软件设计既是一个过程,也是一个模型。

1.2. 组件、算法设计与架构设计

算法、组件与架构--由低层到高层,暗示了看待问题的粒度大小是不同的,但从设计的本质上看并无不同:无论哪个层级的设计,其实都是由更底层模块进行支持和保障的,也同时要与外部模块按照约定进行协作。

在面向对象的设计中,一个架构可以被拆分成多个组件,一个组件又是由算法和数据构成的,因此设计视角必然也是软件架构的视角。

软件架构是指软件系统的基本结构以及创建这些结构和系统的规则。每个结构包括软件元素、它们之间的关系以及元素和关系的属性。软件系统的体系结构是一个比喻,类似于建筑物的体系结构。它作为系统和开发项目的蓝图,列出了需要由设计团队执行的任务。

软件架构是就基础结构做出选择,这些选择一旦实现就需要付出高昂的代价来更改。软件架构的选择包括软件设计中可能出现的特定结构选项。此外,为了满足可靠性的需要,可以选择多个冗余的、独立生成的程序副本,并在交叉检查结果的同时在独立的硬件上运行这些副本。

记录软件架构有助于涉众之间的沟通,捕获关于高层设计的早期决策,并允许在项目之间重用设计组件。

1.3. Design Considerations

在设计一个软件时要考虑很多方面。每个考虑事项的重要性应该反映软件创建要满足的目标和期望。这些考量因素包括:

2. Topics


CategoryCategory

MainWiki: CategoryDesign (last edited 2013-02-28 23:32:13 by twotwo)