1. 數據流圖(DFD)簡介
一個數據流圖(DFD)是一種圖形化表示,說明數據如何流動在系統中的流動——顯示數據的來源、轉換方式、儲存位置以及最終歸宿。與流程圖(專注於控制流程和順序)不同,DFD強調數據的移動與轉換而不必擔心執行時機或順序。

為何要使用數據流程圖?
- 分析 現有系統或 設計 新系統
- 早期識別資料輸入、輸出及儲存
- 向利害關係人溝通系統邊界與資料需求
- 由鳥瞰視角逐步分解複雜性至實作細節
2. 數據流程圖的四個核心組件
任何層級的數據流程圖,僅由以下 四個 基本元素(Gane-Sarson 記號法)組成:
| 組件 | 記號 | 角色 | 範例 |
|---|---|---|---|
| 外部實體 | 矩形 | 資料的來源或目的地外部系統邊界之外 | 客戶、金流閘道 |
| 處理程序 | 圓形 | 將輸入資料轉換為輸出資料 | 「下訂單」、「授權付款」 |
| 資料儲存庫 | 記錄 / 開啟矩形 | 用於後續使用的資料存放處 | 訂單、產品庫存 |
| 資料流程 | 箭頭(已標註) | 上述項目之間的資料移動 | 「訂單詳情」、「付款狀態」 |
💡 關鍵規則:一個處理程序 必須同時具有輸入與輸出流程。僅有輸入或僅有輸出的處理程序屬於建模錯誤——每個轉換都會產生結果。
3. DFD 層級——由上而下的金字塔
由上而下分解的優勢在於,您從 抽象概念開始 並新增 細節 迭代進行。每個層級均遵循標準編號慣例:
| 層級 | 名稱 | 內容 |
|---|---|---|
| 層級 0 | 情境圖 | 單一流程(整個系統)、所有外部實體及其資料流 — 不含資料儲存庫,亦無內部細節 |
| 層級 1 | 系統資料流程圖 | 系統分解為主要流程(1.0、2.0、3.0…)、內部資料儲存庫及資料流 |
| 層級 2 | 子圖 | 單一層級 1 流程分解為更細緻的流程(2.1、2.2、2.3…) |
| 第三層 | 次次圖 | 單一第二層流程進一步分解(2.2.1、2.2.2、2.2.3…) |
編號明確指出您在階層結構中的位置——2.2.4 屬於 2.2,而該項目屬於 2.0。此樹狀結構使大型系統保持可導航性。
4. 公司風格(顏色圖例)
本指南中的每張圖表均遵循一貫的視覺規範。在 Graphviz 中,配方為:先設定樣式,再宣告,最後連接。
| 元素 | 形狀 | 填充 | 邊框 | 目的 |
|---|---|---|---|---|
| 外部實體 | 方塊 |
#E1F5FE |
#0288D1 |
誰在外部 |
| 處理 | 圓形 |
#E8F5E9 |
#388E3C |
什麼轉換資料 |
| 資料儲存 | 記錄 |
#FFF9C4 |
#FBC02D |
數據存放之處 |
| 父進程 (參考) | 圓形 |
#FCE4EC |
#C2185B |
當前層級之外的上下文 |
| 系統邊界 | 虛線、圓角 叢集 |
#FAFAFA / #757575 |
灰色 | 當前圖形的邊界 |
| 資料流程 | 箭頭 |
— | #555555 |
資料移動 |
⚠️ 重要 — 樣式範本並非圖形
一個僅定義節點/邊樣式但 從未宣告任何節點或邊的 Graphviz 檔案 將呈現為一個 空白畫布。資料流程圖 (DFD) 需要三個要素才能運作:
- 為圖形套用樣式 —
graph [...],節點 [...],邊 [...]屬性。 - 宣告元素— 外部實體(方塊)、處理程序(圓形)、資料儲存(記錄),包圍在虛線
叢集邊界。 - 繪製流程— 明確
A -> B [label="..."]邊,使用dir=both用於雙向交換。
比較這兩者 — 兩者 驗證正常,但只有第二個會產生圖片:
❌ 僅樣式(無法渲染):
digraph DFD {
graph [rankdir = LR]
node [shape = box, style = "filled", fillcolor = "#E1F5FE"]
edge [color = "#555555", arrowsize = 0.8]
}
✅ 完整(可渲染):
digraph DFD {
graph [rankdir = LR]
node [style = "filled", fillcolor = "#E1F5FE", shape = box]
Customer;
// ...加上流程、資料儲存、邊界與邊
}
5. 該由上而下的分解流程(逐步進行)
該線上訂單處理系統 展示了此方法論。在每個層級,您都能獲得完整且可執行的 Graphviz 程式碼。
步驟 1 — 建立情境圖(第 0 層)
將整個系統視為單一流程並識別所有與外部世界的互動。不包含資料儲存,也不包含內部細節。

