结构化总体设计

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

14:00
29
©曲阜师范大学计算机科学学院

步骤四:划定输入流和输出流的边界,孤立变换中心。输 入、输出流边界的划分可能因人而异,不同的设计人员可 能把边界沿着数据通道向前推进或后退一个处理框,不过
这对最后的软件结构影响不大。
14:00
30
©曲阜师范大学计算机科学学院

步骤五:执行“一级分解”(First Level Factoring)。一 级分解的目标是导出具有3个层次的程序结构,顶层为主控 模块;底层模块执行输入、计算和输出功能;中层模块控 制、协调底层的工作。程序结构可用Yourdon结构图(SC 图)表示。 图7.14所示的结构图对应于一级分解的上两层模块, 即主控模块和下面几个中层控制模块:
第3篇 软件开发及维护
第7章 结构化总体设计
14:00
1
©曲阜师范大学计算机科学学院
第7章 结构化总体设计
本章的主要目标是运用结构化方法,介绍软 件总体设计的相关工作。读完本章,你将了解以 下基本内容:
软件设计的基本原理。 软件设计的启发式规则。 软件结构的描述工具。 面向数据流的结构化设计过程。
14:00 11 ©曲阜师范大学计算机科学学院
7.1.6 内聚
内聚性是信息隐蔽概念的自然扩展,它度量 了模块内部各个元素彼此结合的紧密程度,元素 之间联系越紧密,其内聚性越强。 把模块内聚分为以下几种主要类型: 功能内聚、信息内聚、通信内聚、过程内聚、 时间内聚、逻辑内聚和偶然内聚。
14:00
12
14:00
7
©曲阜师范大学计算机科学学院
那么如何确定一个软件系统的模块数目? 分别从模块可分解性、可组装性、可理解性、连 续性和保护性五个方面来理解:
如果一种设计方法提供了把问题分解为子问题的系统化机 制,它就能降低整个问题的复杂性,从而可以实现一种有 效的模块化解决方案。 如果一种设计方法能把现有的(可重用的)设计构件组装成 新系统,它就能提供一种并非一切从头开始的模块化解决 方案。 如果可以把一个模块作为一种独立单元(无段参考其他模块) 来理解,那么,这样的模块是易于构造和易于修改的。 如果对系统需求的微小修改只会针对个别模块,而不是对 整个系统的修改,则修改所引起的副作用将最小。 如果在一个模块内出现异常情况时,它的影响仅局限在该 模块内部,则由错误引起的副作用最小。
14:00 9 ©曲阜师范大学计算机科学学院
7.1.5 耦合
耦合度量了各模块之间相互关联的程度,各 个模块之间接口的复杂程度、接口数据对模块内 部运算的影响程度、使用模块的方式都决定了耦 合的强弱。以下是耦合的几种主要形式: 非直接耦合。两个模块之间的联系,仅限于被 共同模块控制和调用,它们之间没有直接的联 系,那么这种耦合就成为非直接耦合,因为模 块和模块之间没有数据通信,所以它的耦合形 式是最弱的。 数据耦合。模块与模块之间发生联系,彼此之 间通过接口参数实现通信,传递的接口参数是 用于计算的,它们不会影响内部程序执行的路 径。我们提倡用数据耦合,它是一种较弱的耦 合方式。
14:00
13
©曲阜师范大学计算机科学学院
7.2 软件结构的描绘工具
7.2.1 层次图和HIPO图
层次图是用来描绘软件的层次结构。
层次图很适合在自顶向下设计软件的过程中使用。
14:00
14
©曲阜师范大学计算机科学学院
HIPO图是美国IBM公司发明的“层次图加输 入/处理/输出图”的英文缩写。为了能使HIPO图 具有可追踪性,在H图(层次图)里除了最底层 的方框之外,每个方框都加了编号。编号规则与 数据流图的级联编号方式相同,图7.2加了编号 后演变为图7.3。

