第4章软件设计基础_第1页
第4章软件设计基础_第2页
第4章软件设计基础_第3页
第4章软件设计基础_第4页
第4章软件设计基础_第5页
已阅读5页,还剩56页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第第4 4章软件设计基础章软件设计基础 软件设计软件设计 第一部分:软件设计过程和原理 第第4章软件设计基础章软件设计基础 本章重点本章重点 设计的目标、任务原则 设计过程(过程、技术、方法和工具) 设计的产品 设计的评审 第第4章软件设计基础章软件设计基础 1 软件设计软件设计 l软件设计是把软件需求规格说明转 为软件过程性的表示,它决定了将 要如何构造软件。 解决“怎么做”的问题 第第4章软件设计基础章软件设计基础 软件设计的目标 将需求分析模型转换为软件设计模型 数据词典 数 据 流 图 实实 体 关 系 图 状态转换图 加 工 控 制 规 规 格 格 说 说 明 明 数 据 对 象 描

2、 述 过程设计 接口设计 体系结构设计 数据设计 第第4章软件设计基础章软件设计基础 软件设计过程 从工程管理的角度来看,软件设计分两步完成。 概要设计,将软件需求转化为数据结构和软件的系统 结构。 详细设计,即过程设计。通过对结构表示进行细化, 得到软件的详细的数据结构和算法 第第4章软件设计基础章软件设计基础 设计过程的一般模型 需求描述需求描述 体系结构设计体系结构设计抽象描述抽象描述接口设计接口设计组件设计组件设计 数据结构数据结构 设计设计 系统体系结构系统体系结构软件描述软件描述接口描述接口描述组件描述组件描述 数据结构数据结构 描述描述 算法描述算法描述 算法设计算法设计 第第4

3、章软件设计基础章软件设计基础 2.设计原理设计原理 设计依赖的三种方法 抽象、分解和投影 设计一个系统有许多方法,具体的设计方法 取决于下列因素: 系统所要求的结构或数据 设计者自已的爱好和习惯 每一种设计方法都应采用某种分解方法: 自顶向下,逐层分解,不断细化 从系统关键元素的顶层图开始,逐步建立较低层 次元素 第第4章软件设计基础章软件设计基础 分解的层次 Top level First level of decomposition Second level of decomposition 第第4章软件设计基础章软件设计基础 设计的基本方法设计的基本方法 模块分解(Modular dec

4、omposition) 将功能分配给模块; 高层描述系统功能,低层描述模块组织及相互联系. 面向数据分解(Data-oriented decomposition) 基于外部数据结构; 高层描述总体数据结构,低层描述数据元素细节及其联系. 面向事件分解(Event-oriented decomposition) 事件如何改变系统状态; 高层描述各种状态列表,低层描述状态转换. 由外向内设计(Outside-in design) 基于黑盒方法Black box; 高层列出全部用户输入,低层处理对输入的响应. 面向对象设计(Object-oriented design) 确定对象的类及其交互关系;

5、高层描述每个对象的类型,低层描述对象属性及动作. 第第4章软件设计基础章软件设计基础 面向构件设计 识别可选的构件 设计软件架构以容纳这些构件 基于体系架构的设计 重点关注构成系统的组件及组件连接方式,考 虑系统高层特性的实现 面向方面的(AOP)设计 使系统的功能需求、非功能需求、平台特性等 诸多不同的关注点相互独立,实现更好 的模块 化,来构建出易于理解、易于扩展、高复用性、 高质量的软件系统。 第第4章软件设计基础章软件设计基础 2 理解设计要素理解设计要素 系统设计需要的组件系统设计需要的组件 第第4章软件设计基础章软件设计基础 设计考虑要素 网络的设计与集成 应用程序体系结构的设计

