
理解資訊如何在系統中流動,是系統分析與設計的基礎。資料流程圖(DFD)提供了這種流動的視覺化表示。與專注於程式碼或資料庫結構的技術藍圖不同,DFD專注於資料的流動以及轉換資料的處理程序。本指南詳細說明構建這些圖表所使用的關鍵符號,確保您的文件清晰且精確。
什麼是資料流程圖? 🤔
資料流程圖是一種結構化分析工具。它描繪資訊處理活動的順序。它不會以程式碼邏輯來描述系統。相反,它說明了資料的移動方式、來源、去向以及變化方式。這種抽象使利害關係人能夠理解功能需求,而不必陷入技術實現細節。
DFD具有層級結構。它從高階概覽開始,逐步分解為更詳細的視圖。這種分解有助於管理複雜性。透過定義邊界與互動,分析人員可在開發開始前識別需求缺口或潛在瓶頸。
四個核心符號 🛠️
標準的DFD符號依賴於四種主要形狀。雖然不同方法論(例如Yourdon/DeMarco或Gane/Sarson)之間存在差異,但核心概念保持一致。每個符號代表系統邊界內的特定功能。
| 符號名稱 | 視覺呈現 | 功能 |
|---|---|---|
| 外部實體 | 矩形 | 資料的來源或目的地 |
| 處理程序 | 圓形或圓角矩形 | 資料的轉換 |
| 資料儲存 | 開放矩形 | 靜態資料的儲存 |
| 資料流 | 箭頭 | 資料的移動 |
1. 外部實體 📦
外部實體代表位於所建模系統外部的資料來源或目的地。它們是與系統互動的參與者,但並非系統內部邏輯的一部分。實體可以是個人、團體、另一個電腦系統或部門。
實體通常以矩形繪製。在某些符號系統中,也可能以橢圓形呈現。其關鍵特徵是系統會向其傳送資料或從其接收資料。例如,顧客就是一個實體。系統處理其訂單,但顧客的存在獨立於訂單處理軟體。
- 輸入: 資料從實體進入系統。
- 輸出: 資料離開系統並傳送到實體。
重要的是不要將外部實體與處理程序混淆。實體不會轉換資料;它僅僅產生或消耗資料。
2. 處理程序 🔄
處理程序是圖表中的主動元素。它們代表將輸入資料轉換為輸出資料的功能。處理程序即是正在執行的工作。它可以是計算、驗證檢查、決策,或資料操作程序。
處理程序通常以圓形或圓角矩形繪製。在形狀內部,放置描述動作的名稱,例如「計算總額」或「驗證登入」。每個處理程序必須至少有一個輸入和一個輸出。若只有資料流入而無資料流出,則該處理程序是不完整的。
處理程序會編號以表示層級關係。例如,「處理程序 1」可能被分解為「處理程序 1.1」、「處理程序 1.2」等。此編號方式有助於在不同圖表之間追蹤細節層級。
3. 數據存儲 📁
數據存儲代表數據被保存以供未來使用的場所。它們是資料庫。在物理系統中,這可能是一個資料庫表格、一個檔案,或一個實體文件櫃。在邏輯圖中,它僅僅是數據存放的位置。
常見的形狀包括開口的矩形或平行線。存儲內部的名稱應為複數形式,表示一組記錄,例如「客戶檔案」或「訂單日誌」。
- 讀取: 一個流程從存儲中讀取數據以使用它。
- 寫入: 一個流程將數據寫入存儲以保存它。
數據流會流入和流出存儲。必須注意的是,數據流在未經過流程的情況下不能直接交叉。你不能在兩個數據存儲之間畫一條直接的線;必須有一個流程位於中間,以說明數據為何移動。
4. 數據流 ➡️
數據流是連接符號的箭頭。它們代表數據在系統中的移動。與程式設計中的控制流不同,數據流代表實際的資訊封包。
每個箭頭都應標註通過它的數據名稱。例如,從客戶到流程的箭頭可能標註為「訂購請求」。從流程到數據存儲的箭頭可能標註為「新訂單記錄」。
箭頭必須具有單一方向。如果兩個點之間的數據雙向流動,應使用兩個獨立的箭頭。標籤必須一致使用單數或複數。避免使用模糊的標籤,如「數據」或「資訊」。應具體明確,例如「運送地址」或「庫存報表」。
理解DFD層級 📈
DFD以層級方式建立,以管理複雜性。這種方法稱為分解。
第0層:上下文圖
第0層圖是最高層級。它將整個系統顯示為單一流程。它強調系統與外部實體之間的關係。此視圖回答的問題是:「系統的邊界是什麼?」
在此圖中,僅有一個流程節點。所有數據流都直接連接到這個中心流程。此層級不顯示內部數據存儲,因為內部運作被隱藏。
第1層:主要流程
第1層圖將第0層的單一流程分解為其主要子流程。這使系統被拆分成可管理的模塊。你會看到多個流程節點、數據存儲,以及連接它們的具體數據流。
此層級定義了主要的功能區域。例如,一個電子商務系統可能被分解為「管理庫存」、「處理付款」和「處理運送」。每一項都代表一個主要流程。
第2層:詳細邏輯
第2層圖深入探討第1層的特定流程。如果第1層的流程較為複雜,則會為其建立獨立的圖。這使分析師能夠在不混亂整體視圖的情況下,詳細繪製特定功能的每一步驟。
在此階段,符號的細節更加豐富。你可能會看到多個數據存儲以及複雜的數據流路徑。這正是具體業務規則常被視覺化的地方。
規則與慣例 ✅
為保持清晰,DFD必須遵守嚴格的規則。違反這些規則可能導致混淆和誤解。
命名的一致性
同一個數據流在任何地方出現時都必須使用相同的名稱。如果在一個圖中將流標註為「使用者ID」,在另一個圖中就不能標註為「ID編號」。一致性有助於跨層級追蹤數據。
無黑洞或奇蹟
「黑洞」是指有輸入但無輸出的流程。這意味著數據消失,通常這是錯誤的。『奇蹟』是指有輸出但無輸入的流程。這意味著數據憑空出現。兩者都是圖中的邏輯錯誤。
數據存儲平衡
當你分解一個流程時,與父流程相連的數據存儲必須繼續與子流程保持連接。除非邏輯發生顯著變化,否則不能在較低層級刪除數據存儲。數據流必須在各層之間保持平衡。
箭頭方向
箭頭表示方向。不要不必要地畫出交叉的箭頭。交叉的線條會使圖難以閱讀。使用彎折或斷點來保持路徑清晰。如果兩個數據流交叉,請確保數據類型不同,以避免混淆。
DFD與流程圖 🧩
人們常將數據流圖(DFD)與流程圖混淆。雖然它們外觀相似,但用途不同。
流程圖描述操作的邏輯與順序。它顯示決策點(菱形)、迴圈以及步驟的確切順序。它是程序性的,回答的是「系統如何執行?」
DFD描述的是數據的移動。它不會明確顯示迴圈或決策邏輯。它專注於數據的「什麼」與「何處」。它回答的是「哪些數據被移動和轉換?」
使用DFD來表示控制邏輯是一種錯誤。它不應包含決策菱形。如果需要顯示邏輯,應在DFD旁使用決策表或結構化英文描述。這種關注點的分離能保持圖表的清晰。
實際應用 📝
建立圖表時,請從上下文圖開始。識別系統邊界。繪製外部實體。繪製代表系統的單一處理過程。繪製連接它們的資料流。
接下來,進入第1級。將中心處理過程分解為主要功能。識別資料儲存的位置。確保每個處理過程都有輸入和輸出。檢查資料流是否與上下文圖相符。
與利害關係人審查圖表。詢問資料流是否符合他們對業務的理解。如果利害關係人說:「我們不在這裡儲存那筆資料」,則調整資料儲存位置。如果他們說:「我們不會把資料傳給那個人員」,則調整實體。
驗證至關重要。若使用者無法理解的圖表毫無用處。它作為溝通工具,彌補技術團隊與業務擁有者之間的差距。
清晰度的最佳實務 🌟
保持單頁上的符號數量在可管理範圍內。若圖表過於擁擠,其價值將喪失。使用子圖表來拆分圖表。若系統過於龐大,超出視覺容量,切勿試圖將整個系統繪製於單一頁面。
使用標準符號。雖然存在多種變體,但堅持使用一種風格(例如:Yourdon/DeMarco 或 Gane/Sarson)可避免混淆。切勿在同一文件中混合使用不同風格。
為所有項目加上標籤。未標籤的箭頭毫無意義。未標籤的處理過程含義模糊。即使是簡單的形狀,也需命名以傳達意義。
避免線條交叉。這會造成視覺雜訊。若線條必須交叉,請使用「跳躍」或線條斷裂來表示它們並未實際相交。
符號語義摘要 📋
回顧核心元件:
- 實體:在系統外部。資料來源或目的地。
- 處理過程:在系統內部。轉換資料。
- 儲存:在系統內部。儲存資料。
- 資料流:連接上述項目。移動資料。
掌握這些符號,能讓您清楚地記錄複雜系統。它為分析師與開發人員提供了一種共通語言。遵循分解與一致性的規則,您所創造的圖表不僅是繪圖,更是功能規格。
從簡單開始。建立上下文。逐步擴展細節。與使用者確認。此迭代過程確保圖表真實反映現實情況。











