程序结构或程序物理结构是对要解决的问题或要设计的系统的一种分层的表示方法,它指出了组成程序(系统)的各个元素(即各个模块),以及它们之间的关系。程序结构是从需求分析阶段定义的分析模型导出的。
程序结构隐含着控制层次的关系,但不表示程序的具体算法或过程关系,即不表示诸如处理的顺序、选择的出现和次序、操作的循环等。程序结构通常用软件结构图的形式表示。
结构化的程序设计方法经常被描述为面向数据流的设计方法,因为它提供了方便了从数据流图向软件结构图的变换。具体变换步骤如下:
(1)确定数据流图的特点及边界;
(2)映射为软件结构,得到两层结构图,表明结构控制信息及主要数据流;
(3)细化后得到初始结构图;
(4)获得最终的软件结构图。
具体步骤之间的关系请参阅图4-14。
图4-14 数据流图向软件结构转换的步骤
软件结构图也叫系统结构图或控制结构图,它与数据流程图、过程结构图和编码等作为一组标准的图表工具,用来描述系统层次结构和相互关系,是结构化系统设计的常用方法,它表示了系统构成的模块以及模块间的调用关系。
结构图中常用符号包括下述几种类型(见图4-15):
图4-15 系统结构图中常用符号
(1)传入模块——从下属模块取得数据,经过某些处理,再将其传送给上级模块。它传送的数据流叫作逻辑输入数据流。
(2)传出模块——从上级模块获得数据,进行某些处理,再将其传送给下属模块。它传送的数据流叫作逻辑输出数据流。
(3)变换模块——它从上级模块取得数据,进行特定的处理,转换成其他形式,再传送回上级模块。它加工的数据流叫作变换数据流。
(4)协调模块——对所有下属模块进行协调和管理的模块。
1.数据流类型划分
(1)事务流:数据流经常可以被描述成有一个称为事务的单个数据项,它可以沿多条路径之一触发其他数据流(见图4-16)。数据沿某输入路径流动,该路径将外部信息转换为事务,事务被估值,根据其值启动很多动作路径之一的数据流,其中发射出多条动作路径的数据流中心被称为事务中心,具有这样特点的数据流就是事务流。
图4-16 事务型数据流
(2)变换流:为了处理方便,外部数据形式必须转化成内部形式,信息沿各种将外部数据变换为内部数据形式的路径进入系统,这些路径被标识为输入流。在软件的核心,有一个变迁发生,输入数据通过“变化中心”,并沿各种路径流出软件,沿这些路径流出的数据称为“输出流”。整个的数据流动以一种顺序的方式沿一条或仅仅很少的几条“直线”路径进行。如果一部分数据流图体现了这些特征,就是变换流。不同类型数据流之间的关系如图4-17所示。
图4-17 不同类型数据流之间的关系
区分不同的数据流类型的目的是在映射为系统的体系结构时,映射为不同的结构。变换流要经过变化分析转换为系统体系结构,而事务流经过事务分析转换为系统体系结构。
2.事务分析
虽然在任何情况下都可以使用变换分析方法设计软件结构,但是在数据流具有明显的事务特点时,也就是有一个明显的“发射中心”(事务中心)时,还是以采用事务分析方法为宜。
事务分析的设计步骤和变换分析的设计步骤大部分相同或类似,主要差别仅在于由数据流图到软件结构的映射方法不同。对于一个大型系统,常常把变换分析和事务分析应用到同一个数据流图的不同部分,由此得到的子结构形成“构件”,可以利用它们构造完整的软件结构。事务型的数据流图因为其对于数据输出处理上的不同,存在两种类型的软件结构图,典型的事务型数据流图为对应的软件结构图。
第一种是每个不同的事务具有自己的输出,如图4-18所示。
图4-18 事务型数据流的转换1
第二种是事务处理所得到的结果有统一的输出处理过程对应的软件结构图,如图4-19所示。
图4-19 事务型数据流的转换2
以上两种事务型数据流图不同之处在于:不同的事务类型处理的方式最终是否统一进行输出处理,如果没有统一的输出,则系统结构图属第一种情况;否则属于第二种情况。
下面我们一起来看一个关于图书管理的例子。该系统包括的主要功能有以下几种。(www.xing528.com)
(1)借书:藏书者将图书借给拣书者,修改图书信息。
(2)还书:拣书者将图书还给藏书者,修改图书信息。
(3)晒书:将图书信息公布到晒书场,供拣书者选择。
(4)预约:预约借书或者预约还书。
(5)图书信息管理:藏书者管理个人的图书信息。
(6)用户信息管理:系统管理员管理用户的信息。
根据上述6个功能,数据流图如图4-20所示。
图4-20 图书管理系统的数据流图
这6项功能可根据系统用户的业务需求选择某一项并按照用户要求进行相应的处理。可以分析出来,这6项功能是根据用户选择进行的,不是按照顺序依次进行的,所以该数据流图是事务型的。按照事务分析的过程,先要仔细核对数据流图,找到事务中心。本实例中,没有明显的事务中心,而实际系统用户在使用系统时一定是通过一个统一的界面来进行功能选择的,然后按照事务分析的过程进行一级分解,得到的相应的系统结构图如图4-21所示。
图4-21 订单处理子系统的系统结构图
3.变换分析
变换分析是一系列设计步骤的总称,经过这些步骤把具有变换流特点的数据流图按预先确定的模式映射成软件结构。下面通过一个例子说明变换分析的方法,如图4-22所示。
图4-22 将变换型数据流图转换为软件结构图
具体步骤:
(1)复查基本系统模型;
(2)复查并精化数据流图;
(3)确定数据流图具有变换特性还是事务特性;
(4)确定输入流和输出流的边界,从而孤立出变换中心;
(5)完成“第一级分解”;
(6)完成“第二级分解”;
(7)使用设计度量和启发规则对第一次分割得到的软件结构进一步精化。
对于大型的DFD,变换中心的边界的确定是值得注意的问题。一般从系统输入端开始,向系统内部移动,直到该数据流不再认作是一种输入的地方,可以确定传入路径的边界,不同的边界会有不同的设计,这一点必须注意。下面一起来看一个变换型DFD的实例,它是晒书子系统中DFD的片段,如图4-23所示。
图4-23中编号为2.3的处理过程主要是根据用户对图书晾晒状态的修改,记录修改后的图书晾晒状态,然后编号2.4的处理是将修改后的新的状态显示于图书晾晒界面。对于上述数据流图片段划分输入/输出边界,结果如图4-24所示。
按照变换分析的步骤,将DFD进行变化分析,得到系统结构图,如图4-25所示。其中输入边界以内的部分需要进行二级分解和映射。
图4-23 晒书子系统的DFD片段
图4-24 确定输入和输出边界
图4-25 系统结构图
完成系统结构图后,还要做一个很重要的事情就是对已完成的结构图进行优化,优化的原则就是使用软件设计原理和原则,尤其是模块的独立性原则。
考虑设计优化问题时应该记住:一个不能工作的“最佳设计”的价值是值得怀疑的。软件设计人员应该致力于开发能够满足所有功能和性能要求,而且按照设计原理和启发式设计规则衡量是值得接受的软件。应该在设计的早期阶段尽量对软件结构进行精化,然后对不同的软件结构进行评价和比较,力求得到“最好”的结果。这种优化的可能,是把软件结构设计和过程设计分开的真正优点之一。
注意区分事务型数据流图和中心变换型数据流图。虽然中心变换型数据流图可能会存在分支的情况,但如何区分此时的分支是哪种情况呢?其中最显著的区分就是事务型的分支在运行过程中有路径的选择性,也就是当判断出具体事务类型之后,其他的路径将不会执行;但中心变换型的数据流图(在特定条件下)将会执行全部分支。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。