digraph DFD {
// --- 圖表樣式與圖表標題 ---
graph [
rankdir = LR
splines = true
overlap = false
nodesep = 0.6
ranksep = 0.9
fontname = "Helvetica,Arial,sans-serif"
fontsize = 12
label = "線上訂單處理系統 - 情境(第 0 層)"
]
node [ fontname = "Helvetica,Arial,sans-serif", fontsize = 11, penwidth = 1.5 ]
edge [ fontname = "Helvetica,Arial,sans-serif", fontsize = 9,
color = "#555555", arrowsize = 0.8 ]
// 外部實體
node [shape = box, style = "filled", fillcolor = "#E1F5FE", color = "#0288D1"]
Customer; PaymentGateway; Warehouse; Courier;
// 單一系統處理流程
node [shape = circle, style = "filled", fillcolor = "#E8F5E9",
color = "#388E3C", fixedsize = true, width = 1.6]
System [label="0.0n線上訂單n處理系統"];
// 資料流程(雙向資料交換處)
Customer -> System [label="訂單與n帳戶"];
System -> Customer [label="確認與n收據"];
System -> PaymentGateway [label="付款n請求"];
PaymentGateway -> System [label="付款n狀態"];
Warehouse -> System [label="庫存n可用"];
System -> Courier [label="配送n請求", dir=both];
} 解釋:情境圖回答了「此系統的邊界為何,以及它與誰互動?」」——它顯示了外部實體及其資料流程,但隱藏了所有內部結構。我們看到系統從客戶接收訂單,並透過付款閘道,將庫存與「倉庫」」進行比對,並將履約作業移交給「快遞」.
步驟 2 — 分解為「第一層級」(主要流程)」