6、用户界面的设计 系统接口的设计 数据库系统的设计与集成 细节设计原型系统的建立 系统控制的设计与集成 第第4章软件设计基础章软件设计基础 3 系统设计的目标和任务系统设计的目标和任务 在设计阶段应达到的目标是: 提高可靠性;提高可维护性;提高效率。 衡量该目标的准则 设计实现所有包含在分析模型中的明示需求, 并且必须满足客户希望的所有潜在需求 软件实体有明显的层次结构,利于软件元素间 控制。 软件实体应该是模块化的,模块具有独立功能。 软件实体与环境的界面清晰。 设计规格说明清晰、简洁、完整和无二义性。 设计结果易于扩充和适应变化 第第4章软件设计基础章软件设计基础 软件设计的任务软件设计的任

7、务 规划阶段 设想供选择的方案 选择合理的方案 推荐最佳方案 设计阶段 制定规范 软件系统的结构设计 处理方式设计 数据结构设计 可靠性设计 编写概要设计阶段的文档 制定测试计划 概要设计评审 详细设计 第第4章软件设计基础章软件设计基础 规划阶段的任务规划阶段的任务 1. 设想供选择的方案 任务: 分析中考虑各种可能的实现方案分析中考虑各种可能的实现方案,从中选择最佳从中选择最佳 方案方案. 设计的方法: 从从DFD出发出发,设想把设想把DFD中的处理分解成各种不中的处理分解成各种不 同的实现方案同的实现方案; 抛弃技术上行不通的方案抛弃技术上行不通的方案. 第第4章软件设计基础章软件设计基

8、础 2. 选择合理的方案 任务: 从设想的可供选择的方案中选择若干个合理的方案从设想的可供选择的方案中选择若干个合理的方案; 选择实现方案时,至少要选择: 低成本方案低成本方案 中等成本方案中等成本方案 高成本方案高成本方案 对每个合理的方案,准备下列资料: 系统流程图系统流程图 组成系统的物理元素清单组成系统的物理元素清单 成本成本/效益分析效益分析 实现该系统的进度计划实现该系统的进度计划 第第4章软件设计基础章软件设计基础 3. 推荐最佳方案 任务: 综合分析对比各种合理方案的利弊综合分析对比各种合理方案的利弊,推荐一个最推荐一个最 佳方案佳方案; 为该方案制定详细的实现计划为该方案制定

9、详细的实现计划. 用户和有关技术专家审查该方案: 是否确实符合用户的需要是否确实符合用户的需要? 是否能在现有的条件下实现是否能在现有的条件下实现? 投资人或使用部门负责人审批. 获得批准后获得批准后,进行结构设计进行结构设计. 第第4章软件设计基础章软件设计基础 设计阶段的任务设计阶段的任务(cont.) 1 制定规范 确定设计的目标,及优先顺序。 确定合适的设计方法 规定设计文档的编制标准 规定编码的信息形式 接口规约,命名规则 阅读和理解软件需求说明书,确认用户要 求能否实现,明确实现的条件,从而确定 设计的目标,以及它们的优先顺序 第第4章软件设计基础章软件设计基础 软件设计的任务软件

10、设计的任务(cont.) 2 软件系统的结构设计 体系结构设计 组成系统的结构元素和界面; 元素中协作的特定行为; 大的子系统中这些结构和行为的复合 将系统按功能划分成模块的层次结构。 确定每个模块的功能 建立与已确定的软件需求的对应关系 确定模块间的调用关系 确定模块间的接口 评估模块划分的质量 第第4章软件设计基础章软件设计基础 软件设计的任务软件设计的任务(cont.) 3 处理方式设计 确定为实现系统的功能需求所必需的算法 评估算法的性能 确定为满足系统的性能需求所必需的算法和模 块间的控制方式 周转时间 响应时间 吞吐量 精度 确定外部信号的接收发送形式 第第4章软件设计基础章软件设

