第七章系统设计通过本章学习,应当掌握以下内容1、系统设计的任务、目标和内容2、结构化设计的基本思想3、如何从数据流程图导出结构图4、一体化设计方法的基本原理与方法5、代码设计的原则与方法6、输出设计的内容7、输入设计的原则和内容8、输入数据的校验方法9、人机对话设计的原则识记:一、系统设计的任务、目标和内容二、评价信息系统的标准三、结构化设计的基本理论四、模块、结构图的概念与使用五、模块的联系与耦合六、变换分析和事务分析方法的原理与运用七、代码的作用、类型、设计的原则及代码检验八、输出设计的内容九、输入设计的原则和内容十、输入数据的校验方法十一、人机对话设计的原则领会:一、系统分析阶段要回答的中心问题是什么?二、为什么说从系统研制的角度讲,系统的可变更性是最重要的标准?三、结构图与数据流程图有什么区别与联系四、模块划分的原则是什么?五、怎样度量耦合的高与低六、什么是模块的控制范围?什么是判断的作用范围?七、如何编写系统设计说明书应用:根据给定的数据流程图,能够画出信息系统结构图计划课时:8课时第一节系统设计的任务要求系统分析阶段要回答的中心问题是系统"做什么",即明确系统功能,这个阶段的成果是系统的逻辑模型。
系统设计要回答的中心问题是系统"怎么做",即如何实现系统说明书规定的系统功能。
在这一阶段,要根据实际的技术条件、经济条件和社会条件,确定系统的实施方案,即系统的物理模型。
一、评价信息系统的标准根据一个逻辑模型,可以提出多个物理模型。
我们怎样评价、选择物理模型呢?为此,我们有必要先简要讨论评价信息系统的标准。
面向管理的信息系统,其优劣程度取决于它为管理工作提供信息服务的质量。
我们可以从六个方面来衡量。
1、信息系统的功能2、系统的效率3、系统的可靠性4、系统的工作质量5、系统的可变更性6、系统的经济性二、系统设计的目标系统设计必须从保证系统的变更性人手,设计出一个易于理解、容易维护的系统。
为了使系统容易修改,首先要使其容易被理解,需要注意以下几个问题:(1)把系统划分为一些部分,其中每一部分的功能简单明确,内容简明易懂,易于修改。
我们把这样的部分称为模块。
(2)系统分成模块的工作按层次进行。
首先,把整个系统看成一个模块,按功能分解成若干个第一层模块,这些模块互相配合,共同完成整个系统的功能。
然后按功能再分解第一层的各个模块。
依次下去,直到每个模块都十分简单。
(3)每一个模块应尽可能独立,即尽可能减少模块间的调用关系和数据交换关系。
当然,系统中的模块不可能与其他模块没有联系,只是要求这种联系尽可能少。
(4)模块间的关系要阐明。
这样,在修改时可以追踪和控制。
总之,一个易于修改的系统应该由一些相对独立、功能单一的模块按照层次结构组成。
这些模块之间不必要的联系都已去掉,而且它们的功能及相互关系都已阐明。
这就是结构化设计的基本思想。
三、系统设计的内容系统设计阶段的任务是提出实施方案。
该方案是这个阶段工作成果的体现,这个方案以书面的正式文件--系统设计说明书提出,批准后将成为系统实施阶段的工作依据。
系统设计的基本任务大体上可以分为两个方面:1.把总任务分解成许多基本的、具体的任务(1)将系统划分成模块;(2)决定每个模块的功能;(3)决定模块的调用关系;(4)决定模块的界面,即模块间信息的传递。
2.为各个具体任务选择适当的技术手段和处理方法这便是详细设计,包括代码设计、数据库设计、输入设计、输出设计、人机对话设计、处理过程设计。
第二节结构化设计的基本概念一、模块模块(Module)一词使用很广泛。
通常是指用一个名字就可以调用的一段程序语句。
可以将它理解为类似"子程序"的概念,例如PASCAL程序设计中的函数、过程,FORTRAN 程序设计中的函数和子程序。
模块具有输人和输出、逻辑功能、运行程序、内部数据四种属性。
模块的输入、输出是模块与外部的信息交换。
一个模块从它的调用者那里获得输入,把产生的结果再传递给调用者。
模块的逻辑功能是指它能做什么事,它是如何把输入转换成输出的。
输入、逻辑功能、输出构成一个模块的外部特性。
内部数据和程序代码则是模块的内部特性,是看不见的。
模块用程序代码完成它的逻辑功能。
内部数据是仅供该模块本身引用的数据。
在总体设计阶段,主要关心模块的外部特性,模块的内部属性是以后要解决的问题。
模块用长方形表示。
模块的名字写在长方形内。
模块的名字由一个动词和一个作为宾语的名词表示。
模块的名字应恰如其分地表达这一个模块的功能。
二、结构图结构化设计采用结构图(StructuredChart)描述系统的模块结构及模块间的联系。
结构图中的主要成分有:(1)模块用长方形表示。
(2)调用从一个模块指向另一模块的箭头表示前一个模块调用后一个模块。
箭尾的菱形表示有条件地调用,弧形箭头表示循环调用。
(3)数据用带圆圈的小箭头表示从一个模块传递给另一模块的数据。
(4)控制信息带涂黑圆圈的小箭头表示一个模块传送给另一模块的控制信息。
结构图的层数称为深度。
一个层次上的模块总数称为宽度。
深度和宽度反映了系统的大小和复杂程度。
模块结构图可以由数据流程图转换而来。
但是二者有本质的区别:模块+数据流+控制流+模块之间的调用关系=系统结构图;各组成成分+数据流=数据流图。
三、模块间的联系在一个大的程序中,模块间的联系是千丝万缕的。
因此把一个系统分解成许多模块时,分法不同,模块间的联系程度就不同。
我们希望模块内联系越紧越好,模块间联系越少越好。
耦合、内聚两个概念从不同的角度反映这种联系。
四、模块间的耦合耦合是影响系统复杂程度的二个重要因素。
若为了理解模块A,需要对模块B有所了解,则A,B之间有联系。
如果需要对B的理解越多,则A,B的联系就越紧密,我们就说它们耦合越紧。
若程序员要修改紧耦合中的一个模块,很可能不得不修改另一个模块。
因此,模块间的耦合程度对系统的可维护性、可靠性有强烈的影响。
影响模块间耦合程度有三方面的因素:联系方式--模块间通过什么方式联系;来往信息的作用--模块间来往信息作什么用;数量--模块间来往信息的多少。
这三个因素可用三维坐标表示,如图7.3所示,离坐标原点越远,耦合程度越高。
下面分别讨论。
1.联系方式联系方式有两种,即"直接引用"和"用过程语句调用"。
2.来往信息的作用若两个模块间传递的信息只作数据用,即一个模块提供的输出数据作为另一个模块的输人数据,则这种耦合称为数据耦合。
这种耦合当然是需要的。
如果两个模块间传递的信息作控制用,这种耦合称为控制耦合。
其实,在系统设计中这种耦合是可以避免的。
在这个例子中,只要改为图7.4(b)所示的形式就行了。
模块A根据需要调用模块1或B2。
3.模块间来往信息的数量很明显,模块间传递的信息量越大,它们之间的耦合程度越高。
为减小耦合程度应该:(1)用过程语句调用其他模块;(2)模块间的参数作数据用;(3)模块间的参数尽可能少。
注:在用高级语言编程序时,只要注意消除开关量,减少共用变量,就可以大大降低模块间的耦合程度。
五、模块的内聚模块的内聚反映模块内部联系的紧密程度。
如果一个模块内部相关性很高,而且都是为了同一个功能,我们就说它的内聚程度高。
模块的内聚可以分以下七类:1、偶然内聚2.逻辑内聚3.时间内聚这是指与时间有关的联系,即把需要有限时间间隔内处理的成分放在同一模块内,例如一些初始化模块。
这种模块的内聚程度比前两种稍高一些,但仍是一种低的内聚。
4.步骤内聚模块内的元素属于同一个公共步骤单元,则称为步骤内聚。
步骤内聚模块的内聚程度比时间内聚模块高。
5.通信内聚通信内聚是指模块内的成分引用共同的数据。
根据数据流程图容易判断一个模块是不是通信内聚。
通信内聚的聚合程度较高,找不到更高的内聚结构时,这种结构是完全可以接受的。
6.顺序内聚顺序内聚是指模块中某个成分的输出是另一模块的输入。
与通信内聚相比,顺序内聚的内聚程度更高。
因为不论从数据的角度还是从执行的顺序来看,模块内各成分的关系都更紧密。
但是与功能内聚相比,其内聚程度要低。
7.功能内聚若一个模块包括并且仅包括为完成一个具体任务所需要的所有成分,则这个模块是功能内聚的。
这种模块的聚合程度是最高的。
结构化设计的目标就是获得这种模块。
判断一个模块是否功能内聚,简单有效的办法是:从调用者的角度看,能用一个短语简单明确地描述这个模块做什么(不是怎么做!),分析这个短语就可以发现这个模块是完成一个具体任务,还是多个任务,或者做一些彼此无关的杂事??“解方程”、“求平方根”、“计算利息”都是具体任务。
功能内聚模块的好处是界面清晰,所以容易理解。
由于一个模块一个功能,因而复用性好。
后面三种是可以接受的,前面四种则要尽可能避免。
六、作用范围与控制范围一个判断的作用范围是所有这样的模块的集合,这些模块内含有依赖于这个判断结果的处理。
一个模块的控制范围是指它本身及其所有下属模块的集合。
这里下属模块包括直接下属模块及下属模块的下属模块。
图7.7中,模块A的控制范围是模块A,B,C,D构成的集合。
结构化设计要求:对于任何一个判断,其作用范围应该是这个判断所在模块的控制范围的一个子集。
换言之,所有受判断影响的模块应该从属于做出判断的那个模块。
七、模块的扇入与扇出模块的扇出是指模块的直属下层模块的个数。
一般认为,设计得好的系统平均扇出是3或4;上限不超过7(解决的办法是适当增加中间层次)。
模块的扇入是指有多少个上级模块调用它。
扇人越大,表示该模块被更多的上级模块共享。
这当然是我们所希望的。
但是不能为了获得高扇人而不惜代价,例如把彼此无关的功能凑在一起构成一个模块,虽然扇人数高了,但这样的模块内聚程度必然低。
这是我们应避免的。
设计得好的系统,上层模块有较高的扇出,下层模块有较高的扇人。
其结构图像清真寺的塔,上面尖,中间宽,下面小。
第三节从数据流程图导出结构图数据流程图有两种典型的结构:变换型结构和事务型结构。
对这两种结构,可以分别通过变换分析和事务分析方法导出标准形式的结构图。
采用这些方法时,都是先设计结构图的顶端主模块,然后自顶向下逐步细化,最后得到满足数据流程图要求的系统结构。
一、变换分析变换结构是一种线性结构。
它可以明显地分成逻辑输入、主加工和逻辑输出。
变换分析过程可以分为三步:找出逻辑输入、主加工和逻辑输出,设计顶层模块和第一层模块,设计中、下层模块。
二、事务分析事务分析也是按"自顶向下,逐步细化"的原则进行。
先设计主模块,其功能就是整个系统的功能。
下面有一个"分析模块"和"调度模块"。
前面我们分别讨论了变换分析、事务分析。
但实际应用中数据流程图并非这么典型,这两种分析往往交替使用,数据流程图的某一个局部可能是变换型,另一个局部可能是事务型,如此等等。