iT邦幫忙

2021 iThome 鐵人賽

DAY 5
2
自我挑戰組

後端工程師與圖的修練系列 第 5

資料流程圖 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/


上一篇
系統建模語言 SysML
下一篇
時序圖與 API 呼叫流程
系列文
後端工程師與圖的修練31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言