Skip to content

Latest commit

 

History

History
114 lines (65 loc) · 7.04 KB

File metadata and controls

114 lines (65 loc) · 7.04 KB

数据流图的画法

你可以在这里找到我所有图的绘制源文件

什么是数据流图

数据流图(Data Flow Diagram):简称DFD,它从数据传递和加工角度,以图形方式来表达系统的逻辑功能、数据在系统内部的逻辑流向和逻辑变换过程,是结构化系统分析方法的主要表达工具及用于表示软件模型的一种图示方法。

简单来说: 数据流图=数据流+图

数据流图可以分为四大要素

v2-e3d9e415a1caaef8216d2d8bfda0f8d1_720w

  1. 外部实体:指系统之外、又与系统有联系的人或事物,它表达了该系统数据的外部来源和去处

    简单来说就是与系统关联的人或事物,通常而言对于一个商业消费系统就是指顾客/经理/员工这种,对于一些管理系统就是员工/经历,或者用户之类的具体的人

  2. 数据加工:描述输入数据流到输出数据之间的变换,也就是输入数据流经过什么处理后变成了输出数据

  3. 数据存储:某种数据保存后的逻辑统称,不是指保存数据的物理地点和物理介质。每个数据存储都有一个名字

  4. 数据流:处理功能的输入/输出,箭头表示数据流向。

数据流图怎么画?

如果说文字描述并不直观,那么我认为一个例子的图就可以很好的解释数据流图的画法

比如说现在想要一个销售管理系统,顾客可以购买物品,采购部门负责采购对应的物资,需要仓库来储存物资,经理负责统筹工作,然后让你设计这个系统

一般来说这个问题的需求描述会详细一些,通常来说是一段文字,认真审题,把基本的问题思路分析清楚

20220607043016

那么这问题可以抽象为如上图的表示,四个外部实体.基本的数据加工的过程就是顾客输入的订单,经过我们的销售管理系统处理后变成了备货单和统计表两部分输出,同时注意到采购部门和销售管理系统也有一进一出两个箭头参与通知单的输入输出,所以最后的整个系统的顶层数据流图就是两个输入,三个输出,如下所示.

在外面补一个平行四边形的框,左上角指明顶层图. 顶层图只有一张,其后我们还需要对销售管理系统做进一步的分解

我们倾向于输入放在左面,输出放在右面,所以复制了一份采购部门放在右面. 即使是 顾客->系统->顾客,同一个对象也应把输入输出放在两侧

20220608152216

数据流图的分解

对于大型的系统,为了控制复杂性,便于理解,需要采用自顶向下逐层分解的方法进行,即用分层的方法将一个数据流图分解成几个数据流图来分别表示。

把顶层图的“加工”分解成若干个“子加工”,并用数据流将这些“子加工”连接起来,使得顶层图的输入数据经过若干“子加工”处理后,变成顶层图的输出数据

根据顶层图,我们的系统有两个输入,分别是来自顾客的订单信息,和来自采购部门的进货通知单,分析一下这个系统大致可以得到: 首先根据进货通知单我们可以更新库存记录,然后对于顾客的订单,如果库存满足那么我们就直接做供货的处理,如果不满足那么我们就记录缺货,并且统计到缺货通知单里;最后所有满足的供货记录会被制作成统计表

这样分析下来,这个思路其实就已经是比较清晰的了,如下图所示

还有一种画法就是在出入系统的箭头前后加上之前的外部实体,加不加都可以

20220608152630

当然一下子就可以非常清晰的梳理出逻辑结构和整个系统的数据流图并不是一件容易的事,每一个人想法也都各有千秋,这里仅作为一个比较合理的参考

你可能在这张图上看到了一些新的东西,这里值得一提的几点:

  • 注意到输入和输出的箭头所表示的信息和顶层图是一一对应的,因为其实0层图就是顶层图中系统的进一步扩展,父图中的某加工的输入输出流必须与他的子图的输入输出数据流在数量上和名字上相同,此即父图与子图的平衡

  • 每个加工都有一个名字和编号。编号能反映该加工位于分层的数据流图的哪个层次和哪张图中,能够看出它是由哪个加工分解出来的子加工.

    比如说缺货统计4还要再细分下去,它的子图的编号就是 4.1 4.2,再往下就是4.1.1,依次类推. 不过通常来说作为考试题的系统都不会特别复杂,一般0/1层图就可以表示了.

  • 只有数据加工之间有数据流名称,数据流反映系统“做什么”,不反映“如何做”,因此箭头上的数据流名称只能是名词或名词语,整个图中不反映加工的执行顺序. 数据存储/数据加工之间不需要有数据流名称,你可以理解为本身就是保存到数据存储里去

    也就是说,数据流并不需要描述我使用了什么什么方法,打算去怎么做,你可以很笼统的写"构建订单表格","生成统计数据","核对信息"等等这种

  • 外部实体之间不应该存在数据流,因为数据流的起点和终点中必须有一个是加工

接下来再细分一层图(这里偷懒了,直接拿来用了)

v2-faad10338e1896f1bb491fe926141b6c_720w

数据字典

不提就不写!

数据字典其实就是把所有的数据流图的加工部分描述一下,数据字典的描述一共有五个

处理名: xxx
处理编号: xxx
输入数据流: xxx
输出数据流: xxx
处理逻辑: xxx

举一个例子,对于数据流图的一层图中的一个数据加工项: 产生报表

20220607234557

处理名:产生报表
处理编号:1.4
输入数据流:统计结果
输出数据流:报表
处理逻辑:针对教学管理人员输入的课程,系统产生各分数段人数以及各段人数比率报表。

总结

数据流图主要还是如何去分解问题,将一个系统根据功能拆解成不同的模块,以及其对应的功能,数据流之间的加工处理方式等等. 本身画法并不难,四大要素

最难的还是针对具体的问题如何设计一个好的数据流图

关于一些其他的demo可以参考这里,我认为笔记做的还是十分详细的

参考

https://zhuanlan.zhihu.com/p/231863024