系統分析極大程度依賴視覺化溝通,以彌合技術需求與功能設計之間的差距。在各種可用的建模技術中,資料流程圖(DFD)是一種基本工具,用於描繪資訊如何在系統中流動。本指南全面概述了DFD,剖析其組成部分、結構與應用,且不依賴特定軟體產品。無論你是學生、業務分析師或開發人員,理解這些圖表對於清晰與精確至關重要。

🧩 什麼是資料流程圖?
資料流程圖是資訊系統中資料流動的圖形化表示。與專注於控制邏輯或決策點的程式流程圖不同,DFD僅專注於資料。它說明資料如何進入系統、如何被處理、儲存在哪裡,以及如何離開系統。這種區別至關重要,因為它將系統的「什麼」與「如何.
將DFD視為資料流量的地圖。它不顯示所使用的具體程式碼或硬體,而是呈現資訊所遵循的邏輯路徑。這種抽象化使利害關係人能在深入技術實作細節之前,從高層次理解系統。
- 重點:資料的移動與轉換。
- 範圍:邏輯流程,而非實體實作。
- 使用者:業務分析師、系統設計師與專案經理。
- 輸出: 清晰呈現系統邊界與互動的視覺化圖像。
🛠️ DFD的核心組件
要構建有效的資料流程圖,必須理解構成圖表的四個基本形狀。每個形狀代表系統內的特定功能或實體。理解這些組件是建立準確模型的第一步。
1. 外部實體(👤)
外部實體是位於所建模系統邊界之外的資料來源或目的地。它們與系統互動,但並非系統的一部分。這些可以是個人、組織或其他系統。
- 術語: 也稱為終結點、來源、匯點或參與者。
- 範例: 顧客下訂單、銀行處理付款,或外部天氣服務。
- 角色: 啟動資料輸入或接收資料輸出。
2. 處理程序(⚙️)
流程是將輸入資料轉換為輸出資料的動作。它會改變資料的形態、內容或分佈。每個流程必須至少有一個輸入和至少一個輸出才能成立。
- 術語:功能、轉換或活動。
- 範例:計算稅款、驗證使用者登入或產生發票。
- 規則:流程若無資料流入或流出,則無法存在。
3. 資料儲存 (🗃️)
資料儲存代表系統中資訊存放的位置。這並非實際的資料庫伺服器,而是一個邏輯儲存庫。它表示資料正在被儲存,以供後續檢索或使用。
- 術語:檔案、資料庫或儲存庫。
- 範例:客戶資料庫、交易記錄或暫時快取。
- 互動:資料流入以進行儲存,並流出以供檢索。
4. 資料流 (➡️)
資料流顯示資料在實體、流程與儲存之間的移動。它們以箭頭表示。箭頭的方向表示資料的流向。箭頭上的標籤描述資料的內容。
- 術語:連接、連結或資料流。
- 需求:必須以名詞片語標示(例如:「訂單詳情」)。
- 規則:箭頭在沒有流程介於中間的情況下,不得直接穿越資料儲存。
📊 比較符號風格
繪製資料流程圖主要有兩種風格。雖然它們代表相同的概念,但使用的符號略有不同。了解差異有助於解讀不同團隊或方法論所製作的圖表。
| 特徵 | Yourdon & DeMarco | Gane & Sarson |
|---|---|---|
| 流程 | 圓角矩形 | 圓角矩形 |
| 外部實體 | 矩形 | 正方形 |
| 資料儲存 | 開口矩形 | 開放矩形 |
| 資料流 | 箭頭 | 箭頭 |
| 標籤 | 流程圓圈上的數字 | 流程矩形上的數字 |
兩種風格皆有效,但專案內的一致性至關重要。選擇一種風格並在文件中始終如一地遵循。
📉 分解層級
資料流程圖通常以層次方式建立,這種技術稱為分解。這讓您可以從高階概覽開始,逐步增加細節。將複雜系統分解為可管理的單元,可使圖表更易閱讀與維護。
第 0 層:上下文圖
上下文圖是抽象層級最高的圖表。它將系統呈現為單一流程及其與外部實體的關係。它回答的問題是:「系統的邊界是什麼?」
- 範圍: 一個代表整個系統的中心流程。
- 詳細內容: 不顯示內部資料儲存或子流程。
- 使用情境: 用於為利害關係人與管理層定義範圍。
第 1 層:分解
第 1 層將上下文圖中的單一流程分解為主要子流程。這揭示了系統的主要功能。這是系統設計中最常見的細節層級。
- 詳細內容: 顯示主要流程、主要資料儲存與外部實體。
- 使用情境: 開發人員用來理解主要功能區域。
第二級及更進一步
進一步分解(第二級、第三級)會深入到具體的子流程。這僅在需要詳細規格說明的複雜功能中才必要。
- 細節:第一級流程中的細微步驟。
- 用途:用於詳細的邏輯規格說明或文件編寫。
維持各級之間的一致性非常重要。第一級流程的輸入與輸出必須與零級圖表中單一流程的輸入與輸出相符。這稱為平衡.
🛣️ 如何建立資料流程圖
建立資料流程圖(DFD)是一個系統性的過程。遵循結構化的方法可確保最終圖表的準確性與實用性。你不需要專業工具即可開始;可從紙筆著手,探索邏輯結構。
步驟 1:識別外部實體
首先確定與系統互動的對象是誰或什麼。列出所有會向系統傳送資料或從系統接收資料的使用者、部門或外部系統。
- 問題:誰啟動了這個流程?
- 問題:誰接收最終結果?
步驟 2:定義主要流程
將整個系統表示為一個單一的圓圈或矩形。這就是你的零級圖表。繪製箭頭,將外部實體連接到此中心流程,以顯示主要的資料輸入與輸出。
步驟 3:分解主要流程
將中心流程分解為子流程。識別出將輸入轉換為輸出所需的關鍵功能,並清楚標示。
步驟 4:新增資料儲存
識別資料需要儲存的位置。若某項資訊後續需要使用,或需與歷史資料核對,則應存放於資料儲存中。將流程與這些儲存連接起來。
步驟 5:標示資料流
確保每個箭頭都有標籤。標籤應描述資料內容,而非動作。例如,應使用「發票資料」而非「發送發票」。
步驟 6:檢視平衡性
檢查父流程的輸入與輸出是否與子流程輸入與輸出的總和相符。若資料流無故消失或出現而無來源,則圖表不平衡。
🚫 應避免的常見錯誤
即使經驗豐富的分析師在建模系統時也可能犯錯。了解常見陷阱有助於你產出更乾淨、更準確的圖表。
- 黑洞: 一個只有輸入而無輸出的流程。資料進入卻從未離開,這暗示系統出現錯誤。
- 奇蹟: 一個只有輸出而無輸入的流程。資料憑空出現,這在邏輯上是不可能的。
- 資料儲存錯誤: 將資料儲存直接連接到外部實體,中間沒有流程。資料無法直接從儲存移動到外部來源。
- 標籤重疊: 使用動詞作為資料流標籤,而非名詞。資料流是名詞(例如「報表」),而非動作(例如「產生報表」)。
- 線條交叉: 雖然有時無法避免,但線條交叉會使圖表難以閱讀。盡量讓資料流路徑整齊。
🆚 DFD 對比 流程圖
人們常將資料流圖與流程圖混淆。雖然兩者都使用形狀和箭頭,但用途不同。理解兩者的差異可避免在系統設計過程中產生混淆。
| 面向 | 資料流圖(DFD) | 流程圖 |
|---|---|---|
| 重點 | 資料移動與轉換 | 控制流與決策邏輯 |
| 流程形狀 | 圓形或圓角矩形 | 矩形 |
| 決策 | 未表示 | 以菱形表示 |
| 迴圈 | 未明確顯示 | 以箭頭明確顯示 |
| 時間 | 與時間無關 | 與時間相關 |
若需描述步驟的順序,包含決策與迴圈,流程圖是合適的選擇。若需描述資料需求與儲存,資料流圖才是正確的選擇。
🌟 使用資料流程圖的優勢
為什麼要花時間創建這些圖表?其價值在於清晰與溝通。一張繪製良好的資料流程圖可作為系統資料需求的唯一真實來源。
- 視覺清晰度:複雜的系統在被視覺化後會變得更容易理解。
- 溝通:彌合技術團隊與業務利益相關者之間的差距。
- 缺口分析:有助於識別遺漏的資料流程或未定義的流程。
- 文件記錄:為未來的系統維護與升級提供基準。
- 測試:幫助測試人員理解每個階段應預期的資料。
🔍 實際應用範例
考慮一個簡單的圖書館管理系統。在此情境下,資料流程圖會是什麼樣子?
- 外部實體:圖書館員與會員。
- 處理流程:借書、還書、查詢目錄。
- 資料儲存:書籍庫存、會員紀錄。
- 流程:一位會員請求借書(輸入)。系統檢查庫存(處理)。若可借出,則更新紀錄(處理)。書籍被發出(輸出)。
此範例顯示資料如何從會員流向系統,與圖書館紀錄互動,並產生一筆交易。未提及任何特定軟體;其邏輯本身即成立。
📝 最佳實務總結
為確保您的資料流程圖有效,於創建過程中請牢記以下指引。
- 保持簡潔:避免單一圖表過於擁擠。使用分解法。
- 使用一致的命名:確保所有層級的資料流程標籤一致。
- 與利益相關者共同驗證: 與使用系統的人一起審查圖表。
- 專注於資料: 請記住,這關注的是資料,而不是控制或時序。
- 迭代: 圖表很少在第一稿時就完美無缺。預期需要對它們進行修改。
遵循這些原則,您將建立出穩健、清晰且對任何專案都具有價值的模型。投入於繪製資料流程的精力,將在減少錯誤和更清晰的需求上帶來回報。











