slide1 n.
Download
Skip this Video
Download Presentation
? 6 ? ????

Loading in 2 Seconds...

play fullscreen
1 / 129

? 6 ? ???? - PowerPoint PPT Presentation


  • 216 Views
  • Uploaded on

第 6 章 系统设计. ◆ 系统设计概述 ◆ 结构化设计原理 ◆ 模块化设计 ◆ 面向数据流的设计 ◆ 面向数据结构的设计 ◆ HIPO 图. 第 6 章 系统设计.  系统设计( System Design )就是为实现系统分析提出的系统逻辑模型所作的各种技术考虑和设计  系统设计又称为系统的物理设计,即是根据新系统逻辑模型建立系统的物理模型. 计算机系统及其它硬设备的选择 系统的分解与组织 原始数据的组织和输入 输出信息的方式和管理 文件与数据库的组织和管理

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about '? 6 ? ????' - alvaro


Download Now An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
slide1

第6章 系统设计

◆系统设计概述

◆ 结构化设计原理

◆ 模块化设计

◆ 面向数据流的设计

◆ 面向数据结构的设计

◆HIPO图

slide2

第6章 系统设计

系统设计(System Design)就是为实现系统分析提出的系统逻辑模型所作的各种技术考虑和设计

系统设计又称为系统的物理设计,即是根据新系统逻辑模型建立系统的物理模型

slide3
计算机系统及其它硬设备的选择

系统的分解与组织

原始数据的组织和输入

输出信息的方式和管理

文件与数据库的组织和管理

代码的设计与确定

通信网络的设计

系统的安全保密性设计

系统实施计划

其它

6.1 系统设计概述

系统设计的任务

slide4
更快、更准、更多地提供资料

更多、更细的处理功能

更有效、更科学的管理方法

6.1 系统设计概述

系统设计的目标

系统设计的目标是:在保证实现逻辑模型的基础上,尽可能地提高系统的各项指标,即系统的运行效率、可靠性、可修改性、灵活性、通用性和实用性。正确划分人工处理与计算机处理。

slide5
系统的运行效率包括三个方面的内容,即:

——处理能力 指在单位时间内能够处理的事务

个数

——处理速度 指处理单个事务的平均时间

——响应时间 指从发出处理要求到给出回答所

用的时间

6.1 系统设计概述

系统设计的目标—运行效率

 不同处理方法的系统,其运行效率有不同的含义。不同计算模式;对请求的不同响应方式

slide6
 影响系统运行效率的因素一般取决于:

——系统中硬件及其组织结构

——计算机处理过程的设计质量

中间文件的数量

文件的存取方法

子程序的安排及软件编制质量

6.1 系统设计概述

系统设计的目标—运行效率

slide7
系统的可靠性是指系统运行过程中,抵抗异常情况(人为的和机器的故障)的干扰、保证系统正常工作的能力

——软件可靠性:随着软件工具水平而提高

——硬件可靠性:冗余设计

6.1 系统设计概述

系统设计的目标—可靠性

 系统的可靠性包括:检、纠错的能力,对错误的容忍能力,排除错误的能力等

slide8
 衡量系统可靠性的重要指标:

——平均故障间隔时间(MTBF):指平均的系统前后两次发生故障的时间,这反映了系统安全运行的时间

——平均维护时间(MTTR):指发生故障后平均每次所用的修复时间,它反映系统可维护性的好坏

6.1 系统设计概述

系统设计的目标—可靠性

slide9
 系统的有效性:

系统的有效性 = MTBF / (MTBF+MTTR)

6.1 系统设计概述

系统设计的目标—可靠性

提高系统可靠性的途径主要有:

——设计中尽可能地避免出错

——对可能出现的错误,系统要有完善的检、纠错功能和对安全的考虑

——对可能的错误进行出错冗余设计

slide10
系统的可修改性是指系统容易修改程度,没有一个定量的标准,而是通过比较得出的结果

6.1 系统设计概述

系统设计的目标—可修改性

 应用合理的系统设计原则,能够对系统的可修改性产生积极的影响。(系统分解的好坏)

 系统的可修改性之所以重要,是因为一个系统从设计到建成运行,总是处于不断的变化之中,这就必然引起修改和维护

slide11
 这些变化包括:

——系统需求和环境的变化

——现代信息技术如计算机技术、管理决策

方法等的发展

——系统本身总是处于不断地完善之中,不

适应或错误在所难免

6.1 系统设计概述

系统设计的目标—可修改性

slide12
系统设计过程中,始终要明确应用计算机处理和人工处理的界线

6.1 系统设计概述

系统设计的目标—划分计算机处理与人工处理

 系统设计中要避免这样两种倾向:

——一味地追求计算机处理,将许多只能由人完成的工作交计算机去干,从而造成设计的复杂和不够科学

——把本该由计算机完成的工作交由人去处理,从而使新系统的功能、性能以及用户的目标得不到体现

slide13
 两种处理过程的不同特点:

——处理速度不同。(阅卷;编目)

——概念的精确程度不同。(涉及语义的工作)

——对处理的信息的结构化程度要求不同

——工作效率的稳定性不同

——意外情形的处理

——费用的考虑

6.1 系统设计概述

系统设计的目标—划分计算机处理与人工处理

slide14
划分计算机处理与人工处理的基本原则是:

——复杂的科学计算,大量重复的数学运算、统计、汇总、报表、数据库检索、分类、文字处理、图形图象基本处理、有关数据的采集、通信等应由计算机完成

——传统的人工判定,目前没有成熟的技术可以应用,或代价太高,则仍用人工处理

——决策性问题中,计算机尽可能提供决策依据,由人进行最后决策