变换流 在基本系统模型(即顶层数据流图)中,信息通常以 “外部世界”所具有的形式进入系统,经过处理后又以这 种形式离开系统。 输入信息流沿传入路径进入 系统,同时由外部形式变换为内部形 式,经系统变换中心加工、处理,作 为输出信息流又沿传出路径离开系统, 并还原为外部形式,如果数据流图所 描述的信息流具有上述特征,则称为
14:00
6
©曲阜师范大学计算机科学学院
模块化可以简化软件问题,一个系统模块越多,模块 与模块之间的通信或接口就越多,希望依靠模块化将系统 不断被分解而使软件成本不断降低的愿望可能是不切实际 的。随着系统的分解,系统中模块数目将会增加,模块接 口也会增加,软件构造会由此变得复杂起来,模块连接的 难度也会由此加大。
14:00
16
©曲阜师范大学计算机科学学院
图7.4是结构图的一个例子。
14:00
17
©曲阜师范大学计算机科学学院
图7.5表示当模块M中某个判定为真时调用模块A,为假时 调用模块B。 图7.6表示模块M循环调用模块A、B和C。
注意,层次图和结构图并不严格表示模块的调用次序。事 实上,层次图和结构图只表明一个模块调用那些模块,至 于模块内还有没有其他成分则完全没有表示。 通常用层次图作为描绘软件结构的文档。结构图作为文档 并不很合适,因为图上包含的信息太多有时反而降低了清 晰程度。
变换流。
14:00
22
©曲阜师范大学计算机科学学院

