数据流图的画法
- 格式:doc
- 大小:180.00 KB
- 文档页数:13
数据流图(DFD)画法要求一、数据流图(DFD)1.数据流图的基本符号数据流图由基本符号组成,见图5-4-1所示。
图5-4-1 数据流图的基本符号例:图5-4-2是一个简单的数据流图,它表示数据X从源S流出,经P加工转换成Y,接着经P加工转换为Z,在加工过程中从F中读取数据。
图5-4-2数据流图举例下面来详细讨论各基本符号的使用方法。
2.数据流数据流由一组确定的数据组成。
例如“发票”为一个数据流,它由品名、规格、单位、单价、数量等数据组成。
数据流用带有名字的具有箭头的线段表示,名字称为数据流名,表示流经的数据,箭头表示流向。
数据流可以从加工流向加工,也可以从加工流进、流出文件,还可以从源点流向加工或从加工流向终点。
对数据流的表示有以下约定:对流进或流出文件的数据流不需标注名字,因为文件本身就足以说明数据流。
而别的数据流则必须标出名字,名字应能反映数据流的含义。
数据流不允许同名。
两个数据流在结构上相同是允许的,但必须体现人们对数据流的不同理解。
例如图5-4-3(a)中的合理领料单与领料单两个数据流,它们的结构相同,但前者增加了合理性这一信息。
两个加工之间可以有几股不同的数据流,这是由于它们的用途不同,或它们之间没有联系,或它们的流动时间不同,如图5-4-3(b)所示。
(a)(b)(c)图5-4-3 简单数据流图举例数据流图描述的是数据流而不是控制流。
如图5-4-3 (c)中,“月末”只是为了激发加工“计算工资”,是一个控制流而不是数据流,所以应从图中删去。
3.加工处理加工处理是对数据进行的操作,它把流入的数据流转换为流出的数据流。
每个加工处理都应取一个名字表示它的含义,并规定一个编号用来标识该加工在层次分解中的位置。
名字中必须包含一个动词,例如“计算”、“打印”等。
对数据加工转换的方式有两种:改变数据的结构,例如将数组中各数据重新排序;产生新的数据,例如对原来的数据总计、求平均等值。
4.文件文件是存贮数据的工具。
最初的数据流图应是描述当前的实际情况,即当前存在的人工数据处理情况(尽管当前情况也许有许多不合理之处),为此分析员应将他在一个企业组织中看到听到的事实如实画出来。
用户目前使用的单据、表格、卡片、清单等资料就是“数据流”或“文件”。
用户目前在做的工作就是“加工”,它们的名字就是用户习惯使用的名字。
总之,在刚开始时只是将现实情况反映出来,而不是急于去想像未来的计算机系统是怎样的。
在画数据流图时,首先应画出系统的输入数据流和输出数据流,也就是先决定系统的范围,然后再考虑系统的内部,同样,对每一个加工来说也是先画出它们的输入输出,再考虑这个加工的内部。
✧画系统的输入输出刚开始分析时,系统究竟应包括哪些功能还不清楚,所以我们应该保险一些,使系统的范围稍大,把可能有关的内容都包括进去。
此时应该向用户了解,“系统从外界接受什么数据?”,“系统向外界送出什么数据?”等,然后根据他们的答复画出数据流图的外围。
如培训中心管理系统从外界接受的数据是“函电”,向外界送出的数据是“通知单”,则数据流图的外围如图3.l1所示。
这时,我们不必担心是否有输入输出数据流被遗漏了,因为遗漏的数据流以后能够发现的。
✧画系统的内部逐步将系统的输入和输出数据流用一连串加工连接起来,一般可以从输入端逐步画到输出端,也可以反过来从输出端追溯到输入端。
在数据流的组成或值发生变化的地方应画上一个“加工”,它的作用就是实现这一变化。
如果系统中有一组数据,用户把它们作为一个单位来处理(如,一起到达,一起被加工)则应将这组数据看成是一个数据流。
反之,不要把一些相互无关的,用户也并不将它们看成为一个整体来处理的若干数据画成一个数据流。
对每一个数据流应该了解它的组成是什么,这些组成项来自何处,这些组成项如何组合成这一数据流,为实现这一组合还需要什么有关的加工和数据等等。
数据流图中还要画出有关的文件,即各种存贮的数据,此时也应了解文件的组成情况。
✧画加工的内部用“由外向里”的方式,可以继续分析每个加工的内部,如果加工的内部还有一些数据流,则可将这个加工用几个子加工代替,并在子加工之间画出这些数据流。
如何画数据流图数据流图是一种信息系统建模工具,用于描述系统中数据的流动和处理过程。
它通过标识数据流、处理模块、数据存储以及外部实体之间的关系来展现系统内部的结构和功能。
数据流图可以帮助人们更好地理解系统的各个组成部分以及它们之间的交互方式。
在数据流图中,数据流通过箭头表示,并附带标签描述数据的内容。
处理模块用矩形框表示,其中包含处理的功能描述。
数据存储通常用平行四边形表示,代表数据的存储和检索操作。
而外部实体则用双框表示,代表与系统进行交互的外部元素。
绘制数据流图的步骤如下:1. 确定系统范围:首先要明确需要绘制数据流图的系统的范围。
确定系统的输入、输出以及系统边界,确保数据流图能够囊括系统的主要功能。
2. 识别外部实体:根据系统的输入和输出,识别系统与外部实体之间的交互方式。
将这些外部实体标识为数据流图中的双框。
3. 标识数据流:分析系统中数据的流动路径,将数据流标识为数据流图中的箭头,并附带描述数据内容的标签。
4. 划分处理模块:确定系统中的处理功能,并将其划分为不同的处理模块。
每个处理模块用矩形框表示,并附带描述处理过程的标签。
5. 确定数据存储:分析系统中的数据存储和检索操作,并将其标识为数据流图中的平行四边形。
6. 连接各个组件:根据系统中各个组成部分的关系,使用箭头将外部实体、数据流、处理模块和数据存储连接起来。
7. 完善数据流图:检查数据流图的准确性和完整性,确保图中的每一个组件都能正确描述系统的功能和结构。
在绘制数据流图的过程中,需要注意以下几点:1. 粒度控制:数据流图应该尽量保持一定的层次结构,避免将系统的细节描述得过于复杂。
2. 清晰明了:数据流图上的标签应该简明扼要,能够准确描述数据流的内容和处理模块的功能。
3. 一致性:数据流图的符号、标签和命名应该保持一致,方便读者的理解和识别。
4. 反复迭代:数据流图是一个动态的工具,随着对系统的了解加深,可能需要不断地进行修改和调整。
如何画数据流图数据流图是一种用来描述系统中数据流动和处理流程的图形化工具。
它可以帮助用户理清系统在数据处理方面的整个过程,并可从中发现问题和优化解决方案。
数据流图通常是由以下几个部分组成:数据流,加工,存储和外部实体。
下面我们将详细讲解如何画数据流图。
一、准备工作画数据流图需要我们先了解该系统或过程的整体架构,明确对数据流向和处理流程的需求。
以下这些准备工作需要完成:1. 确定范围:确定数据流图的范围,即确定我们所要绘制的数据流图的具体应用场景和所包含的系统模块或过程。
2. 确认实体:确定系统中的内部和外部实体,内部实体指具有处理功能的模块(或部门),外部实体指与系统交互的其他系统、组织或个人。
3. 确认数据流:明确数据的流向和形式。
4. 确认加工:确定哪些功能模块和处理过程被用于对数据进行处理。
5. 确认数据存储:确定数据存储的位置和类型,以及数据在存储过程中的变化。
二、画图流程针对上述准备工作,我们开始进行画图。
1. 绘制外部实体外部实体即对于系统而言是接入的,需要绘制它们与系统之间的数据流动线路。
绘制外部实体通常是一个矩形,内部注明实体的名称。
在数据流图中,各个外部实体之间可以相互连接,也可以连接系统内部的各个实体。
2. 定义数据流通常情况下,数据流都是从一个实体流向另一个实体,表示数据的传递过程。
所以,在画图时需要以箭头的形式来表示其流动方向,并在箭头中标明数据类型和名称。
箭头的形状可以有很多种,例如圆形、三角形、矩形、菱形等等,不同的形状对应不同的含义。
3. 确定加工过程加工过程是指数据在系统中的处理过程,通常画图时需要将其以一个矩形的形式表示出来。
在矩形内注明模块名称和编号。
其属性包括输入输出,内部处理,控制等。
4. 标出数据存储数据存储通常是指在系统中的存储、传递、读取等过程中使用的数据存储介质,如文件、数据库等。
画图时需要用一个中间框架来表示。
在框架内注明存储介质、存储方式、存储数据类型等相关信息。
最初的数据流图应是描述当前的实际情况,即当前存在的人工数据处理情况(尽管当前情况也许有许多不合理之处),为此分析员应将他在一个企业组织中看到听到的事实如实画出来。
用户目前使用的单据、表格、卡片、清单等资料就是“数据流”或“文件”。
用户目前在做的工作就是“加工”,它们的名字就是用户习惯使用的名字。
总之,在刚开始时只是将现实情况反映出来,而不是急于去想像未来的计算机系统是怎样的。
在画数据流图时,首先应画出系统的输入数据流和输出数据流,也就是先决定系统的范围,然后再考虑系统的内部,同样,对每一个加工来说也是先画出它们的输入输出,再考虑这个加工的内部。
✧画系统的输入输出刚开始分析时,系统究竟应包括哪些功能还不清楚,所以我们应该保险一些,使系统的范围稍大,把可能有关的内容都包括进去。
此时应该向用户了解,“系统从外界接受什么数据?”,“系统向外界送出什么数据?”等,然后根据他们的答复画出数据流图的外围。
如培训中心管理系统从外界接受的数据是“函电”,向外界送出的数据是“通知单”,则数据流图的外围如图3.l1所示。
这时,我们不必担心是否有输入输出数据流被遗漏了,因为遗漏的数据流以后能够发现的。
✧画系统的内部逐步将系统的输入和输出数据流用一连串加工连接起来,一般可以从输入端逐步画到输出端,也可以反过来从输出端追溯到输入端。
在数据流的组成或值发生变化的地方应画上一个“加工”,它的作用就是实现这一变化。
如果系统中有一组数据,用户把它们作为一个单位来处理(如,一起到达,一起被加工)则应将这组数据看成是一个数据流。
反之,不要把一些相互无关的,用户也并不将它们看成为一个整体来处理的若干数据画成一个数据流。
对每一个数据流应该了解它的组成是什么,这些组成项来自何处,这些组成项如何组合成这一数据流,为实现这一组合还需要什么有关的加工和数据等等。
数据流图中还要画出有关的文件,即各种存贮的数据,此时也应了解文件的组成情况。
✧画加工的内部用“由外向里”的方式,可以继续分析每个加工的内部,如果加工的内部还有一些数据流,则可将这个加工用几个子加工代替,并在子加工之间画出这些数据流。
应注意的问题:✧适当地命名数据流图中每一成分的命名是否恰当与数据流图的易理解性有直接的关系,所以命名时应该仔细推敲。
为数据流命名时应注意以下几点:1) 为避免引起错觉,名字要适合于整个数据流,而不是仅仅反映它的某些成分。
2) 避免用空洞的名字,如“数据”、“信息”、“输入”、“输出”之类,因为这种名字缺乏具体的含义。
3) 如果发现难以为某个数据流命名,这往往是数据流图分解不当的征兆,此时可以试试重新分解是否能解决这个难题。
通常应先为数据流命名再为加工命名,这也反映了“由外向里”的思考过程。
图3.12中,如果加工的输入输出已命名为“取款单”和“合理取款单”,则加工的名字显然应是“检查合理性”,反之,先为加工命名再考虑其输入输出,则不会这样容易。
为加工命名,应注意以下几点:1)为避免错觉,名字应反映整个加工,而不是它的一部分工作。
2)如果加工的名字能由一个具体的及物动词加上一个具体的宾语构成,则是最理想的。
如“计算工资”、“收集函电”、“开发票”等都是较好的名字。
“加工”、“处理”等空洞的动词应尽量避免。
另外,名字中只要一个动词就够了,如果必须用两个动词,则把这个加工再分解成两个可能更合适些。
在实际问题中,上述理想的名字不一定能得到,在上层的数据流图尤为困难。
3)如碰到难以适当命名的加工,这往往是分解不当的迹象,此时应考虑重新分解。
画数据流而不是控制流数据流图与传统的框图是不同的,数据流图是从数据的角度来描述一个系统,而框图则是从对数据进行加工的工作人员的角度来描述系统。
数据流图中的箭头是数据流,而框图中的箭头则是控制流,它表达的是程序执行的次序。
在宏观地分析一个组织的业务概况时从数据流的角度来理解问题比较合适,所以采用数据流图,而框图只适用于描述系统中某个加工的执行细节。
数据流图中强调数据流而不强调控制流,所以从图中一般是看不出执行次序的,例如图3.2中,我们看不出“产生发票”这个加工是每接收到一张“报名单”就进行工作,还是每天工作一次,这个问题可推迟至建立“小说明”时才加以考虑。
为了区别数据流和控制流,我们只需问一个问题:“这条线上有什么数据流过?”,如果没有,它就是控制流,在数据流图中就不应将它画出。
✧先考虑稳定状态画数据流图时,暂不必考虑系统是如何开始工作的、如何结束的,只假定它能开始运行就是了,这是为了集中精力先考虑稳定状态下的种种问题,所以将系统的“开始”和“结束”等问题推迟到适当的时候才予以考虑。
✧忽略琐碎的枝节画数据流图时,应集中精力于主要的数据流,而暂不考虑一些例外情况、出错处理等枝节性问题。
我们只需在图中画出这些枝节性数据流就可以了〔如图3.2中的数据流“不合理),而不必沿着它们再进一步分析下去。
虽然大多数系统都要花较多的精力来考虑例外情况、出错处理等,但这些问题对理解整个系统并没有很大的影响,因此可以放心地推迟考虑。
✧随时准备重画理解一个问题总要经过从不正确到正确,从不恰当到恰当的过程,一次就成功的可能性是很小的,对复杂的问题尤其如此,分析员应随时准备抛弃旧的数据流图而用更好的版本来代替它,在分析阶段重画几张图是很小的代价,只要能获得更正确清晰的需求说明书,使得设计、编程等阶段节省大量的劳动力,这样做是完全值得的。
反之,在分析阶段草草了事,使一些隐患潜伏下来,到开发后期再来纠正,代价就太大了。
对一个大型的系统,如用一张数据流图画出所有的数据流和加工,则图纸将极其庞大复杂,因而难以理解。
为了控制复杂性,SA方法采用“分层”的技术。
培训中心管理系统的数据流图只有一层,但是如果编号为3的加工“付款”和编号为7的加工“复审”仍很复杂,一时难以理解,则可以将它们进一步分解成加工3.1、3.2、……,以及加工7.1、7.2、7.3、……。
”等,如此继续下去,直到每个加工都足够简单易于理解为止。
逐层分解的方式不是一下子引进太多的细节,而是有控制地逐步增加细节,实现从抽象到具体的逐步过渡,这是有助于理解一个复杂的问题的。
用数据流图来描述“逐层分解”,就得到了一套分层的数据流图。
图3.13(a)是某系统的数据流图。
这个系统修改放在磁带中的一个主文件上,对文件作修改的信息放在卡片上。
该系统读入一叠卡片,按卡片上的修改信息对磁带中的记录作相应修改,然后产生新的主文件。
图3.13(a)画出了这个系统的所有加工和数据流,它是比较复杂的,不很容易理解。
但是如果用一套分层的数据流图来描述就清楚多了(见图3.13(b))。
图3.13(b)对系统的描述是容易使人理解的。
顶层图说明了系统的输入数据是“旧主文件”和“修改卡片”,系统的输出数据是“新主文件”。
下一层的图0是中间层,它说明系统分成三部分,并描述了各部分之间的联系。
由于每一部分还较复杂,所以它们又分别分解成图1、图2和图3。
图l说明“产生修改信息”这一部分又分成三部分,它们分别是检查卡片的顺序、对卡片进行编辑以及构成一定格式的修改信息。
图2说明“产生记录”这一部分分成核对检查和、构成一定格式的主记录两部分。
图3说明“产生新文件”这一部分分成四部分,分别是检查记录和修改信息是否匹配、修改、产生新记录、配上检查和等。
显然,上述“由顶向下逐层分解”的理解和表达过程,比一下子抛出系统的所有细节(一次性分解)是优越多了。
一套分层的数据流图由顶层、底层和中间层组成。
顶层图说明了系统的边界,即系统的输入和输出数据流,顶层图只有一张。
底层图由一些不必再分解的加工组成,这些加工都已足够简单,称为基本加工。
在顶层和底层之间的是中间层。
中间层的数据流图描述了某个加工的分解,而它的组成部分又要进一步被分解。
较小的系统可能没有中间层,而大的系统中间层可达8、9层之多。
图3.13(b)中,顶层图被称为是图0的“父图”, 图0称为是顶层图的“子图”;同样,图0是图l、图2和图3的“父图”,图l、图2和图3是图0的“子图”。
父图中有几个加工,它就可以有几张子图,本例中图0有三个加工,所以它可以有三张子图,但也可能少于三张,因为父图中可能有些加工已足够简单,因而可以作为基本加工不再分解了。
分层数据流图只是表达了系统的“分解”,为了完整地描述这个系统,还需借助“数据词典”和“小说明”对图中的每个数据和加工给出解释。
描绘分层数据流图按“由顶向下”的原则进行,描绘中应注意的问题:编号为了便于管理,需按以下规则为数据流图和其中的加工编号:1)子图的编号就是父图中相应加工的编号。
2) 子图中加工的编号由子图号、小数点、局部号连接而成。
顶层图只有一张,故不必编号,下一层的图可以编号为0,图中加工的编号就是0.1、0.2、0.3,通常我们删去小数点前面的0,所以这些加工的编号就是1、2、3。
有了这样的规则,只要数一下子图编号的小数点数,就可知道这张于图位于哪一层,另外,根据编号就可知道某一张图的父图是哪一张。
为简单起见,在一张图的内部,每个加工往往只用它们在这张图中的局部号表示,而不必再重复写出子图的编号(图3.14),但是在小说明中,仍需使用加工的完整编号,如图3.14中最左边一个加工在小说明中应注明编号是4.1(说明它是子图4中的第一个加工)。
一套分层的数据流图可按编号次序用活页形式装订起来,形成一本便于查阅的资料。
父图和子图的平衡图3.15是父图(图0)和它的一张子图(图4)。
父图中的加工4被分解成子图中的五个加工。
子图也是描述父图中的加工4,差别仅在于子图是详细的描述而父图是抽象的描述而已,所以子图的输入、输出数据流应该同父图中加工4的输入输出完全一致。
父图应与子图“平衡”。
所谓“平衡”是指子图的所有输入数据流必须是父图中相应加工的输入,子图的所有输出数据流必须是父图中相应加工的输出。
图3.l5是平衡的,因为父图中加工4的输入、输出与子图中的输入、输出完全相同。
图3.16的父图和子图是不平衡的,因为子图中没有输入数据流与父图中加工2的输入流M 相对应。
另外,子图的输出数据流S在父图中也没有出现。
图3.17的父图和子图平衡吗?从图上看,子图与父图中相应加工并不具有相同的输入和输出,但是如果从词典中查出:父图只称为“订货单”的数据流是由“客户”、“帐号”和“数量”三部分数据组成的,那么就可得出结论:这两张图是平衡的。
如果子图的输入输出数据流比父图中相应加工的输入输出表达得更详细,实际上就是在对“加工”和“数据”同时进行分解,由顶向下同时对加工和数据流作逐层分解是很自然的方式,所以是经常使用的,在这种情况下,检查“平衡”就必须借助词典来进行。
考虑“平衡”时,可以忽略枝节性的数据流,如果图3.18中子图的加工4.3有一个表示出错的数据流,这两张图仍然是平衡的。