首页 理论教育信息系统开发:功能模块转换策略实践

信息系统开发:功能模块转换策略实践

【摘要】:图4-12 调用并传递数据图4-13 调用并传递标识2.功能模块转换策略功能模块转换策略解决如何从数据流程图转换成结构图,有以事务为中心的设计策略和以变换为中心的设计策略两种方法。一般一个模块的扇出系数应该控制在7以内,超过7出错的概率会加大。

系统功能设计是用结构图来描述系统设计结果。首先使用一组设计策略将系统分析阶段形成的逻辑结构数据流程图转换成初始的结构图,然后参照一组设计原则和设计标准对初始结构图进行优化,最终形成具有良好结构的功能设计方案。

1.结构图

系统结构图用来描述系统的程序模块结构及模块间的联系。结构图的主要因素有:模块、调用、数据和标识。

(1)模块

结构图中的模块用矩形表示,模块名称写在矩形里。模块名称表达了该模块的功能,即每次调用该模块能完成什么任务。模块间的调用关系如图4-9所示,它表示模块A调用模块B。

(2)调用

从一个模块指向另一个模块的箭头表示前一个模块调用后一个模块,如图4-9所示。箭尾的菱形表示有条件地调用,如图4-10所示。弧形箭头表示循环调用,如图4-11所示。

978-7-111-47279-7-Chapter04-11.jpg

图4-9 模块间的 调用关系

978-7-111-47279-7-Chapter04-12.jpg

图4-10 有条件调用

978-7-111-47279-7-Chapter04-13.jpg

图4-11 循环调用

(3)数据

用带圆圈的小箭头表示从一个模块传递给另一个模块的数据,如图4-12所示。

(4)标识

标识是指一些关于处理结果的标志,例如没有找到相应记录的标志,结束的标志(通常用EOF表示)。传递标识的示例如图4-13所示。

978-7-111-47279-7-Chapter04-14.jpg

图4-12 调用并传递数据

978-7-111-47279-7-Chapter04-15.jpg

图4-13 调用并传递标识

2.功能模块转换策略

功能模块转换策略解决如何从数据流程图转换成结构图,有以事务为中心的设计策略(事务分析)和以变换为中心的设计策略(变换分析)两种方法。

(1)事务分析

事务分析用于将高层数据流程图转换成结构图,其优点是能够把一个大的、复杂的系统分解成若干小的、简单的系统。

高层的数据流程图特别是零图所表示的处理功能都是相对独立的,可以把它们看成一类特定的事务,将其转换为结构图,如图4-14所示。

978-7-111-47279-7-Chapter04-16.jpg

图4-14 零图转换为结构图(www.chuimin.cn)

如图4-15所示,系统高层模块只有一个,它由3个不同的事务组成。可以将其理解为3个子系统,用三个模块来表示。最高层模块根据用户的需求判断调用3个模块,所以它是事务中心,不但具有控制功能,还具有分析事务类型和调度功能。

如果一个系统很复杂,数据流程图有3层或3层以上,对于1图和下层图,都可采用同样的事务分析方法将其分解,这就可将一个复杂的系统分解为若干个功能模块。

(2)变换分析

变换分析提供了一种把叶子层模块转换成结构图的方法。它首先对叶子层模块中的处理功能进行分类。第一类是输入功能;第二类是执行变换功能;第三类是输出功能。根据分类结果确定第二类处理功能为变换中心,如图4-15所示。

978-7-111-47279-7-Chapter04-17.jpg

图4-15 利用变换分析进行模块设计

在图4-15中,将一个处理模块设计成3个从属模块,分别执行输入、变换、输出功能。在结构图中,把输入模块放在结构图的左侧,变换模块放在中间,输出模块放在右侧。功能模块AA会对GFH全部调用一遍而不是判断

3.功能模块优化设计原则

采用事务分析、变换分析的转换策略,将系统的逻辑结构转换成计算机系统的结构图,只是一张描述系统初始结构的草图,必须依据一定的原则将其优化,使其具有良好的功能结构。系统优化设计的原则包括了模块间的耦合原则、模块内聚性原则、扇入扇出原则等。

(1)模块间的耦合原则

耦合原则决定了模块间的依赖关系。模块之间的联系越多,它们之间的相互依赖程度越高。对某一模块的修改,必然影响到其他模块,模块的独立性越低。如果两个模块之间仅存在调用与被调用关系,没有任何的信息传递,则表示这两个模块的耦合程度最低,称为简单耦合,这是功能设计中最理想的情况。遗憾的是不可能使系统的所有模块之间都是简单耦合关系,按照耦合程度由低到高的关系可将耦合类型分为数据耦合、控制耦合和公共耦合。

1)数据耦合。如果两个模块之间不仅存在调用与被调用关系,而且还存在数据通信,这种耦合称为数据耦合。模块间传递的数据可以是简单的数据元素,也可是若干数据元素组成的数据结构。这种耦合形式在系统中经常出现,采用这种形式要注意将模块间传递的数据参数的个数控制在最小,能够用参数的就不用数据结构,以便降低模块间数据通信的复杂程度。

例如,计算水电费的数据耦合示意图如图4-16所示。“住户详情”显然是数据结构,它增加了“计算水费”和“计算电费”两个模块的复杂程度。改成右图后,模块的复杂程度大大降低。

2)控制耦合。如果两个模块之间不仅存在调用与被调用关系,而且模块A向模块B传递的信息控制了模块B的内部逻辑,则模块A、B之间的耦合称为控制耦合。

控制耦合的示意图如图4-17所示。

978-7-111-47279-7-Chapter04-18.jpg

图4-16 数据耦合

978-7-111-47279-7-Chapter04-19.jpg

图4-17 控制耦合

3)公共耦合。如果两个模块都和同一个公用数据域有关,或与某一个公共环境联系在一起,则这两个模块间存在公共耦合。模块之间可能彼此功能独立,但当需要修改公用数据时,与之相关的所有模块可能都要进行修改,这给系统维护带来了困难。

模块的耦合形式主要是系统设计员根据需要自行设计的,这些连接方式为系统修改和维护带来了一定的难度。系统模块之间的连接原则是:尽可能采用较低的耦合形式,尽可能采用简单耦合和数据耦合;减少控制耦合;必要时采用公共耦合,但一定要让数据控制在最小。

(2)模块的内聚性原则

内聚性是指模块内部的各个组成部分,处理动作的组合强度。模块内部的“组成部分”是指该模块运行程序中的一个动作、一组指令或一个调用其他模块的语句。在系统设计中,系统的内聚性越高越好,对一个大型的信息系统更应该如此。

(3)扇出扇入原则

模块的扇出表达了一个模块对它的直属下级模块的控制范围。模块的扇出系数是指其直属下级模块的个数。

模块的直属下级模块越多,表明它要控制好多模块,内聚性可能越低,所以应尽量把一个模块的扇出系数控制在较小的范围之内。一般一个模块的扇出系数应该控制在7以内,超过7出错的概率会加大。如果扇出系数很小,也不太合适,说明需要简化模块的结构。

模块的扇入是指其直接上级模块的个数。模块的扇入系数越大,表明它要被多个上级模块调用。其公用性很强,模块分解得较好,在系统维护时能够减少对同一功能的修改,因此要尽量提高模块的扇入系数。