11、计基础 软件设计的任务软件设计的任务(cont.) 4 数据结构设计 确定文件系统的结构以及数据库的模式、子模 式 确定输入,输出文件的数据结构 确定算法所必需的逻辑数据结构及其操作 确定对逻辑数据结构所必需的程序模块 限制和确定各个数据设计决策的影响范围 确定其详细的数据结构和使用规则 数据的完整性、安全性、一致性、冗余性设计 第第4章软件设计基础章软件设计基础 软件设计的任务软件设计的任务(cont.) (5)可靠性设计 也叫质量设计 软件可靠性是在给定的时间内,程序按照规定 的条件成功运行的概率。 容错技术、 冗余技术 第第4章软件设计基础章软件设计基础 软件设计的任务软件设计的任务(c

12、ont.) 6编写概要设计阶段的文档 设计说明 数据库设计说明 接口说明 用户手册 制定初步的测试计划 第第4章软件设计基础章软件设计基础 软件设计的任务软件设计的任务(cont.) 7 制定测试计划 第第4章软件设计基础章软件设计基础 软件设计的任务软件设计的任务(cont.) 8 概要设计评审 可追溯性 接口 风险 实用性 可维护性 可测试性 技术清晰度 质量保证 各种选择方案 限制 文档 第第4章软件设计基础章软件设计基础 9详细设计 确定软件各模块的算法,以及内部数据组织、描述算法 数据的组织和输入设计 输出信息设计 文件/数据库设计 编码设计 消息传递机制设计 接口设计 系统的安全保

13、密设计 系统的性能设计 . 进行详细设计的评审 第第4章软件设计基础章软件设计基础 设计的指南 1 设计应该展示一种层次化结构 2 设计应该模块化,即逻辑地划分成完成特定功能和子功能的构件 3 设计应该包括对数据、结构、界面和部件的清楚表述 4 设计应该导出适于实现目的和由公认的数据模式导出的数据结构 5 设计应该导出具有独立功能特征的模块 6 设计应该导出降低模块和外部环境间连接复杂度的接口 7 设计应该通过使用可重复的方法来得到,这些方法被来源于软件 需求分析的信息所驱动 8 设计应该可以持续改进 第第4章软件设计基础章软件设计基础 5 软件设计概念软件设计概念 抽象 体系结构 模式 模块

14、化 信息隐藏 求精 重构 第第4章软件设计基础章软件设计基础 软件设计概念软件设计概念-抽象抽象 抽象是人类处理复杂问题的基本方法之一 Grady Broach 抽象是抽出事务的本质特性,暂时忽略细节,分层理 解问题,自顶向下层层细化; 抽象有助于分层次认识和分析问题,改善设计质量。 抽象的级别: 每个模块都具有某种级别的抽象. 每一层次的抽象都在一定程度上细化了上一层模 块的内容 顶层模块描述系统最高层次功能的抽象 下层模块描述上层模块功能的更详细的处理方法 最下层模块描述某一具体功能的最详细的处理方法 第第4章软件设计基础章软件设计基础 软件设计概念软件设计概念-抽象抽象(cont.) 抽

15、象的例子: 第一层抽象第一层抽象 第三层抽象第三层抽象 第二层抽象第二层抽象 电器设备 空气传感器 水传感器 传感器 各类具体传感器各类具体传感器 抽象为传感器抽象为传感器 抽象为电器设备抽象为电器设备 第第4章软件设计基础章软件设计基础 软件设计概念软件设计概念-体系结构体系结构 软件设计的目标之一是导出系统的体系结构 透视图。 体系结构是软件构成的抽象表示,它反映了 软件的整体结构以及这种结构为系统提供实 现及运行上完整性表达的方式。 第第4章软件设计基础章软件设计基础 软件设计概念软件设计概念-模式模式 设计模式是一种软件问题的解决方案。它 描述了在某个特定场景,针对特定设计问 题(系统

16、需求)的一种软件实现结构。 应用成熟的模式可以降低项目开发的风险、 提高软件开发的质量。 第第4章软件设计基础章软件设计基础 软件设计概念软件设计概念-模块化模块化 “模块”,又称“构件”,一般指用一个名 字可调用的一段程序。它一般具有如下三 个基本属性: 功能 即指该模块实现什么功能,做什么事 情。必须注意:模块功能,应是该模块本身的 功能加上它所调用的所有子模块的功能。 逻辑 即描述模块内部怎么做。 状态 即该模块使用时的环境和条件。 第第4章软件设计基础章软件设计基础 软件设计概念软件设计概念-模块化模块化(cont.) 模块化 程序分成若干个模块,且: 每一个模块完成一个相对独立的子功

