《(计算机)总体设计.ppt》由会员分享,可在线阅读,更多相关《(计算机)总体设计.ppt(133页珍藏版)》请在三一办公上搜索。
1、第四章 总体设计,第四章 总体设计,4.1 总体设计的任务4.2 总体设计的概念和原理4.3 设计准则4.4 总体设计常用的方法和工具4.5 数据库设计,4.1 总体设计的任务,软件设计软件设计的任务是从软件需求规格说明书出发,形成软件的具体设计方案,即将需求模型转换为软件设计。软件设计是一个把软件需求变换成软件表示的过程,即根据需求分析的“做什么”,确定系统应该“怎么做”。软件设计的结果是软件设计规格说明书。软件设计是后续开发步骤及软件维护工作的基础。从技术观点来看,软件设计包括数据设计、体系结构设计、接口设计、过程设计。通常将软件设计分为总体设计(概要设计)和详细设计(过程设计)两个阶段。
2、,软件设计是后续开发步骤及软件维护工作的基础。如果没有设计,只能建立一个不稳定的系统结构。,4.1 总体设计的任务,4.1 总体设计的任务,总体设计阶段,具体任务如下:(1)制定规范为软件开发组制定设计时应共同遵守的标准。以便协调组内各成员工作。通常包括:阅读理解软件需求说明书,确认用户需求能否实现,进而确定设计目标及其优先级。根据目标确定最合适的方案。规定设计文档编制标准,包括文档体系、用纸及排版样式、记述的详细途径、图形画法等。规定编码的信息形式(代码体系)、与硬件/操作系统的接口规约等。制定编程规范,如命名规则、注释要求、质量保证要求、可读性要求、测试要求等。,4.1 总体设计的任务,(
3、2)软件系统结构设计软件系统结构设计即确定组成系统的程序及相互关系。具体内容为:采用某种方法,将复杂系统按功能划分成模块。确定每个模块的功能。确定模块之间的调用关系。确定模块之间的接口,即模块之间传递的信息。评价模块结构的质量。软件结构设计是以模块为基础的,需求分析阶段,已经把系统分解为层次结构,设计阶段要实现进一步的模块划分,并组成模块的层次结构。,4.1 总体设计的任务,(3)数据结构及数据库设计数据结构设计需求分析阶段,通过数据字典对数据的组成、操作约束、相互关系等方面进行描述,确定了数据的结构特征。数据结构设计主要对数据字典的组成、操作约束、数据之间的相互关系等方面进行描述,确定数据的
4、结构特征。,4.1 总体设计的任务,数据库设计概念结构设计:及数据库的概念模式设计,一般指构造实体关系模型(E-R,Entity-Relationship)模型。逻辑结构设计:将E-R模型转换为DBMS支持的关系模型。物理结构设计:设计数据库的物理细节,如存储形式、路径等。,4.1 总体设计的任务,(4)可靠性设计质量设计,设计时考虑软件可靠性及其他质量指标,确保软件质量,易于修改维护。(5)编写概要设计文档概要设计说明书:集中于软件结构描述。数据库设计说明书:主要内容为DBMS的选择、简介、数据库概念模型、逻辑设计结果等。用户手册:对需求阶段编写的用户手册进行补充完善。测试文档:修改需求分析
5、阶段编写的测试文档,对测试策略、方法、步骤提出明确说明。(6)设计审查和复审对总体设计结果进行严格的技术审查,通过后再从管理角度进行严格审查。,4.2 总体设计的基本原理,4.2.1 软件结构和过程,总体设计主要是结构设计,而详细设计是过程设计。理解结构和过程的差别和特点,是进行软件设计的前提。,结构软件结构是软件要求的各个元素及其相互关系的描述。一般软件元素就是一些功能模块,通过调用关系,组合到一起即得到软件结构。最普通的结构是树状结构和网状结构。,4.2 总体设计的基本原理,树状结构中,整个系统只有一个顶层模块,下层模块只有一个上层模块,同一层模块之间不发生联系。网状关系中,模块关系平等,
6、自由调用。网状关系模块之间联系的随意性使得系统结构复杂,难于处理,所以实际中一般采用树状结构。,4.2 总体设计的基本原理结构,软件求解问题软件结构由问题定义开始导出,当问题划分的各部分,分别由一个或多个软件模块解决的时候,也就得到了软件结构。这个过程代表了软件需求分析到设计的转换。,4.2 总体设计的基本原理结构,不同结构的解法,4.2 总体设计的基本原理,结构的度量和术语,4.2 总体设计的基本原理过程,过程软件结构隐含着控制层次的关系,但并不表示软件过程关系,不考虑处理和判断的顺序。,软件过程集中考虑每个模块各自的处理细节。过程必须提供一个精确的处理规格说明,包括事件顺序、精确的判定、重
7、复的操作、以及数据组织结构等。(详细设计阶段的工作),4.2 总体设计的基本原理模块化,4.2.2 模块化模块(Module),又称“构件”,一般指程序中的数据说明、可执行语句等程序对象的集合,还可以是单独命名和编址的元素,如高级语言中的过程、函数、子程序、类等。在软件的体系结构中,模块是可组合、分解和更换的单元,一般有如下基本属性:接口:指模块的输入与输出。功能:模块实现的功能,应注意这里的功能是模块本身的功能和它调用的所有子模块功能的集合。逻辑:描述内部如何实现要求的功能及所需数据。状态:该模块的运行环境,即该模块的调用与被调用关系。,模块化是将系统划分为若干个模块,每个模块完成一个子功能
8、。模块化的目的是将系统“分而治之”,因此能够降低问题的复杂性,使软件结构清晰,易阅读、易理解,易于测试和调试,因而也有助于提高软件的可靠性。,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 后,其工作量和复杂度都降低。但并非模块分得越小越好。模块数越多,模块之间接口的复杂度和
9、工作量增加。所以模块化并非将系统划分为尽量多的模块,而是要求在模块化的过程中,同时考虑减少接口复杂性,提高模块独立性,有效降低软件的复杂度。,4.2 总体设计的基本原理模块化,(2)抽象与逐步求精抽象抽象是从众多的事物中抽取出共同的、本质性的特征,而舍弃其非本质的特征。共同特征是指那些能把一类事物与他类事物区分开来的特征,又称本质特征。抽取事物的本质特征,舍弃不同特征。软件工程过程中的每一步部可以看作是对软件解决方法的抽象层次的一次细化。系统定义阶段,将软件作为系统一个完整部件进行描述。需求分析期间,使用在问题环境中熟悉的方式几术语来描述。软件设计时,抽象与逐步求精、模块化密切相关,由抽象到具
10、体地分析和构造出软件的层次结构。编写出原程序后,达到了抽象的最底层。,4.2 总体设计的基本原理模块化,逐步求精逐步求精是人类解决复杂问题的又一基本方法。George Miller有项心理学法则(1956):“魔术数字7加减2”,指出人一次能处理或记忆的资讯大概只有七项,多了也记不住,反而模糊了焦点。将现实问题经过几次抽象(细化)处理,最后到求解域中只是一些简单的算法描述和算法实现问题。即将系统功能按层次进行分解,每一层不断将功能细化,到最后一层都是功能单一、简单易实现的模块。在搞抽象级别定义功能陈述,并不涉及功能内部实现及信息细节,设计者对陈述进行细化,逐步求精提供越来越多的细节,直至得到用
11、程序语言表达的程序。,4.2 总体设计的基本原理模块化,(3)信息隐蔽与局部化信息隐蔽指在设计模块时,应该使模块内包含的信息(过程和数据)对于不需要这些信息的模块来说,是不能访问的。局部化指把一些关系密切的软件元素物理的放得彼此靠近。显然,局部化有助于实现信息隐蔽。,使用信息隐蔽原理作为模块化系统设计的标准使得独立模块之间仅仅交换为完成系统功能而必须交换的信息,而绝大多数数据和过程对于软件其他部分而言是隐蔽的,因此在修改期间由于疏忽而引入的错误传播到软件的其他部分的可能性就很小。,4.2 总体设计的基本原理模块化,(4)模块独立模块独立的概念是模块化、抽象、信息隐蔽的局部化概念的直接结果。模块
12、的独立程度可以用内聚和耦合这两标准来衡量。模块独立是优秀软件设计的关键,设计是决定软件质量的关键。,开发具有独立功能而且和其他模块之间没有过多的相互作用的模块,就可以做到模块独立。这样做有两个好处:第一,有效的模块化(即具有独立的模块)的软件比较交易开发出来,这是由于能够将功能分割而且接口可以简化;第二,独立的模块比较容易测试和维护。这是因为相对来说,修改设计和程序所需要的工作量较小,错误传播范围小,而且需要扩充功能时能够“插入”模块。,4.2 总体设计的基本原理耦合,(5)耦合耦合性是指软件结构中模块相互连接的紧密程度,是模块间相互连接性的度量。方式块间联系方式有“直接引用”或“过程语句调用
13、”。显然直接引用方式块间联系紧密。作用块间传送的共用信息(参数),可为“数据型”、“控制型”或“混合型”(数据/控制型),控制型信息使块间联系增高。数量块间传送的共用信息的数量越大,块间联系越紧密。,4.2 总体设计的基本原理耦合,耦合强弱取决于模块间接口的复杂程度,进入或访问一个模块的点,以及通过接口的数据。一般模块之间可能的连接方式有七种,构成七种耦合:,4.2 总体设计的基本原理耦合,非直接耦合(Non-direct coupling)两个模块之间没有直接关系,它们之间的联系完全是通过主模块的控制和调用来实现的,这就是非直接耦合。模块从属于不同的模块控制或调用;耦合程度最低,独立性最强。
14、,4.2 总体设计的基本原理耦合,数据耦合(Data Coupling)模块调用时,通过参数表(不是控制参数、公共数据结构或外部变量)来传递简单数据,则称这种耦合为数据耦合。界面简单、安全可靠,属松散耦合,模块之间独立性强。画直线的命令LINE:,p0(x0,y0)p1(x1,y1),数据耦合 LINE(x0,y0,x1,y1),4.2 总体设计的基本原理耦合,标记耦合(Stamp Coupling)模块调用时,传递记录是某一数据结构的子结构,而不是简单变量,为标记耦合。是数据耦合的变形,要求两个模块都要清楚数据结构,并按规定要求进行操作。设计中要尽量避免标记耦合,可将统一数据结构操作集中在同
15、一模块中。,4.2 总体设计的基本原理耦合,控制耦合(Control coupling)一个模块通过传送开关、标志、名字等控制信息,明显地控制选择另一模块的功能。实质是在单一接口上选择多功能模块中的某项功能。所以对被控制模块的任何修改,都会影响控制模块。控制耦合也意味着控制模块必须知道所控制模块内部的一些逻辑关系,这些都会降低模块的独立性。,4.2 总体设计的基本原理耦合,外部耦合(External coupling)一组模块都访问同一全局简单变量而不是同一全局数据结构,而且不是通过参数表传递该全局变量的信息,则称之为外部耦合。外部耦合引起的问题类似于公共耦合,区别在于在外部耦合中不存在依赖于
16、一个数据结构内部各项的物理安排。,4.2 总体设计的基本原理耦合,公共耦合(Common coupling)若一组模块都访问同一个公共数据环境,则它们之间的耦合就称为公共耦合。公共的数据环境可以是全局数据结构、共享的通信区、内存的公共覆盖区等。这种耦合会引起下列问题若修改公共数据环境某个数据,会影响到所有公共耦合模块。无法控制各模块对公共数据的存取,严重影响软件模块的可靠性和适应性。公共数据名的使用,明显降低了程序的可读性。,4.2 总体设计的基本原理耦合,公共耦合的复杂程度随耦合模块的个数增加而显著增加。若一个模块只是往公共数据环境里传送数据,而另一个模块只是从公共数据环境中取数据,则这种公
17、共耦合叫做松散公共耦合。若两个模块都从公共数据环境中读写数据,则这种公共耦合叫做紧密公共耦合。,4.2 总体设计的基本原理耦合,内容耦合(Content coupling)如果发生下列情形,两个模块之间就发生了内容耦合:一个模块直接访问另一个模块的内部数据;一个模块不通过正常入口转到另一模块内部;两个模块有一部分程序代码重叠(只可能出现在汇编语言中);一个模块有多个入口,4.2 总体设计的基本原理耦合,在内容耦合的情形,所访问模块的任何变更,或者用不同的编译器对它再编译,都会造成程序出错。大多数高级程序设计语言已经设计成不允许出现内容耦合。它一般出现在汇编语言程序中。这种耦合是模块独立性最弱的
18、耦合。,4.2 总体设计的基本原理耦合,影响耦合度的因素连接方式的类型直接的控制和调用(模块间关系明确,独立性最强);间接的通过参数传递;公共数据区(全局变量;公共数据环境);模块的直接引用,直接引用其他模块内部的数据或控制指令。(耦合度最强),4.2 总体设计的基本原理耦合,接口的复杂性接口间传递的信息数量、以及穿越接口次数和类型决定了接口的复杂性。例如,M个模块共享N个数据区,则可能产生M(M-1)N个联系,修改一处需要考虑许多模块。,几种耦合的比较,4.2 总体设计的基本原理聚合,(6)内聚(Cohesion)内聚性也称块内联系,指模块的功能强度的度量,即一个模块内部各个元素彼此结合的紧
19、密程度的度量。若一个模块内各元素(语句之间、程序段之间)联系的越紧密,则它的内聚性就越高。一般情况下,模块内元素的联系可能有7种情况,构成7种不同的内聚:,4.2 总体设计的基本原理聚合,偶然内聚(Coincidental Cohesion)指一个模块内的各处理元素之间没有有意义的联系。当几个模块内正好有一段代码是相同的,将它们抽取出来形成单独的模块,即巧合内聚模块。这种模块没有独立功能,各部分之间没有联系,或联系很松散。例如,为了节省存储,把一些无联系的处理序列抽出来组成一个新的模块,这个模块就属于偶然内聚。这样的模块不易理解也不易修改,这是最差的内聚情况。,4.2 总体设计的基本原理聚合,
20、逻辑内聚(Logical Cohesion)指模块内执行几个逻辑上相似的功能,通过参数确定该模块完成哪一个功能。调用时需要进行控制参数的传递,造成模块间的控制耦合,调用此模块时,不用的部分也占据了主存,降低了系统效率。如错误处理,将各种类型错误的信息输出放在一起,构成单入口多功能模块。,4.2 总体设计的基本原理聚合,时间内聚(Classical Cohesion)又称为经典内聚。把需要同时执行的动作组合在一起形成时间内聚模块。如初始化一组变量,同时打开若干文件,同时关闭文件等,都与特定时间有关。时间内聚模块往往与其他模块联系的比较紧密。如初始化模块对许多模块的运行有影响,因此和其他模块耦合的
21、程度较高。例如,初始化模块和终止模块就是时间内聚模块。,4.2 总体设计的基本原理聚合,过程内聚(Procedural Cohesion)如果一个模块内处理是相关的,且必须以特定次序执行,则称其为过程内聚模块。以过程为基础的结构设计可能导致结果的高度可变性,选择不当则不能完成独立任务,也无法在新系统中使用。例如,把流程图中的循环部分、判定部分、计算部分分成三个模块,这三个模块都是过程内聚模块。,4.2 总体设计的基本原理聚合,通信内聚(Communication Cohesion)若一个模块内部各功能部分都使用了相同的输入数据,或者产生了相同的输出数据,则称之为通信内聚模块。通常,通信内聚模块
22、是通过数据流图来定义的。模块内各个功能是紧密相连的。通信内聚模块内包含了很多独立的功能,但由于各部分功能使用相同的输入/输出缓冲区,效率下降。,4.2 总体设计的基本原理聚合,数据流图中的通信内聚,4.2 总体设计的基本原理聚合,信息内聚(Informational Cohesion)信息内聚模块完成多个功能,各个功能相互独立但都在同一数据结构上操作,每一项功能有一个唯一的入口点。这个模块将根据不同的要求,确定该执行哪一个功能。信息内聚将数据结构、资源或设备隐藏在一个模块内,达到信息隐蔽,独立性较强。信息内聚模块可以看成是多个功能内聚模块的组合,并且达到信息的隐蔽。,4.2 总体设计的基本原理
23、聚合,初始化,插入,删除,查找,修改,4.2 总体设计的基本原理聚合,功能内聚(Functional Cohesion)是最强的内聚,指模块内所有元素共同完成一个功能,缺一不可。因此,模块不能再分割。功能内聚的模块易理解、易修改,因为它的功能是明确的、单一的,因此与其他模块的耦合是弱的。功能内聚的模块有利于实现软件的重用,从而提高软件开发的效率。,4.2 总体设计的基本原理,耦合性与内聚性是模块独立性的两个定性标准,将软件系统划分模块时,尽量做到高内聚低耦合,提高模块的独立性,为设计高质量的软件结构奠定基础。内聚和耦合性是相互关联的,一般情况下,程序结构中各模块内聚程度越高,模块间耦合性就越低
24、,但也不是绝对的。总体设计的目的是尽量实现模块的高内聚、低耦合,但也有内聚性与耦合性发生矛盾的时候,为了提高内聚性而可能使耦合性变差,在这种情况下,建议给予耦合性以更高的重视。,4.3 设计准则,软件概要设计包括模块的划分和结构的定义。目标是产生一个模块化的程序结构,并明确模块之间的控制关系,以及定义界面、说明程序的数据,进一步调整程序结构和书数据结构。在进行软件结构设计时,应采用模块化、抽象和信息隐藏,并遵循模块独立性原则。下面介绍一些具体的改进软件设计、提高软件质量的准则。这些准则是今后软件结构设计、求精和复查的依据。,4.3 设计准则,1 模块划分时应保持模块独立性划分时,应保持模块的相
25、对独立性。相关部分划分在一起,不相关不要放在一起;设计出初始软件结构后,应对该结构进行审查分析,通过模块分解与合并,显著改进软件结构,提高内聚,降低耦合。,4.3 设计准则,2 模块大小要适中模块过大,说明分解不够,不易理解;模块过小。数目会增多,系统接口会变得复杂。一般来说,模块的大小以50行左右的高级语言程序量为宜。心理学研究表明,在人的智力跨度之内,此规模比较容易阅读和理解。如果一个独立的功能模块少于50行,不要硬性拼凑;如果一个独立功能模块多余50行,也不要硬性分解。如果出现以下情况,就停止模块分解:模块不能再细分为明显的子任务;分解成用户提供的模块或库函数;模块接口是输入输出设备传送
26、的信息;模块不宜再分解得过小。,4.3 设计准则,3 模块的接口模块的接口要简单、清晰、含义明确,便于理解,易于调试、实现和维护。模块接口传递的信息要尽量简单,并与模块功能相一致。,例如,求矩形面积,有函数Arr0=a;Arr1=b;area=Area(a,b);area=Area(Arr);,数组参数,与函数功能不一致,4.3 设计准则,4 模块的作用范围在软件结构中,由于存在着不同事务处理的需要,某一层上的模块会存在着判断处理,这样可能影响其他层的模块处理,引入了模块的作用范围(或称影响范围)与控制范围的概念。模块的作用范围指受该模块内一个判定影响的所有模块的集合。模块的控制范围指模块本身
27、以及其所有下属模块(直接或间接)从属于它的模块)的集合。,4.3 设计准则,控制范围是从结构方面考虑的,作用范围则是功能上的概念。模块的作用范围应在其控制范围之内,且判定所在的模块,应与受其影响的模块在层次上尽量靠近。,4.3 设计准则,5 软件结构的深度、宽度、扇入、扇出数应适当软件深度表示控制的层数;宽度指同一层次上模块总数的最大值;扇出是一个模块直接控制(调用)的模块数量;扇入表明有多少个上级模块直接调用它。对宽度影响最大的因素是模块的扇出;经验表明,一般好的软件结构平均扇出是3或4,上限通常是5-9;扇出太大一般是缺少中间层次;扇出太小可将下一级模块进一步分解或合并。如一个模块的扇入数
28、很大(9),而又不是公共模块,则说明该模块分解不够。好的软件结构通常顶层扇出较高,中层扇出较少,底层(基础公共模块)有较高的扇入。,4.3 设计准则,6 尽量设计功能可预测的模块,防止模块功能过分局限只要输入的数据相同就产生相同的输出,则该模块功能是可预测的。内部带“存储器”的模块功能可能是不可预测的,输出可能取决于内部的某个存储状态,不易理解,难于测试和维护。如有可能,模块接口尽量灵活,可提高复用率。,4.4 总体设计常用的方法及工具,从系统设计的角度出发,软件设计方法大体可分为三类:(1)面向数据流的程序设计(Data Flow-Oriented Design)或过程驱动的设计(Proce
29、ss-Driven Design)(2)面向数据结构的设计(Data Structure-Oriented Design)或数据驱动的设计(Data-Driven Design)(3)面向对象程序设计(Object-Oriented Design)。本节介绍前两种方法。,4.4 总体设计常用的方法及工具,4.4.1 面向数据流的设计方法面向数据流的设计,又称为结构化设计方法(Structured Design,SD),是在模块化、自顶向下逐步求精、结构化程序设计等软件设计技术基础上发展起来的。与结构化分析(SA)相衔接,构成完整的结构化分析设计技术,成熟,应用范围广泛。SD方法以数据流图为基础
30、,按一定的方法将其映射为软件结构图。,4.4 总体设计常用的方法及工具,该方法实施的要点是:(1)首先研究、分析和审查数据流图。从软件的需求规格说明中弄清数据流加工的过程,对于发现的问题及时解决。(2)然后根据数据流图确定数据处理的类型。典型的类型有两种:变换型和事务型。针对两种不同类型分别进行分析处理。(3)由数据流图推导出系统的初始结构图。(4)利用一些启发式原则改进系统初始结构图,直到得到符合要求的结构图为止。(5)修改和补充数据字典。(6)制定测试计划。,4.4 总体设计常用的方法及工具结构化设计,1 基本概念结构化设计的思想结构化开发方法是传统的软件工程方法中最成熟,应用最广泛的方法
31、,由SA、SD、SP构成。软件具有层次性和过程性。层次性反映了软件的整体性质,常用结构图表示;过程性反映了软件的局部性质,常用框图等表示。SD法分总体设计和详细设计两阶段。结构化设计方法优点:将大目标转换为小目标分别实现,减少设计复杂性;结构独立。将功能性程序化分为相对独立的程序模块;模块功能单一,易于修改维护;增强了代码的可重用性。,4.4 总体设计常用的方法及工具结构化设计,描述工具结构化设计方法的图形化描述工具为结构图。结构图是软件文档的重要部分,精确表示程序结构,清楚的反应模块之间层次及其调用关系。结构图不仅严格定义了各模块的名字、功能和接口,而且反映了设计思想。系统结构图的基本符号,
32、4.4 总体设计常用的方法及工具结构化设计,结构图主要内容有:模块:用矩形表示,并用名称标识。名称应能表示其功能。模块的控制关系:用单箭头或者直接连线表示模块之间的控制关系。调用完成之后控制返回到调用模块。模块间信息传递:调用模块将数据或控制信息传递给被调用模块,被调用模块回送数据或控制信息。箭头尾部空心圆表示数据信息,实心圆表示控制信息。辅助符号:连线尾部菱形符号表示条件调用,弧线循环调用。选择条件或循环条件一般无需注明。,(a)调用,(b)判断调用,(c)循环调用,4.4 总体设计常用的方法及工具结构化设计,系统结构图中的模块传入模块:从下属模块取得数据,经过某些处理,再将其传送给上级模块
33、。它传送的数据流叫做逻辑输入数据流。传出模块:从上级模块获得数据,进行某些处理,再将其传送给下属模块。它传送的数据流叫做逻辑输出数据流。变换模块:它从上级模块取得数据,进行特定的处理,转换成其它形式,再传送回上级模块。协调模块:对所有下属模块进行协调和管理的模块。,4.4 总体设计常用的方法及工具结构化设计,4.4 总体设计常用的方法及工具结构化设计,数据流图的类型(1)变换型变换型数据流图是一个线性结构,由输入、变换、输出三部分组成。信息沿通路进入系统,由外部形式变化为内部形式,经加工处理后沿输出通路变换成外部形式离开软件系统。,4.4 总体设计常用的方法及工具结构化设计,变换流型DFD可以
34、分成:输入变换中心(主加工)输出,4.4 总体设计常用的方法及工具结构化设计,(2)事务型数据沿输入通路到达一个处理,这个处理将输入分为许多平行的加工路径,并根据输入的类型,选择某一加工路径。事务处理中心的任务是输入数据(事物),分析每个事物以确定其类型,选择活动通路处理。,4.4 总体设计常用的方法及工具结构化设计,2 设计过程面向数据流设计方法过程如下:研究分析数据流图确定DFD类型。若为变换型,确定变换中心和逻辑输入输出边界,映射出变换结构的顶层和第一层;若为事务型,确定事务中心和加工路径,映射出顶层和第一层。,4.4 总体设计常用的方法及工具结构化设计,分解上层模块,设计中下层模块结构
35、,最终推导出初始结构图。根据优化准则对软件结构进行求精,直到得出符合要求的结构图。描述模块功能、接口及全局数据结构。复查,如有错转,修改完善,最后进入详细设计。,映射成事务结构,映射成变换结构,变换分析,4.4 总体设计常用的方法及工具结构化设计,3 变换分析(变换型)变换分析是一系列设计步骤的总称,将变换型数据流图按预先确定的模式映射为软件结构。重画数据流为了建立系统结构,将数据流图平铺开来,物理输入画在左侧,物理输出画在右侧。如果一个外部实体既是物理输入又是物理输出,则两侧都要画出它。,4.4 总体设计常用的方法及工具结构化设计,确定变换中心(主加工)及逻辑输入输出 变换中心是程序的核心功
36、能,它的输入是逻辑输入,它的输出为逻辑输出。通常几股数据流的汇合处就是系统的变换中心。介于逻辑输入和逻辑输出之间的加工就是中心。,4.4 总体设计常用的方法及工具结构化设计,进行一级分解,设计上层模块 顶层模块:其功能就是整个系统的功能;一级分解是对顶层的模块进行分解,即导出软件结构的第一层。第一层一般至少有输入、变换、输出三种功能模块。为每个逻辑输入设计一个模块,为每个逻辑输出设计一个模块,为变换中心设计一个变换模块。输入控制模块:接收所有的输入数据;变换控制模块:实现输入到输出的变换;输出控制模块:产生所有的输出数据。,4.4 总体设计常用的方法及工具结构化设计,设计中下层模块输入模块下属
37、模块的设计输入模块应有两部分组成:一部分接受输入数据,一部分将输入数据加工提供给调用者。为每个输入设计两个下属模块,逐层分级直至物理输入。输出模块的下属模块设计为每个输出设计两个下属模块,一个将数据转换为下属模块所需信息,另一个发送数据。逐层分解,直至物理输出。变换模块的下属模块设计一般按变换中心组成状况,根据模块独立性原则,为每个基本加工设计一个模块。,输出H,G H,A,B,C,D,E,F,G,H,物理输入,物理输出,主模块,CD,E,输入C,输出D,输出E,D,E,输入B,BC,输入A,AB,B,输出G,E G,输出F,DF,D,F,E,G,H,输出H,G H,A,B,C,D,E,F,G
38、,H,物理输入,物理输出,主模块,CD,E,输入C,输出D,输出E,C,D,E,E,输入B,B,BC,C,输入A,AB,A,B,A,输出G,E G,输出F,DF,D,F,G,H,4.4 总体设计常用的方法及工具结构化设计,设计优化在选择模块设计次序时,不一定沿某一路径直至底层才开始另一模块设计,但必须对一个模块的所有直接下属模块设计完成后才开始另一模块的设计。尽可能建立功能模块。功能模块具有最强的内聚性,满足信息屏蔽原则。消除重复功能。若两模块含有重复的部分,应设法将重复的功能消去。重复部分有完全相同和部分相同的情况,在确定重复部分及实施方案时,一定要谨慎小心。,4.4 总体设计常用的方法及工
39、具结构化设计,4 事务分析(事务型)事物分析也是从数据流开始,自顶向下,逐步分解,建立系统结构图,与变换分析主要区别在于映射方法不同。确定DFD的数据中心和加工路径。当DFD中某个加工具有明显的将一个输入数据流分解成发散的多个输出数据流时,该加工就是系统的事务中心,从事务中心辐射出去的数据流就是加工路径。事务流型的DFD的组成:输入流事务中心若干条活动流,4.4 总体设计常用的方法及工具结构化设计,设计软件的顶层和第一层事务结构首先建立主模块(P层),代表整个加工。第一层模块包括3类:取得事务、处理事务和输出结果。其中取得和处理事务构成事务型软件的主要部分接收分支和发送分支。接收分支负责接收数
40、据。发送分支通常包括一个调度模块,控制下层所有模块活动。调度模块以及所有事务模块、输入输出构成事务层,T层。,4.4 总体设计常用的方法及工具结构化设计,设计中下层模块并优化事务模块下层包括操作层(A层)、细节层(D层)。不同的事务可能有相同的操作,不同的操作可能有相同的细节,所以存在共享模块。构造时注意如下问题:事务源的识别;注意利用公共模块;建立必要的事务处理模块;下层操作和细节模块的共享;结构图的形式。,4.4 总体设计常用的方法及工具JACKSON 法,4.4.2 面向数据结构的分析设计方法JACKSON 法(1)JACKSON方法简介JACKSON 系统开发方法是一种典型的面向数据结
41、构的分析与设计方法。由英国的M.Jackson提出,该方法特别适合于数据处理类的问题,如企事业管理一类的软件系统。,4.4 总体设计常用的方法及工具JACKSON 法,许多应用系统中都有清楚的层次结构,其数据结构既影响程序的结构又影响程序的处理过程。Jackson方法把问题分解为可由三种基本结构形式表示的各部分的层次结构,即顺序、选择和重复。三种数据结构可以进行组合,形成复杂的结构体系。从目标系统的输入、输出数据结构入手,导出程序框架结构,再补充其它细节,得到完整的程序结构图。,4.4 总体设计常用的方法及工具JACKSON 法,(2)JACKSON图Jackson 方法用图形描述数据结构和程
42、序结构,这种图形称为 Jackson 图。Jackson 图既可用来描述问题的数据结构,也可用于描述每个实体执行的动作及其时序,产生一组描述实体进程的 Jackson 结构图。数据结构图中的方框表示数据,程序结构图中的方框表示模块(过程或函数等)。,4.4 总体设计常用的方法及工具JACKSON 法,程序中实际使用的数据结构种类繁多,但其数据元素之间的逻辑关系却只有顺序、选择和重复三种。,A,B,C,D,顺序,每个元素出现一次,顺序是B、C、D,A,B,C,D,选择结构,根据条件确定出现顺序是B或C或D,4.4 总体设计常用的方法及工具JACKSON 法,改进的Jackson图。上述图形表达选
43、择或重复结构时,条件不能直接表示,影响了图的表达能力。改进的Jackson图允许将连线画为直线,对于选择和重复结构,在连线旁标明条件,S表示选择,I表示重复。,4.4 总体设计常用的方法及工具JACKSON 法,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
44、 condBA endA iter while condBA end,4.4 总体设计常用的方法及工具JACKSON 法,Jackson图示例按如下表格格式,设计打印表格程序。“状态”这一项,如果类别是老师,打印工龄;类别是学生,打印年级。,表示数据结构,表示程序结构,4.4 总体设计常用的方法及工具JACKSON 法,(3)Jackson方法的一般步骤分析并确定输入数据结构和输出数据结构的逻辑结构,并用Jackson图描述这些数据结构。找出与输入和输出数据结构有对应关系的数据单元。使用下面三条规则从描述数据结构的Jackson图导出描述程序结构Jackson图。对有对应关系的数据单元在程序结
45、构的相应层次画一个处理框。对于输入数据结构中剩余的数据单元按它们所在的层次在程序结构中画出相应的处理框。对于输出数据结构中剩余的数据单元按它们所在的层次在程序结构中画出相应的处理框。列出所有的操作和条件并把它们分配到程序结构的适当位置。用伪码表示程序。,4.4 总体设计常用的方法及工具JACKSON 法,(4)Jackson方法实例一个正文文件由若干个记录组成,每个记录是一个字符串。要求统计每个记录中空格字符的个数,以及文件中空格字符的总个数。要求的输出数据格式是,每复制一行输入字符串之后,另起一行印出这个字符串中的空格数,最后印出文件中空格的总个数。,4.4 总体设计常用的方法及工具JACK
46、SON 法,确定输入输出数据结构,表示输入输出数据结构的Jackson图,4.4 总体设计常用的方法及工具JACKSON 法,分析确定在输入数据结构和输出数据结构中有对应关系的数据单元。在这个例子中:输出数据总是通过对输入数据的处理而得到的,因此在输入输出数据结构最高层次的两个单元总是有对应关系的。即经过程序的处理由正文文件得到输出表格。每处理输入数据中一个“字符串”之后,就可以得到输出数据中一个“串信息”,它们都是重复出现的数据单元,而且出现次序和重复次数都完全相同,因此,“字符串”和“串信息”也是一对有对应关系的单元。考察输入数据结构中余下的数据单元。“字符”不可能和多个字符组成的“字符串
47、”对应,和输出数据结构中其他数据单元也不能对应。单个空格并不能决定一个记录中包含的空格个数,因此没有对应关系。在这个例子中输入输出数据结构中只有上述两对有对应关系的单元。,4.4 总体设计常用的方法及工具JACKSON 法,数据结构图导出程序结构图。顶层处理与“正文文件”和“输出表格”这对最顶层的数据单元相对应。程序结构图的第二层应该有与“表格体”、“空格总数”对应的处理框“程序体”和“印总数”。第三层与“字符串”和“串信息”相对应的处理框“处理字符串”。第四层是和“字符串”、“字符”及“空格数”等数据单元对应的处理框“印字符串”、“分析字符”及“印空格数”,这3个处理是顺序执行的。但是,“字
48、符”是重复出现的数据单元,因此“分析字符”也应该是重复执行的处理。改进的Jackson图规定顺序执行的处理中不允许混有重复执行或选择执行的处理,所以在“分析字符”这个处理框上面又增加了一个处理框“分析字符串”。,4.4 总体设计常用的方法及工具JACKSON 法,描绘统计空格程序结构的Jackson图,4.4 总体设计常用的方法及工具JACKSON 法,列出所有操作和条件,并且把它们分配到程序结构图的适当位置。首先,列出统计空格个数需要的全部操作和条件。1)停止3)关闭文件5)印空格数目7)sum:=09)读入字符串11)totalsum:=totalsum+sum12)pointer:=1I
49、(1)文件结束I(2)字符串结束S(3)字符为空格经过简单分析把这些操作和条件分配到程序结构图的适当位置。,2)打开文件4)印字符串6)印空格总数8)totalsum:=010)sum:=sum+113)pointer:=pointer+1,4.4 总体设计常用的方法及工具JACKSON 法,用伪码表示程序处理过程。因为Jackson使用的伪码和Jackson图之间存在简单的对应关系,所以从很容易得出程序伪码。,统计空格seq 打开文件 读入字符串 totalsum=0 程序体iter until文件结束 处理字符串seq 印字符串seq 印出字符串 印字符串end sum=0 pointer
50、=1 分析字符串iter until字符串结束 分析字符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 关闭文件 停止统计空格end,4.4 总体设计常用的方法及工具JACKSON 法,描绘统计空格程序结构的Jackson图,4