——设计人机接口,考虑时间的匹配,代码的统一、格式的协调等

6.1 系统设计概述

系统设计的目标—划分计算机处理与人工处理

slide15

第6章 系统设计

◆系统设计概述

◆ 结构化设计原理

◆ 模块化设计

◆ 面向数据流的设计

◆ 面向数据结构的设计

◆HIPO图

slide16
 历史沿革:

——早期的计算机应用,由于受到硬、软件的限制,只是编制了一些简单程序,其设计工具是程序流程图

——计算机技术的发展及领域的不断扩大与复杂,使得程序流程图不能满足设计的需要

—— 70年代以来,出现了多种设计方法,其中有代表性的是结构化设计方法、Jackson方法、Warnier方法和Parnas方法

6.2 结构化设计原理

结构化设计方法

slide17
 设计思想:

——基本思想是对问题要有一个总的看法,由概括到具体、逐层分解问题

——强调把一个系统设计成具有层次式的模块化结构,并且用一组标准的准则和工具帮助系统设计人员确定组成系统的模块及相互关系

6.2 结构化设计原理

结构化设计方法

slide18
 设计思想:

结构化系统设计(structured system design)方法体现了自顶向下、逐步求精的原则,采用先全局后局部、先总体后细节、先抽象后具体等过程开发系统,从而使系统结构清晰,可读性、可修改性、可维护性等指标优异

6.2 结构化设计原理

结构化设计方法

slide19
 特点:

——对一个复杂的系统,应用自顶向下,逐步求精

的方法予以分解和化简

——强调采用模块化的设计方法,并有一组基本设

计策略

——采用结构图的方式作为模块设计的工具

——有一组评价设计方案质量的标准及优化技术

6.2 结构化设计原理

结构化设计方法

slide20
 重要内容:

(1)合理地进行模块分解和定义,使一个复杂系统的设计转化为若干种基本模块的设计

结构化设计的分解原则

——把密切相关的子问题划归为系统的同一部分

——把不相关的问题划归为系统的不同部分

6.2 结构化设计原理

结构化设计方法

slide21
 重要内容:

(2)有效地将模块组织成一个整体,从而体现系统的设计功能

结构化系统设计与结构化的系统分析有着密不可分联系,它是以系统的逻辑模型和数据流图为基础,借助于一套标准的设计方法和图表工具,通过自顶向下或自底向上的方法,逐层把系统划分为多个大小适当、功能明确、具有一定独立性的模块

6.2 结构化设计原理

结构化设计方法

slide22
模块化原理:依据系统是由元素和结构组成,且它们又可分层、分类的思想,一个信息系统可被逐层划分为大小适当、功能明确独立且容易实现的模块,并由它们的协调和组合去共同达到系统的设计目标

6.2 结构化设计原理

模块化原理

 模块化原理(modularization)的基本思想是可分性,即最大限度地降低系统设计的复杂性,把问题层层分解,直到容易解决为止。这样就降低了人为划分的主观影响,增强了问题的客观性

slide23
信息隐蔽原理是指导人们按信息相关度划分模块的一个原理

6.2 结构化设计原理

信息隐蔽原理

 信息隐蔽原理(information hiding)的基本思想是:在一定规模和条件的限制下,把那些对模块功能相关度最大的信息(如过程与数据)分在一个模块内,而把最少的完成功能所需的交互信息划分在该模块外(接口)。换言之,模块的划分应该使得包含在模块内的信息对于无需这些信息的模块是不可访问的

slide24
信息隐蔽原理是把任何系统划分成子系统的普遍性原理

6.2 结构化设计原理

信息隐蔽原理

 信息隐蔽原理的好处是:模块内部的错误很少可能传播到系统的其它模块

——最大限度地体现了模块在概念和功能上的独立性、相对完整性和封闭性

——给系统结构和模块的实现、维护带来了方便

slide25

6.2 结构化设计原理

时空等价原理

 时空等价原理的含义:

——从理论上讲,对于一个特定的系统功能或模块功能,既可由硬件模块去完成,又可由软件模块去完成,此即功能等价

——硬件有耗费空间但速度快的属性,而软件有耗费时间但少耗费空间的属性

——对系统的资源合理分配,使同一功能由耗费时空最少的模块或子系统去承担。如星地协同处理,移动计算,软件无线电,软件固化等。

slide26
运用时空等价原理划分硬、软件子系统或模块时,必须按系统与环境的约束条件在系统硬、软件的时空属性中进行综合折衷。此时,就会应用时空的另一个重要原理:时空权衡原理

6.2 结构化设计原理

时空等价原理

 时空权衡原理(space-time tradeoff)是指:牺牲空间或者其它替代资源,通常都可以减少时间代价。反之亦然

slide27

第6章 系统设计

◆系统设计概述

◆ 结构化设计原理

◆ 模块化设计

◆ 面向数据流的设计

◆ 面向数据结构的设计

◆HIPO图

slide28
定义:在软件角度,所谓模块(module)是指这样的一组程序语句(或描述),它包括输入与输出、逻辑功能描述、内部信息及其运行环境

6.3 模块化设计

模块

——输入与输出:从调用者处获得输入信息,经过模块本身的处理后,再把输出返送给调用者

——逻辑功能:描述该模块能够做什么样的事情,具备什么样的功能

——内部信息:模块执行的指令和在模块运行时所需要的属于该模块自己的数据

——运行环境:模块的调用与被调用的关系

slide29

6.3 模块化设计

模块的特征

  • 抽象
  • 信息隐蔽
  • 其它

模块

的特征

