画法:
第0层DFD称为系统基本模型,可以将整个软件系统表示为一个具有输入和输出的黑匣子。用一个圆圈表示。
上一层DFD中的每一个圆圈可以进一步扩展成一个独立的数据流图,以揭示系统中程序的细节部分。
循序渐进继续进行,直到最低层的图仅描述原子过程操作为止。 每一层数据流图必须与它上一层数据流图保持平衡和一致,因此,子图的所有输入输出流要与其父图相匹配。
概括的就是说:自外向内,自顶向下,逐层细化,完善求精。
确定系统的输入和输出,以反映系统关于外界环境的接口。第0层DFD将整个系统表述一个加工;它并未表达数据加工的要求,需要近一步细化。确定并标出主要的输入和输出,从输入端开始,根据业务工作流程,画出数据流经的个加工框,以反映数据的实际处理过程,逐步画出输出端,得到第一层数据流图。图中的加工加以编号。细化每一个加工框。如果加工框内还有数据流,可将这个加工框再细分成为几个“子加工”并在各子加工框之间画出数据流。一次比一次细化加工。重复步骤,直到所有加工只重复一个简单的操作可以很容易的用程序来实现。
为了表达处理过程的数据加工情况,需要采用层次结构的数据流图。按照系统的层次结构进行逐步分解,并以分层的数据流图反映这种结构关系,能清楚和理解整个系统。
可以把系统分为三个子系统,一层 DFD/L1、 DFD/L2 、DFD/L3。再对第二层分层 DFD/1.1 DFD/1.2 ....等等。
下图是一个飞机机票预订系统的数据流图,它反映的功能是:旅行社把预订机票的旅客信息 (姓名、年龄、单位、身份证号码、旅行时间、目的地等)输入机票预订系统。系统为旅客安排航班,打印出取票通知单(附有应交的账款)。旅客在飞机起飞的前一天凭取票通知单交款取票,系统检验无误,输出机票给旅客。
(1)首先画系统的输入输出,即先画顶层数据流图。顶层流图只包含一个加工,用以表示被开发的系统,然后考虑该系统有哪些输入数据、输出数据流。顶层图的作用在于表明被开发系统的范围以及它和周围环境的数据交换关系,图3-3系统顶层图
(2)画系统内部,即画下层数据流图。不再分解的加工称为基本加工。一般将层号从0开始编号,采用自顶向下,由外向内的原则。画0层数据流图时,分解顶层流图的系统为若干子系统,决定每个子系统间的数据接口和活动关系。例如,在上面的机票预订系统按功能可分成两部分,一部分为旅行社预订机票,另一部分为旅客取票,两部分通过机票文件的数据存储联系起来, 图3-4为0层数据流图
(3)注意事项。
②画数据流而不是控制流。数据流反映系统“做什么”,不反映“如何做”,因此箭头上的数据流名称只能是名词或名词短语,整个图中不反映加工的执行顺序。
③一般不画物质流。数据流反映能用计算机处理的数据,并不是实物,因此对目标系统的数据流图一般不要画物质流。
④每个加工至少有一个输入数据流和一个输出数据流,反映出此加工数据的来源与加工的结果。
⑤编号。如果一张数据流图中的某个加工分解成另一张数据流图时,则上层图为父图,直接下层图为子图。子图及其所有的加工都应编号。
⑥父图与子图的平衡。子图的输入输出数据流同父图相应加工的输入输出数据流必须一致,此即父图与子图的平衡。
⑦局部数据存储。当某层数据流图中的数据存储不是父图中相应加工的外部接口,而只是本图中某些加工之间的数据接口,则称这些数据存储为局部数据存储。
图3-6给出了采用这套符号画出的等价于图3-2的DFD。
示例二:销售管理系统
示例三:点餐系统
示例四: 家教系统
(1)同一张图上所有处理过程应该处于同一个抽象层次上。
(2)一个处理经过展开,一般以分解为4~10个处理为宜。
(1)数据守恒,或称为输入数据与输出数据匹配
①处理有输入就应该有输出
②处理有输出就肯定有输入
③输入的数据应该全部流出该处理或者要用于产生流出该处理的数据(排除无用数据)
④输出的所有数据必须曾经流入过该处理或者是由流入该处理的数据加工产生(保证必要数据)
(2)在一套数据流图中的任何一个数据存储,必定有流入的数据流和流出的数据流。
(3)父图中的某一处理的输入、输出数据流必须出现在相应的子图中。
(1)简化处理间的关系(利用数据存储)
例:
设P1,P2为处理,D1为数据存储
P1->P2可以改变为:P1->D1 D1->P2
(2)均匀分解
(3)适当的命名
(1)排除纯手工活动
(2)排除其他外部系统的活动
(3)和系统外的外部源点之间的接口通过数据流来实现