加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

面向数据流的设计方法

(2015-10-26 14:07:10)
标签:

软件

设计

数据流图

分类: 软件过程改进

1. 从数据流到程序结构

       所有的软件行为模型都可以用数据流图表示,从理论角度讲,数据流图的设计方法适用于各种软件开发。面向数据流的设计在那些信息需要顺序处理,并且基本没有层次数据结构的应用中特别有效。例如微处理器控制、数值分析过程、过程控制和类似的工程和科学应用软件。

在某些应用中其他设计方法可能更有效,数据流方法可以作为辅助手段。例如数据库系统、专家系统、面向对象系统界面等。

面向数据流的设计可以方便地从分析模型转换导出程序结构的设计描述。这种从信息流(用数据流图表示)向结构的变迁是按一下过程完成的:

(1  建立数据流图。进行系统的结构化分析,把系统表示为各项任务的分层次的对数据的加工处理;

(2  明确流的边界;

(3  DFD映射到程序结构。两种映射策略:变换流和事务流,以及这两种类型的组合。

(4  用“因子化”的方法定义控制的层次结构。一般原则是顶层模块执行控制处理服务,下层模块实现具体数据的加工处理;

(5  对由数据流图和控制流图导出的系统初始结构图,按照设计度量和设计经验进行求精优化,直到满意。

(6  安全性分析,确定安全关键模块,并采取安全性措施。

(7  修改增补数据字典。

程序结构的设计过程是按“抽象细化自顶向下”的思维方法进行的。

面向数据流的系统结构图中的典型模块:传入模块、传出模块、变换模块(变换型处理的中心)和协调模块(事务型处理的中心)。

每确定建立一个新模块,先将它抽象为一个黑盒,定义模块的外部特征(IPO):模块的功能,即该模块“做什么”;该模块的外部接口,即与其他模块传送的参数。

对已建立的模块“细化”,考虑模块内部如何完成它的功能,即模块应“怎样做”,于是在下一层建立新模块。

每一个模块应明确执行某项任务,并应包含不能完成任务时的对策,后者一般不应分离到其他模块。

每建立一个新的模块,应注意赋予该模块一个合适的名字,这个名字应能明确并正确地表达该模块的功能。

通过“先决定做什么,再考虑怎么做”的循环过程,直至得到完整的层次结构。

经验试探原则:层次结构清晰,对可预见的功能扩充预留接口;模块功能单一、完善;消除重复功能,改善结构;模块作用范围关系;扇入扇出约束;模块大小(McCabe 复杂度一般控制在7 ~ 10,程序流程图(或PDL)可以画在一张纸内)限制等。

模块的设计应逐步细化,并注意模块调用传递的信息应该与同一层的数据流图的数据流相对应。

 

2. 变换型结构

 

    变换型是与输入-变换-输出顺序信息流模型对应的结构。属于变换型结构的系统的数据流有三个部分:传入路径、主加工变换和传出路径。主加工变换是系统的中心部分。从系统输入设备得到的“物理输入”经过格式转换、合理性检查等以系列辅助加工后,变成“逻辑输出”,传送给“逻辑处理部分”主加工变换,主加工变换产生的“逻辑输出”经过格式转换、编辑和缓冲处理等辅助加工后,成为“物理输出”传到外部世界。变换型结构见下图。

http://s4/mw690/004k5XOCzy6Wvly4wYb33&690

使用变换分析,从需求规格说明的数据流图导出变换型程序结构,步骤有三:

1  在数据流图中识别出上述基本成分。

2  设计一个两层结构图:顶层模块是系统的总控模块,第一层由输入模块、变换模块和传出模块组成。

3  将第一层的三类模块进一步细化,完成变换型系统的结构设计。

  下面以环境测量系统为例说明变换型结构的设计过程。

6.4.2.1-2是需求规格说明中的功能数据流图;

 http://s12/mw690/004k5XOCzy6WvlpGvGz2b&690


6.4.2.1-3是数据流图对应的程序结构图;

http://s16/mw690/004k5XOCzy6WvlrQht57f&690


3. 事物型结构

    事务型结构的系统根据不同的事务类型,选择进行某个事务处理。它的功能主要为对传入的信息分析判断,按分析判断的结果调度,进行要求的操作活动。

       事务型系统的程序结构一般有三个模块层次:事务处理层、事务活动层和活动细节层。顶层的事务处理模块接收、分析事务类型,选择调用某个事务操作。每个事务操作模块,按需求规格说明调用若干细节模块。细节模块按需求规格说明可以有多个层次。不同的事务操作可能有一些共同的细节,所以不同的事务操作模块可能共用一些不同层次的细节模块。当接收分析处理或选择调用处理较复杂时,可以将顶层模块分解为接收分析事务模块和调度模块。事务型系统的程序可以有两种模块层次结构。事务型结构见图6.4.2.2-1


    下面是事务型系统的结构设计示例。

4. 混合型结构

实际的软件系统是变换型和事务型结构的混合结构。通常以变换分析为主,事务分析为辅的方式进行结构设计。在结构设计时,先利用变换分析方法把系统分解为输入、中心处理和输出三部分,设计出结构图的上层模块,然后根据数据流图(控制流图)各部分的结构特点,灵活运用变换分析和事务分析,得到系统的初始结构图。

初始结构图只是满足系统的方案之一,通常不是一个好方案,并且还需要按照需求规格说明中定义的种种约束补充完善系统的结构图。因此在导出初始结构图后,尚有大量的补充和改进的工作。

上述讨论的假设是系统工作在单任务的状态,系统是一个层次的结构。如果系统是在多任务状态下运行,那么需要将数据流图中的加工按任务划分开。每一个任务设计成一个层次结构。任务间的联系用通信方式实现。

一下是医监数据采集系统的实例。

4.1  系统需求:

       定时循环采集三个座椅上的航天员的脉搏、体温、血压、呼吸、皮肤湿度等生理参数,将这些参数存储入数据库(或遥测下行)。对各生理参数和探测硬件进行监测,发现生理参数越界安全范围或探测硬软故障,则发出通知。

A:乘员、生理参数、巡检结束标志、硬件故障字

B:乘员、生理参数、硬件故障字

C:乘员、生理参数、硬件故障字、参数不安全标志

D:设备故障标志

B:乘员、生理参数、参数不安全标志

R:乘员座椅号对照值

S:乘员、生理参数、硬件故障字

T:参数安全范围  

4.2 初次结构图:

L1:(U:乘员、生理参数、巡检结束标志、硬件故障字)

L11:(U:乘员、座椅号、巡检结束标志)

L12:(D:座椅号;U:生理参数、硬件故障字)

L2:(D:乘员、生理参数、硬件故障字;U:参数不安全标志、设备故障标志)

L21:(D:生理参数;U:参数野值标志)

L22:(D:乘员; U:参数安全范围)

L23:(D:生理参数、参数安全范围、硬件故障字; U:参数不安全标志)

L3:(D:乘员、生理参数、设备故障标志、参数不安全标志)

L31:(D:乘员、生理参数、设备故障标志)

L32:(D:乘员、设备故障标志)

L33:(D:乘员、生理参数、参数不安全标志)

Li 表示第一次与第二层之间传递的信息,从左项右数字递增;Lij 表示第二层与第三层间传递的信息;D表示自上而下传递的信息;U表示自下而上传递的信息。

4.3 改进后的最终结构图

http://s11/mw690/004k5XOCzy6WBMxSa388a&690

L1:(U:乘员、生理参数、巡检结束标志、设备故障标志)

L11:(U:乘员、巡检结束标志)

L12:(D:乘员;U:生理参数、设备故障标志)

L121:(D:乘员、U:座椅号)

L122:(D:座椅号; U:生理参数、设备故障标志)

L123:(D:座椅号、设备故障标志)

L2:(D:乘员、生理参数、设备故障标志;)

L21:(D:乘员; U:参数安全范围)

L22:(D:生理参数、参数安全范围、设备故障标志; U:参数不安全标志)

L23:(D:乘员、生理参数、参数不安全标志)

L3:(D:乘员、生理参数、设备故障标志)

4.4  小结:

       建立了初始结构图之后,应该考虑对结构图的逐步改进优化。结构图的改进优化是按照结构化设计的概念和原则进行的。使每个模块执行一个功能,模块间以数据型参数联系,而且参数尽可能少。设计师逐个检查模块和界面,寻找可以改进的地方。在以上实例中,主要关注点如下:

a. 减少块间联系,本例中考虑最多的是减少数据流在模块间传送的路径和参数。

b. 消除重复的功能。

c. 消除数据流“直通管道”型模块。

d. 当模块篇幅较大或复杂度较高时,可以分离相对独立的功能建立下层模块。

e. 当模块篇幅不大且功能相关度较高时,可以与下层模块合并。

f. 优化要从系统结构考虑,不是仅限于一些局部细节。

g. SASystem Analysis)过程引入的缺陷,可以在SDSystem Design)过程中予以纠正。

       建立初始结构图时,要善于抽象思维略去细节问题,先按DFD画出初步程序结构图,然后按设计原则在改进过程中逐步优化。



----------END------------


0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有