當深入系統分析與流程建模時,很少有概念會像資料流程圖(DFD)一樣造成如此多的混淆。它在軟體工程、商業分析與架構中都是基本工具。然而,儘管其歷史悠久,人們對它究竟是什麼、不是什麼,仍存在大量誤解。許多實務工作者將它誤認為流程圖,或認為它能捕捉邏輯流程。這些誤解可能導致系統設計 flawed、文件令人困惑,以及開發延遲。
本指南將去除雜音。我們將檢視與資料流程圖相關的最根深蒂固的迷思,釐清技術現實,並提供一個穩固的框架,以實現準確的建模。無論你是設計新應用程式,還是審核現有系統,理解這些圖表背後的真相,對成功至關重要。

最普遍的迷思是,資料流程圖不過是一種華麗的流程圖。雖然它們在外觀上相似,但其目的與符號系統根本不同。混淆兩者會導致模型描述的是「系統如何思考」,而非「資料如何移動」。如何系統的運作方式,而非資料如何移動資料移動的路徑。
如果你試圖在 DFD 中表示複雜的決策樹,就會失去清晰度。DFD 不是用來顯示執行順序的。它們的設計目的是展現資料的依賴關係。一個流程可能在另一個流程之前發生,但在 DFD 中,只要資料流正確,順序並無影響。這項區別在繪製非同步系統或分散式架構時尤為關鍵。
另一個常見錯誤是假設 DFD 能解釋流程的內部邏輯。當檢視一個流程泡泡(圓圈)時,利益相關者可能會問:「這裡面發生了什麼?」而 DFD 無法回答這個問題。
DFD 中的流程是一個黑箱。它接收輸入資料流,並產生輸出資料流。內部的演算法、條件判斷或商業規則並未呈現。這並非限制,而是一項優勢。它讓分析師能跳出細節,從高層次觀看系統,而不會陷入程式碼層級的複雜性。
試圖強行將邏輯塞入圖表中,會造成混亂。這會掩蓋資料流動,而這正是主要目標。若需呈現邏輯,應使用流程圖或序列圖。請將 DFD 保留給資料使用。
讀者經常看著資料流程圖(DFD)並假設元素的位置代表順序。他們可能會認為左邊的處理程序會在右邊的處理程序之前執行。這是錯誤的。
DFD 是系統結構的靜態呈現,而非時間軸。它們不會顯示:
這種靜態特性正是 DFD 在需求收集方面表現優異的原因。它們定義了資料需求的範圍,而不強加可能變動的時間限制。即使用於即時系統與批次處理系統,其 DFD 也可能完全相同,儘管兩者操作的時序差異極大。
人們容易被誘導將資料流程圖做得極其詳細。有些人認為,包含所有交易與資料點的單一圖表更為優越。然而,實際上這會導致無法閱讀的「意大利麵圖」。
「分解」的原則是關鍵。分解你從上下文圖(第0層)開始,將系統視為一個與外部實體互動的處理程序。接著,將該處理程序分解為第1層、第2層,依此類推。每一層都為特定關注區域增加細節。
如果你試圖將所有層次塞入同一個視圖中,就會失去看見整體圖像的能力。一個優良的模型應在高階概覽與必要細節之間取得平衡。複雜度應透過層級結構來管理,而非密度。
現代介面經常混淆資料流。利益相關者希望在圖表中看到畫面、按鈕與使用者互動。雖然使用者互動至關重要,但它應出現在使用案例圖或線框圖中,而非 DFD。
DFD 追蹤的是資料,而非像素。按鈕點擊是一個觸發處理程序的事件。DFD 關注的是傳遞給該處理程序的資料(例如「登入憑證」),而非視覺上的按鈕本身。將 UI 元素混入資料流程圖中,會分散對系統中資訊實際流動的注意力。
要打破這些謬誤,我們必須理解基本構成單元。標準的 DFD 包含四個主要元素。在此處的混淆正是上述謬誤產生的原因。
| 元素 | 形狀 | 功能 | 常見誤解 |
|---|---|---|---|
| 外部實體 | 矩形 | 系統外部的資料來源或目的地 | 認為它是系統內部的資料庫 |
| 處理 | 圓形或圓角方框 | 將輸入資料轉換為輸出資料 | 認為它顯示邏輯或程式碼 |
| 資料儲存 | 開放矩形 | 資料靜止存放的位置 | 認為它僅代表檔案資料夾 |
| 資料流 | 箭頭 | 元素之間的資料移動 | 認為它代表控制訊號 |
超越迷思,存在實際的錯誤會損害模型的完整性。使用此檢查清單來審核您的工作。
DFD迷思最明顯的後果之一就是不良的資料庫設計。如果你把DFD當作流程圖來看待,可能會根據處理順序來設計資料表,而不是根據資料實體。
當DFD準確時,資料儲存區便成為你資料庫結構的藍圖。資料流顯示了資料表之間的關係。如果你忽略資料儲存區這個元素,就可能建立出無法支援必要資料移動的資料庫。例如,如果DFD顯示「客戶訂單」資料流流向「庫存」儲存區,資料庫就必須連結這些實體。如果DFD不清晰,外鍵可能會遺漏或定義錯誤。
此外,了解DFD並未顯示邏輯,可避免你根據處理步驟過度規範化資料庫。你應根據資料依賴性進行規範化,而非交易順序。這種區別能為開發週期後段節省數小時的重構時間。
那麼,該如何進行而不落入這些陷阱呢?請遵循此結構化方法,建立可靠的資料流程圖。
列出所有與系統互動但位於系統邊界之外的個人或事物。這包括使用者、其他系統或法規機構。除非內部部門扮演獨立系統的角色,否則不要將其納入。
建立第 0 層圖。將整個系統作為一個單一處理程序置於中心。繪製連接外部實體與此處理程序的線條,並以主要交換資料命名(例如:「申請表」、「付款收據」)。
將中央處理程序分解為主要的子程序。這些應為系統的主要功能(例如:「處理訂單」、「更新庫存」、「產生報表」)。確保上下文圖中進入系統的所有資料,在此層級仍會有相應的入口。
識別資訊需要儲存的位置。如果資料在處理程序之間流動但未被儲存,就只是流動;若資料持續存在,則為儲存區。將這些儲存區連接到相關的處理程序。
這是最重要的技術步驟。父程序的輸入與輸出必須與其子程序輸入與輸出的總和相符。如果資料流進入第 0 層程序,就必須出現在第 1 層分解中。若資料流消失,則代表存在邏輯錯誤。
這為什麼重要?錯誤理解DFD的代價不僅僅是一張漂亮的圖表,更會對專案交付造成真實世界中的影響。
透過遵守DFD的原則——專注於資料、忽略邏輯、尊重層級結構,你就能降低這些風險。模型便成為業務團隊與技術團隊之間的合約。
掌握資料流程圖需要紀律。需要抵抗一次展示所有內容的衝動。需要接受圖表僅是現實的呈現,而非現實本身。它要求明確區分資料流動與邏輯流程。
當你去除這些迷思後,DFD便成為一個強大的工具。它能釐清需求,揭露邏輯上的缺口,並作為溝通的橋樑。這不是為了畫出一張漂亮的圖,而是確保系統中流動的資訊被妥善管理、安全且高效。
仔細審視您目前的模型。您是否在應該呈現資料的地方呈現了邏輯?您是否混淆了順序與依賴關係?您是否過度將太多層級塞進單一圖表中?糾正這些誤解將顯著提升您的系統分析品質。專注於資料。保持簡單。必要時進行分解。並始終保持流程的平衡。
最終,一個優秀的資料流程圖是任何人都能閱讀並理解,而無需手冊的圖表。這才是成功的真正衡量標準。