17、能 每个模块定义了输入和输出的功能。 若干个模块集成,构成一个整体,完成一个大功能。 模块的例子: 面向过程设计:子系统,过程,函数,子程序,宏 面向对象设计:子系统,包,对象,对象内的方法 第第4章软件设计基础章软件设计基础 软件设计概念软件设计概念-模块化模块化(cont.) 软件总成本 模块化与软件成本的关系 成本 模块 数目 模块成本 接口成本 最小成本区 M 令:令:C C(X X)表示问题)表示问题 X X 的复杂度函数;的复杂度函数; E E(X X)解决问题)解决问题 X X 所需工作量的复所需工作量的复 杂度函数;杂度函数; 若:有问题若:有问题 P1P1,P2 P2 ; C

18、 C(P1P1) C C(P2P2);); 显然:显然:E E(P1P1) E E(P2P2) 由经验:由经验:C C(P1+P2P1+P2) C C(P1P1)+ C+ C(P2P2) 于是:于是:E E(P1+P2P1+P2) E E(P1P1)+ E+ E(P2P2) 将问题(将问题(P1+P2P1+P2)划分为两个问题)划分为两个问题P1P1和和P2P2 后,其工作量和复杂度都降低。后,其工作量和复杂度都降低。 并非模块分得越小越好,因为模块之间接口的复杂度和工作量增加。并非模块分得越小越好,因为模块之间接口的复杂度和工作量增加。 显然,每个软件系统都有一个最佳模块数显然,每个软件系统

19、都有一个最佳模块数M M。注意选择分解的最佳模块数。注意选择分解的最佳模块数。 右上图描述了模块化与软件成本的关系。右上图描述了模块化与软件成本的关系。 第第4章软件设计基础章软件设计基础 软件设计概念软件设计概念-信息隐藏信息隐藏 每个模块对其他所有模块都应隐蔽自己的 设计决策。 设计模块时使得一个模块内包含的信息(过程和数据) 对于不需要这些信息的模块来说是不能访问的. 信息隐蔽是模块化和抽象的结果,隐藏了模 块内部的细节,使其他模块不能访问该模块 的内部细节和过程。 信息隐藏提高了软件的可维护性。 第第4章软件设计基础章软件设计基础 软件设计概念软件设计概念-求精求精 逐步求精(Step

20、wise refinement) 逐步求精是人类解决复杂问题时采用的基本方 法,也是许多软件工程技术的基础. 抽象与逐步求精是一对互补的概念.模块分解中 的上层是下层的抽象,下层是上层的求精过程 第第4章软件设计基础章软件设计基础 软件设计概念软件设计概念-重构重构 重构是一种重新设计的技术,可以优化构 件的设计(代码)而无须改变系统的功能 或行为。 第第4章软件设计基础章软件设计基础 6 模块独立性模块独立性 模块设计的关键: 每个模块完成一个相对独立的子功能,并且与其 它模块间的接口简单,即功能专一,模块之间无 过多的相互作用的模块。 模块独立的好处 有效的模块化的软件开发相对较容易 接口

