資料流程圖(DFD)是系統分析與設計中的基本工具。它提供了一種視覺化方式,用以呈現資訊如何在系統中流動。與專注於控制流程和邏輯的流程圖不同,DFD 強調資料的轉換。本指南詳細說明了構建準確圖表所需的關鍵元件、標記風格與結構規則。

理解 DFD 的目的 🎯
在選擇符號或繪製流程之前,了解圖表的目標至關重要。DFD 回答了有關資料流動的特定問題:
- 資料從何處來?
- 資料是如何被轉換的?
- 資料最終到達何處?
- 哪些資料會被儲存以供未來使用?
這些圖表在技術需求與業務需求之間起到了橋樑作用。它們讓利害關係人能夠確認系統能正確處理資訊,而無需理解底層程式碼。透過將系統視覺化為一系列的流程與資料流,分析師可以在開發週期的早期識別瓶頸、遺漏的資料或重複的步驟。
DFD 的四個核心元件 🧩
每個資料流程圖都依賴於四個不同的元件。這些符號定義了系統內的行為與關係。掌握這些元件可確保圖表保持一致,並讓所有團隊成員都能理解。
1. 流程(轉換) ⚙️
流程代表改變資料的動作或功能。它接收輸入資料,執行計算或轉換,並產生輸出資料。在 DFD 中,流程並非實際程式碼,而是所執行的邏輯功能。
- 功能:將輸入轉換為輸出。
- 識別符:每個流程都必須有獨特的名稱與編號。
- 動詞-名詞:名稱通常遵循動詞-名詞結構(例如,計算稅額, 驗證使用者).
- 分解:複雜的流程可以在較低層級的圖表中分解為子流程。
2. 資料儲存(資料庫) 📂
資料儲存代表資料靜止存放的位置。它儲存目前未被處理但後續需要的資訊。這可能是資料庫表格、檔案,或實體檔案櫃。
- 持久性:資料在系統會話之間仍保留在儲存中。
- 存取: 流程必須從儲存器讀取或寫入資料。
- 方向: 資料儲存不會產生資料;它們僅用來儲存資料。
- 命名: 名稱應使用複數名詞(例如,訂單, 客戶).
3. 外部實體(來源/目的地)🌐
外部實體是指位於當前系統邊界之外的個人、組織或系統。它作為資料的來源(輸入)或目的地(輸出)。
- 邊界: 圖表範圍之外的任何事物都是外部實體。
- 角色: 可以是人類使用者、第三方 API、政府機構或硬體裝置。
- 互動: 資料在系統與實體之間流動。
4. 資料流(移動)➡️
資料流代表元件之間資訊的移動。它是將圖表連結在一起的關鍵。箭頭表示資料的方向。
- 標籤: 每個箭頭都必須標示資料封包的名稱。
- 原子性: 單一資料流應僅傳輸一個邏輯上的資訊單位。
- 方向: 在標準的資料流程圖中,資料流為單向。
- 邏輯: 資料必須經過流程才能流動;它不能直接在資料儲存之間傳輸。
資料流程圖的層級 📉
資料流程圖具有層級結構。單一系統過於複雜,無法在一個視圖中完整呈現。因此,圖表會被分解為不同細節層級。這種方法讓分析師能夠管理複雜性,同時維持整體系統的完整性。
第 0 層:背景圖 🌍
上下文圖提供了系統的最高層次視圖。它定義了系統邊界,並顯示系統如何與外部實體互動。
- 單一流程: 整個系統被表示為一個單一流程。
- 輸入/輸出: 展示主要資料進入和離開系統的情況。
- 範圍: 確立專案的邊界。
第1級:主要流程 🔍
第1級將上下文圖中的單一流程分解為主要子流程。它顯示構成系統的主要功能。
- 擴展: 主流程被拆分為3到7個主要流程。
- 引入儲存區: 引入資料儲存區以顯示資訊儲存的位置。
- 細節層級: 提供足夠的細節以理解主要邏輯,而不會陷入過多細節。
第2級:詳細流程 🛠️
第2級進一步將第1級中的特定流程細分。此級用於需要精確邏輯定義的複雜區域。
- 細粒度: 聚焦於特定的工作流程或模組。
- 驗證: 確保所有資料流與父流程保持平衡。
- 實作: 常被開發人員直接用作參考。
符號風格:對比指南 🔄
DFD主要使用兩種符號風格。雖然它們傳達相同的邏輯資訊,但符號的視覺呈現方式有所不同。理解這些差異在與具有特定慣例的團隊合作時至關重要。
| 元件 | Gane & Sarson | Yourdon & DeMarco |
|---|---|---|
| 流程 | 圓角矩形 | 圓形或圓角矩形 |
| 資料儲存 | 開口矩形(兩條平行線) | 右側開口的矩形 |
| 外部實體 | 矩形 | 矩形 |
| 資料流 | 箭頭 | 箭頭 |
| 連接器 | 箭頭 | 箭頭 |
甘與薩爾森: 這種符號在美國和歐洲廣泛使用。它使用圓角矩形表示流程,並以特定的雙線形狀表示資料儲存。它強調流程作為邏輯容器的角色。
尤爾頓與德馬科: 這種符號起源較早,常見於學術界與舊系統中。它使用圓形表示流程,資料儲存則以缺一邊的矩形表示。兩種符號皆有效,但專案內必須保持一致。
資料流完整性規則 ⚖️
為確保資料流程圖(DFD)邏輯正確,必須遵循特定規則。違反這些規則會造成模糊性,可能導致系統設計失敗。這些規則規範資料如何移動與轉換。
1. 平衡規則 ⚖️
當從一層分解至下一層圖形時,輸入與輸出必須保持一致。這稱為資料流平衡。
- 若父流程的輸入為訂單資料,子圖形必須包含接收訂單資料.
- 子圖形中不能出現父圖形中不存在的新輸入。
- 原有的輸出在分解時必須予以保留。
2. 無直接資料儲存至資料儲存的流動 🚫
資料不能直接從一個資料儲存移動到另一個資料儲存。必須存在一個流程來轉換或移動資料。
- 原因: 數據移動通常需要邏輯(例如,更新記錄、複製檔案)。
- 含義: 每次資訊傳輸都必須包含一個處理步驟。
3. 數據流命名規範 🏷️
數據流上的標籤必須具有描述性且為單數。
- 單一概念: 一個標籤為客戶資訊 意味著一個特定的數據包,而非所有客戶數據的資料流。
- 一致性: 同一數據包在所有圖表中應使用相同的名稱。
- 無控制流: 不要以邏輯標記流(例如,是/否)。DFD專注於數據,而非控制。
4. 數據存儲邏輯 🗄️
數據存儲必須以邏輯方式存取。
- 讀取/寫入: 一個處理過程應表明其是從存儲中讀取還是寫入存儲。
- 存在性: 數據存儲必須至少被一個處理過程存取。
- 隔離性: 若無處理過程管理其數據,存儲便無法存在。
常見的DFD錯誤與陷阱 🚨
即使經驗豐富的分析師在構建圖表時也可能犯錯。識別這些常見錯誤有助於調試與驗證系統設計。
1. 黑洞流程 ⚫
黑洞是一種有輸入但無輸出的流程。它消耗數據卻不產生任何結果。
- 含義: 系統正在消耗資源卻未提供價值。
- 修正:識別該流程應產生的內容,並加入必要的資料流。
2. 奇蹟流程 ✨
奇蹟流程是黑洞的相反。它有輸出但無輸入,從無中創造資料。
- 影響: 系統在沒有來源的情況下產生資料。
- 修正: 追蹤資料來源,追溯至外部實體或資料儲存位置。
3. 灰洞流程 🌫️
當流程在分解過程中,輸入與輸出在數量或類型上不一致時,就會發生灰洞。
- 影響: 資料在不同層級之間不一致地消失或出現。
- 修正: 確保分解過程保留來自上層的所有資料流。
4. 資料流交叉 ⤵️
雖然並非總是禁止,但資料流交叉可能使圖表難以閱讀。
- 清晰度: 若可能,使用連接器將線路繞過交叉點。
- 配置: 調整流程與儲存位置,以減少線路交叉。
資料流程圖與資料字典 📚
DFD無法獨立存在。它需要資料字典來定義圖中流動資料的精確結構。資料字典是系統中所使用資料元素資訊的儲存庫。
- 定義: 指定每個資料元素的資料類型、長度與格式。
- 關係: 將DFD符號連結至特定的資料庫欄位。
- 一致性: 確保DFD箭頭上的標籤與字典中的定義相符。
若無資料字典,DFD僅僅是高階抽象。有了它,圖表便成為資料庫設計與應用邏輯的藍圖。這種整合確保視覺模型能準確轉化為技術實現。
維護的最佳實務 🛡️
系統會隨著時間演進。資料流程圖必須持續維護,以反映需求或架構的變更。
- 版本控制:追蹤圖表版本以管理變更。
- 變更影響: 當一個流程變更時,請檢查所有相連的資料流和資料儲存。
- 審查週期: 定期與利害關係人進行審查,以確保圖表符合實際情況。
- 文件化: 使用註解標示圖表,說明複雜的邏輯。
系統建模總結 🏁
建立資料流程圖是一項需要細心與遵守結構規則的紀律性活動。透過使用正確的符號並遵循平衡規則,分析師可以清楚地呈現系統行為。Gane & Sarson 與 Yourdon & DeMarco 符號系統之間的差異提供了彈性,但一致性始終是首要原則。避免常見錯誤如黑洞與奇蹟,可確保邏輯完整性。當與資料字典搭配使用時,資料流程圖便成為定義系統需求與引導開發的強大工具。
資料流程圖的價值在於其能將複雜的資料流動傳達給非技術背景的利害關係人。它能將系統簡化為易於理解的元件,促進專案生命週期中更好的決策。無論是設計新應用程式或分析現有系統,資料流程圖的原則都為系統分析提供了穩固的基礎。
重點摘要 ✅
- 核心元素: 流程、資料儲存、外部實體與資料流構成每張圖表的基礎。
- 層級: 使用第0、1、2層來管理複雜度與細節。
- 符號系統: 選擇一種標準(Gane & Sarson 或 Yourdon & DeMarco)並堅持使用。
- 完整性: 確保所有資料流在父圖與子圖之間保持平衡。
- 邏輯: 避免資料流錯誤,例如奇蹟與黑洞。
- 文件化: 始終將資料流程圖的元件與資料字典連結。
遵循這些原則,可確保產生的文件準確、可維護,且對整個開發團隊具有實用價值。一張構建良好的資料流程圖能減少歧義,並使技術執行與商業目標保持一致。