slide30
定义:把系统划分为若干个模块,每个模块完成一个特定的功能,然后将这些模块汇集起来组成一个整体(即系统),可以完成指定的功能,满足问题的要求

6.3 模块化设计

模块化

slide31

6.3 模块化设计

模块化

设对于两个问题P1、P2,C(P1)、C(P2)表示问题的复杂程度,而E(P1)、E(P2)表示解决问题所需的工作量。于是,如果

C(P1)>C(P2)

则 E(P1)>E(P2)

一个有趣的规律是

C(P1+ P2)> C(P1)+C(P2)

即是说,如果一个问题由两个问题组合而成,那么它的复杂程度大于分别考虑每个问题的复杂程度之和。于是

E(P1+ P2)> E(P1)+E(P2)

slide32
推而广之,当一个系统有n个独立元素时,一般总有推而广之,当一个系统有n个独立元素时,一般总有

C(P1+ P2+…+Pn)> C(P1)+C(P2)+…+ C(Pn)

E(P1+ P2+…+Pn)> E(P1)+E(P2)+…+ E(Pn)

这就是模块化的依据

6.3 模块化设计

模块化

slide33
能否认为,如果我们无限地分割系统,最终将导致最基本模块的设计非常容易,因而使得设计系统的工作量非常小?

6.3 模块化设计

模块化

 这个结论是错误的

当模块数目增加时,每个模块的规模将减小,开发单个模块所需的成本(工作量)确实减少了,但随着模块数目的增加,设计模块间接口的工作量也将增加

 目标是尽量寻求一个合理的模块分解数目

slide35
 好的系统结构满足:

——每个模块完成一个相对独立的特定功能(保证了按模块分解后的设计工作量将小于按整个系统设计的工作量)

——模块之间的接口简单(使设计中的接口成本最小)

6.3 模块化设计

模块独立性

slide36
具有独立功能而且和其它模块之间没有过多相互作用的模块,我们称之为独立的模块。这种开发方法,就可以做到模块独立。

6.3 模块化设计

模块独立性

 所谓两个模块彼此完全独立,是指其中任意一个模块在运行时,与另一个模块的存在与否完全无关。

 独立只是一个抽象的、相对的概念。

slide37
 模块独立的作用:

——具有独立性的系统比较容易开发,这是由于能够分割功能而且接口可以简化。系统开发常常由若干人的分工合作完成的,这时具有模块独立性的优点就尤为重要。

——模块的独立性越好,模块的相互影响就越少。当系统中某一模块出错时,产生连锁反应的概率就越低,从而提高了系统的可靠性。

——独立的模块比较容易测试和维护。这是因为错误的传播范围小,较容易定位,而且对一个模块进行修改或维护时,不担心其它模块的内部是否会受到影响。

6.3 模块化设计

模块独立性

slide38
模块的独立程度可以由两个定性标准度量,这两个分别称为耦合和聚合。

6.3 模块化设计

模块独立性

——耦合:度量不同模块彼此间互相依赖(联结)的紧密程度。

——聚合:衡量一个模块内部各个元素彼此结合的紧密程度。

slide39
耦合(coupling)强弱取决于模块间联结形式及接口的复杂程度。模块间接口的复杂性越高,说明联结的程度越高。

6.3 模块化设计

模块独立性—耦合

 模块之间的耦合程度直接影响系统的可读性、可维护性及可靠性。

 在系统设计中应尽可能追求松散耦合的系统。

slide40
聚合(cohesion)标志一个模块内部各个元素彼此结合的紧密程度,主要表现在模块内部各个元素为了执行处理功能而组合在一起的程度。

6.3 模块化设计

模块独立性—聚合

 希望系统中的每个模块具有高度的聚合性,它的各个元素都是彼此密切相关的,是为完成一个共同的功能而结合在一起的。

 在系统设计中应尽可能追求高聚合的系统。

slide41
影响模块之间联结程度的最主要因素是模块间的联结形式。

6.3 模块化设计

模块的耦合

 模块间的联结形式有4种:

——数据耦合

——控制耦合

——公共耦合

——内容耦合

slide42
如果两个模块彼此间通过参数交换信息,而且每一个参数仅仅为数据,那么这种耦合称之为数据耦合。

6.3 模块化设计

模块的耦合—数据耦合

 数据耦合是系统中必不可少的联结形式,它是一种最低的耦合,是一种理想的模块联结。

 一个系统内可以将所有模块只设计成数据耦合。

slide43
 示例:

A

数据信息

数据信息

B

C

6.3 模块化设计

模块的耦合—数据耦合

slide44
如果两个模块彼此间传递的信息间有控制信息,那么这种耦合称之为控制耦合。

6.3 模块化设计

模块的耦合—控制耦合

 控制耦合与数据耦合很相似,只不过传递参数中一个仅仅为数据,而另一个含有控制信息。

 控制耦合可以通过适当的方式,如模块的再分解,而转化为数据耦合,但在某些特殊的场合下,控制耦合还有一定的必要。

slide45
 示例:

A

数据信息

控制信息

B

C

6.3 模块化设计

模块的耦合—控制耦合

slide46
如果两个模块彼此间通过一个公共的数据区域传递信息时,称之为公共耦合或公共数据域耦合。

6.3 模块化设计

模块的耦合—公共耦合

 公共数据域实际上就是被设计成为多个模块公用数据的区域。

 公共耦合是一种不好的联结形式,尤其当一个公共数据区域被多个模块共同使用时,模块数越多,则其耦合的复杂度越大。

slide47
 示例:

A

E

B

C

F

公共数

据区

D

6.3 模块化设计

模块的耦合—公共耦合

slide48
如果一个模块需要涉及另一个模块的内部信息时,则这种耦合称内容耦合。