21、简单 便于多人合作开发(并行开发) 独立的模块容易测试和维护 测试和修改只是在一个模块中 扩充只是填加一些新模块 第第4章软件设计基础章软件设计基础 6 模块独立性模块独立性(cont.) 模块独立性的度量标准是两个定性准则: 耦合性(Coupling):用于描述模块之间联系的紧密 程度。 内聚性(Cohesion):用于描述模块内部联系的紧密 程度。 第第4章软件设计基础章软件设计基础 耦合的概念:两个模块之间联系的紧密程度. 高度耦合:模块之间依赖性很强高度耦合:模块之间依赖性很强. 松散耦合:模块之间虽然有联系松散耦合:模块之间虽然有联系,但依赖程度较弱但依赖程度较弱. 无耦合:模块间没

22、有任何联系无耦合:模块间没有任何联系,互相完全独立互相完全独立. Great deal of dependence Independent Highly coupled Loosely coupled Uncoupled Goal: as loose as possible = as independent as possible 耦合耦合(Coupling) 第第4章软件设计基础章软件设计基础 决定耦合程度的几种情况: 一个模块对另一个模块的访问一个模块对另一个模块的访问. 例:模块A调用模块B完成其功能. 模块间传递的数据模块间传递的数据. 例:一个参数、一个数组、一个数据块. 一个模块给

23、另一个模块传递控制信息一个模块给另一个模块传递控制信息. 例:模块A将一个控制标志传送给模块B. 该标志的值通知模块B调用哪个处理过程. A BB A array B A flag 耦合耦合(Coupling) 第第4章软件设计基础章软件设计基础 直接耦合与间接耦合: 不可能有一个系统是由完全无耦合的模块组成的不可能有一个系统是由完全无耦合的模块组成的. 理想的耦合: n模块之间的耦合程度越低(松散)越好. n耦合度低:修改一个模块时,改动涉及的模块少,改动量小. n耦合度高:修改一个模块时,改动涉及的模块多,改动量大. A B A与与B是直接耦合是直接耦合 Z Y X X与与Z是间接耦合是间

24、接耦合 耦合耦合(Coupling) 第第4章软件设计基础章软件设计基础 耦合耦合(Coupling) 独立性由弱到强排列为: 内容耦合(Content Coupling): 公共耦合 (Common coupling): 控制耦合(Control coupling): 特征耦合(Stamp coupling ) 数据耦合(Data coupling): 第第4章软件设计基础章软件设计基础 例1:A访问C的内部 数据或不通过 正常入口而转 入C的内部。 AB CD A: goto C1 C: C1: 内容耦合内容耦合(Content Coupling): 一个模块可能修改另一个模块内部的数据一

25、个模块可能修改另一个模块内部的数据. 耦合(Coupling) 第第4章软件设计基础章软件设计基础 例2:部分代 码重叠(常出 现在汇编程序 中) B A 例例3:一个:一个 模块有多个模块有多个 入口(功能)入口(功能) A: entry 1: entry 2: The least desirable 耦合(Coupling) 第第4章软件设计基础章软件设计基础 公共耦合 (Common coupling): 通过一个公共数据存储区来减少耦合程度. 模块间仍然存在依赖关系,公共数据的修改可能对访问该公共 数据存储区的模块都有影响. Global:V1,V2 A: A1=V1+V2 B: V1

26、=B1 Global:V1,V2 A: V1+ B: V2=B1+V1 耦合(Coupling) 第第4章软件设计基础章软件设计基础 (3) 控制耦合(Control Coupling) 一个模块对另一个模块传递控制参数,控制该模块. 没有第一个模块的指示没有第一个模块的指示,受控模块就不可能完成其功能。受控模块就不可能完成其功能。 如果一个模块依赖另一个模块的返回值决定流向。如果一个模块依赖另一个模块的返回值决定流向。 控制耦合系统的优点: 每一个模块只完成一个功能或只执行一个过程每一个模块只完成一个功能或只执行一个过程. 模块间传递的控制信息量最少模块间传递的控制信息量最少,控制局部化控制