將單一情境流程拆解為關鍵功能,並加入共用資料儲存。將流程與儲存體包裝在「虛線圓角系統邊界」.
digraph DFD {
// --- 圖形樣式與圖表標題 ---
graph [
rankdir = LR
splines = true
overlap = false
nodesep = 0.5
ranksep = 0.8
fontname = "Helvetica,Arial,sans-serif"
fontsize = 12
label = "線上訂單處理系統 - 第一層"
]
node [ fontname = "Helvetica,Arial,sans-serif", fontsize = 11, penwidth = 1.5 ]
edge [ fontname = "Helvetica,Arial,sans-serif", fontsize = 9,
color = "#555555", arrowsize = 0.8 ]
// 外部實體
node [shape = box, style = "filled", fillcolor = "#E1F5FE", color = "#0288D1"]
Customer; PaymentGateway; Warehouse; Courier;
// --- 系統邊界容器 ---
subgraph cluster_SystemBoundary {
label = "線上訂單處理系統";
fontname = "Helvetica,Arial,sans-serif"
fontsize = 14
color = "#757575"
style = "dashed,rounded"
bgcolor = "#FAFAFA"
margin = 20
// 處理程序(綠色圓形)
node [shape = circle, style = "filled", fillcolor = "#E8F5E9",
color = "#388E3C", fixedsize = true, width = 1.3]
P1 [label="1.0n下單"];
P2 [label="2.0n處理付款"];
P3 [label="3.0n確認庫存"];
P4 [label="4.0n出貨"];
// 資料儲存(黃色記錄)
node [shape = record, style = "filled", fillcolor = "#FFF9C4",
color = "#FBC02D", fixedsize = false]
OrderDS [label="{ D1 | 訂單 }"];
ProductDS [label="{ D2 | 產品n庫存 }"];
ShippingDS [label="{ D3 | 運送 }"];
}
// --- 資料流程:外部實體 ---
Customer -> P1 [label="訂單與n帳戶詳情"];
P1 -> Customer [label="訂單n確認"];
P2 -> PaymentGateway [label="付款n請求"];
PaymentGateway -> P2 [label="付款n狀態"];
Warehouse -> P3 [label="庫存n可用性"];
Courier -> P4 [label="送達n狀態", dir=both];
// --- 處理程序至處理程序流程 ---
P1 -> P2 [label="訂單n總額"];
P2 -> P3 [label="已付款n訂單"];
P3 -> P4 [label="已驗證n訂單"];
// --- 處理程序與資料儲存之間 ---
P1 -> OrderDS [label="建立n訂單"]; // 僅寫入
P3 -> ProductDS [label="更新n庫存", dir=both]; // 讀取與寫入
P4 -> ShippingDS [label="建立n運送"]; // 僅寫入
OrderDS -> P3 [label="訂單n詳情"]; // 僅讀取
ShippingDS -> P4 [label="運送n標籤"]; // 僅讀取
}
解釋:
- 線性鏈
P1 → P2 → P3 → P4顯示一個有序流程:訂單在下單後、付款前、庫存檢查前、出貨前完成。 - 該付款閘道交換使用兩個單向箭頭(
付款請求向外,付款狀態向內)。 - 資料儲存區 作為狀態:
P1寫入 訂單,P3讀取與更新 庫存(dir=both),P4寫入 出貨單。 P3 → ProductDS使用dir=both— 僅有一條邊,而非兩條 — 因為該流程同時讀取和更新庫存。
步驟 3 — 下鑽: 層級 2(專注於單一流程)

選擇一個層級 1 流程並進行分解 僅限該流程。顯示 上層流程 在邊界處(粉紅色),以保留上下文,並包含子流程、子儲存區和流程。
digraph DFD {
// --- 圖形樣式與圖表標題 ---
graph [
rankdir = LR
splines = true
overlap = false
nodesep = 0.5
ranksep = 0.8
fontname = "Helvetica,Arial,sans-serif"
fontsize = 12
label = "付款流程(第二層)- 線上訂單處理系統"
]
node [ fontname = "Helvetica,Arial,sans-serif", fontsize = 11, penwidth = 1.5 ]
edge [ fontname = "Helvetica,Arial,sans-serif", fontsize = 9,
color = "#555555", arrowsize = 0.8 ]
// 外部實體
node [shape = box, style = "filled", fillcolor = "#E1F5FE", color = "#0288D1"]
Customer; PaymentGateway;
// --- 系統邊界(此子流程) ---
subgraph cluster_SystemBoundary {
label = "2.0 付款流程";
fontname = "Helvetica,Arial,sans-serif"
fontsize = 14
color = "#757575"
style = "dashed,rounded"
bgcolor = "#FAFAFA"
margin = 20
// 子流程(綠色圓形)
node [shape = circle, style = "filled", fillcolor = "#E8F5E9",
color = "#388E3C", fixedsize = true, width = 1.3]
P21 [label="2.1n計算n總額"];
P22 [label="2.2n驗證n付款"];
P23 [label="2.3n授權n付款"];
P24 [label="2.4n確認n訂單"];
// 子資料儲存(黃色記錄)
node [shape = record, style = "filled", fillcolor = "#FFF9C4",
color = "#FBC02D", fixedsize = false]
CartDS [label="{ D1 | 購物車/n訂單項目 }"];
PromoDS [label="{ D2 | 優惠活動 }"];
PaymentDS [label="{ D3 | 付款n交易 }"];
OrderDS [label="{ D4 | 訂單 }"];
// 父流程(粉紅色)- 來自上層的背景資訊
node [shape = circle, style = "filled", fillcolor = "#FCE4EC",
color = "#C2185B", fixedsize = true, width = 1.4]
P1 [label="1.0n下單n(父流程)"];
P3 [label="3.0n確認n庫存n(父流程)"];
}
// 來自父流程/客戶流入子流程的資料流
P1 -> P21 [label="訂單n項目"];
P1 -> P22 [label="付款方式"];
Customer -> P22 [label="付款n詳情"];
// 子流程鏈
P21 -> P22 [label="總額與n折扣"];
P22 -> P23 [label="已驗證n付款"];
P23 -> P24 [label="付款n已授權"];
// 與外部閘道的互動
P23 -> PaymentGateway [label="授權n請求"];
PaymentGateway -> P23 [label="核准/n拒絕"];
// 輸出至父流程/客戶
P24 -> P3 [label="已付款n訂單"];
P24 -> Customer [label="付款n收據"];
// 資料儲存存取
P21 -> CartDS [label="讀取n項目", dir=both];
P22 -> PromoDS [label="驗證n優惠"];
P23 -> PaymentDS [label="記錄n交易", dir=both];
P24 -> OrderDS [label="更新n狀態"];
}
解釋(相對於「第一層):
- 2.1 計算總額 是一個 純計算 — 讀取購物車項目,產生數值,除儲存體外無其他外部輸入/輸出。
- 2.3 授權付款 是 唯一 步驟,負責與外部 付款閘道 — 資金流動被清晰隔離。
- 該
訂單商店重新出現,因為2.4 更新訂單狀態(最初由1.0 在層級一。) - 該鏈
2.1 → 2.2 → 2.3 → 2.4是一個順序驗證流程 在移交給3.0 (粉紅色父節點)。 - 父流程 1.0 與 3.0 以粉紅色繪製 外部 邊界,用以標定流程的起點與終點。
步驟 4 — 再次下鑽:第三層級(遞迴重複)

對任何仍過於複雜的子流程,重複完全相同的技術。我們將縮放至 2.2 驗證付款.
digraph DFD {
// --- 圖形樣式與圖表標題 ---
graph [
rankdir = LR
splines = true
overlap = false
nodesep = 0.5
ranksep = 0.8
fontname = "Helvetica,Arial,sans-serif"
fontsize = 12
label = "驗證付款(第三層級)- 線上訂單處理系統"
]
node [ fontname = "Helvetica,Arial,sans-serif", fontsize = 11, penwidth = 1.5 ]
edge [ fontname = "Helvetica,Arial,sans-serif", fontsize = 9,
color = "#555555", arrowsize = 0.8 ]
// 外部實體
node [shape = box, style = "filled", fillcolor = "#E1F5FE", color = "#0288D1"]
Customer;
// --- 系統邊界(此葉層級子流程)---
subgraph cluster_SystemBoundary {
label = "2.2 驗證付款";
fontname = "Helvetica,Arial,sans-serif"
fontsize = 14
color = "#757575"
style = "dashed,rounded"
bgcolor = "#FAFAFA"
margin = 20
// 葉層級流程(綠色圓圈)
node [shape = circle, style = "filled", fillcolor = "#E8F5E9",
color = "#388E3C", fixedsize = true, width = 1.3]
P221 [label="2.2.1n驗證n卡片/付款n詳情"];
P222 [label="2.2.2n檢查n詐欺"];
P223 [label="2.2.3n驗證n促銷n代碼"];
P224 [label="2.2.4n計算n最終n金額"];
// 葉層級資料儲存(黃色記錄)
node [shape = record, style = "filled", fillcolor = "#FFF9C4",
color = "#FBC02D", fixedsize = false]
CardDS [label="{ D1 | 卡片n註冊表 }"];
FraudDS [label="{ D2 | 詐欺n規則 }"];
PromoDS [label="{ D3 | 促銷活動 }"];
CartDS [label="{ D4 | 購物車/n訂單項目 }"];
// 父流程(粉紅色)
node [shape = circle, style = "filled", fillcolor = "#FCE4EC",
color = "#C2185B", fixedsize = true, width = 1.4]
P21 [label="2.1n計算n總額n(父流程)"];
P23 [label="2.3n授權n付款n(父流程)"];
}
// 輸入
P21 -> P221 [label="總額與n日期"];
Customer -> P221 [label="付款n詳情"];
// 順序驗證,含平行分支
P221 -> P222 [label="已驗證n詳情"];
P222 -> P223 [label="無詐欺n標記n(平行)"];
// 提供最終計算所需資料
P21 -> P223 [label="促銷n代碼"];
P221 -> P224 [label="付款n總額"];
P223 -> P224 [label="已套用n折扣"];
// 輸出至父流程
P224 -> P23 [label="已驗證且n已折扣n總額"];
// 資料儲存存取
P221 -> CardDS [label="驗證n卡片"];
P222 -> FraudDS [label="檢查n規則"];
P223 -> PromoDS [label="查詢n並套用"];
P224 -> CartDS [label="讀取n項目", dir=both];
}
解釋:
- 2.2.1 驗證卡片 是 閘道 — 它必須成功,然後才能開始詐欺檢查。
- 2.2.2 (詐欺) 和 2.2.3 (促銷) 在 並行:兩者皆讀取規則,且兩者皆提供最終計算的輸入。「(並行)」標籤即標示此情況。
- 2.2.4 計算最終金額 是 匯入 點 — 它 匯集
付款總額+折扣匯入單一經驗證的輸出,並傳遞至上層 2.3. - 卡片註冊表 和 詐欺規則 是細節層級的儲存,在第二層不可見 — 隨著您進行分解,新的儲存會自然出現。
步驟 5 — 當流程為「基本」時停止
繼續分解,直到每個流程描述一個 單一、明確且可執行的動作. 沒有固定的深度;當一個流程能清晰地對應到單一功能或單一決策時即停止。上述第 2.2.1 至 2.2.4 層級已屬基本層級。
6. 最佳實踐與常見陷阱
✅ 最佳實踐
- 以層級方式為流程編號 (
2.2.4) 使得任何圖表都能在樹狀結構中自我定位。 - 在邊界處繪製父流程(粉紅色)以確保流程保留上下文——切勿使輸入/輸出成為孤兒。
- 使用單一雙向邊 (
dir=both) 用於雙向交換,而非兩支獨立箭頭。可減少雜亂。 - 標籤應具描述性但保持簡短 (「授權付款」,而非「AP」)。
- 一次分解一個流程 — 每個層級都是獨立的圖表;不要將多個層級擠在一個圖表中。
- 平衡圖表 — 父層級的輸入/輸出必須等於其子層級輸入/輸出的總和(平衡規則)。
- 務必宣告所有元素 — 僅包含樣式而未宣告任何節點或邊的路徑會呈現空白畫布。每個數據流圖(DFD)都必須先設定樣式,再宣告元素,最後進行連接.
- 為資料儲存區命名時務必唯一 — 在子圖中重新編號(D1、D2…),以確保其獨立性。
❌ 常見陷阱
- 孤兒流程 — 沒有輸入或輸出的流程。每個流程都必須轉換某些內容。
- 缺少平衡— 在 1 層出現了一個流程,但其 2 層的子節點均未產生或消耗該流程。
- 過早的細節— 在 0 層情境圖中暴露資料儲存(它們僅應出現在較低層級)。
- 控制流程思維— 將迴圈或決策符號放入資料流程圖;這些應保留給流程圖。資料流程圖顯示的是資料,而非順序。
- 兩條平行箭頭 本應為一個卻出現兩個
dir=both邊 — 造成重複線條的雜亂。 - 儲存存取方向錯誤— 將儲存標記為 唯讀 但實際上是被寫入(或反之)。
- 將樣式範本誤認為圖表— 忘記宣告節點與邊會產生空白圖形。
7. 由上而下的驗證檢查清單
在展示圖表前,請檢查:
- ✅ 每個處理程序都至少有 1 個輸入和 1 個輸出。
- ✅ 每個流程標籤都是名詞(例如「訂單詳情」),而非動詞。
- ✅ 每個資料儲存庫在某個時刻會被讀取並寫入(除非是明確的外部參考資料)。
- ✅ 層級邊界平衡:子層級消耗與產生的內容必須與父層級交換的內容完全一致。
- ✅ 外部實體僅出現在邊界邊緣,絕不位於邊界內部。
- ✅
dir=both用於雙向交換;否則使用單向箭頭。 - ✅ 粉紅色的父流程引用正確顯示正在分解的層級。
- ✅ 程式碼宣告了真實的節點、邊與邊界——這不僅僅是樣式規則。
8. 由上而下分解流程摘要
由上而下的 DFD 分解是一趟從「抽象到細節」的旅程。:
- 情境圖(L0)——一個方框,包含所有邊界與外部實體。
- 系統圖(L1)——主要流程、儲存區與資料流程。
- 子圖(L2、L3…)——逐次遞迴縮放至單一流程,同時保持父情境可見,並為本地儲存區編號。
每個層級回答不同的問題:「L0 詢問「系統的範圍為何?」,L1 詢問「主要的資料流程為何?」,L2 及以上詢問「資料究竟如何被轉換?」」
此線上訂單流程範例展示了完整鏈條,包含完整且可執行的 Graphviz 程式碼——從四個實體的情境圖,直至四個步驟的驗證程序 (2.2.1 → 2.2.4)。透過縮減數字, 平衡流程,並遵循一致的顏色圖例 (藍色方塊、綠色圓圈、黃色記錄、粉紅色父參照、灰色虛線邊界),且始終明確宣告每個節點/邊,任何大型系統都能保持可導航且無歧義——且每個圖表都能實際呈現。
9. 工具:使用 Visual Paradigm AI 構建 DFD 由上而下的分解
Visual Paradigm AI 將AI 聊天機器人直接置於建模工具內。無需手繪每一層級,您可以透過對話驅動整個分解過程,然後微調結果。以下是如何針對本指南中的方法來使用它。
9.1 DFD 工作的核心功能
「VP AI 聊天機器人 是一個文字與程式碼助手,透過對話與您協作。針對 DFD 由上而下的分解,它可以:
| 功能 | 它為您帶來的價值 |
|---|---|
| 生成圖表程式碼 | 為給定的流程描述生成 Graphviz (DOT) 程式碼——逐層生成 |
| 分析附加的圖片 | 讀取您上傳的手繪或現有的 DFD 圖片,並將其轉換為結構化模型 |
| 迭代優化 | 根據您的反饋(例如「縮放至 2.2」或「添加衰退分支」)重新生成圖表 |
| 解釋含義 | 逐步說明每個實體、流程、儲存和流程的含義 |
| 驗證語法 | 在渲染之前檢查 DOT 程式碼的結構是否正確 |
| 生成策略/圖表輸出 | 生成與 DFD 配套的輔助圖表或框架(例如泳道圖或組織情境圖) |
📌 注意: Visual Paradigm 支援多種圖形表示法。建議使用 BPMN 進行需要開始/結束事件、閘道與泳道的業務流程建模;請使用 基於 Graphviz 的數據流圖(DFD) 進行本指南中所示的嚴格數據流建模。
9.2 實作對話 — 分解線上訂單流程
以下是一個真實的對話會話,重現了我們逐步 walkthrough 的步驟。請注意,每個提示都會深入一層 — 這正是由上而下的方法論。
提示 1 — 開始建立情境圖:
「為線上訂單流程系統建立情境圖(第 0 層)。外部實體:客戶、金流閘道、倉庫、快遞。」
VP AI 回應 提供一個第 0 層數據流圖(DFD)— 包含一個核心流程、四個外部實體及其對應的數據流 — 請將其放置於圖表中。
提示 2 — 增加細節層級:
「現在將其分解為第 1 層數據流圖(DFD),包含以下流程:1.0 下訂單、2.0 處理付款、3.0 確認庫存、4.0 出貨訂單。並新增訂單、產品庫存與出貨的資料儲存。」
VP AI 回覆流程圖層級 1,其中流程以序列方式串聯,附帶儲存區,並保留外部實體的流向 — 您在指南第 2 步中看到的管線。
提示 3 — 縮放至單一流程:
「縮放至 2.0 處理付款。建立層級 2 的子圖,包含 2.1 計算總額、2.2 驗證付款、2.3 授權付款、2.4 確認訂單。保留 1.0 與 3.0 作為父參照。」
VP AI 產出層級 2 的子圖:子流程、本地儲存區(D1–D4)、金流閘道互動,以及 1.0 與 3.0 的粉紅色父參照 — 符合第 3 步。
提示 4 — 再次下鑽:
「下鑽至 2.2 驗證付款,建立層級 3 圖表:2.2.1 驗證卡片、2.2.2 檢查詐欺、2.2.3 驗證促銷、2.2.4 計算最終金額。新增卡片註冊、詐欺規則、促銷活動與購物車項目的儲存區。」
VP AI 產生層級 3 的葉節點圖表,包含匯入計算(2.2.4)與並行的詐欺/促銷分支 — 完全符合第 4 步。
提示 5 — 新增例外處理:
「新增失敗路徑:若 2.2.2 檢查詐欺標記該交易,則導向取消通知流程並回傳至客戶。」
VP AI 精修圖表新增拒付分支,並自動重新平衡各流向。
9.3 有效的提示模式
使用這些模式以獲得可靠且符合方法論的結果:
| 目標 | 範例提示 |
|---|---|
| 再深入分解一層 | 「縮放至「3.0 確認庫存作為第二層子圖表。」 |
| 指定編號 | 「使用編號流程「2.1, 2.2, 2.3.” |
| 保留上層情境 | 「保留1.0 和 3.0 作為邊界上的父參照。」 |
| 新增資料儲存區 | 「包含儲存區:D1 購物車項目, D2 促銷活動.” |
| 顯示雙向流程 | 「使用dir=both 用於流程與儲存區之間的讀寫操作。」 |
| 平衡層級 | 「確保輸入與輸出與上層級相符。」 |
| 新增失敗路徑 | 「當「付款遭拒時.” |
| 限制深度 | 「停駐於基本處理步驟——單一、可執行的動作。」 |
9.4 上傳影像以供分析
若您已有一份手繪或舊版數據流程圖(DFD)並希望將其數位化:
- 附上影像至聊天視窗(現有 DFD 的螢幕截圖、照片或匯出檔案)。
- 詢問:「分析此 DFD 影像,並將其轉換為我可編輯的結構化模型。」
- VP AI 檢視該影像(讀取形狀、標籤和箭頭)並重構實體、流程、儲存庫與流程,形成可編輯的圖表。
📌 AI 讀取影像的內容— 矩形、圓形、記錄及其標籤 — 並以正確的符號重現它們。這是一條從粗略草圖快速過渡到清晰分層模型的捷徑,隨後您可進一步分解該模型。
9.5 使用工件工作流程進行迭代
VP AI將每個生成的圖表儲存為一個工件,您可以在精修過程中參考:
- 「精修第二層級工件,以新增詐欺拒付分支。」— 針對一個特定已生成的圖表,而非重新從頭生成。
- 「重新生成情境圖,但移除倉儲實體。」— 當範圍變更時,替換對應的工件。
- 「比較第 2 層與第 3 層的工件,以進行平衡。」——交叉檢查父層與子層流程的對等性。
由於工件會保留對話的狀態,因此您可以逐層進行細化,而不會遺失先前的決策——這正是由上而下分解的精髓。
9.6 建議工作流程檢查清單
| 階段 | 行動 |
|---|---|
| 1. 架構 | 首先提示建立情境圖(第 0 層)。 |
| 2. 建立第 1 層 | 要求提供包含儲存區與邊界的主要流程分解。 |
| 3. 深入細化 | 一次聚焦一個流程;保留父層參照。 |
| 4. 精煉 | 請求異常路徑、平衡修正,並儲存更正內容。 |
| 5. 驗證 | 請 AI 檢查 DOT 語法;並檢視第 7 節中的檢查清單。 |
| 6. 文件化 | 請求提供解釋敘述,以便附於每個層級旁邊。 |
9.7 範例輸出 — 請 VP AI 產生第 1 層級程式碼
聊天機器人針對「第 2 步驟分解」的典型回應將是「您先前所見的完整且可執行的 DOT 程式碼:

digraph DFD {
graph [
rankdir = LR, splines = true, overlap = false,
nodesep = 0.5, ranksep = 0.8,
fontname = "Helvetica,Arial,sans-serif", fontsize = 12,
label = "線上訂單處理系統 - 第一層"
]
node [ fontname = "Helvetica,Arial,sans-serif", fontsize = 11, penwidth = 1.5 ]
edge [ fontname = "Helvetica,Arial,sans-serif", fontsize = 9,
color = "#555555", arrowsize = 0.8 ]
// 外部實體
node [shape = box, style = "filled", fillcolor = "#E1F5FE", color = "#0288D1"]
Customer; PaymentGateway; Warehouse; Courier;
subgraph cluster_SystemBoundary {
label = "線上訂單處理系統";
fontname = "Helvetica,Arial,sans-serif"
fontsize = 14
color = "#757575"
style = "dashed,rounded"
bgcolor = "#FAFAFA"
margin = 20
node [shape = circle, style = "filled", fillcolor = "#E8F5E9",
color = "#388E3C", fixedsize = true, width = 1.3]
P1 [label="1.0n下單"];
P2 [label="2.0n處理付款"];
P3 [label="3.0n確認庫存"];
P4 [label="4.0n出貨"];
node [shape = record, style = "filled", fillcolor = "#FFF9C4",
color = "#FBC02D", fixedsize = false]
OrderDS [label="{ D1 | 訂單 }"];
ProductDS [label="{ D2 | 產品n庫存 }"];
ShippingDS [label="{ D3 | 運送 }"];
}
// 流程
Customer -> P1 [label="訂單與n帳戶資料"];
P1 -> Customer [label="訂單n確認"];
P2 -> PaymentGateway [label="付款n請求"];
PaymentGateway -> P2 [label="付款n狀態"];
Warehouse -> P3 [label="庫存n可用"];
Courier -> P4 [label="送達n狀態", dir=both];
P1 -> P2 [label="訂單n總額"];
P2 -> P3 [label="已付款n訂單"];
P3 -> P4 [label="已驗證n訂單"];
P1 -> OrderDS [label="建立n訂單"];
P3 -> ProductDS [label="更新n庫存", dir=both];
P4 -> ShippingDS [label="建立n運送"];
OrderDS -> P3 [label="訂單n詳情"];
ShippingDS -> P4 [label="運送n標籤"];
}
將該內容貼上至 VP 圖形中,即可獲得完整結構的第一層模型 — 準備好透過下一個提示進行進一步分解。
10. 摘要
由上而下的 DFD 分解是一場從「抽象到細節」的旅程:
- 情境層(L0) — 單一方塊,包含所有邊界與外部實體。
- 系統層(L1) — 主要流程、儲存區與資料管線。
- 子圖表(L2、L3…) — 逐層遞迴縮放至單一流程,同時保持父層情境可見,並為本地儲存區編號。
每一層級回答不同的問題:「L0 詢問「系統的範圍為何?」,L1 詢問「主要的資料流程為何?」,L2+ 詢問「資料究竟如何轉換?」
搭配「Visual Paradigm AI,整個階梯皆具對話式互動:提示 Level 0、要求分解、逐個流程縮放、請求例外分支,並上傳影像以數位化現有圖表。搭配嚴格的「編號」, 流程平衡」、一致的「色彩圖例」,以及完整的「先宣告後連接」程式碼,任何大型系統都能保持可導航、無歧義——且每個圖表都能實際呈現。🚀