——一个模块访问另一个模块的内部数据;

——一个模块调用执行另一个模块中间的部分程序

代码;

——模块的出、入口不符合单入单出。

6.3 模块化设计

模块的耦合—内容耦合

 内容耦合的耦合度最高,因此应该坚决避免使用这种耦合。

slide49

6.3 模块化设计

模块的耦合—联结方式比较

slide50
 结论:

——模块间尽量使用数据耦合;

——必要时才采用控制耦合;

——对公共耦合应限制耦合的模块数(数据库除外);

——坚决不用内容耦合。

6.3 模块化设计

模块的耦合

slide51
模块内部的紧凑性主要表现在一个模块内部各组成部分之间的联系。

6.3 模块化设计

模块的聚合

 模块间的聚合有7种,我们追求模块的功能聚合,这是因为此时模块具有最强的紧凑性。

 对于非功能性聚合的模块应尽量使其转化为功能聚合的模块。通常只需对模块的结构作一番调整就可改进其紧凑性。

slide52
如果一个模块所要完成的动作之间没有任何关系,或者即使有某种关系,也是非常松散的,就称之为偶然聚合。

6.3 模块化设计

模块的聚合—偶然聚合

 偶然聚合内部的紧密程度等于零,无法将其作为一个独立的模块去理解。

 偶然聚合的最大缺陷就在于不易修改,此外,可读性也极低。

slide53
 示例:

当设计模块A、B、C时,发现均有相同的部分代码α,则把α抽出作为一模块。α只是若干条无关语句的简单拼凑,其本身与系统的数据流、控制流无关。

6.3 模块化设计

模块的聚合—偶然聚合

slide54
如果一个模块内部的各个组成部分在逻辑上具有相似的处理动作,但功能上、用途上却彼此无关,则称之为逻辑聚合。

6.3 模块化设计

模块的聚合—逻辑聚合

 在调用逻辑聚合的模块时,必须完全知道该模块的内部属性。因此,它和其它模块之间具备有相当复杂的耦合,其可修改性差,维护困难。

slide55
 示例:

A

A

B

C

D

B

C

D

E

F

G

H

6.3 模块化设计

模块的聚合—逻辑聚合

slide56
如果一个模块内部的各个组成部分所包含的处理动作必须在同一时间内执行,则称之为时间聚合。

6.3 模块化设计

模块的聚合—时间聚合

 时间聚合是将需要同时执行的部分放在同一模块内。

时间聚合模块的紧凑性也较低,缺陷是修改性较差,维护较困难。但它在一定程度上反映了系统的某些实质,因此,比逻辑聚合要强一些。

slide57
如果一个模块内部各个组成部分所要完成的动作彼此间没什么关系,但必须以特定的次序(控制流)执行,则称之为过程聚合。

6.3 模块化设计

模块的聚合—过程聚合

 过程聚合模块常是由程序流程图直接演变过来,它的处理动作彼此并没有什么关系,但在同一控制流支配下汇集在一个模块中。在过程聚合中,次序是唯一重要的,这种次序可能是顺序、判断或循环。

 过程聚合较时间聚合等强,但可修改性不高。

slide58
如果一个模块内部的各个组成部分所完成的动作都使用了同一个输入数据或产生同一输出数据,则称之为通信聚合。

6.3 模块化设计

模块的聚合—通信聚合

 通信聚合的模块与其它模块间的联系较简单,其内部紧凑性比过程聚合强,但它的各部分的执行次序可以是任意的,容易产生重复的动作。

slide59
 示例:

模块A、B调用C时,使用文件编号作为参数调用,而C则将该文件保存,并予以打印,其中保存、打印均是针对同一文件。这里C就称为通信聚合模块。

A

B

C

6.3 模块化设计

模块的聚合—通信聚合

slide60
对一个模块内部的各组成部分,如果前一部分处理动作的输出是后一部分处理动作的输入,则称之为顺序聚合。

6.3 模块化设计

模块的聚合—顺序聚合

 顺序聚合模块的紧凑性比较高,与其它模块的联系也较低,通常根据数据流图划分模块时,得到顺序聚合模块。

 顺序聚合比通信聚合好。但由于顺序聚合模块中可能包含了几个功能,也可能仅为某个功能的一部分,因此比功能聚合模块要差一些。

slide61
 示例:

模块A有两部分组成,一部分为读入,另一部分为编辑。显然,读入部分将其输出数据作为编辑部分的输入,因此,A是顺序聚合模块。

6.3 模块化设计

模块的聚合—顺序聚合

读入

编辑

数据

slide62
如果一个模块内部各个组成部分全部为执行同一功能而属于一个整体,则称之为功能聚合模块。

6.3 模块化设计

模块的聚合—功能聚合

 功能聚合的模块都具有一个目的、有单一的功能,因而其界面非常清楚,与其它模块的联系低,可读性、可修改性,维护性、可测试性均很好。

 应尽可能地追求功能聚合。

slide63

6.3 模块化设计

模块的聚合—比较

slide64
模块耦合与聚合是模块设计中最为重要的概念,尽可能地降低模块之间的耦合程度和提高模块内部的聚合程度是我们设计中的两项重要原则。

6.3 模块化设计

若干其它设计原则和有益的建议

 还存在若干辅助性的原则,同时在不断地反复实践与思考的基础上,人们在信息系统的设计中积累了大量的经验,这些经验对于我们都是极为有益的。

slide65
对于初步设计出的系统结构,应该仔细地分析与审查,发现高耦合、低聚合的模块,并通过模块的分解与合并,改进系统结构,从而降低耦合、提高聚合。

