本文承接上文,主要从设计基础、系统结构设计、数据设计、文件设计、过程设计五个方面来分别进行阐述。
将软件的体系结构按自定向下的方式,对各个层次的过程细节和数据细节逐层细化。把一个大问题分解成若干个子过程,分解的时候从最底层开始,以此类推,直到不能分解或一个模块智能完成一个单一的功能为止。
软件结构包括两部分。一个是程序的模块结构,另一个是数据的结构。把一个问题分解成子问题,然后把子问题解决了就能把总的问题解决啦,这样做,能大幅度提高效率,降低复杂性。那么如何分解?分解成几个?这要根据开发经验和具体问题而言。
程序结构有两个树状结构和网状结构。树状结构层次清晰,概要设计要把树状结构设计出来。网状结构没有隶属关系,各个模块的接口相对较复杂。
结构图反映了程序中模块之间的层次调用关系。结构也也叫S-C图。能清晰表达模块之间所划分的层次。下面对一些基本概念做一些讲解。模块的命名应该以主要功能作为模块名。模块之间存在调用关系和信息传递,被调用模块一定要想调用模块返回查找成功的信息。有条件的调用关系(顺序调用、循环调用)如何表示。
介绍两个概念。深度,深度表明问题的复杂性和规模大小。宽度是指任一层中模块数中宽度最多的是系统结构图的宽度。要综合考虑深度、宽度、扇入、扇出之间的关系。使程序的系统结构合理化。好的图应该是类似于坛子状。中间宽、两端窄。
模块化:能够把一个大而复杂的软件系统按照问题的功能域划分成易于理解的比较单纯的模块结构。划分模块的时候要注意抽象,软件系统进行模块设计时,可有不同的抽象层次。抽象层次并不是一步到位,而是逐步抽象的。抽象包括功能抽象和数据抽象。
信息隐蔽是指在划分模块的时候,定义层次的时候,如果模块中数据发生变化时,尽量不影响其他模块的使用。模块的独立性是划分模块的重要原则。模块一般具有三个基本属性:功能、逻辑、状态。模块独立性衡量标准 高内聚,低耦合。
原则:尽量使用数据耦合,少用控制耦合,限制公共耦合,完全不用内容耦合。尽量做到高内聚,低耦合。
首先研究、分析和审查数据流图。然后根据数据流图(上一阶段需求分析阶段产生)决定问题的类型。数据处理问题的类型有两种:一种是变换型,另一种是事务性。针对两种不同的类型分别进行分析处理。在系统结构图中的模块及模块之间的关系如图所示。
大多数情况下采用变换型结构图。变换型数据处理问题的工作过程大概分为三步。即取得数据、变换数据和给出数据、
变换分析方法由以下四步组成:重画数据流图、区分有效输入、有效输出和中心变换部分、进行一级分解,设计上层模块、进行二级分解,设计输入、输入和中心变换部分的中、下层模块。
它接受一项事务,根据处理的特点和性质,选择分派一个适当的处理单元,然后给出结果。事务分析与变换分析一样,事务分析也是从分析数据流图开始,自顶向下,逐步分解,建立系统到数据结构图。
模块的作用范围应在控制范围之内。及可能减少高扇出结构,随着深度增大扇入。
1、用于软件的系统化方法也适用于数据2、确定所有的数据结构和在每种数据结构上施加的操作。3、应当建立一个数据词典并用它来
定义数据和软件的设计4、低层数据设计的决策应推迟到设计过程的后期进行。5、数据结构的表示只限于那些必须直接使用该数据结构内数据的模块才能知道。6、应当建立一个存放有效数据结构及相关操作的库。7、软件设计和程序设计语言应当支持抽象数据类型的定义和实现。
以上原则适用于软件工程的定义阶段和开发阶段。
文件的设计过程,主要分两个阶段。第一个阶段是文件的逻辑设计,主要在概要设计阶段实施。第二个阶段是文件的物理设计。1、整理必须的数据元素2、分析数据间的关系3、确定文件的逻辑设计。4、理解文件的特性5、确定文件的组织方式。6、确定文件的存储介质。7、确定文件的记录格式8、估算存取时间和存储容量。
过程设计实际上就是详细设计啦,在过程设计阶段,要决定各个模块的实现算法,并精确地表达这些算法。详细设计工具分为三类:图形工具、表格工具、语言工具。
也设置了五种基本控制结构的图形,并允许递归使用。问题分析图设计的程序结构一定是结构化程序:描述清晰,可以表示程序逻辑结构的异同和便于记忆,很容易表示高级层次,可以描述数据结构,支持自顶向下、逐步求精的方法。因此建议大家用PAD图和程序流程图。
用于描述功能模块的算法设计和加工细节的语言。是一种伪代码。可对其稍加改造,即可当做上机的代码。它可以提供全部结构化控制结构、数据说明和模块特征。能对PDL正文进行结构分割,使之便得易于理解。但是不如图形工具那么直观。