27、局部化. Component A Component B Control data 耦合耦合(Coupling) 第第4章软件设计基础章软件设计基础 控制耦合举例控制耦合举例 A A 计算平均分计算平均分 或最高分或最高分 B B 平均平均/ /最高最高 ( (控制信号控制信号) ) 成绩成绩 读入分数读入分数 输出结果输出结果 计算平均分计算平均分计算最高分计算最高分 平均平均/ /最高最高? ? B B 第第4章软件设计基础章软件设计基础 (4)特征耦合(Stamp Coupling) 模块之间传递信息是数据结构,但被调用的只需要 使用其中一部分数据元素时,就出现了特征耦合。 将标记耦合修

28、改为数据耦合 Component A Component B Data Structure 耦合耦合(Coupling) 第第4章软件设计基础章软件设计基础 特征耦合举例 “住户情况住户情况”是一个数据结构是一个数据结构, ,图中模块都与此图中模块都与此 数据结构有关。数据结构有关。 “计算水费计算水费”和和“计算电费计算电费”本无关本无关, ,由于引用由于引用 了此数据结构产生依赖关系了此数据结构产生依赖关系, ,它们之间也是特征它们之间也是特征 偶合。偶合。 计算水电费计算水电费 计算水费计算水费计算电费计算电费 住户情况住户情况 水费水费 电费电费 住户情况住户情况 第第4章软件设计基础

29、章软件设计基础 (5) 数据耦合(Data Coupling) 两个模块之间只传递数据. 数据耦合最简单数据耦合最简单,耦合度最低耦合度最低. Component A Component B data 耦合耦合(Coupling) 计算顾客帐单计算顾客帐单 计算借还金额计算借还金额 借款数借款数 利息利息 时间时间 借借 金金 还还 额额 第第4章软件设计基础章软件设计基础 内聚内聚 (Cohesion) (Cohesion) 内聚的概念:一个模块内部的各部分之间 的紧密程度. 内聚程度越高,模块内部元素互相联系就越紧密. 模块设计的原则:尽可能提高内聚. 如果一个模块内的所有元素都是为了完成

30、同一 任务而设计的,则该模块的内聚高. 内聚的程度取决于概要设计的模块分解方 法. 在进行功能分解时,应考虑到如何分解使一个模 块只完成一个单一的功能,以提高模块有内聚. 第第4章软件设计基础章软件设计基础 (1) 偶然内聚(Coincidental Cohesion) 一个模块完成几个彼此无必须联系的功能. 可理解性差,难以解释该模块的作用,可修改性差、 无法复用. Function D Function E Function CFunction B Function A Coincidental Parts unrelated B C D E D B A E C A 内聚内聚 (Cohes

31、ion) 第第4章软件设计基础章软件设计基础 (2) 逻辑内聚(Logical Cohesion) 将几个在逻辑上具有似功能的功能段做成一 个模块,通过传送数据决定执行哪个功能段. 修改困难,增大了与其他模块的耦合度,浪费内 存,效率低. Function A” Function A Function A Logical Similar functions Function A Function A” Function A 内聚内聚 (Cohesion) 例如,一个函数同时实现了向文件输出、打印机输出、网络输出等,具体一次的输出需要例如,一个函数同时实现了向文件输出、打印机输出、网络输出等,具

32、体一次的输出需要 根据调用者的传递参数来决定。根据调用者的传递参数来决定。 第第4章软件设计基础章软件设计基础 (3) 时间性内聚(Temporal Cohesion) 几个功能经常在同一时间段内完成. 例:将几个模块的初始化部分放在一个公共 模块中执行.该模块的初值和文件要涉及到多 个模块,加大了模块间的耦合度. Time to +2x Time to + x Time to Temporal Related by time 时间内聚和逻辑内聚模块都很难修改时间内聚和逻辑内聚模块都很难修改 , ,因为这种模块同时要完成几个不同因为这种模块同时要完成几个不同 的功能的功能, ,当修改其中一个功能

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论