6.3 模块化设计

改进系统结构

slide66

6.3 模块化设计

改进系统结构

 一般的方法有:

——对于若干模块共有的一个子功能,应当将其独立抽出,作为一个新的模块可被前述的模块所调用。设计中应提供更多的共用性强的模块,从而简化程序设计工作。

——尽可能地采用数据信息作为模块之间联系的媒介,可以通过分解等手段,将一些传递控制信息或其它非数据信息的模块转化数据耦合的模块。

slide67

6.3 模块化设计

改进系统结构

 一般的方法有:

——强调以功能划分模块。每一模块尽量做到只有单一的功能,对于复杂的模块应从功能的角度出发予以分解。

——强调系统的整体性大于局部的最优性,不片面追求系统中每一模块最优设计,局部的优化应服从整体的安排。

slide68
系统的深度(depth)表示系统结构中的控制层数,宽度(width)则表示控制的总分布,即同一层次的模块总数的最大值。

6.3 模块化设计

系统的深度与宽度

 一般情况下,深度和宽度标志着一个系统的大小和复杂程度,它们之间应有一定的比例关系,即深度和宽度均要适当。深度过大可能说明系统分割的过分细化;宽度过大,则有可能带来系统管理上的困难。

slide69
一个模块控制的直属下级模块的个数称为该模块的扇出(Fan-Out);反之,一个模块的直接上级模块的个数称模块的扇入(Fan-In)。

6.3 模块化设计

模块的扇出与扇入

 模块扇出直接影响系统的宽度,模块的扇入通常说明模块的通用性情况。

slide70
 示例:

A

B

C

D

E

F

G

H

6.3 模块化设计

模块的扇出与扇入

slide71
一个模块的规模不可过大,也不可过小。过大的模块常常是系统分解的不充分,其内部可能包含了若干部分的功能,使模块聚合降低,因此有必要作进一步分解,即把原有的模块变成若干功能尽可能单一的较小的模块。但分解也必须适度,因为过小的模块有可能降低模块的独立性,造成系统接口的复杂。

6.3 模块化设计

模块的规模

 一个模块的规模最好限制在一页纸内,即能用大约30条语句对它加以描述。

slide72
模块的作用范围是指受该模块内部的一个判定影响的所有模块的集合,只要某一模块中含有一些依赖于这个判定的操作,那么该模块就在这个判定的作用范围之中,如果整个模块的全部操作都受该判定的影响,则这个模块连同它的上级模块都在这个判定的作用范围内。

6.3 模块化设计

模块的作用范围和控制范围

 模块的控制范围包括该模块本身及所有的下属模块的集合。

slide73

6.3 模块化设计

模块的作用范围和控制范围

 一个“好”的系统设计中,对于模块的控制范围和作用范围,存在着下面两条规则:

——所有受模块M 的一个判定影响的模块应从属于模块M,即对任何一个内部存在判定调用逻辑的模块,其作用范围应是其控制范围的子集。

——受模块M判定影响的模块,最好局限在模块M本身或其直属下级模块,即作出判定的模块与属于该判定作用范围的模块在系统的层次上不能相隔过远,否则会增大模块间的耦合。

slide74
示例:设模块B作出的判定影响到模块E和模块C,而模块C又不在B的控制范围内,这样的结构难以理解。

A

B

C

D

E

F

G

6.3 模块化设计

模块的作用范围和控制范围

slide75

6.3 模块化设计

模块的作用范围和控制范围

 如果发现模块的作用范围不在其控制范围内,可进行下述的改进:

——将作判定的模块合并到它的调用模块中或把判定上移到足够高的位置。

——将受判定影响的模块下移到作判定模块的控制范围内。

slide76
 示例:前图中的模块C可移到模块B下。

A

B

D

E

F

G

C

6.3 模块化设计

模块的作用范围和控制范围

slide77
应该设计单入口、单出口的模块,从而不使模块间出现内容耦合;一个模块,应设计成“暗盒”形式,只完成一个单独的子功能,这就使得模块内部有很强的聚合;模块的接口设计简单,若接口复杂,则有可能存在高耦合、低聚合。

6.3 模块化设计

其它有益的建议

 “具体问题具体分析”

slide78

第6章 系统设计

◆系统设计概述

◆ 结构化设计原理

◆ 模块化设计

◆ 面向数据流的设计

◆ 面向数据结构的设计

◆HIPO图

slide79
结构化设计实际上是一种面向数据流的设计(Data Flow—Oriented Design,简称DFOD),它是与数据流分析对应的系统设计技术。

6.4 面向数据流的设计

 面向数据流的设计方法是由L. Constantine和E. Yourdon等人首先提出的,强调用一组标准的准则和工具来构造、描述系统。

 它根据数据流图特性定义两种“映射”,这两种映射能机械地将数据流图转换为模块结构图。

slide80

6.4 面向数据流的设计

结构图

 结构图是一种强有力的图形表达工具,它可用于表达系统内部各部分的结构和相互关系,是进行系统结构设计的最常用的方法。

 在结构图中,常用的有6种符号。

slide81

6.4 面向数据流的设计

结构图

表示模块

表示模块之间的调用关系

表示模块之间的数据传递关系

表示模块之间的控制传递关系

表示一个模块包含的循环调用功能

表示一个模块内部包含的判定处理逻辑

slide82
示例:某财务系统中审核凭证处理过程的数据流图。用户向系统输入需要审核的凭证编号,系统从财务数据库中自动读取该凭证号下的记录,并予以审核,然后显示审核结果。

6.4 面向数据流的设计

结构图

数据库

输入凭

取得数

用户

审核

证号

据记录

正确凭证

错误凭证