事务流
由于基本系统模型一般均可呈现为变换流, 故任意系统中的信息均可用变换流刻画。
14:00
23
©曲阜师范大学计算机科学学院
值得注意的是,在大型系统的DFD中,变换流与事务 流往往交织在一起。比如在基于事务流的系统中,当信息 沿动作路径流动时可能呈现变换流的特征。
14:00
4
©曲阜师范大学计算机科学学院
7.1.1 抽象
抽象是人类在认识复杂世界时所使用的最有 力的工具。抽象是从众多的事物中抽取出共同的、 本质性的特征,而舍弃其非本质的特征。例如苹 果、香蕉、梨、葡萄、桃子等,它们共同的特征 就是水果。
7.1.2 信息隐蔽
信息隐蔽是指每个模块的内部实现细节对外 部来说是看不见的,即模块内部的数据、代码等 信息不允许其他不需要这些信息的模块使用。这 样主要有两个好处,一是利于模块之间相互有效 隔离,使每个模块更加具有独立性,二是可以使 系统具有更好的健壮性,以及更好的可维护性 。
14:00 18 ©曲阜师范大学计算机科学学院
14:00
19
©曲阜师范大学计算机科学学院
7.3 面向数据流的设计过程
面向数据流的设计过程,也就是结构 化设计方法(简称为SD),是根据需求 阶段对数据流的分析(一般用数据流图和 数据字典表示)设计软件结构。
14:00
20
©曲阜师范大学计算机科学学院
14:00 5 ©曲阜师范大学计算机科学学院
7.1.3 模块化设计
人们不断创新的目的在于更加高效。从软件 开发的角度来看,人们希望开发维护同样一个系 统所使用的时间最短,所耗费的成本最低。软件 系统模块化就是出于这样的目的,提出了一种提 高开发效率的思想。 在结构化分析方法中,模块的规模可大可小, 是一个功能单位。模块可以是软件系统中的一个 子系统,也可以是子系统内一个功能程序块(由边 界元素限定的数据说明、可执行的语句等的序列, 而且有一个总体标识符来代表它。
14:00 10 ©曲阜师范大学计算机科学学院
控制耦合。如果在数据耦合的基础上,模块间接口参数不
仅传递数据,同时还传递标志、名字、开关等控制信息, 从而影响模块的内部程序执行路径。显而易见,控制耦合 比数据耦合的耦合性要强一些,它属于中等程度的耦合。 如果需要通过接口传递模块内多项功能的选择时,就需要 用到控制耦合。 公共耦合。在软件系统中,可能有独立于模块而存在的数 据文件、公共变量和公共数据环境。模块之间通过访问公 共数据环境从而实现通信。 内容耦合。内容耦合是一种耦合性很强的耦合,这种耦合 严重影响了模块的独立性。它的表现形式主要有以下几种: i. 模块直接访问另一模块的内部数据; ii. 模块不通过正常的入口转到另一模块内部; iii. 模块之间存在一部分代码重叠; iv. 某个模块有多个入口。 内容耦合致使模块的变动变得非常困难,程序维护和 升级也极其困难,这要求在设计软件结构时,不允许出现 内容耦合。
7.3.2 变换分析
图7.10和图7.11分别为“家庭保安系统”的 顶级和第一级数据流图。
14:00
27
©曲阜师范大学计算机科学学院
14:00
28
©曲阜师范大学计算机科学学院


步骤一:复审基本系统模型。 步骤二:复审和精化软件数据流图。这一步主要是对软件 需求规格说明书中的分析模型进行精化,直至获得足够详 细的DFD。 步骤三:确定DFD的特性,判定它为变换流还是事务流。 设计人员首先要判定DFD中占主导地位的信息流,确定其 特性,然后孤立具有变换特性或事务特性的支流,这些支 流将用于精化由主导数据流推出的程序结构。 数据沿1个传入 路径进来,沿3 个传出路径离开, 无明显的事务中 心,因此,该信 息流是变换流。
©曲阜师范大学计算机科学学院





偶然内聚。偶然内聚即模块内部各元素之间的联系很少或 者没有。 逻辑内聚。逻辑内聚将几种相关的功能组合在一起形成一 个模块。 时间内聚。时间内聚是指模块内部各功能之间的执行与时 间相关。 过程内聚。如果模块内各元素的执行是按照一定次序来进 行的,即各个元素的处理是相关的,则称其为过程内聚。 通信内聚。一个模块内部可以有几个功能部分,如果这些 功能部分都使用相同的数据输入,或者产生相同的数据输 出,这不是通信内聚。 顺序内聚。如果模块内某一功能元素的输出作为另一个功 能元素的输入,模块内各功能元素顺序联结,它们之间关 系紧密,那么称这个模块为顺序内聚模块。 功能内聚。如果为了实现模块的具体功能,模块内各个元 素都是必需的,这些元素要协同工作,它们无法单独执行, 称这样的模块为功能内聚模块。功能内聚模块的内聚程度 很高,在进行软件设计时,应尽可能地实现功能内聚。
14:00
24
©曲阜师范大学计算机科学学院
7.3.2 变换分析
变换分析由一系列步骤组成,经过这些步骤 就能把具有变换流特点的数据流图按预先确定的 模式映射成软件结构。下面以“家庭保安系统” 的传感器监测子系统为例说明变换分析的各个步 骤。
14:00
25
©曲阜师范大学计算机科学学院
14:Biblioteka Baidu0
26
©曲阜师范大学计算机科学学院
14:00
8
©曲阜师范大学计算机科学学院
7.1.4 模块独立
模块独立是模块化、抽象、信息隐蔽的直接 结果,是指系统中的模块尽可能地只涉及自己特 定的子功能,并且模块接口简单,与其他模块没 有过多的通信。如果系统中每个模块都具有很好 的独立性,系统实现起来就更加容易。因此,模 块独立性是衡量软件中模块质量最重要的指标。 一般来说,采用耦合和内聚这两个定性的技 术指标来对这一模块的独立性进行衡量。内聚性 可以衡量各模块内部功能的结合强度,模块内部 各元素之间结合得越紧密,则它的内聚性就越高; 耦合性显示了模块与模块之间相互的依赖关系, 模块与模块之间联系越紧密,耦合性就越高。
7. 3.1 基本概念和设计过程 SD方法能方便地将数据流图转换为软 件结构,需要5个步骤:
1. 2. 3. 4. 5. 确定信息流的类型; 划清流程边界; 将数据流图映射为软件结构; 提取层次控制结构; 通过设计复审和使用启发式方法优化所 得到的结构。
14:00
21
©曲阜师范大学计算机科学学院
第3步所用映射方法涉及到信息流的类型,信 息流分为变换流和事务流两种类型:
14:00
2
©曲阜师范大学计算机科学学院
Contents
7.1 7.2 7.3 7.4 7.5 软件设计的基本概念和原理 软件结构的描绘工具 面向数据流的设计过程 启发式设计 设计优化原则
14:00
3
©曲阜师范大学计算机科学学院
7.1 软件设计的基本概念和原理
在完成了需求分析之后,项目开发人员对 系统的需求有了完整准确的理解,即知道 了“做什么”,接下来就是回答“怎么 做”。 第一个阶段为总体设计阶段,期间项目开 发人员确定软件系统的基本框架;第二阶 段为详细设计阶段,期间确定软件系统的 内部实现细节。
14:00
15
©曲阜师范大学计算机科学学院
7.2.2 结构图
Yourdon提出的结构图是进行软件结构设计 的另一个有利工具。结构图和层次图类似,也是 描绘软件结构的图形工具,图中一个方框代表一 个模块,框内注明模块的名字或主要功能;方框 之间的箭头(或直线)表示模块的调用关系。 在结构图中通常还用带注释的箭头表示模块 调用过程中来回传递的信息。尾部是空心圆表示 传递的是数据,实心圆表示传递的是控制信息。
相关文档
最新文档