软件设计概要
- 1、 软件设计的概念和设计质量
- 1.1 软件设计基本任务
- 1.2 设计模型
- 1.3 软件设计特点
- 1.4 设计质量属性
- 1.5 设计指导原则
- 2、 设计相关八大概念
- 抽象
- 体系结构
- 设计模式
- 模块化
- 信息隐藏
- 功能独立
- 精化
- 重构
- 3、 四类设计技术概要
- 3.1 数据设计
- 3.2 体系架构设计
- 体系结构组织和细化
- 部署设计
- 3.3 接口设计
- 3.4 组件设计
软件设计定义为软件系统或组件的架构、构件、接口和其他特征的定义过程及该过程的结果。
软件设计是软件生命周期中的一个活动,是进行软件编码的基础,将软件需求分析转化为软件的内部结构,是连接用户需求和软件技术的桥梁。
1、 软件设计的概念和设计质量
1.1 软件设计基本任务
- 软件架构设计(有时称为顶层设计):描述软件的顶层架构和组织,划分不同的组件。包括设计软件系统总体结构、数据结构及数据库设计(概念设计、逻辑设计和物理设计)、编写概要设计文档和评审。
- 软件详细设计:详细描述各组件以便能够编码实现。算法设计、数据结构设计、数据库设计和其他设计(代码设计、输入输出设计和用户界面设计)、编写详细设计说明书和评审。
- 注意:
- 软件设计主要为分解设计D-design(Decomposition design).分解设计:将软件映射为各组件
- 可以包括系列模式设计FP.deslgn(Family Pattern design):
1.2 设计模型
模型输入:软件需求的数据模型、功能模型和行为模型。
分类:数据设计、架构设计、接口设计、组件设计。
1.3 软件设计特点
- 设计必须实现在分析模型中包含的所有明确要求,必须满足客户所期望的所有隐含要求;
- 设计必须对编码人员、测试人员及后续的维护人员是可读可理解的;
- 设计应提供该软件的完整视图,从实现的角度解决数据、功能及行为等各领域方面的问题。
1.4 设计质量属性
- 功能性
- 易用性
- 可靠性
- 性能
- 可支持性:扩展性、适应性和可维护性
1.5 设计指导原则
- 设计应该是一种架构;
- 设计应该是模块化的;
- 设计应该包含数据、体系结构、接口和组件各个方面:应该设计出系统所用的数据结构;应该设计出展现独立功能特性的各组件;应该设计出各组件与外部环境连接的各接口。
- 设计由软件需求分析过程中获得信息驱动、采用可重复使用的方法导出;
- 设计应该采用正确清晰的表示法。
2、 设计相关八大概念
抽象
- 抽象是在软件设计的规模逐渐增大的情况下,控制复杂性的基本策略。抽象是认识复杂现象过程中使用的思维工具,即抽出事物本质的共同特性而暂不考虑它的细节。
- 抽象机制:参数化和规范化
- 规范化抽象:数据抽象(描述数据对象的冠名数据集合)和过程抽象(具有明确和有限功能的指令序列)。
如门包含属性:门的类型、转动方向、开门机关、重量和尺寸等;开 一系列过程:走到门前,伸出手并抓住把手,转动把手并拉门,离开打开的门等。
体系结构
- 定义:软件的整体结构和这种结构为系统提供概念上完整性的方式
- 体系结构设计可以使用大量的一种或多种模型来表达:结构模型、框架模型、动态模型、过程模型、功能模型
设计模式
- 定义:在给定上下文环境中一类共同问题的共同解决方案
- 微观结构:实体模式、结构模式、行为模式
抽象工厂:提供一个创建一系列相关或相互依赖对象的接口,而无需指定他们具体的类。
模块化
- 模块:程序中数据说明、可执行语句等程序对象的集合。
- 模块化:解决一个复杂问题时自顶而下逐层把软件系统划分成若干模块的过程。
- 软件的模块性:程序可被智能管理的单一属性。
- 模块化的理论依据:基于人类解决问题的观测数据。模块的个数与集成成本、总成本、工作量有约束关系,不能过多或过少。
- 模块化设计标准
- 模块化的分解性:可分解为子问题
- 模块化的组合性:组装可重用的组件
- 模块化的可理解性:可作为独立单元理解
- 模块化的连续性:需求小变化只影响单个模块
- 模块化的保护:模块内异常只影响自身。高内聚、低耦合
- 模块化基本问题:如何分解软件系统以达到最佳的模块划分
信息隐藏
信息隐蔽是指在设计和确定模块时,使得一个模块内包含的信息对于不需要这些信息的其他模块来说,是不能访问的。通过抽象,可以确定组成软件的过程实体;通过信息隐蔽,可以定义和实施对模块的过程细节和局部数据结构的存取限制。
- 信息隐藏原则:
- 模块应该具有彼此相互隐藏的特性;
- 模块定义和设计时应当保证模块内的信息(过程和数据)不可以被不需要这些信息的其他模块访问
- 特点:
- 抽象有助于定义构成软件的过程(或信息)实体;
- 信息隐藏原则定义和隐藏了模块内的过程细节和模块内的本地数据结构
功能独立
- 含义:·每个模块只负责需求中特定的子功能,并且从程序结构的其他部分看,该模块具有简单的接口
- 好处
- 易于开发:功能被划分,接口被简化
- 易于维护(和测试):次生影响有限,错误传递减少,模块重用
- 定性衡量标佳
- 内聚性:模块的功能相对强度
- 耦合性:模块之间的相互依赖程度
- 模块独立性强=高内聚低耦合
精化
- 含义:逐步求精的过程
- 与抽象的关系
- 抽象使设计师确定过程和数据,但不局限于底层细节;
- 精化有助于设计者在设计过程中揭示底层细节。
重构
- 含义:不改变组件功能和行为条件下,简化组件设计(或代码)的一种重组技术
- 方法:检查现有设计的冗余情况、未使用的设计元素、无效或不必要的算法、较差的构建方式或不恰当的数据结构,或任何其他可被更改从而优化设计的问题
3、 四类设计技术概要
3.1 数据设计
数据设计(数据架构)构建高层抽象(客户/用户的数据视图)的数据模型、信息模型。
-
设计原则
- 应用于功能和行为系统分析的原则也应适用于数据设计
- 所有的数据结构及其对应的操作都应该确定
- 建立数据字典并在数据定义和程序设计中应用
- 低层次的数据设计应该推迟到设计的后期过程
- 数据结构的表示应该只对直接使用数据结构中数据的模块可见
- 开发有用的数据结构及其对应操作的程序库
- 软件设计和编程语言应该支持抽象数据类型的定义与实现
-
组件级别的数据设计
3.2 体系架构设计
系统需要执行的函数功能组件集(如数据库、计算模块);
组件之间通信、协同和合作的连接器;
组件集成构成系统的约束;
设计人员通过分析系统组成部分的已知特性,理解其整体特性的语义模型分析。
-
数据中心架构
-
数据流体系架构
-
调用和返回架构
-
层次架构
-
面对对象架构
体系结构组织和细化
两个基本问题:
- 控制结构:在架构内部如何实现管理控制?是否有不同的控制架构存在?
- 数据传递:组件之间如何进行数据传递?数据流是否连续,或者传递给系统的数据对象是否零散?
部署设计
以部署环境创建开始,在整个生命周期阶段中处于逻辑设计和技术需求阶段;
部署环境包含整个解决方案的逻辑架构和服务质量( Q o S Q_oS QoS)需求;
部署架构设计是一个反复达代的过程,通常需要多次查看 Q o S Q_oS QoS要求和多次检查先前的设计,需要考虑了服务质量 Q o S Q_oS QoS需求的相互关系,平衡取舍相关问题成本以实现最佳解决方案,最终满足项目的业务目标。
-
部署设计输出
-
部署设计方法
3.3 接口设计
高效的用户界面设计由三条重要原则:
- 允许用户操作控制(用户为中心)
- 减少用户记忆负担
- 保持界面一致
环境分析确定了用户接口操作对的物理结构和社会结构。
3.4 组件设计
- 面对过程的组件设计:函数与模块的设计
- 面对对象的组件设计:类与操作的设计