slide83
 示例:凭证审核处理过程模块结构图。

6.4 面向数据流的设计

结构图

凭证审核

凭证号

结果

凭证号

数据

结果

数据

输凭证号

读取数据

审核

输出结果

slide84

6.4 面向数据流的设计

结构图

 结构图与数据流图有着本质的区别:

——数据流图反映的是系统的逻辑模型,是从数据在系统中的流动情况来考虑系统的;结构图则是描述系统的物理模型及系统的功能是怎样逐步完成的,它从系统的功能层次上来考虑系统。

——结构图并没有严格地表示模块的调用次序,而只表明模块的调用关系。

——结构图也不指明上级模块在什么时候调用下层模块。

slide85

6.4 面向数据流的设计

设计过程—变换流与事务流

 DFD一般可归纳为两种典型的结构:

——变换流

——事务流

slide86

6.4 面向数据流的设计

设计过程—变换流

 在基本系统模型(即顶层数据流图)中,数据通常以“外部世界”所具有的形式进入系统,经过处理后又以这种形式离开系统。

 变换流是一种近似线性结构,可明显地划分为输入、处理、输出三个部分。

slide87
 示例:

6.4 面向数据流的设计

设计过程—变换流

数据

输入流

输出流

外部

表示

变换流

数据

内部

表示

逻辑输入

逻辑输出

时间

slide88

6.4 面向数据流的设计

设计过程—事务流

 事务流实际上是以某项业务为基本数据单元来触发事务中心,并由该中心辐射出许多条动作路径,但每次仅沿一条路径流动的数据流。

 通常系统中的数据均采用变换流分析。

slide89
 示例:

事务

事务中心

动作路径

T

6.4 面向数据流的设计

设计过程—事务流

slide90

6.4 面向数据流的设计

设计过程—设计步骤

 DFOD方法能方便地将数据流图转换为模块结构图,其过程分为五步:

——确定数据流的类型;

——划定转换的边界;

——将数据流图映射成基本的模块结构图;

——分层求精模块结构图;

——应用模块设计和优化准则,优化模块结构图。

slide91

精化数据流图

流的类型

找出事务中心

找出变换中心

映射为事务结构

映射为变换结构

导出模块结构

优化模块结构

检查

6.4 面向数据流的设计

设计过程—设计步骤

 DFOD设计过程:

slide92

6.4 面向数据流的设计

设计过程—设计步骤

 一个实际系统的数据流图是变换流和事务流两种类型的混合体。

事务中心

输入

变换中心

输出

slide93

6.4 面向数据流的设计

变换分析

 变换分析(transform analysis)就是从变换型数据流图映射出模块结构图的过程,也称为以变换为中心的设计。

 运用变换分析方法,首先根据数据流图上的处理框,找出主要处理功能,即变换中心,把数据流图划分为输入、处理、输出三大部分,从而得到结构图的第一层模块分解图。通过对该图做进一步的分解和优化,便可获得系统的最终模块结构图。

slide94

变换处理

变换

输出

输入

中心

输入

处理

输出

(b)

(a)

6.4 面向数据流的设计

变换分析

 变换分析的一般形式:

slide95

6.4 面向数据流的设计

变换分析

 变换分析方法主要由以下三个步骤组成:

——分析数据流图,确定它的主要处理(中心变换)、输入和输出功能;

——设计上层模块;

——设计输入、输出和变换中心的下层模块。

slide96

6.4 面向数据流的设计

变换分析—确定中心变换与输入输出

 从物理输入端开始,沿着每一个由数据源传入的数据流的移动方向进行跟踪,或者逐步向中心移动,直到数据流不再被看作系统的输入为止,这时,它的前一个数据流就称为逻辑输入。

 从物理输出端开始,逐步向系统的中间移动,直到找出离物理输出端最远的,但仍可看作是系统的输出的那个数据流,此数据流即为逻辑输出。

 找出系统的中心变换,即位于逻辑输入和逻辑输出之间的处理功能。

slide97
示例:根据用户输入的编码修改帐目的数据流图,显然,“修改帐目”为中心变换。

6.4 面向数据流的设计

变换分析—确定中心变换与输入输出

编码表

输入修

查找帐目

修改帐目

用户

改内容

帐目文件

重新排列

slide98

6.4 面向数据流的设计

变换分析—上层模块的设计

 确定了变换中心实际上就决定了系统结构的“顶”。系统的上层模块分两层,顶层是个主模块,主模块的下层(第一层)由输入部分、变换中心部分和输出部分组成。

 设计结构的第一层:

——为每一个逻辑输入设计一个输入模块,它的功能是向主模块输入数据;

——为每一个逻辑输出设计一个输出模块,它的功能是将主模块提供的数据输出;

——对变换中心部分中的每个变换设计一个变换模块,它的功能是接收输入数据,进行变换,然后输出。

slide99
 示例:根据据流图画出第一张结构图。

6.4 面向数据流的设计

变换分析—上层模块的设计

修改帐目

帐目记录

内容

内容

修改帐目

输出

获得输入

写帐目文件

slide100

6.4 面向数据流的设计

变换分析—设计输入输出和变换中心的下层模块

 设计下层模块的工作实际上是自顶向下、逐步细化上层模块的过程。要充分运用我们前面已讲述过的模块设计原则和经验。

 设计方法:

——设计输入输出部分的下层模块:为每一输入(出)模块设计两个下层模块,数据输入(出)和变换模块。

——设计变换模块的下层

设计变换模块的下层没有一定的规则可遵循,应用模块设计原则来考虑每一变换的分解。

slide101
示例:在前图基础上画出的比较合理的结构图。

修改帐目

