资料流程图 Data Flow Diagram

Data Flow Diagram (DFD) ,是资料流图,最主要的概念就是在表示资料的流程,这个流程图的表示符号只有 4 个,整体概念都非常简单,甚至可以作为与交付对象(客户)沟通的需求分析工具。

DFD 的核心理念是希望做到定义系统范围跟边界问题,如果系统规模很大,光一个 DFD 可能很难完全解释得清楚,所以为了降低复杂性,会采用逐一分解来绘制,详情可以参考 [1] 。

DFD 图表的使用的符号目前由好几种风格定义,最早是由 Tom DeMarco 提出部分结构,接着又定义出几种风:

  • Yourdon DeMarco (由 Yourdon 和 DeMarco 组合而成)
  • Gane & Sarson
  • SSADM
  • Yourdon and Coad

可以看看每个人的风格长怎样 (图自 [2]):

https://ithelp.ithome.com.tw/upload/images/20210915/20092753SnSY7shBIQ.png

可以看到图的内容基本上都差不多,元素也都一样。

DFD 有 4 种符号表示,分别对照英文是:

  • External Entity (具有输入或输出的实体 (可作为数据来源或终点))
  • Data Store (资料储存, 档案或资料库)
  • Data Flow (方向资料流程)
  • Process (功能或 Function)

资料流图

这篇文章使用的符号是 Yourdon & DeMacro 的定义,并在下方的图中,把每一个符号都使用过一次看看它们的用途。

对於一个基本的资料流图,可以参考一个租借影片系统的范例:

https://ithelp.ithome.com.tw/upload/images/20210915/200927539pGAGc1q43.png

这图中,可以看到一个 Entity (顾客)、 Entity (影片供应商),有很多箭头形容资料流与影片租借系统这个 Process (function) 的关系。

逐层分解 (向下分解、调平 flatten)

上面有提到,如果要建构一个很复杂的系统,要如何使用逐层分解这个概念来进行图表设计?

逐层分解是把复杂系统分解的核心做法,每次分解都是一个 Level,用以下例子来看看这是什麽意思。

https://ithelp.ithome.com.tw/upload/images/20210915/20092753qFNeQyzfyR.png

从图中可以看到,要做一个订单系统,在 Level 0 阶段,定义了使用者可能会走完的流程,以及系统内部细节的所有流程 (可以包含 Level 1,但太细节的流程可以做在 Level 1)。 如果单看 Level 1 本身的视角,是只有 【2. 建立订单资讯】 跟他的 Level 1 子项目,其他的都不会看见,这个 Level 就是要开始对每个功能详细定义行为,细分下去。

这个做法就是逐层分解的原理。

再次 Recall 一下, Level 0 是指完整的所有系统样貌,比方说,我们目前有一个影片租借系统,它的完整架构是:

https://ithelp.ithome.com.tw/upload/images/20210915/20092753xXypMLVYdB.png

在这个图表中,可以看到特别备标注 DB 的方块,就是指 Data Store (资料储存) 的图表区块。 特别关注 【2. 租借影片】 这个部分,可以再做成一个更细的流程,了解 【2. 租借影片】 的内部流程是什麽,像是下图把每一个功能再开成细节,下图就是 Level 1 的图了。

https://ithelp.ithome.com.tw/upload/images/20210915/20092753o16CJb5yfI.png

个人认为 DFD 适合用在建立现场讨论、与交付对象(e.g: 客户)讨论时、或是对外会议文件用的图片,主要是因为图表元素非常简单,易於学习,如果要开白板画画,立刻就可以动手进行,甚至非专业人员不需要太多 DFD 基本知识,只要专业人员了解如何引导 DFD 逐层分解,对项目拉出资料流给交付对象确认就行。

References:

[1] https://zh.wikipedia.org/wiki/%E8%B3%87%E6%96%99%E6%B5%81%E7%A8%8B%E5%9C%96
[2] https://online.visual-paradigm.com/knowledge/software-design/dfd-using-yourdon-and-demarco/
[3] https://cacoo.com/ja/blog/what-is-dfd/


<<:  DAY3-HTML一定要配CSS

>>:  Rebol 语言和你 SAY HELLO!!

DAY11 资料前处理-资料不平衡处理方法

试想一下,如果有个模型号称有99%的准确率,那这个模型好不好呢?答案是不一定,在处理分类问题时,我们...

Day11:今天我们来聊一下Parrot Security上的Enum4linux

当我们环境有Windows及Samba主机时,可以使用Parrot Security上的Enum4l...

【Day19】维持连线 ─ 工具实作篇(一)

哈罗~ 我们前几天提到, 可以利用网路监听、密码破解来取得使用权限, 今天我们要来介绍可以做远端控制...

[iT铁人赛Day6]JAVA的运算简写

既然讲到运算符号,也讲完了运算的优先顺序,那就来说说运算的简写吧 一般我们写运算时会写:"...

Day 30 - 游艇网页专案完成後的优化方向 - ASP.NET Web Forms C#

=x= 🌵 专案优化方向说明。 网站後台优化 : 1. Sign In Page : 验证密码时间较...