的控制和调用来实现的,这就是非直接耦合。这种耦合的模块独立性最强 实际上,开始时两个模块之间的耦合不只是一种类型,而是多种类型的混合。这就要求 设计人员进行分析、比较,逐步加以改进,以提高模块的独立性 模块之间的连接越紧密,联系越多,耦合性就越髙,而其模块独立性就越弱。一个模块 内部各个元素之间的联系越紧密,则它的内聚性就越高,相对地,它与其它模块之间的耦合 性就会减低,而模块独立性就越强。因此,模块独立性比较强的模块应是高内聚低耦合的模 块 5.结构化设计方法( Structured design,SD) 从系统设计的角度出发,软件设计方法可以分为三大类。第一类是根据系统的数据流进 行设计,称为面向数据流的设计或者过程驱动的设计,以结构化设计方法为代表。第二类是 根据系统的数据结构进行设计,称为面向数据结构的设计或者数据驱动的设计,以LCP(程 序逻辑构造)方法、 Jackson系统开发方法和数据结构化系统开发(DSSD)方法为代表。第 三类设计方法即面向对象的设计 结构化设计方法是基于模块化、自顶向下细化、结构化程序设计等程序设计技术基础上 发展起来的。该方法实施的要点是:①建立数据流的类型。②指明流的边界。③将数据流 图映射到程序结构。④用“因子化”方法定义控制的层次结构。⑤用设计测量和一些启发 式规则对结构进行细化。 (1)在系统结构图(SC)中的模块 在系统结构图中不能再分解的底层模块为原子模块。如果一个软件系统的全部实际加工 数据计算或处理〕都由底层的原子模块来完成,而其它所有非原子模块仅仅执行控制或协 调功能,这样的系统就是完全因子分解的系统。如果系统结构图是完全因子分解的,就是最 好的系统。一般地,在系统结构图中有4种类型的模块: 传入模块:从下属模块取得数据,经过某些处理,再将其传送给上级模块。 传出模块:从上级模块获得数据,进行某些处理,再将其传送给下属模块。 ■变换模块:即加工模块。它从上级模块取得数据,进行特定的处理,转换成其它形 式,再传送回上级模块。大多数计算模块(原子模块)属于这一类。 协调模块:对所有下属模块进行协调和管理的模块。在系统的输入/输出部分或数 据加工部分可以找到这样的模块。在一个好的系统结构图中,协调模块应在较高层出现。 在实际系统中,有些模块属于上述某一类型,还有一些模块是上述各种类型的组合 B [协词模块 [传入模块][传出模块] [变换模块] (a) 图4.11系统结构图的四种模块类型 (2)变换流与变换型系统结构 变换型数据处理问题的工作过程大致分为三步,即取得数据,变换数据和给出数据。如 图412所示。这三步反映了变换型问题数据流的基本思想。其中,变换数据是数据处理过程 的核心工作,而取得数据只不过是为它做准备,给出数据则是对变换后的数据进行后处理工
11 的控制和调用来实现的,这就是非直接耦合。这种耦合的模块独立性最强。 实际上,开始时两个模块之间的耦合不只是一种类型,而是多种类型的混合。这就要求 设计人员进行分析、比较,逐步加以改进,以提高模块的独立性。 模块之间的连接越紧密,联系越多,耦合性就越高,而其模块独立性就越弱。一个模块 内部各个元素之间的联系越紧密,则它的内聚性就越高,相对地,它与其它模块之间的耦合 性就会减低,而模块独立性就越强。因此,模块独立性比较强的模块应是高内聚低耦合的模 块。 5. 结构化设计方法(Structured Design, SD) 从系统设计的角度出发,软件设计方法可以分为三大类。第一类是根据系统的数据流进 行设计,称为面向数据流的设计或者过程驱动的设计,以结构化设计方法为代表。第二类是 根据系统的数据结构进行设计,称为面向数据结构的设计或者数据驱动的设计,以LCP(程 序逻辑构造)方法、Jackson系统开发方法和数据结构化系统开发(DSSD)方法为代表。第 三类设计方法即面向对象的设计。 结构化设计方法是基于模块化、自顶向下细化、结构化程序设计等程序设计技术基础上 发展起来的。该方法实施的要点是:① 建立数据流的类型。② 指明流的边界。③ 将数据流 图映射到程序结构。④ 用“因子化”方法定义控制的层次结构。⑤ 用设计测量和一些启发 式规则对结构进行细化。 (1) 在系统结构图(SC)中的模块 在系统结构图中不能再分解的底层模块为原子模块。如果一个软件系统的全部实际加工 (数据计算或处理)都由底层的原子模块来完成,而其它所有非原子模块仅仅执行控制或协 调功能,这样的系统就是完全因子分解的系统。如果系统结构图是完全因子分解的,就是最 好的系统。一般地,在系统结构图中有 4 种类型的模块: ▪ 传入模块 :从下属模块取得数据,经过某些处理,再将其传送给上级模块。 ▪ 传出模块 :从上级模块获得数据,进行某些处理,再将其传送给下属模块。 ▪ 变换模块 :即加工模块。它从上级模块取得数据,进行特定的处理,转换成其它形 式,再传送回上级模块。大多数计算模块(原子模块)属于这一类。 ▪ 协调模块 :对所有下属模块进行协调和管理的模块。 在系统的输入/输出部分或数 据加工部分可以找到这样的模块。在一个好的系统结构图中,协调模块应在较高层出现。 在实际系统中,有些模块属于上述某一类型,还有一些模块是上述各种类型的组合。 图 4.11 系统结构图的四种模块类型 (2) 变换流与变换型系统结构 变换型数据处理问题的工作过程大致分为三步,即取得数据,变换数据和给出数据。如 图 4.12 所示。这三步反映了变换型问题数据流的基本思想。其中,变换数据是数据处理过程 的核心工作,而取得数据只不过是为它做准备,给出数据则是对变换后的数据进行后处理工 作
取得数据 )变数) 给出数据 D 图412变换型数据流 变换型系统结构图如图413所示,相应于取得数据、变换数据、给出数据,系统的结构 图由输入、中心变换和输出等三部分组成 主模块|① 取得C C变换成D④‖给出D 取得BB变换成C③D变换成E⑤给出E 取得AA变换成B② 图413变换型的系统结构图 (3)事务流与事务型系统结构图 事务型数据处理问题的工作机理是接受一项事务, 根据事务处理的特点和性质,选择分派一个适当的处理单 元,然后给出结果。我们把完成选择分派任务的部分叫做-① 事务处理中心。或分派部件。这种事务型数据处理问题的 数据流图如图414所示。其中,输入数据流在事务中心T 处做出选择,激活某一种事务处理加工。D1-D4是并列 的供选择的事务处理加工 图414事务型数据处理问是 事务型数据流图所对应的系统结构图就是事务型系统结构图。如图415所示 内部 结果 表示的作业作业 结果 输入已分析的作业 信息 调度 给出结果 作业 作业 已分析 的作业 入作业 析作业 事务 务2事务3事务4 作订[操2[作[操作[作国操作山 细节1细节2 节3细节 细节 细节 细节7 图415事务型系统结构图
12 图 4.14 事务型数据处理问题 图 4.12 变换型数据流 变换型系统结构图如图 4.13 所示,相应于取得数据、变换数据、给出数据,系统的结构 图由输入、中心变换和输出等三部分组成。 图 4.13 变换型的系统结构图 (3) 事务流与事务型系统结构图 事务型数据处理问题的工作机理是接受一项事务, 根据事务处理的特点和性质,选择分派一个适当的处理单 元,然后给出结果。我们把完成选择分派任务的部分叫做 事务处理中心。或分派部件。这种事务型数据处理问题的 数据流图如图 4.14 所示。其中,输入数据流在事务中心 T 处做出选择,激活某一种事务处理加工。D1─D4 是并列 的供选择的事务处理加工。 事务型数据流图所对应的系统结构图就是事务型系统结构图。如图 4.15 所示。 图 4.15 事务型系统结构图
在事务型系统结构图中,事务中心模块按所接受的事务的类型,选择某一个事务处理模 块执行。各个事务处理模块是并列的,依赖于一定的选择条件,分别完成不同的事务处理工 作。每个事务处理模块可能要调用若干个操作模块,而操作模块又可能调用若干个细节模块ε 不同的事务处理模块可以共享一些操作模块。同样,不同的操作模块又可以共享一些细节模 事务型系统结构图在数据处理中经常遇到,但是更多的是变换型与事务型系统结构图的 结合。例如,变换型系统结构中的某个变换模块本身又具有事务型的特点 (4)变换映射 变换映射是体系结构设计的一种策略。运用变换映射方法建立初始的变换型系统结构 图,然后对它做进一步的改进,最后得到系统的最终结构图。设计的步骤如下。 步骤1:复审基本系统模型(0层数据流图和支持信息)。评估系统规格说明和软件需求 规格说明。 步骤2:复审和细化软件的数据流图。重画数据流图时,可以从物理输入到物理输出 或者相反.还可以从顶层加工框开始,逐层向下。 步骤3:确定数据流图中含有变换流特征还是含有事务流特征。通常,系统的信息流总 能表示为变换型,但其中也可能遇到明显的事务流特征,这时可采用变换型为主,在局部范 围采用事务型的设计方法 步骤4:区分输入流、输出流和中心变换部分,即标明流的边界。不同的设计人员可能 选择不同的流边界,这将导致不同的系统结构图 步骤5:进行一级“因子化”分解,设计顶层和第一层模块。 首先设计主模块,用程序名字为它命名,将它画在与中心变换相对应的位置上。做为系 统的顶层,它调用下层模块,完成系统所要做的各项工作。系统结构第一层的设计方针:为 每一个逻辑输入设计一个输入模块,它为主模块提供数据:为每一个逻辑输出设计一个输出 模块,它将主模块提供的数据输出:为中心变换设计一个变换模块,它将逻辑输入转换成逻 辑输出。第一层模块与主模块之间传送的数据应与数据流图相对应。 步骤6:进行二级“因子化”分解,设计中、下层模块。这一步工作是自顶向下,逐层 细化,为每一个输入模块、输出模块、变换模块设计它们的从属模块。 输入模块要向调用它的上级模块提供数据,因而它必须有两个下属模块:一个是接收数 据:另一个是把这些数据变换成它的上级模块所需的数据。输出模块是从调用它的上级模块 接收数据,用以输出,因而也应当有两个下属模块:一个是将上级模块提供的数据变换成输 出的形式;另一个是将它们输出。中心变换模块的下层模块没有通用的设计方法,一般应参 照数据流图的中心变换部分和功能分解的原则来考虑如何对中心变换模块进行分解 步骤7:利用一些启发式原则来改进系统的初始结构图,直到得到符合要求的结构图为 止。这些启发式原则大致有 ①模块功能的完善化。一个完整的功能模块,不仅应能完成指定的功能,而且还应当 能够告诉使用者完成任务的状态,以及不能完成的原因 ②消除重复功能,改善软件结构。在系统的初始结构图得出之后,应当审査分析这个 结构图。如果发现几个模块的功能有相似之处,可以加以改进 ③模块的作用范围应在控制范围之内。模块的控制范围包括它本身及其所有的从属模 块。模块的作用范围是指模块内一个判定的作用范围,凡是受这个判定影响的所有模块都属 于这个判定的作用范围。如果一个判定的作用范围包含在这个判定所在模块的控制范围之内 则这种结构是简单的,否则,它的结构是不简单的。 ④尽可能减少髙扇出结构,经验证明,一个设计得很好的软件模块结构,通常上层扇 出比较高,中层扇出较少,底层扇入到有高扇入的公用模块中
13 在事务型系统结构图中,事务中心模块按所接受的事务的类型,选择某一个事务处理模 块执行。各个事务处理模块是并列的,依赖于一定的选择条件,分别完成不同的事务处理工 作。每个事务处理模块可能要调用若干个操作模块,而操作模块又可能调用若干个细节模块。 不同的事务处理模块可以共享一些操作模块。同样,不同的操作模块又可以共享一些细节模 块。 事务型系统结构图在数据处理中经常遇到,但是更多的是变换型与事务型系统结构图的 结合。例如,变换型系统结构中的某个变换模块本身又具有事务型的特点。 (4) 变换映射 变换映射是体系结构设计的一种策略。运用变换映射方法建立初始的变换型系统结构 图,然后对它做进一步的改进,最后得到系统的最终结构图。设计的步骤如下。 步骤 1:复审基本系统模型(0 层数据流图和支持信息)。评估系统规格说明和软件需求 规格说明。 步骤 2:复审和细化软件的数据流图。重画数据流图时, 可以从物理输入到物理输出, 或者相反. 还可以从顶层加工框开始,逐层向下。 步骤 3:确定数据流图中含有变换流特征还是含有事务流特征。通常,系统的信息流总 能表示为变换型,但其中也可能遇到明显的事务流特征,这时可采用变换型为主,在局部范 围采用事务型的设计方法。 步骤 4:区分输入流、输出流和中心变换部分,即标明流的边界。不同的设计人员可能 选择不同的流边界,这将导致不同的系统结构图。 步骤 5:进行一级“因子化”分解,设计顶层和第一层模块。 首先设计主模块,用程序名字为它命名,将它画在与中心变换相对应的位置上。做为系 统的顶层,它调用下层模块,完成系统所要做的各项工作。系统结构第一层的设计方针:为 每一个逻辑输入设计一个输入模块,它为主模块提供数据;为每一个逻辑输出设计一个输出 模块,它将主模块提供的数据输出;为中心变换设计一个变换模块,它将逻辑输入转换成逻 辑输出。第一层模块与主模块之间传送的数据应与数据流图相对应。 步骤 6:进行二级“因子化”分解,设计中、下层模块。这一步工作是自顶向下,逐层 细化,为每一个输入模块、输出模块、变换模块设计它们的从属模块。 输入模块要向调用它的上级模块提供数据,因而它必须有两个下属模块:一个是接收数 据;另一个是把这些数据变换成它的上级模块所需的数据。输出模块是从调用它的上级模块 接收数据,用以输出,因而也应当有两个下属模块:一个是将上级模块提供的数据变换成输 出的形式;另一个是将它们输出。中心变换模块的下层模块没有通用的设计方法,一般应参 照数据流图的中心变换部分和功能分解的原则来考虑如何对中心变换模块进行分解。 步骤 7:利用一些启发式原则来改进系统的初始结构图,直到得到符合要求的结构图为 止。这些启发式原则大致有: ① 模块功能的完善化。一个完整的功能模块,不仅应能完成指定的功能,而且还应当 能够告诉使用者完成任务的状态,以及不能完成的原因。 ② 消除重复功能,改善软件结构。在系统的初始结构图得出之后,应当审查分析这个 结构图。如果发现几个模块的功能有相似之处,可以加以改进。 ③ 模块的作用范围应在控制范围之内。模块的控制范围包括它本身及其所有的从属模 块。模块的作用范围是指模块内一个判定的作用范围,凡是受这个判定影响的所有模块都属 于这个判定的作用范围。如果一个判定的作用范围包含在这个判定所在模块的控制范围之内, 则这种结构是简单的,否则,它的结构是不简单的。 ④ 尽可能减少高扇出结构,经验证明,一个设计得很好的软件模块结构,通常上层扇 出比较高,中层扇出较少,底层扇入到有高扇入的公用模块中