帐目记录

修改后数据

修改

输出

获得数据

修改内容

输出内容

编码

帐目记录

变换数据形式

输入

显示或打印

检索记录文件

写帐目文件

6.4 面向数据流的设计

变换分析—设计输入输出和变换中心的下层模块

slide102

6.4 面向数据流的设计

事务分析

 所谓一件事务,实际上是指一组数据或事件流入系统,并引起一组处理动作。

 事务分析(transaction analysis)就是对事务型结构的数据流图进行变换,从而导出标准的结构图的一种方法,它是结构系统设计中另一项主要设计策略。

slide103

6.4 面向数据流的设计

事务分析

 一个大的系统一般是变换型结构和事务型结构的混合体,往往需要同时采用变换分析和事务分析。

 通常以变换分析为主,事务分析为辅设计:

——找出输入、输出及事务中心,设计系统结构图的上层;

——根据数据流图各部分的结构特点适当地运用变换分析或事务分析方法,得出初始模块结构图;

——优化处理,导出系统最终模块结构图。

slide104
示例:主模块、事务处理模块、操作模块、细节模块。示例:主模块、事务处理模块、操作模块、细节模块。

6.4 面向数据流的设计

事务分析

事务分析

分析事务类型

分配事务类型

处理事务B

处理事务A

处理事务C

处理1

处理2

slide105

6.4 面向数据流的设计

事务分析

一般,事务分析具有如下的步骤:

——识别事务源

——确定适当的事务型结构

——确定各种事务及相应的处理

——合理建立公用模块

——对每一类型的事务,建立一个事务处理模块

——对事务处理模块,建立直属于该事务处理的下

级模块(操作模块)

——为操作模块设计其全部的细节模块

slide106
示例:企业销售子系统数据流图。

按日期

分析销售

统计

时间分布

按地区

分析销售

统计

地区分布

获得销售

确定信息

分析经过

顾客

信息

类型

处理

按顾客

分析销售

统计

顾客分布

按产品

分析销售

统计

产品分布

6.4 面向数据流的设计

事务分析

slide107
示例:企业销售子系统的事务型结构图。

销售分析

获得销售

调度处理

信息类型

编辑销

分析信

按日期

按地区

按顾客

按产品

售信息

息类型

统计

统计

统计

统计

分析时

分析地

分析顾

分析产

间分布

区分布

客分布

品分布

6.4 面向数据流的设计

事务分析

slide108

6.4 面向数据流的设计

设计优化

 初始结构图的导出,并不意味着系统模块设计的完结,还存在着大量改进的优化工作。

 改进初始设计一般应:

——检查初始设计方案

——优化方案

slide109

6.4 面向数据流的设计

设计优化—检查初始设计方案

 着重检查以下几个方面:

——系统的结构(系统的深度与宽度、模块的扇出扇入及模块的作用范围与控制范围等)

——模块之间的耦合度(模块之间联系的方式)

——模块内部的聚合度(内部紧凑性)

——系统的性能(可读性、可维护性、可修改性及可靠性)

slide110

6.4 面向数据流的设计

设计优化—解决的办法

——具有最佳设计的,但不能工作的系统是糟糕的;

——系统全局的优化远远超过局部的优化;

——简单而又有能满足所有功能性能要求的设计方案,意味着系统实现方案运行高效、可靠性高;

——可读性、可维护性、可修改性好的系统具有更强的生命力。

slide111

第6章 系统设计

◆系统设计概述

◆ 结构化设计原理

◆ 模块化设计

◆ 面向数据流的设计

◆ 面向数据结构的设计

◆HIPO图

slide112

6.5 面向数据结构的设计方法

 基于系统IPO基本模型,对于建立这个基本模型的次序就决定了方法的不同。

 面向过程的方法:传统的开发方法把处理过程看作系统模型的基本部分,数据是跟随功能的,如面向数据流的设计方法。

 面向数据结构的设计方法:把模型的输入、输出部分看作是最重要的,首先定义的是数据结构,而过程模块则是从数据结构中导出的,即功能跟随数据。

slide113

6.5 面向数据结构的设计方法

Jackson设计方法

 Jackson是以数据结构为基础并通过一组映射或转换过程建立系统的模块结构的,这是与以数据流图为基础构成模块化结构的结构化设计最主要区别。

 Jackson方法的发展可分为两个阶段:

——70年代Jackson方法的核心是面向数据结构的设计,以数据驱动为特征;

——80年代以来,Jackson方法已经演变到基于进程模型的事件驱动。

slide114

6.5 面向数据结构的设计方法

Jackson设计方法—Jackson图

 Jackson数据结构图的三种基本类型:顺序、选择、循环。

——“*”表示多次出现,即循环

——“O”表示选择

 Jackson方法是把问题分解为三种基本结构形式表示的各部分层次结构,提出一种与数据结构层次图非常类似的结构表示法,并提出一组基于这种数据结构到模块结构的映射和转换过程。

slide115
示例:

A

A

A

B

C

D

B

*

B

C

D

6.5 面向数据结构的设计方法

Jackson设计方法—Jackson图

(a) (b) (c)

slide116

6.5 面向数据结构的设计方法

Jackson设计方法—Jackson方法

 Jackson方法主张模块结构与问题结构相对应,对一般数据处理系统而言,其问题的结构可由它所处理的数据结构来表示。

 许多系统处理的是具有层次结构的数据,例如文件是由记录组成的,记录又是由若干个数据项组成。对于此类的数据处理,采用Jackson方法能非常容易地导出处理模块结构。

slide117
示例:

文件

处理文件

*

*

记录

处理记录

数据项1

数据项2

数据项n

