《(计算机)总体设计》由会员分享,可在线阅读,更多相关《(计算机)总体设计(133页珍藏版)》请在金锄头文库上搜索。
1、第四章 总体设计第四章 总体设计p4.1 总体设计的任务总体设计的任务p4.2 总体设计的概念和原理总体设计的概念和原理p4.3 设计准则设计准则p4.4 总体设计常用的方法和工具总体设计常用的方法和工具p4.5 数据库设计数据库设计4.1 总体设计的任务p软件设计软件设计软件设计的任务是从软件需求规格说明书出发,形成软件的具体设计方案,即将需求模型转换为软件设计。软件设计是一个把软件需求变换成软件表示的过程,即根据需求分析的“做什么”,确定系统应该“怎么做”。软件设计的结果是软件设计规格说明书。软件设计是后续开发步骤及软件维护工作的基础。从技术观点来看,软件设计包括数据设计、体系结构设计、接
2、口设计、过程设计。通常将软件设计分为总体设计(概要设计)和详细设计(过程设计)两个阶段。软件设计是后续开发步骤及软件维护工作的基础。如果没有设计,只能建立一个不稳定的系统结构。测试编码维护设计编码测试维护有软件设计4.1 总体设计的任务没有软件设计4.1 总体设计的任务p总体设计阶段,具体任务如下:总体设计阶段,具体任务如下:(1)制定规范为软件开发组制定设计时应为软件开发组制定设计时应共同遵守的标准共同遵守的标准。以便协。以便协调组内各成员工作。通常包括:调组内各成员工作。通常包括:阅读理解软件需求说明书,确认用户需求能否实现,阅读理解软件需求说明书,确认用户需求能否实现,进而进而确定设计目
3、标及其优先级确定设计目标及其优先级。根据目标根据目标确定最合适的方案确定最合适的方案。规定设计文档编制标准规定设计文档编制标准,包括文档体系、用纸及排版,包括文档体系、用纸及排版样式、记述的详细途径、图形画法等。样式、记述的详细途径、图形画法等。规定编码的信息形式(代码体系)规定编码的信息形式(代码体系)、与硬件、与硬件/操作系统操作系统的的接口规约等接口规约等。制定编程规范制定编程规范,如命名规则、注释要求、质量保证要,如命名规则、注释要求、质量保证要求、可读性要求、测试要求等。求、可读性要求、测试要求等。4.1 总体设计的任务(2)软件系统结构设计软件系统结构设计即确定组成系统的程序及相互
4、关系。软件系统结构设计即确定组成系统的程序及相互关系。具体内容为:具体内容为:采用某种方法,将复杂系统按功能采用某种方法,将复杂系统按功能划分划分成成模块模块。确定每个确定每个模块模块的的功能功能。确定确定模块模块之间的之间的调用调用关系。关系。确定确定模块模块之间的之间的接口接口,即模块之间传递的信息。,即模块之间传递的信息。评价评价模块结构的模块结构的质量质量。软件结构设计是以模块为基础的,需求分析阶段,已软件结构设计是以模块为基础的,需求分析阶段,已经把系统分解为层次结构,设计阶段要实现进一步的经把系统分解为层次结构,设计阶段要实现进一步的模块划分,并组成模块的层次结构。模块划分,并组成
5、模块的层次结构。4.1 总体设计的任务(3)数据结构及数据库设计数据结构设计数据结构设计需求分析阶段,通过数据字典对数据的组成、操需求分析阶段,通过数据字典对数据的组成、操作约束、相互关系等方面进行描述,确定了数据的作约束、相互关系等方面进行描述,确定了数据的结构特征。结构特征。数据结构设计主要对数据字典的组成、操作约束、数据结构设计主要对数据字典的组成、操作约束、数据之间的相互关系等方面进行描述,确定数据的数据之间的相互关系等方面进行描述,确定数据的结构特征。结构特征。4.1 总体设计的任务数据库设计数据库设计概念结构设计:及数据库的概念模式设计,一般概念结构设计:及数据库的概念模式设计,一
6、般指构造指构造实体实体关系模型关系模型(E-R,Entity-Relationship)模型。)模型。逻辑结构设计:将逻辑结构设计:将E-R模型转换为模型转换为DBMS支持的关支持的关系模型。系模型。物理结构设计:设计数据库的物理细节,如存储物理结构设计:设计数据库的物理细节,如存储形式、路径等。形式、路径等。E-R模型关系模型实体集关系(表)实体元组(行)属性属性(列)属性值元组分量(列值)4.1 总体设计的任务(4)可靠性设计质量设计,设计时考虑软件可靠性及其他质量指标,确保软件质质量设计,设计时考虑软件可靠性及其他质量指标,确保软件质量,易于修改维护。量,易于修改维护。(5)编写概要设计
7、文档概要设计说明书概要设计说明书:集中于软件结构描述。:集中于软件结构描述。数据库设计说明书数据库设计说明书:主要内容为:主要内容为DBMS的选择、简介、数据库概的选择、简介、数据库概念模型、逻辑设计结果等。念模型、逻辑设计结果等。用户手册用户手册:对需求阶段编写的用户手册进行补充完善。:对需求阶段编写的用户手册进行补充完善。测试文档测试文档:修改需求分析阶段编写的测试文档,对测试策略、方:修改需求分析阶段编写的测试文档,对测试策略、方法、步骤提出明确说明。法、步骤提出明确说明。(6)设计审查和复审对总体设计结果进行对总体设计结果进行严格的技术审查严格的技术审查,通过后再,通过后再从管理角度进
8、行从管理角度进行严格审查严格审查。4.2 总体设计的基本原理p4.2.1 软件结构和过程软件结构和过程总体设计主要是结构设计,而详细设计是过程设计。理解结构和过程的差别和特点,是进行软件设计的前提。结构软件结构是软件要求的各个元素及其相互关系的描述。软件结构是软件要求的各个元素及其相互关系的描述。一般软件元素就是一些功能模块,通过调用关系,组一般软件元素就是一些功能模块,通过调用关系,组合到一起即得到软件结构。合到一起即得到软件结构。最普通的结构是树状结构和网状结构。最普通的结构是树状结构和网状结构。4.2 总体设计的基本原理树状结构中,整个系统只有一个顶层模块,下层模块树状结构中,整个系统只
9、有一个顶层模块,下层模块只有一个上层模块,同一层模块之间不发生联系。只有一个上层模块,同一层模块之间不发生联系。网状关系中,模块关系平等,自由调用。网状关系中,模块关系平等,自由调用。网状关系模块之间联系的随意性使得系统结构复杂,网状关系模块之间联系的随意性使得系统结构复杂,难于处理,所以难于处理,所以实际中一般采用树状结构实际中一般采用树状结构。ABCD E FG H0层1层2层ABCDEABCDE4.2 总体设计的基本原理结构结构软件求解问题软件结构由问题定义开始导出,当问题划分的各部分,软件结构由问题定义开始导出,当问题划分的各部分,分别由一个或多个软件模块解决的时候,也就得到了分别由一
10、个或多个软件模块解决的时候,也就得到了软件结构。这个过程代表了软件软件结构。这个过程代表了软件需求分析到设计的转需求分析到设计的转换换。P1P2P3P4P5软件求解的“问题”S1S2S4S5S3软件“解法”SS1S2S3S4 S5软件结构4.2 总体设计的基本原理结构结构不同结构的解法问题S1S2S3S4S5软件结构1S1S2S3S4S5软件结构2S1S3S2S4S5软件结构34.2 总体设计的基本原理结构的度量和术语宽度深度统帅从属扇出扇入深度:控制的层数;宽度:控制的总分布;扇出:一模块直接控制的模块数;扇入:一个模块的直接上属模块数;统帅:一模块控制另外的模块;从属:模块被另外的模块所控
11、制;每个方框代表一个模块4.2 总体设计的基本原理过程过程软件软件结构隐含着控制层次的关系结构隐含着控制层次的关系,但并不表示软件过程关,但并不表示软件过程关系,不考虑处理和判断的顺序。系,不考虑处理和判断的顺序。模块软件过程集中考虑每个软件过程集中考虑每个模块各自的处理细节。模块各自的处理细节。过程必须提供一个精确过程必须提供一个精确的处理规格说明,包括的处理规格说明,包括事件顺序、精确的判定、事件顺序、精确的判定、重复的操作、以及数据重复的操作、以及数据组织结构组织结构等。等。(详细设(详细设计阶段的工作)计阶段的工作)4.2 总体设计的基本原理模块化p4.2.2 模块化模块化模块(Mod
12、ule),又称“构件”,一般指程序中的数据说明、可执行语句等程序对象的集合,还可以是单独命名和编址的元素,如高级语言中的过程、函数、子程序、类等。在软件的体系结构中,模块是可组合、分解和更换的单元,一般有如下基本属性:接口:指模块的输入与输出。功能:模块实现的功能,应注意这里的功能是模块本身的功能和它调用的所有子模块功能的集合。逻辑:描述内部如何实现要求的功能及所需数据。状态:该模块的运行环境,即该模块的调用与被调用关系。 模块化是将系统划分为若干个模块, 每个模块完成一个子功能。 模块化的目的是将系统“分而治之”,因此能够降低问题的复杂性,使软件结构清晰,易阅读、易理解,易于测试和调试,因而
13、也有助于提高软件的可靠性。4.2 总体设计的基本原理模块化(1)模块化降低软件复杂度的简单证明令:C(X)表示问题 X 的复杂度函数; E(X)解决问题 X 所需工作量的复杂度函数; 若: 有问题 P1,P2,C(P1) C(P2) ; 显然: E(P1) E(P2) 由经验:C(P1+P2) C(P1)+ C(P2) 于是: E(P1+P2) E(P1)+ E(P2) 即将问题(P1+P2)划分为两个问题P1 和 P2 后,其工作量和复杂度都降低。但并非模块分得越小越好。模块数越多,模块之间接口的复杂度和工作量增加。所以模块化并非将系统划分为尽量多的模块,而是要求在模块化的过程中,同时考虑减
14、少接口复杂性,提高模块独立性,有效降低软件的复杂度。模块数目软件成本最小成本区4.2 总体设计的基本原理模块化(2)抽象与逐步求精抽象抽象抽象是从众多的事物中抽取出共同的、本质性的抽象是从众多的事物中抽取出共同的、本质性的特征,而舍弃其非本质的特征。特征,而舍弃其非本质的特征。共同特征是指那些能把一类事物与他类事物区分共同特征是指那些能把一类事物与他类事物区分开来的特征,又称本质特征。抽取事物的本质特征,开来的特征,又称本质特征。抽取事物的本质特征,舍弃不同特征。舍弃不同特征。软件工程过程中的每一步部可以看作是对软件解软件工程过程中的每一步部可以看作是对软件解决方法的抽象层次的一次细化。决方法
15、的抽象层次的一次细化。l系统定义阶段,将软件作为系统一个完整部件进行描述。系统定义阶段,将软件作为系统一个完整部件进行描述。l需求分析期间,使用在问题环境中熟悉的方式几术语来需求分析期间,使用在问题环境中熟悉的方式几术语来描述。描述。l软件设计时,抽象与逐步求精、模块化密切相关,由抽软件设计时,抽象与逐步求精、模块化密切相关,由抽象到具体地分析和构造出软件的层次结构。象到具体地分析和构造出软件的层次结构。l编写出原程序后,达到了抽象的编写出原程序后,达到了抽象的最底层最底层。4.2 总体设计的基本原理模块化逐步求精逐步求精逐步求精是人类解决复杂问题的又一基本方法。逐步求精是人类解决复杂问题的又
16、一基本方法。George Miller有项心理学法则(有项心理学法则(1956):): “魔术数字魔术数字7加减加减2” ,指出人一次能处理或记忆的资讯大概只有七,指出人一次能处理或记忆的资讯大概只有七项,多了也记不住,反而模糊了焦点。项,多了也记不住,反而模糊了焦点。将现实问题经过几次抽象(细化)处理,最后到求解将现实问题经过几次抽象(细化)处理,最后到求解域中只是一些简单的算法描述和算法实现问题。即将系域中只是一些简单的算法描述和算法实现问题。即将系统功能按层次进行分解,每一层不断将功能细化,到最统功能按层次进行分解,每一层不断将功能细化,到最后一层都是功能单一、简单易实现的模块。后一层都
17、是功能单一、简单易实现的模块。在搞抽象级别定义功能陈述,并不涉及功能内部实现在搞抽象级别定义功能陈述,并不涉及功能内部实现及信息细节,设计者对陈述进行细化,逐步求精提供越及信息细节,设计者对陈述进行细化,逐步求精提供越来越多的细节,直至得到用程序语言表达的程序。来越多的细节,直至得到用程序语言表达的程序。4.2 总体设计的基本原理模块化(3)信息隐蔽与局部化信息隐蔽信息隐蔽指在设计模块时,应该使模块内包含的信息(过程和指在设计模块时,应该使模块内包含的信息(过程和数据)对于不需要这些信息的模块来说,是不能访问的。数据)对于不需要这些信息的模块来说,是不能访问的。局部化局部化指把一些关系密切的软
18、件元素物理的放得彼此靠近。指把一些关系密切的软件元素物理的放得彼此靠近。显然,局部化有助于实现信息隐蔽。显然,局部化有助于实现信息隐蔽。 使用信息隐蔽原理作为模块化系统设计的标准使用信息隐蔽原理作为模块化系统设计的标准使得独立模块之间仅仅交换为完成系统功能而必须使得独立模块之间仅仅交换为完成系统功能而必须交换的信息,而绝大多数数据和过程对于软件其他交换的信息,而绝大多数数据和过程对于软件其他部分而言是隐蔽的,因此部分而言是隐蔽的,因此在修改期间由于疏忽而引在修改期间由于疏忽而引入的错误传播到软件的其他部分的可能性就很小。入的错误传播到软件的其他部分的可能性就很小。 4.2 总体设计的基本原理模
19、块化(4)模块独立模块独立的概念是模块化、抽象、信息隐蔽的局部化模块独立的概念是模块化、抽象、信息隐蔽的局部化概念的直接结果。概念的直接结果。 模块的独立程度可以用内聚和耦合这两标准来衡量。模块的独立程度可以用内聚和耦合这两标准来衡量。模块独立是优秀软件设计的关键,设计是决定软件质模块独立是优秀软件设计的关键,设计是决定软件质量的关键。量的关键。开发具有独立功能而且和其他模块之间没有过多的相开发具有独立功能而且和其他模块之间没有过多的相互作用的模块,就可以做到模块独立。这样做有两个互作用的模块,就可以做到模块独立。这样做有两个好处:好处:第一,有效的模块化(即具有独立的模块)的软第一,有效的模
20、块化(即具有独立的模块)的软件比较交易开发出来,这是由于能够件比较交易开发出来,这是由于能够将功能分割而将功能分割而且接口可以简化且接口可以简化;第二,独立的模块比较第二,独立的模块比较容易测试和维护容易测试和维护。这是因。这是因为相对来说,修改设计和程序所需要的工作量较小,为相对来说,修改设计和程序所需要的工作量较小,错误传播范围小,而且需要扩充功能时能够错误传播范围小,而且需要扩充功能时能够“插入插入”模块。模块。4.2 总体设计的基本原理耦合(5)耦合耦合性是指软件结构中模块相互连接的紧密程度,是耦合性是指软件结构中模块相互连接的紧密程度,是模块间相互连接性的度量。模块间相互连接性的度量
21、。方式方式l块间联系方式有块间联系方式有“直接引用直接引用”或或“过程语句调用过程语句调用” 。显然直接引用方式块间联系紧密。显然直接引用方式块间联系紧密。 作用作用l块间传送的共用信息(参数),可为块间传送的共用信息(参数),可为“数据型数据型” 、 “控制型控制型”或或“混合型混合型” (数据(数据/控制型)控制型) ,控制,控制型信息使块间联系增高。型信息使块间联系增高。 数量数量l块间传送的共用信息的数量越大,块间联系越紧密。块间传送的共用信息的数量越大,块间联系越紧密。4.2 总体设计的基本原理耦合耦合强弱取决于模块间接口的复杂程度,进入或访问耦合强弱取决于模块间接口的复杂程度,进入
22、或访问一个模块的点,以及通过接口的数据。一个模块的点,以及通过接口的数据。 一般模块之间可能的连接方式有七种,构成七种耦合:一般模块之间可能的连接方式有七种,构成七种耦合:非直接耦合 数据耦合 标记耦合 控制耦合 外部耦合 公共耦合 内容耦合低高强弱耦合性模块独立性4.2 总体设计的基本原理耦合非直接耦合(非直接耦合(Non-direct coupling )两个模块之间没有直接关系,它们之间的联系完两个模块之间没有直接关系,它们之间的联系完全是通过全是通过主模块主模块的控制和调用来实现的,这就是非的控制和调用来实现的,这就是非直接耦合。直接耦合。模块从属于不同的模块控制或调用;模块从属于不同
23、的模块控制或调用;耦合程度最低,独立性最强。耦合程度最低,独立性最强。主模块ABCEFGXYZ4.2 总体设计的基本原理耦合数据耦合(数据耦合(Data Coupling)模块调用时,通过参数表模块调用时,通过参数表(不是控制参数、公共(不是控制参数、公共数据结构或外部变量)数据结构或外部变量)来传递简单数据,则称这种来传递简单数据,则称这种耦合为数据耦合。耦合为数据耦合。界面简单、安全可靠,属松散耦合,模块之间独界面简单、安全可靠,属松散耦合,模块之间独立性强。立性强。画直线的命令画直线的命令LINE:p0 (x0, y0) p1 (x1, y1)数据耦合 LINE ( x0, y0, x1
24、, y1)4.2 总体设计的基本原理耦合标记耦合(标记耦合(Stamp Coupling)模块调用时,传递记录是某一数据结构的子结构,模块调用时,传递记录是某一数据结构的子结构,而不是简单变量,为标记耦合。而不是简单变量,为标记耦合。是数据耦合的变形,要求两个模块都要清楚数据是数据耦合的变形,要求两个模块都要清楚数据结构,并按规定要求进行操作。设计中要尽量避免结构,并按规定要求进行操作。设计中要尽量避免标记耦合,可将统一数据结构操作集中在同一模块标记耦合,可将统一数据结构操作集中在同一模块中。中。p0 (x0, y0) p1 (x1, y1)标记耦合 LINE ( p0, p1)模块1模块2模
25、块1模块2通过参数表传递数据结构(标记耦合)通过参数表传递简单数据(数据耦合)非直接耦合计算水电费计算水费计算电费住户情况住户情况水费 电费4.2 总体设计的基本原理耦合控制耦合(控制耦合(Control coupling)一个模块通过传送开关、标志、名字等控制信息,一个模块通过传送开关、标志、名字等控制信息,明显地控制选择另一模块的功能。明显地控制选择另一模块的功能。 实质是在单一接口上选择多功能模块中的某项功实质是在单一接口上选择多功能模块中的某项功能。所以对被控制模块的任何修改,都会影响控制能。所以对被控制模块的任何修改,都会影响控制模块。模块。控制耦合也意味着控制模块必须知道所控制模块
26、控制耦合也意味着控制模块必须知道所控制模块内部的一些逻辑关系,这些都会降低模块的独立性。内部的一些逻辑关系,这些都会降低模块的独立性。模块取阴历日期或阳历日期 类型日期模块阴历日期取阴历取阳历阳历日期分解控制耦合4.2 总体设计的基本原理耦合外部耦合(外部耦合(External coupling)一组模块都访问一组模块都访问同一全局简单变量同一全局简单变量而不是同一全而不是同一全局数据结构,而且不是通过参数表传递该全局变量局数据结构,而且不是通过参数表传递该全局变量的信息,则称之为外部耦合。的信息,则称之为外部耦合。外部耦合引起的问题类似于公共耦合,区别在于外部耦合引起的问题类似于公共耦合,区
27、别在于在外部耦合中不存在依赖于一个数据结构内部各项在外部耦合中不存在依赖于一个数据结构内部各项的物理安排。的物理安排。4.2 总体设计的基本原理耦合公共耦合(公共耦合(Common coupling)若一组模块都访问同一个公共数据环境,则它们若一组模块都访问同一个公共数据环境,则它们之间的耦合就称为公共耦合。公共的数据环境可以之间的耦合就称为公共耦合。公共的数据环境可以是全局数据结构、共享的通信区、内存的公共覆盖是全局数据结构、共享的通信区、内存的公共覆盖区等。区等。这种耦合会引起下列问题这种耦合会引起下列问题l若修改公共数据环境某个数据,会影响到所有公共耦合若修改公共数据环境某个数据,会影响
28、到所有公共耦合模块。模块。l无法控制各模块对公共数据的存取,严重影响软件模块无法控制各模块对公共数据的存取,严重影响软件模块的可靠性和适应性。的可靠性和适应性。l公共数据名的使用,明显降低了程序的可读性。公共数据名的使用,明显降低了程序的可读性。4.2 总体设计的基本原理耦合公共耦合的复杂程度随耦合模块的个数增加而显公共耦合的复杂程度随耦合模块的个数增加而显著增加。若一个模块只是往公共数据环境里传送数著增加。若一个模块只是往公共数据环境里传送数据,而另一个模块只是从公共数据环境中取数据,据,而另一个模块只是从公共数据环境中取数据,则这种公共耦合叫做松散公共耦合。若两个模块都则这种公共耦合叫做松
29、散公共耦合。若两个模块都从公共数据环境中读写数据,则这种公共耦合叫做从公共数据环境中读写数据,则这种公共耦合叫做紧密公共耦合。紧密公共耦合。Global:V1,V2A:A1=V1+V2B:V1=B1Global:V1,V2A:V1+B:V2=B1+V1AB公共数据区松散耦合AB公共数据区紧密耦合4.2 总体设计的基本原理耦合内容耦合(内容耦合(Content coupling)如果发生下列情形,两个模块之间就发生了内如果发生下列情形,两个模块之间就发生了内容耦合:容耦合:l一个模块直接访问另一个模块的内部数据;一个模块直接访问另一个模块的内部数据;l一个模块不通过正常入口转到另一模块内部;一个
30、模块不通过正常入口转到另一模块内部;l两个模块有一部分程序代码重叠两个模块有一部分程序代码重叠(只可能出现在只可能出现在汇编语言中汇编语言中);l一个模块有多个入口一个模块有多个入口4.2 总体设计的基本原理耦合在内容耦合的情形,所访问模块的任何变更,在内容耦合的情形,所访问模块的任何变更,或者用不同的编译器对它再编译,都会造成程或者用不同的编译器对它再编译,都会造成程序出错。序出错。大多数高级程序设计语言已经设计成不允许出大多数高级程序设计语言已经设计成不允许出现内容耦合。它一般出现在汇编语言程序中。现内容耦合。它一般出现在汇编语言程序中。这种耦合是模块独立性最弱的耦合。这种耦合是模块独立性
31、最弱的耦合。 AB进入另一模块内部模块代码重叠ABentry1 entry2 模块多个入口4.2 总体设计的基本原理耦合影响耦合度的因素连接方式的类型连接方式的类型直接的控制和调用(模块间关系明确,独立性直接的控制和调用(模块间关系明确,独立性最强);最强);间接的通过参数传递;间接的通过参数传递;公共数据区(全局变量;公共数据环境);公共数据区(全局变量;公共数据环境);模块的直接引用,直接引用其他模块内部的数模块的直接引用,直接引用其他模块内部的数据或控制指令。(耦合度最强)据或控制指令。(耦合度最强)4.2 总体设计的基本原理耦合接口的复杂性接口的复杂性接口间传递的信息数量、以及穿越接口
32、次数和接口间传递的信息数量、以及穿越接口次数和类型决定了接口的复杂性。类型决定了接口的复杂性。例如,例如,M个模块共享个模块共享N个数据区,则可能产生个数据区,则可能产生M(M-1)N个联系,修改一处需要考虑许多模个联系,修改一处需要考虑许多模块。块。几种耦合的比较几种耦合的比较耦合形式可读性可维护性扩散错误的能力公用性非直接耦合好好弱好数据耦合好一般弱好控制耦合一般不好一般不好公共耦合最坏坏强最坏内容耦合最坏最坏最强最坏4.2 总体设计的基本原理聚合(6)内聚(Cohesion)内聚性也称块内联系,指模块的功能强度的度量,内聚性也称块内联系,指模块的功能强度的度量, 即即一个模块内部各个元素
33、彼此结合的紧密程度的度量。一个模块内部各个元素彼此结合的紧密程度的度量。若一个模块内各元素(语句之间、若一个模块内各元素(语句之间、 程序段之间)联系程序段之间)联系的越紧密,则它的内聚性就越高。的越紧密,则它的内聚性就越高。 一般情况下,模块内元素的联系可能有一般情况下,模块内元素的联系可能有7种情况,构成种情况,构成7种不同的内聚:种不同的内聚:功能内聚信息内聚 通信内聚 过程内聚 时间内聚 逻辑内聚 偶然内聚高低强弱内聚性模块独立性4.2 总体设计的基本原理聚合偶然内聚(偶然内聚(Coincidental Cohesion)指一个模块内的各处理元素之间没有有意义的联指一个模块内的各处理元
34、素之间没有有意义的联系。系。当几个模块内正好有一段代码是相同的,将它们当几个模块内正好有一段代码是相同的,将它们抽取出来形成单独的模块,即巧合内聚模块。抽取出来形成单独的模块,即巧合内聚模块。这种模块没有独立功能,各部分之间没有联系,这种模块没有独立功能,各部分之间没有联系,或联系很松散。或联系很松散。例如,为了节省存储,把一些无联系的处理序列例如,为了节省存储,把一些无联系的处理序列抽出来组成一个新的模块,这个模块就属于偶然内抽出来组成一个新的模块,这个模块就属于偶然内聚。这样的模块不易理解也不易修改,这是最差的聚。这样的模块不易理解也不易修改,这是最差的内聚情况。内聚情况。4.2 总体设计
35、的基本原理聚合逻辑内聚(逻辑内聚(Logical Cohesion)指模块内执行几个逻辑上相似的功能,指模块内执行几个逻辑上相似的功能, 通过参数确定通过参数确定该模块完成哪一个功能。该模块完成哪一个功能。调用时需要进行控制参数的传递,调用时需要进行控制参数的传递, 造成模块间的控制造成模块间的控制耦合,调用此模块时,不用的部分也占据了主存,耦合,调用此模块时,不用的部分也占据了主存, 降降低了系统效率。低了系统效率。如错误处理,将各种类型错误的信息输出放在一起,如错误处理,将各种类型错误的信息输出放在一起,构成单入口多功能模块。构成单入口多功能模块。写一个记录读一个记录判定调用模块被调用模块
36、4.2 总体设计的基本原理聚合时间内聚(时间内聚(Classical Cohesion)又称为经典内聚。把需要同时执行的动作组合又称为经典内聚。把需要同时执行的动作组合在一起形成时间内聚模块。在一起形成时间内聚模块。如初始化一组变量,同时打开若干文件,如初始化一组变量,同时打开若干文件, 同同时关闭文件等,时关闭文件等, 都与特定时间有关。都与特定时间有关。时间内聚模块往往与其他模块联系的比较紧密。时间内聚模块往往与其他模块联系的比较紧密。 如初始化模块对许多模块的运行有影响,因如初始化模块对许多模块的运行有影响,因此和其他模块耦合的程度较高。此和其他模块耦合的程度较高。例如,初始化模块和终止
37、模块就是时间内聚模例如,初始化模块和终止模块就是时间内聚模块。块。4.2 总体设计的基本原理聚合过程内聚(过程内聚(Procedural Cohesion)如果一个模块内处理是相关的,且必须以特定如果一个模块内处理是相关的,且必须以特定次序执行,则称其为过程内聚模块。次序执行,则称其为过程内聚模块。以过程为基础的结构设计可能导致结果的高度以过程为基础的结构设计可能导致结果的高度可变性,选择不当则不能完成独立任务,也无可变性,选择不当则不能完成独立任务,也无法在新系统中使用。法在新系统中使用。例如,把流程图中的循环部分、判定部分、计例如,把流程图中的循环部分、判定部分、计算部分分成三个模块,这三
38、个模块都是过程内算部分分成三个模块,这三个模块都是过程内聚模块。聚模块。4.2 总体设计的基本原理聚合通信内聚通信内聚(Communication Cohesion)若一个模块内部各功能部分都使用了相同的输若一个模块内部各功能部分都使用了相同的输入数据,或者产生了相同的输出数据,则称之入数据,或者产生了相同的输出数据,则称之为通信内聚模块。为通信内聚模块。通常,通信内聚模块是通过数据流图来定义的。通常,通信内聚模块是通过数据流图来定义的。模块内各个功能是紧密相连的。模块内各个功能是紧密相连的。通信内聚模块内包含了很多独立的功能,但由通信内聚模块内包含了很多独立的功能,但由于各部分功能使用相同的
39、输入于各部分功能使用相同的输入/输出缓冲区,输出缓冲区,效率下降。效率下降。4.2 总体设计的基本原理聚合打印检验结果读文件文件计算A计算B合并修改文件新文件A结果B结果加工记录加工记录修改库存修改库存开发货单开发货单库存库存A A购货单购货单修改修改D1D1删除删除D1D1B B库存库存D1D1数据流图中的通信内聚数据流图中的通信内聚4.2 总体设计的基本原理聚合信息内聚信息内聚(Informational Cohesion)信息内聚模块完成多个功能,各个功能相互独信息内聚模块完成多个功能,各个功能相互独立但都在同一数据结构上操作,每一项功能有立但都在同一数据结构上操作,每一项功能有一个唯一
40、的入口点。这个模块将根据不同的要一个唯一的入口点。这个模块将根据不同的要求,确定该执行哪一个功能。求,确定该执行哪一个功能。信息内聚将数据结构、资源或设备隐藏在一个信息内聚将数据结构、资源或设备隐藏在一个模块内,达到信息隐蔽,独立性较强。模块内,达到信息隐蔽,独立性较强。信息内聚模块可以看成是多个功能内聚模块的信息内聚模块可以看成是多个功能内聚模块的组合,并且达到信息的隐蔽。组合,并且达到信息的隐蔽。4.2 总体设计的基本原理聚合初始化插入删除查找修改符号表(数据结构)4.2 总体设计的基本原理聚合功能内聚功能内聚(Functional Cohesion)是最强的内聚,是最强的内聚, 指模块内
41、所有元素共同完成指模块内所有元素共同完成一个功能,缺一不可。因此,模块不能再分割。一个功能,缺一不可。因此,模块不能再分割。功能内聚的模块易理解、易修改,功能内聚的模块易理解、易修改, 因为它的因为它的功能是明确的、单一的,因此与其他模块的耦功能是明确的、单一的,因此与其他模块的耦合是弱的。合是弱的。功能内聚的模块有利于实现软件的重用,功能内聚的模块有利于实现软件的重用, 从从而提高软件开发的效率。而提高软件开发的效率。4.2 总体设计的基本原理耦合性与内聚性是模块独立性的两个定性标准,将软件系统划分模块时,尽量做到高内聚低耦合,提高模块的独立性, 为设计高质量的软件结构奠定基础。内聚和耦合性
42、是相互关联的,一般情况下,程序结构中各模块内聚程度越高,模块间耦合性就越低,但也不是绝对的。总体设计的目的是尽量实现模块的高内聚、低耦合,但也有内聚性与耦合性发生矛盾的时候,为了提高内聚性而可能使耦合性变差,在这种情况下,建议给予耦合性以更高的重视。4.3 设计准则软件概要设计包括模块的划分和结构的定义。目标是产生一个模块化的程序结构,并明确模块之间的控制关系,以及定义界面、说明程序的数据,进一步调整程序结构和书数据结构。在进行软件结构设计时,应采用模块化、抽象和信息隐藏,并遵循模块独立性原则。下面介绍一些具体的改进软件设计、提高软件质量的准则。这些准则是今后软件结构设计、求精和复查的依据。4
43、.3 设计准则1 模块划分时应保持模块独立性划分时,应保持模块的相对独立性。划分时,应保持模块的相对独立性。相关部分划分在一起,不相关不要放在一起;相关部分划分在一起,不相关不要放在一起;设计出初始软件结构后,应对该结构进行审查分析,设计出初始软件结构后,应对该结构进行审查分析,通过模块分解与合并,显著改进软件结构,提高内聚,通过模块分解与合并,显著改进软件结构,提高内聚,降低耦合。降低耦合。AC1 B C2ABC1C2CABC4.3 设计准则2 模块大小要适中模块过大,说明分解不够,不易理解;模块过小。数模块过大,说明分解不够,不易理解;模块过小。数目会增多,系统接口会变得复杂。目会增多,系
44、统接口会变得复杂。一般来说,模块的大小以一般来说,模块的大小以50行左右的高级语言程序量行左右的高级语言程序量为宜。心理学研究表明,在人的智力跨度之内,此规为宜。心理学研究表明,在人的智力跨度之内,此规模比较容易阅读和理解。模比较容易阅读和理解。如果一个独立的功能模块少于如果一个独立的功能模块少于50行,不要硬性拼凑;行,不要硬性拼凑;如果一个独立功能模块多余如果一个独立功能模块多余50行,也不要硬性分解。行,也不要硬性分解。如果出现以下情况,就停止模块分解:如果出现以下情况,就停止模块分解:模块不能再细分为明显的子任务;模块不能再细分为明显的子任务;分解成用户提供的模块或库函数;分解成用户提
45、供的模块或库函数;模块接口是输入输出设备传送的信息;模块接口是输入输出设备传送的信息;模块不宜再分解得过小。模块不宜再分解得过小。4.3 设计准则3 模块的接口模块的接口要简单、清晰、含义明确,便于理解,易模块的接口要简单、清晰、含义明确,便于理解,易于调试、实现和维护。于调试、实现和维护。模块接口传递的信息要尽量简单,并与模块功能相一模块接口传递的信息要尽量简单,并与模块功能相一致。致。例如,求矩形面积,有函数Arr0=a;Arr1=b;area=Area (a,b);area=Area(Arr);数组参数,与函数功能不一致4.3 设计准则4 模块的作用范围在软件结构中,由于存在着不同事务处
46、理的需要,在软件结构中,由于存在着不同事务处理的需要, 某某一层上的模块会存在着判断处理,这样可能影响其他一层上的模块会存在着判断处理,这样可能影响其他层的模块处理,引入了模块的作用范围(或称影响范层的模块处理,引入了模块的作用范围(或称影响范围)与控制范围的概念。围)与控制范围的概念。模块的作用范围指模块的作用范围指受该模块内一个判定影响的所有模受该模块内一个判定影响的所有模块的集合块的集合。模块的控制范围指模块的控制范围指模块本身以及其所有下属模块(直模块本身以及其所有下属模块(直接或间接)从属于它的模块接或间接)从属于它的模块)的集合的集合。4.3 设计准则控制范围是从结构方面考虑的,作
47、用范围则是功能上控制范围是从结构方面考虑的,作用范围则是功能上的概念。的概念。模块的作用范围应在其控制范围之内模块的作用范围应在其控制范围之内,且判定所在的,且判定所在的模块,应与受其影响的模块在模块,应与受其影响的模块在层次上尽量靠近层次上尽量靠近。4.3 设计准则5 软件结构的深度、宽度、扇入、扇出数应适当软件软件深度表示控制的层数深度表示控制的层数;宽度指同一层次上模块总数的宽度指同一层次上模块总数的最大值最大值;扇出是一个模块直接控制(调用)的模块数量扇出是一个模块直接控制(调用)的模块数量;扇入表明有多少个上级模块直接调用它扇入表明有多少个上级模块直接调用它。对宽度影响最大的因素是模
48、块的扇出;对宽度影响最大的因素是模块的扇出;经验表明,一般好的软件结构平均扇出是经验表明,一般好的软件结构平均扇出是3或或4,上限通常,上限通常是是5-9;扇出太大一般是缺少中间层次;扇出太小可将下一;扇出太大一般是缺少中间层次;扇出太小可将下一级模块进一步分解或合并。级模块进一步分解或合并。如一个模块的扇入数很大(如一个模块的扇入数很大(9),而又不是公共模块,则),而又不是公共模块,则说明该模块分解不够。说明该模块分解不够。好的软件结构通常顶层扇出较高,中层扇出较少,底层好的软件结构通常顶层扇出较高,中层扇出较少,底层(基础公共模块)有较高的扇入。(基础公共模块)有较高的扇入。4.3 设计
49、准则6 尽量设计功能可预测的模块,防止模块功能过分局限只要输入的数据相同就产生相同的输出,则该模块功只要输入的数据相同就产生相同的输出,则该模块功能是可预测的。能是可预测的。内部带内部带“存储器存储器”的模块功能可能是不可预测的,输的模块功能可能是不可预测的,输出可能取决于内部的某个存储状态,不易理解,难于出可能取决于内部的某个存储状态,不易理解,难于测试和维护。测试和维护。如有可能,模块接口尽量灵活,可提高复用率。如有可能,模块接口尽量灵活,可提高复用率。4.4 总体设计常用的方法及工具从系统设计的角度出发,软件设计方法大体可分为三类:(1)面向数据流的程序设计(Data Flow-Orie
50、nted Design)或过程驱动的设计(Process-Driven Design)(2)面向数据结构的设计(Data Structure-Oriented Design)或数据驱动的设计(Data-Driven Design)(3)面向对象程序设计(Object-Oriented Design)。本节介绍前两种方法。4.4 总体设计常用的方法及工具p4.4.1 面向数据流的设计方法面向数据流的设计方法面向数据流的设计,又称为结构化设计方法(Structured Design,SD),是在模块化、自顶向下逐步求精、结构化程序设计等软件设计技术基础上发展起来的。与结构化分析(SA)相衔接,构成
51、完整的结构化分析设计技术,成熟,应用范围广泛。SD方法以数据流图为基础,按一定的方法将其映射为软件结构图。4.4 总体设计常用的方法及工具该方法实施的要点是:(1)首先首先研究、分析和审查数据流图研究、分析和审查数据流图。 从软件的需求从软件的需求规格说明中弄清数据流加工的过程,对于发现的问题规格说明中弄清数据流加工的过程,对于发现的问题及时解决。及时解决。(2)然后然后根据数据流图确定数据处理的类型根据数据流图确定数据处理的类型。典型的类。典型的类型有两种:变换型和事务型。针对两种不同类型分别型有两种:变换型和事务型。针对两种不同类型分别进行分析处理。进行分析处理。(3)由数据流图由数据流图
52、推导出系统的初始结构图推导出系统的初始结构图。(4)利用一些启发式原则利用一些启发式原则改进系统初始结构图改进系统初始结构图,直到得,直到得到符合要求的结构图为止。到符合要求的结构图为止。(5)修改和补充数据字典。修改和补充数据字典。(6)制定测试计划。制定测试计划。4.4 总体设计常用的方法及工具结构化设计1 基本概念结构化设计的思想结构化设计的思想结构化开发方法是传统的软件工程方法中最成熟,应结构化开发方法是传统的软件工程方法中最成熟,应用最广泛的方法,由用最广泛的方法,由SA 、SD、SP构成。构成。软件具有层次性和过程性。层次性反映了软件的整体软件具有层次性和过程性。层次性反映了软件的
53、整体性质,常用结构图表示;过程性反映了软件的局部性质,性质,常用结构图表示;过程性反映了软件的局部性质,常用框图等表示。常用框图等表示。SD法分总体设计和详细设计两阶段。法分总体设计和详细设计两阶段。结构化设计方法优点:结构化设计方法优点:l将大目标转换为小目标分别实现,减少设计复杂性;将大目标转换为小目标分别实现,减少设计复杂性;l结构独立。将功能性程序化分为相对独立的程序模块;结构独立。将功能性程序化分为相对独立的程序模块;l模块功能单一,易于修改维护;模块功能单一,易于修改维护;l增强了代码的可重用性。增强了代码的可重用性。4.4 总体设计常用的方法及工具结构化设计描述工具描述工具结构化
54、设计方法的图形化描述工具为结构化设计方法的图形化描述工具为结构图结构图。结构图是软件文档的重要部分,精确表示程序结结构图是软件文档的重要部分,精确表示程序结构,清楚的反应模块之间层次及其调用关系。构,清楚的反应模块之间层次及其调用关系。结构图不仅严格定义了各模块的名字、功能和接结构图不仅严格定义了各模块的名字、功能和接口,而且反映了设计思想。口,而且反映了设计思想。系统结构图的基本符号系统结构图的基本符号模块调用数据控制信息转接符号选择(判断)重复4.4 总体设计常用的方法及工具结构化设计结构图主要内容有:结构图主要内容有:模块模块:用矩形表示,并用名称标识。名称应能:用矩形表示,并用名称标识
55、。名称应能表示其功能。表示其功能。模块的控制关系模块的控制关系:用单箭头或者直接连线表示:用单箭头或者直接连线表示模块之间的控制关系。调用完成之后控制返回模块之间的控制关系。调用完成之后控制返回到调用模块。到调用模块。模块间信息传递模块间信息传递:调用模块将数据或控制信息:调用模块将数据或控制信息传递给被调用模块,被调用模块回送数据或控传递给被调用模块,被调用模块回送数据或控制信息。箭头尾部空心圆表示数据信息,实心制信息。箭头尾部空心圆表示数据信息,实心圆表示控制信息。圆表示控制信息。辅助符号辅助符号:连线尾部菱形符号表示条件调用,:连线尾部菱形符号表示条件调用,弧线循环调用。选择条件或循环条
56、件一般无需弧线循环调用。选择条件或循环条件一般无需注明。注明。(a) 调用(b) 判断调用(c) 循环调用查询成绩学号查询学生记录查询标志记录地址ABxyz查职工简历读人事文件职工号简历数据无此职工4.4 总体设计常用的方法及工具结构化设计系统结构图中的模块系统结构图中的模块传入模块传入模块:从下属模块取得数据,经过某些处:从下属模块取得数据,经过某些处理理, 再将其传送给上级模块。它传送的数据流再将其传送给上级模块。它传送的数据流叫做逻辑输入数据流。叫做逻辑输入数据流。传出模块传出模块:从上级模块获得数据,进行某些处:从上级模块获得数据,进行某些处理,再将其传送给下属模块。它传送的数据流理,
57、再将其传送给下属模块。它传送的数据流叫做逻辑输出数据流。叫做逻辑输出数据流。变换模块变换模块:它从上级模块取得数据,进行特定:它从上级模块取得数据,进行特定的处理,转换成其它形式的处理,转换成其它形式, 再传送回上级模块。再传送回上级模块。协调模块协调模块 :对所有下属模块进行协调和管理:对所有下属模块进行协调和管理的模块。的模块。4.4 总体设计常用的方法及工具结构化设计传入模块AA传出模块DD变换模块AB协调模块AABB4.4 总体设计常用的方法及工具结构化设计数据流图的类型数据流图的类型(1)变换型)变换型l变换型数据流图是一个线性结构,由输入、变变换型数据流图是一个线性结构,由输入、变
58、换、输出三部分组成。换、输出三部分组成。l信息沿通路进入系统,由外部形式变化为内部信息沿通路进入系统,由外部形式变化为内部形式,经加工处理后沿输出通路变换成外部形形式,经加工处理后沿输出通路变换成外部形式离开软件系统式离开软件系统 。外部表示内部表示信息时间输入流变换流输出流信息流4.4 总体设计常用的方法及工具结构化设计变换流型变换流型DFD可以分成:可以分成:输入变换中心(主加工)输出输入变换中心(主加工)输出 输入数据C变换数据CD输出数据D主模块B变换成C输入B输出CA变换成B输入AC变换成D输出DAABBBCCCDD4.4 总体设计常用的方法及工具结构化设计(2)事务型)事务型l数据
59、沿输入通路到达一个处理,这个处理将输数据沿输入通路到达一个处理,这个处理将输入分为许多平行的加工路径,并根据输入的类入分为许多平行的加工路径,并根据输入的类型,选择某一加工路径。型,选择某一加工路径。l事务处理中心的任务是输入数据(事物),分事务处理中心的任务是输入数据(事物),分析每个事物以确定其类型,选择活动通路处理。析每个事物以确定其类型,选择活动通路处理。T事务事务中心 活动通路事务中心分派模块输出结果事务1输入作业信息事务2事务3事务4作业信息作业信息结果结果操作1操作2操作3操作4操作5操作6细节1细节2细节3细节4细节5细节64.4 总体设计常用的方法及工具结构化设计2 设计过程
60、面向数据流设计方法过程如下:面向数据流设计方法过程如下:研究分析数据流图研究分析数据流图确定确定DFD类型。若为变换型,确定变换类型。若为变换型,确定变换中心和逻辑输入输出边界,映射出变换结中心和逻辑输入输出边界,映射出变换结构的顶层和第一层;若为事务型,确定事构的顶层和第一层;若为事务型,确定事务中心和加工路径,映射出顶层和第一层。务中心和加工路径,映射出顶层和第一层。4.4 总体设计常用的方法及工具结构化设计分解上层模块,设计中下层模块结构,分解上层模块,设计中下层模块结构,最终推导出初始结构图。最终推导出初始结构图。根据优化准则对软件结构进行求精,直根据优化准则对软件结构进行求精,直到得
61、出符合要求的结构图。到得出符合要求的结构图。描述模块功能、接口及全局数据结构。描述模块功能、接口及全局数据结构。复查,如有错转复查,如有错转,修改完善,最后进,修改完善,最后进入详细设计。入详细设计。流类型精化数据流程图映射成事务结构映射成变换结构区分事务中心和数据接收通路区分输入和输出分支运用模块设计规则,精化软件结构导出接口描述和全程数据结构复查详细设计变换分析事务变换4.4 总体设计常用的方法及工具结构化设计3 变换分析(变换型)变换分析是一系列设计步骤的总称,将变换型数据流图按预先确定的模式映射为软件结构。重画数据流重画数据流l为了建立系统结构,将数据流图平铺开来,为了建立系统结构,将
62、数据流图平铺开来,物理输入画在左侧,物理输出画在右侧。物理输入画在左侧,物理输出画在右侧。l如果一个外部实体既是物理输入又是物理输如果一个外部实体既是物理输入又是物理输出,则两侧都要画出它。出,则两侧都要画出它。ABBCEGGHDFCDEABCDEFGH物理输入物理输出4.4 总体设计常用的方法及工具结构化设计确定变换中心确定变换中心(主加工主加工)及逻辑输入输出及逻辑输入输出 变换中心是程序的核心功能,它的输入是逻辑变换中心是程序的核心功能,它的输入是逻辑输入,它的输出为逻辑输出。输入,它的输出为逻辑输出。通常几股数据流的汇合处就是系统的变换中心。通常几股数据流的汇合处就是系统的变换中心。介
63、于逻辑输入和逻辑输出之间的加工就是中心介于逻辑输入和逻辑输出之间的加工就是中心 。变换中心ABBCEGGHDFCDEABCDEFGH物理输入物理输出逻辑输入逻辑输出4.4 总体设计常用的方法及工具结构化设计进行一级分解,设计上层模块进行一级分解,设计上层模块 顶层模块顶层模块:其功能就是整个系统的功能;:其功能就是整个系统的功能;一级分解是对顶层的模块进行分解,即导出软一级分解是对顶层的模块进行分解,即导出软件结构的第一层。件结构的第一层。第一层一般至少有输入、变换、输出三种功能第一层一般至少有输入、变换、输出三种功能模块。为每个逻辑输入设计一个模块,为每个模块。为每个逻辑输入设计一个模块,为
64、每个逻辑输出设计一个模块,为变换中心设计一个逻辑输出设计一个模块,为变换中心设计一个变换模块。变换模块。l输入控制模块输入控制模块:接收所有的输入数据;:接收所有的输入数据;l变换控制模块变换控制模块:实现输入到输出的变换;:实现输入到输出的变换;l输出控制模块输出控制模块:产生所有的输出数据。:产生所有的输出数据。顶层模块变换控制输出控制输入控制变换中心ABBCEGGHDFCDEABCDEFGH物理输入物理输出逻辑输入逻辑输出主模块B C输入C输出D输出ECCD,EDE逻辑输入变换中心逻辑输出4.4 总体设计常用的方法及工具结构化设计 设计中下层模块设计中下层模块输入模块下属模块的设计输入模
65、块下属模块的设计l输入模块应有两部分组成:一部分接受输入数输入模块应有两部分组成:一部分接受输入数据,一部分将输入数据加工提供给调用者。据,一部分将输入数据加工提供给调用者。l为每个输入设计两个下属模块,逐层分级直至为每个输入设计两个下属模块,逐层分级直至物理输入。物理输入。输出模块的下属模块设计输出模块的下属模块设计l为每个输出设计两个下属模块,一个将数据转为每个输出设计两个下属模块,一个将数据转换为下属模块所需信息,另一个发送数据。换为下属模块所需信息,另一个发送数据。l逐层分解,直至物理输出逐层分解,直至物理输出 。变换模块的下属模块设计变换模块的下属模块设计l一般按变换中心组成状况,根
66、据模块独立性原一般按变换中心组成状况,根据模块独立性原则,为每个基本加工设计一个模块。则,为每个基本加工设计一个模块。输出HG HABBCEGGHDFCD,EABCDEFGH物理输入物理输出主模块CD,E输入C输出D输出ECCD,EDE输入BBBCBC输入AABABA输出GE G输出FDFDFFEGGGHH输出HG HABBCEGGHDFCD,EABCDEFGH物理输入物理输出主模块CD,E输入C输出D输出ECCD,EDE输入BBBCBC输入AABABA输出GE G输出FDFDFFEGGGHH4.4 总体设计常用的方法及工具结构化设计设计优化设计优化在选择模块设计次序时,不一定沿某一路径直在选
67、择模块设计次序时,不一定沿某一路径直至底层才开始另一模块设计,但必须对一个模至底层才开始另一模块设计,但必须对一个模块的块的所有直接下属模块所有直接下属模块设计完成后才开始另一设计完成后才开始另一模块的设计。模块的设计。尽可能尽可能建立功能模块建立功能模块。功能模块具有最强的内。功能模块具有最强的内聚性,满足信息屏蔽原则。聚性,满足信息屏蔽原则。消除重复功能。若两模块含有重复的部分,应消除重复功能。若两模块含有重复的部分,应设法将重复的功能消去。重复部分有完全相同设法将重复的功能消去。重复部分有完全相同和部分相同的情况,在确定重复部分及实施方和部分相同的情况,在确定重复部分及实施方案时,一定要
68、谨慎小心。案时,一定要谨慎小心。 ABCEDFGH物理输入物理输出物理输出逻辑输入逻辑输出变换中心f1f2f3f4f5f6f7f8f9f10f11主模块IN f3将f3变换成f7和f8OUT f7OUT f8f3f3f7 f8f7f8主模块HOUT f10GOUT f8OUT f9FOUT f7EDC将f3变换为f7和f8AIN f1BIN f2IN f3f3OUT f11f2f2f3f1f1f2f3f7f3f8f4f5f4f6 f8f7f5f6f7f8f7f9f9f11f10f8f10f10f114.4 总体设计常用的方法及工具结构化设计4 事务分析(事务型)事物分析也是从数据流开始,自顶向
69、下,逐步分解,建立事物分析也是从数据流开始,自顶向下,逐步分解,建立系统结构图,与变换分析主要区别在于映射方法不同。系统结构图,与变换分析主要区别在于映射方法不同。确定确定DFD的数据中心和加工路径。的数据中心和加工路径。当当DFD中某个加工具有明显的将一个输入数据流中某个加工具有明显的将一个输入数据流分解成发散的多个输出数据流时,该加工就是系统分解成发散的多个输出数据流时,该加工就是系统的事务中心的事务中心 ,从事务中心辐射出去的数据流就是,从事务中心辐射出去的数据流就是加工路径。加工路径。事务流型的事务流型的DFD的组成:的组成:输入流事务中心若干条活动流输入流事务中心若干条活动流 T输入
70、流事务流活动流4.4 总体设计常用的方法及工具结构化设计设计软件的顶层和第一层设计软件的顶层和第一层事务结构事务结构首先建立主模块(首先建立主模块(P层),代表整个加工。层),代表整个加工。第一层模块包括第一层模块包括3类:类:取得事务取得事务、处理事务处理事务和和输出输出结果结果。其中取得和处理事务构成事务型软件的主要。其中取得和处理事务构成事务型软件的主要部分部分接收分支和发送分支接收分支和发送分支 。接收分支负责接收数据。接收分支负责接收数据。发送分支通常包括一发送分支通常包括一个调度模块,控制下个调度模块,控制下层所有模块活动。调层所有模块活动。调度模块以及所有事务度模块以及所有事务模
71、块、输入输出构成模块、输入输出构成事务层,事务层,T层。层。顶层模块分派接收事务1事务2事务n4.4 总体设计常用的方法及工具结构化设计设计中下层模块并优化设计中下层模块并优化事务模块下层包括操作层(事务模块下层包括操作层(A层)、细节层层)、细节层(D层)。层)。不同的事务可能有相同的操作,不同的操作可不同的事务可能有相同的操作,不同的操作可能有相同的细节,所以存在共享模块。能有相同的细节,所以存在共享模块。构造时注意如下问题:构造时注意如下问题:l事务源的识别;事务源的识别;l注意利用公共模块;注意利用公共模块;l建立必要的事务处理模块;建立必要的事务处理模块;l下层操作和细节模块的共享;
72、下层操作和细节模块的共享;l结构图的形式。结构图的形式。IOLMNABCDEFGH主模块调度输入A输出HMLN操作2操作1操作3操作4操作5细节1细节2细节3细节4细节5细节6细节7P层T层A层D层AHBE CF DG4.4 总体设计常用的方法及工具JACKSON JACKSON 法法p4.4.2 面向数据结构的分析设计方法面向数据结构的分析设计方法JACKSON 法法(1)JACKSON方法简介JACKSON 系统开发方法是一种典型的面向数据系统开发方法是一种典型的面向数据结构的分析与设计方法。由英国的结构的分析与设计方法。由英国的M.Jackson提出,提出,该方法特别适合于数据处理类的问
73、题,如企事业该方法特别适合于数据处理类的问题,如企事业管理一类的软件系统。管理一类的软件系统。4.4 总体设计常用的方法及工具JACKSON JACKSON 法法许多应用系统中都有清楚的层次结构,其数据结许多应用系统中都有清楚的层次结构,其数据结构既影响程序的结构又影响程序的处理过程。构既影响程序的结构又影响程序的处理过程。Jackson方法把问题分解为可由三种基本结构形式方法把问题分解为可由三种基本结构形式表示的各部分的层次结构,即表示的各部分的层次结构,即顺序顺序、选择选择和和重复重复。三种数据结构可以进行组合,形成复杂的结构体三种数据结构可以进行组合,形成复杂的结构体系。系。从目标系统的
74、输入、输出数据结构入手,导出程从目标系统的输入、输出数据结构入手,导出程序框架结构,再补充其它细节,得到完整的程序序框架结构,再补充其它细节,得到完整的程序结构图。结构图。4.4 总体设计常用的方法及工具JACKSON JACKSON 法法(2) JACKSON图Jackson 方法用图形描述数据结构和程序结构方法用图形描述数据结构和程序结构,这种图形称为这种图形称为 Jackson 图。图。Jackson 图既可用图既可用来描述问题的数据结构,也可用于描述每个实来描述问题的数据结构,也可用于描述每个实体执行的动作及其时序,产生一组描述实体进体执行的动作及其时序,产生一组描述实体进程的程的 J
75、ackson 结构图。数据结构图中的方框表结构图。数据结构图中的方框表示数据,程序结构图中的方框表示模块示数据,程序结构图中的方框表示模块(过程过程或函数等或函数等)。 4.4 总体设计常用的方法及工具JACKSON JACKSON 法法程序中实际使用的数据结构种类繁多,但其数程序中实际使用的数据结构种类繁多,但其数据元素之间的逻辑关系却只有顺序、选择和重据元素之间的逻辑关系却只有顺序、选择和重复三种。复三种。ABCD顺序,每个元素出现一次,顺序是B、C、DABCD选择结构,根据条件确定出现顺序是B或C或DAB*重复结构4.4 总体设计常用的方法及工具JACKSON JACKSON 法法改进的
76、改进的Jackson图。上述图形表达选择或重复结构时,图。上述图形表达选择或重复结构时,条件不能直接表示,影响了图的表达能力。改进的条件不能直接表示,影响了图的表达能力。改进的Jackson图允许将连线画为直线,对于选择和重复结构,图允许将连线画为直线,对于选择和重复结构,在连线旁标明条件,在连线旁标明条件,S表示选择,表示选择,I表示重复。表示重复。ABCD顺序结构,BCD不可为选择或重复元素ABCD选择结构,S(i)中i 为分支事件编号S(i)AB*重复结构,循环结束条件编号为iI(i)AB_S(i)可选结构,或者是B,或者不出现4.4 总体设计常用的方法及工具JACKSON JACKSO
77、N 法法Jackson伪代码伪代码(1)顺序结构关键字:seq,endA seqBCDA end(2)选择结构关键字:select,or,endcond1、cond2、cond3分别表示条件A select cond 1BA or cond 2CA or cond 3DA end(3)重复结构关键字:iter,until,while,enduntil和while两种形式A iter until condBA endA iter while condBA end4.4 总体设计常用的方法及工具JACKSON JACKSON 法法Jackson图示例图示例按如下表格格式,设计打印表格程序。按如下表
78、格格式,设计打印表格程序。“状态状态”这一项,如果类别是老师,打印工龄;类别这一项,如果类别是老师,打印工龄;类别是学生,打印年级。是学生,打印年级。姓名姓名年龄年龄类别类别状态状态表格表头表体行*姓名类别年龄状态工龄年级产生表格产生表头产生表体产生行*产生姓名产生类别产生年龄产生状态产生工龄产生年级表示数据结构表示程序结构4.4 总体设计常用的方法及工具JACKSON JACKSON 法法(3)Jackson方法的一般步骤分析并确定输入数据结构和输出数据结构的逻辑结构,并用分析并确定输入数据结构和输出数据结构的逻辑结构,并用Jackson图描述这些数据结构。图描述这些数据结构。找出与输入和输
79、出数据结构有对应关系的数据单元。找出与输入和输出数据结构有对应关系的数据单元。使用下面三条规则从描述数据结构的使用下面三条规则从描述数据结构的Jackson图导出描述程序图导出描述程序结构结构Jackson图。图。对有对应关系的数据单元在程序结构的相应层次画一个处理对有对应关系的数据单元在程序结构的相应层次画一个处理框。框。对于输入数据结构中剩余的数据单元按它们所在的层次在程对于输入数据结构中剩余的数据单元按它们所在的层次在程序结构中画出相应的处理框。序结构中画出相应的处理框。对于输出数据结构中剩余的数据单元按它们所在的层次在程对于输出数据结构中剩余的数据单元按它们所在的层次在程序结构中画出相
80、应的处理框。序结构中画出相应的处理框。列出所有的操作和条件并把它们分配到程序结构的适当位置。列出所有的操作和条件并把它们分配到程序结构的适当位置。用伪码表示程序。用伪码表示程序。4.4 总体设计常用的方法及工具JACKSON JACKSON 法法(4)Jackson方法实例一个正文文件由若干个记录组成,每个记录是一个字符串。要求统计每个记录中空格字符的个数,以及文件中空格字符的总个数。要求的输出数据格式是,每复制一行输入字符串之后,另起一行印出这个字符串中的空格数,最后印出文件中空格的总个数。4.4 总体设计常用的方法及工具JACKSON JACKSON 法法确定输入输出数据结构,表示输入输出
81、数据结构的确定输入输出数据结构,表示输入输出数据结构的Jackson图图正文文件字符串*字符*空格非空格输出表格表格体串信息*字符串空格数空格总数IISI4.4 总体设计常用的方法及工具JACKSON JACKSON 法法分析确定在输入数据结构和输出数据结构中有对应分析确定在输入数据结构和输出数据结构中有对应关系的数据单元。在这个例子中:关系的数据单元。在这个例子中:输出数据总是通过对输入数据的处理而得到的,因此输出数据总是通过对输入数据的处理而得到的,因此在输入输出数据结构最高层次的两个单元总是有对应关在输入输出数据结构最高层次的两个单元总是有对应关系的。即经过程序的处理由正文文件得到输出表
82、格。系的。即经过程序的处理由正文文件得到输出表格。每处理输入数据中一个每处理输入数据中一个“字符串字符串”之后,就可以得到之后,就可以得到输出数据中一个输出数据中一个“串信息串信息”,它们都是重复出现的数据,它们都是重复出现的数据单元,而且出现次序和重复次数都完全相同,因此,单元,而且出现次序和重复次数都完全相同,因此,“字符串字符串”和和“串信息串信息”也是一对有对应关系的单元。也是一对有对应关系的单元。考察输入数据结构中余下的数据单元。考察输入数据结构中余下的数据单元。“字符字符”不可不可能和多个字符组成的能和多个字符组成的“字符串字符串”对应,和输出数据结构对应,和输出数据结构中其他数据
83、单元也不能对应。单个空格并不能决定一个中其他数据单元也不能对应。单个空格并不能决定一个记录中包含的空格个数,因此没有对应关系。在这个例记录中包含的空格个数,因此没有对应关系。在这个例子中输入输出数据结构中只有上述两对有对应关系的单子中输入输出数据结构中只有上述两对有对应关系的单元。元。4.4 总体设计常用的方法及工具JACKSON JACKSON 法法数据结构图导出程序结构图。数据结构图导出程序结构图。顶层处理与顶层处理与“正文文件正文文件”和和“输出表格输出表格”这对最顶层这对最顶层的数据单元相对应。的数据单元相对应。程序结构图的第二层应该有与程序结构图的第二层应该有与“表格体表格体”、“空
84、格总空格总数数”对应的处理框对应的处理框“程序体程序体”和和“印总数印总数”。第三层与第三层与“字符串字符串”和和“串信息串信息”相对应的处理框相对应的处理框“处理字符串处理字符串”。第四层是和第四层是和“字符串字符串”、“字符字符”及及“空格数空格数”等数等数据单元对应的处理框据单元对应的处理框“印字符串印字符串”、“分析字符分析字符”及及“印空格数印空格数”,这,这3个处理是顺序执行的。但是,个处理是顺序执行的。但是,“字符字符”是重复出现的数据单元,因此是重复出现的数据单元,因此“分析字符分析字符”也应该是也应该是重复执行的处理。改进的重复执行的处理。改进的Jackson图规定顺序执行的
85、处图规定顺序执行的处理中不允许混有重复执行或选择执行的处理,所以在理中不允许混有重复执行或选择执行的处理,所以在“分析字符分析字符”这个处理框上面又增加了一个处理框这个处理框上面又增加了一个处理框“分析分析字符串字符串”。4.4 总体设计常用的方法及工具JACKSON JACKSON 法法描绘统计空格程序结构的描绘统计空格程序结构的Jackson图图统计空格程序体处理字符串*印字符串分析字符串印总数I印空格数处理空格处理非空格分析字符IS4.4 总体设计常用的方法及工具JACKSON JACKSON 法法列出所有操作和条件,并且把它们分配到程序结构列出所有操作和条件,并且把它们分配到程序结构图
86、的适当位置。图的适当位置。首先,列出统计空格个数需要的全部操作和条件。首先,列出统计空格个数需要的全部操作和条件。l1)停止)停止l3)关闭文件)关闭文件l5)印空格数目)印空格数目l7)sum:=0l9)读入字符串)读入字符串l11)totalsum:= totalsum +suml12)pointer:=1lI(1)文件结束文件结束 I(2)字符串结束字符串结束 S(3)字符为空格字符为空格经过简单分析把这些操作和条件分配到程序结构图的经过简单分析把这些操作和条件分配到程序结构图的适当位置。适当位置。l2)打开文件)打开文件l4)印字符串)印字符串l6)印空格总数)印空格总数l8)tota
87、lsum:=0l10)sum:=sum+1l13)pointer:=pointer+14.4 总体设计常用的方法及工具JACKSON JACKSON 法法用伪码表示程序处理过程。因为用伪码表示程序处理过程。因为Jackson使用的伪码使用的伪码和和Jackson图之间存在简单的对应关系,所以从很容易图之间存在简单的对应关系,所以从很容易得出程序伪码。得出程序伪码。统计空格seq 打开文件 读入字符串 totalsum=0 程序体iter until文件结束 处理字符串seq 印字符串seq 印出字符串 印字符串end sum=0 pointer=1 分析字符串iter until字符串结束 分
88、析字符select字符是空格 处理空格seq sum=sum+1 pointer=pointer+1 处理空格end 分析字符or字符不是空格 处理非空格seq pointer=pointer+1 处理非空格end 分析字符end 分析字符串end 印空格数seq 印出空格数目 印空格数end totalsum=totalsum+sum 读入字符串 处理字符串end 程序体end 印总数seq 印出空格总数 印总数end 关闭文件 停止统计空格end4.4 总体设计常用的方法及工具JACKSON 法描绘统计空格程序结构的描绘统计空格程序结构的Jackson图图统计空格程序体处理字符串*印字符串
89、分析字符串印总数I印空格数处理空格处理非空格分析字符IS统计空格程序体处理字符串*印字符串分析字符串印总数I(1)印空格数处理空格处理非空格分析字符I(2)S(3)13491121361210987134.5 数据库设计p4.5.1 数据库设计概述数据库设计概述数据库设计是在现成的数据库管理系统上建立数据库应用系统的过程,它是管理信息系统设计开发的重要组成部分。数据库设计包含了数据库结构的设计和应用程序、事务处理的设计两方面的内容。数据库应用系统设计分为数据库设计和应用程序设计两部分,设计中的中心问题是数据库设计,因而数据库应用系统设计有时简称为数据库设计。4.5 数据库设计p4.5.2 软件
90、工程分步设计软件工程分步设计数据库的设计过程可分为六个阶段:系统规划需求分析阶段系统规划需求分析阶段概念设计阶段概念设计阶段逻辑设计阶段逻辑设计阶段数据库物理设计阶段数据库物理设计阶段数据库实施阶段数据库实施阶段数据库的运行维护阶段数据库的运行维护阶段分析系统需求设计概念结构设计逻辑结构优化数据模型决策评价决策评价设计物理结构决策评价实施数据库使用维护数据库6、数据库运行和维护阶段5、数据库实施阶段4、数据库物理结构设计阶段3、逻辑结构设计阶段1、系统需求分析阶段2、概念结构设计阶段单位或组织数据库的逻辑设计数据库的行为设计分析用户需求E-R模型设计逻辑模式设计分析用户需求模块功能说明编写程序
91、代码存储结构的选择属性的确定索引的确定数据库的物理设计加载实验数据并调试运行应用程序的调试、运行与维护满意?不是加载数据库数据库系统的运行与维护不概念设计阶段需求分析阶段熟悉业务活动明确用户需求确定系统边界分析系统功能分析系统数据编写分析报告调查机构情况数据字典数据流程图用户活动图用户数据库设计人员p用户活动图用户活动图生产部门生产部门选择查询的项目查询产品性能查询零件用料查询零件一览表输出查询结果输出查询结果输出零件一览表编制零件生产计划生产查询产品性能表零件用料表零件一览表p用户活动图用户活动图供应部门供应部门选择查询的项目查询产品价格查询产品用料查询材料价格及库存量输出查询结果输出查询结
92、果输出查询结果供应查询产品价格表产品用料表材料价格与库存表接受检查产品的数据缺料查询产生缺料清单编制材料订货计划p数据流程图数据流程图缺料查询缺料查询产品数据:产品名,(生产)数量产品用料表:产品名,材料名,(材料)用量材料库存:材料名,库存量缺料清单:材料名,缺料数量产品数据产品用料表材料库存接受查询数据缺料查询请求计算产品用料计算缺料缺料清单逻辑设计阶段概念设计阶段合并取消冲突修改重构消除冗余数据字典数据流程图功能模块图需求分析阶段抽象数据设计局部视图局部E-R图初步E-R图基本E-R图pE-R图实例图实例职工号姓名性别年龄职称书号书名简介价格课程名学分课程号专业系班编号成绩学员学号姓名性
93、别年龄教师参考书讲授课程mn1选修mn领导1n学生组成班级n1实体集实体集联系联系属性属性产品零件产品号产品名性能零件号零件名材料名组装mn耗用量零件数选择查询的项目查询产品性能查询零件用料查询零件一览表输出查询结果输出查询结果输出零件一览表编制零件生产计划生产查询产品性能表零件用料表零件一览表局部E-R图生产部门产品材料产品号产品名价格材料号材料名价格使用mn库存量使用量仓库选择查询的项目查询产品价格查询产品用料查询材料价格及库存量输出查询结果输出查询结果输出查询结果供应查询产品价格表产品用料表材料价格与库存表接受检查产品的数据缺料查询产生缺料清单编制材料订货计划局部E-R图供应部门局部E-
94、R模型供应部门(改进)产品仓库产品号产品名价格仓库号仓库名地点使用mn电话使用量存放量材料材料号材料名价格存放mn产品材料产品号产品名价格材料号材料名价格使用mn库存量使用量仓库初步E-R模型产品零件仓库材料组装消耗存放产品号产品名价格性能使用用量材料号材料名价格存放量仓库号仓库名地点电话零件号零件名零件数消耗量1mmmnnnn产品零件产品号产品名性能零件号零件名材料名组装mn耗用量零件数产品仓库产品号产品名价格仓库号仓库名地点使用mn电话使用量存放量材料材料号材料名价格存放mn总体总体E-RE-R模型模型( (改进改进) )产品零件仓库材料组装消耗存放产品号产品名价格性能材料号材料名价格存放
95、量仓库号仓库名地点电话零件号零件名零件数消耗量1mmnnn物理设计阶段逻辑结构设计阶段模式优化设计用户子模式概念设计阶段转化为数据模型关系规范化逻辑模型基本E-R图实体向关系模式的转换实体向关系模式的转换产品(产品号,产品名,性能,价格)零件(零件号,零件名)材料(材料号,材料名,价格)仓库(仓库号,车库名,地点,电话)产品零件仓库材料组装消耗存放产品号产品名价格性能材料号材料名价格存放量仓库号仓库名地点电话零件号零件名零件数消耗量1mmnnn联系向关系模式的转换联系向关系模式的转换产品零件一览表(产品号,零件号,零件数量)零件用料表(零件号,材料名,消耗量)材料存放表(材料号,仓库号,存放量
96、)产品零件仓库材料组装消耗存放产品号产品名价格性能材料号材料名价格存放量仓库号仓库名地点电话零件号零件名零件数消耗量1mmnnn实施阶段数据库物理设计阶段逻辑设计阶段确定数据库的物理结构评价数据库的物理结构物理模型逻辑模型p数据库物理设计数据库物理设计 属性的存储类型的确定不同不同DBMS系统的数据类型稍微有点区别,因此需要系统的数据类型稍微有点区别,因此需要针对不同的针对不同的DBMS来确定属性的存储类型。来确定属性的存储类型。数据库管理系统提供的数据库设计工具就具有设计属数据库管理系统提供的数据库设计工具就具有设计属性的存储类型的功能,如性的存储类型的功能,如Visual FoxPro、A
97、CCESS、SQL Server等都提供可视化的设计。等都提供可视化的设计。表的索引结构的确定存取路径的确定存储过程、触发器的设计数据库的备份和维护方案p数据库的实现数据库的实现该阶段主要完成以下三项工作:(1)建立实际数据库结构。)建立实际数据库结构。 (2)装入试验数据对应用程序进行调试。)装入试验数据对应用程序进行调试。 (3)装入实际数据,进入试运行状态。)装入实际数据,进入试运行状态。 p数据库的运行与维护数据库的运行与维护运行维护阶段的主要任务如下: (1)对日常数据库操作进行维护)对日常数据库操作进行维护 (2)维护数据库的结构)维护数据库的结构 (3)维护数据库的安全性与完整性
98、)维护数据库的安全性与完整性 (4)监测并改善数据库运行性能)监测并改善数据库运行性能 (5)根据用户要求对数据库现有功能进行扩充)根据用户要求对数据库现有功能进行扩充 (6)及时改正运行中发现的系统错误)及时改正运行中发现的系统错误p编写系统说明书编写系统说明书系统说明书主要由数据流图和数据字典组成。它用来表达用户对系统的要求,软件人员根据“系统说明书”进行数据库的构造和应用程序的设计。 p编写技术说明书编写技术说明书技术说明书主要包括如下内容:(1)用户活动图、数据流图和数据字典。)用户活动图、数据流图和数据字典。(2)局部)局部E-R图和总体图和总体E-R图。图。(3)对于层次和网状数据类型应指出各种记录型及其联系,指)对于层次和网状数据类型应指出各种记录型及其联系,指出关键字。对于关系数据类型,应指出关系模式、关系模式之间出关键字。对于关系数据类型,应指出关系模式、关系模式之间的联系、关系的关键字。的联系、关系的关键字。(4)在数据库设计阶段产生的每个表格的名称、字段的属性、)在数据库设计阶段产生的每个表格的名称、字段的属性、索引的名称和索引字段(或索引表达式)索引的名称和索引字段(或索引表达式)(5)应用程序的总体结构框图,各主要模块的流程图,详细的)应用程序的总体结构框图,各主要模块的流程图,详细的程序代码。程序代码。本 章 完 成