de_DEen_USes_ESfa_IRfr_FRid_IDjapl_PLpt_PTru_RUvizh_CNzh_TW

📘 DFD 頂向下分解完整指南

1. 數據流圖(DFD)簡介

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

Visual Paradigm AI 聊天機器人:使用 AI 理解用於頂向下分解的數據流圖(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) 需要三個要素才能運作:

  1. 為圖形套用樣式 — graph [...], 節點 [...], 邊 [...]屬性。
  2. 宣告元素— 外部實體(方塊)、處理程序(圓形)、資料儲存(記錄),包圍在虛線叢集邊界。
  3. 繪製流程— 明確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 層)

將整個系統視為單一流程並識別所有與外部世界的互動。不包含資料儲存,也不包含內部細節。

Visual Paradigm AI 聊天機器人:建立用於頂向下分解的上下文圖(第 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 — 分解為「第一層級」(主要流程)」

Visual Paradigm AI 聊天機器人:使用 AI 將頂向下分解過程分解為第 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; 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標籤"];                // 僅讀取
}

圖表即程式碼:VPasCode 用於 DFD 頂向下分解以生成第 1 層 DFD解釋:

  • 線性鏈P1 → P2 → P3 → P4顯示一個有序流程:訂單在下單後、付款前、庫存檢查前、出貨前完成。
  • 該付款閘道交換使用兩個單向箭頭(付款請求向外,付款狀態 向內)。
  • 資料儲存區 作為狀態: P1 寫入 訂單, P3 讀取與更新 庫存(dir=both), P4 寫入 出貨單。
  • P3 → ProductDS 使用 dir=both — 僅有一條邊,而非兩條 — 因為該流程同時讀取和更新庫存。

步驟 3 — 下鑽: 層級 2(專注於單一流程)

Visual Paradigm AI 聊天機器人:使用 AI 建立頂向下分解為第 1 層(主要流程)的範例

選擇一個層級 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狀態"];
}

使用 VPasCode 的圖表即程式碼:將 DFD 分解為第 1 層(主要流程)並進行渲染解釋(相對於「第一層):

  • 2.1 計算總額 是一個 純計算 — 讀取購物車項目,產生數值,除儲存體外無其他外部輸入/輸出。
  • 2.3 授權付款 是 唯一 步驟,負責與外部 付款閘道 — 資金流動被清晰隔離。
  • 該訂單 商店重新出現,因為2.4 更新訂單狀態(最初由1.0 在層級一。)
  • 該鏈2.1 → 2.2 → 2.3 → 2.4 是一個順序驗證流程 在移交給3.0 (粉紅色父節點)。
  • 父流程 1.0 與 3.0 以粉紅色繪製 外部 邊界,用以標定流程的起點與終點。

步驟 4 — 再次下鑽:第三層級(遞迴重複)

Visual Paradigm AI 聊天機器人:再次下鑽:使用 AI 建立頂向下分解的第 3 層(重複遞迴)範例

對任何仍過於複雜的子流程,重複完全相同的技術。我們將縮放至 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];
}

使用 VPasCode 的圖表即程式碼:再次下鑽:為渲染建立第 3 層(重複遞迴)範例解釋:

  • 2.2.1 驗證卡片 是 閘道 — 它必須成功,然後才能開始詐欺檢查。
  • 2.2.2 (詐欺) 和 2.2.3 (促銷) 在 並行:兩者皆讀取規則,且兩者皆提供最終計算的輸入。「(並行)」標籤即標示此情況。
  • 2.2.4 計算最終金額 是 匯入 點 — 它 匯集 付款總額 + 折扣 匯入單一經驗證的輸出,並傳遞至上層 2.3.
  • 卡片註冊表 和 詐欺規則 是細節層級的儲存,在第二層不可見 — 隨著您進行分解,新的儲存會自然出現。

步驟 5 — 當流程為「基本」時停止

繼續分解,直到每個流程描述一個 單一、明確且可執行的動作. 沒有固定的深度;當一個流程能清晰地對應到單一功能或單一決策時即停止。上述第 2.2.1 至 2.2.4 層級已屬基本層級。


6. 最佳實踐與常見陷阱

✅ 最佳實踐

  1. 以層級方式為流程編號 (2.2.4) 使得任何圖表都能在樹狀結構中自我定位。
  2. 在邊界處繪製父流程(粉紅色)以確保流程保留上下文——切勿使輸入/輸出成為孤兒。
  3. 使用單一雙向邊 (dir=both) 用於雙向交換,而非兩支獨立箭頭。可減少雜亂。
  4. 標籤應具描述性但保持簡短 (「授權付款」,而非「AP」)。
  5. 一次分解一個流程 — 每個層級都是獨立的圖表;不要將多個層級擠在一個圖表中。
  6. 平衡圖表 — 父層級的輸入/輸出必須等於其子層級輸入/輸出的總和(平衡規則)。
  7. 務必宣告所有元素 — 僅包含樣式而未宣告任何節點或邊的路徑會呈現空白畫布。每個數據流圖(DFD)都必須先設定樣式,再宣告元素,最後進行連接.
  8. 為資料儲存區命名時務必唯一 — 在子圖中重新編號(D1、D2…),以確保其獨立性。

❌ 常見陷阱

  1. 孤兒流程 — 沒有輸入或輸出的流程。每個流程都必須轉換某些內容。
  2. 缺少平衡— 在 1 層出現了一個流程,但其 2 層的子節點均未產生或消耗該流程。
  3. 過早的細節— 在 0 層情境圖中暴露資料儲存(它們僅應出現在較低層級)。
  4. 控制流程思維— 將迴圈或決策符號放入資料流程圖;這些應保留給流程圖。資料流程圖顯示的是資料,而非順序。
  5. 兩條平行箭頭 本應為一個卻出現兩個 dir=both 邊 — 造成重複線條的雜亂。
  6. 儲存存取方向錯誤— 將儲存標記為 唯讀 但實際上是被寫入(或反之)。
  7. 將樣式範本誤認為圖表— 忘記宣告節點與邊會產生空白圖形。

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)並希望將其數位化:

  1. 附上影像至聊天視窗(現有 DFD 的螢幕截圖、照片或匯出檔案)。
  2. 詢問:「分析此 DFD 影像,並將其轉換為我可編輯的結構化模型。」
  3. 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 程式碼:

線上訂單處理系統第 1 層數據流圖(DFD),顯示客戶、支付閘道、倉庫與快遞服務商之間的互動。

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、要求分解、逐個流程縮放、請求例外分支,並上傳影像以數位化現有圖表。搭配嚴格的「編號」, 流程平衡」、一致的「色彩圖例」,以及完整的「先宣告後連接」程式碼,任何大型系統都能保持可導航、無歧義——且每個圖表都能實際呈現。🚀