处理项1

处理项2

处理项3

6.5 面向数据结构的设计方法

Jackson设计方法—Jackson方法

slide118

6.5 面向数据结构的设计方法

Jackson设计方法—Jackson方法

 Jackson方法与结构图方法不同之处是:

——结构图表现模块与模块的调用关系,其每个方框代表一个模块,每个模块除了调用下级模块外,本身还有许多处理;

——Jackson 图表现处理的组成关系,即一个方框中包括的处理动作仅仅由它下层方框中的处理动作组成

——Jackson 方法常常用于由数据结构产生处理模块的内部结构,即用于模块的详细设计,当然Jackson方法也可用于表现模块与模块之间的处理关系。

slide119

6.5 面向数据结构的设计方法

Jackson设计方法—Jackson方法

 Jackson方法基本上包括下述三个步骤:

——分析并确定输入数据和输出数据的逻辑结构,并用Jackson图描述这些数据结构;

——找出输入数据结构和输出数据结构有对应关系的数据单元,即找出输入与输出数据结构之间的内容、数量、次序上的对应性;

——从描述数据结构的Jackson 图导出描述模块结构的Jackson图。

——列出所有的操作和条件,并把它们分配到模块Jackson图中的适当位置。

slide120

6.5 面向数据结构的设计方法

 从描述数据结构的Jackson 图导出描述模块结构的Jackson图:

——为每对有对应关系的数据单元,按照它们在数据结构图中的层次(如果在输入数据结构与输出数据结构中有不同的层次,那么以较低的层次为参照),在模块结构图上画一个相应的处理框。

——根据输入数据结构中剩余的(没有对应关系的)每个数据单元所处的层次,在模块结构的Jackson图的相应层次分别为它们画上对应处理框。

——根据输出数据结构中剩余的(没有对应关系的)每个数据单元所处的层次,在模块结构的Jackson图的相应层次分别为它们画上对应处理框。

——对于数据结构图中同时以选择出现和循环出现的数据单元,增加一个中间层次的处理框。

slide121
示例:产生销售统计报告的过程:依次读销售记录,按所需分析的内容进行统计。

销售文件

*

记录

销售日期

顾客名

顾客所在地区

产品名称

销售金额

6.5 面向数据结构的设计方法

Jackson设计方法—Jackson方法

slide122
示例:根据问题数据结构,不难产生其模块结构。

产品销售报告

*

读销售文件

产生报告

分析内容统计

*

读记录

暂存有关内容

产生表头

产生表体

*

产生行

读销售日期

读顾客名

...

读销售余额

产生项1

产生项2

...

产生项n

6.5 面向数据结构的设计方法

Jackson设计方法—Jackson方法

slide123

6.5 面向数据结构的设计方法

Jackson设计方法—Jackson方法的评价

 Jackson与Yourdon方法的主要区别是:

——Jackson 方法是基于数据结构的分析,而Yourdon方法则是基于数据流的分析;

——Jackson 方法是面向数据的,而Yourdon 方法是面向过程的; Jackson方法提供使用结构的静态视图, Yourdon方法则提供使用数据流的动态视图。

 Jackson方法的最主要优点是简单、易学。但在一个大而复杂的系统中,大多涉及许多的输入数据和输出数据,而它们的结构又不相对应,特别是在系统的开发、使用过程中,有些数据的结构常常发生变化。这样,Jackson方法就不适用了。

slide124

6.5 面向数据结构的设计方法

Warnier—Orr方法

 Warnier-Orr设计方法称为数据结构化系统开发(Data Structured System Development,简称DSSD)方法,或称为程序的逻辑构造(LCP)方法,它是针对对象系统的数据结构进行开发的。

 Warnier-Orr方法是面向输出的方法,在使用Warnier-Orr方法时,系统设计人员首先定义的是系统的输出,然后再回过头来通过基本的系统模型定义数据的处理和输入部分。

slide125

第6章 系统设计

◆系统设计概述

◆ 结构化设计原理

◆ 模块化设计

◆ 面向数据流的设计

◆ 面向数据结构的设计

◆HIPO图

slide126

6.6 HIPO图

HIPO图

HIPO(Hierarchy Plus Input/process/Output)图是层次的输入/处理/输出图的简称,它能反映系统中模块的结构以及方便地描述输入数据、处理功能和输出数据之间的关系。

HIPO图能将一个大的功能模块逐层分解,得到系统模块的层次结构,然后进一步把每个模块分解为输入、处理和输出的具体执行模块。对最基层的模块,它可以从输入、处理、输出角度对其加以描述说明,如输入输出数据来源于数据字典或是调用模块、模块内部的具体算法等。

slide127
示例:某财务系统的记帐处理子系统是由凭证输入、修改、查询、审核、输出凭证等组成的

记帐处理

输入

处理

输出

输入

编辑

编辑

输出

凭证

查询

修改

审核

凭证

报表

报表

记录

单项

组合

查询

查询

6.6 HIPO图

HIPO图

slide128
HIPO图既反映了系统的总体结构,又反映了系统各个模块之间的关系。HIPO图是模块设计中一种重要的图形工具。但是如上所述在HIPO图中每个模块只有名称,没有细节。按照系统设计的目标,还必须有模块的详细描述。模块IPO图就是这样一种图形工具。

6.6 HIPO图

模块IPO图

slide129
 改进的模块IPO图的形式

6.6 HIPO图

IPO

系统模块

图设计样式

系统名称:

模块名称:

模块编号

设计人:

设计日期:

模块描述:

被调用模块:

调用模块:

输入参数:

输入说明:

输出参数:

输出说明:

变量说明:

处理说明:

备注: