數據流圖
數據流圖
徠數據流圖(Data Flow Diagram):簡稱DFD,它從數據傳遞和加工角度,以圖形方式來表達系統的邏輯功能、數據在系統內部的邏輯流向和邏輯變換過程,是結構化系統分析方法的主要表達工具及用於表示軟體模型的一種圖示方法。
數據流圖是結構化分析方法中使用的工具,它以圖形的方式描繪數據在系統中流動和處理的過程,由於它只反映系統必須完成的邏輯功能,所以它是一種功能模型。在結構化開發方法中,數據流圖是需求分析階段產生的結果。
數據流圖或數據流程圖(Data Flow Diagram),縮寫為 DFD。數據流圖DFD是描述系統中數據流程的一種圖形工具,它標誌了一個系統的邏輯輸入和邏輯輸出,以及把邏輯輸入轉換邏輯輸出所需的加工處理。
值得注意的是,數據流圖不是傳統的流程圖或框圖,數據流也不是控制流。數據流圖是從數據的角度來描述一個系統,而框圖是從對數據進行加工的工作人員的角度來描述系統。
DFD顯示系統將輸入和輸出什麼樣的信息,數據如何通過系統前進以及數據將被存儲在何處。它不顯示關於進程計時的信息,也不顯示關於進程將按順序還是并行運行的信息,而不像傳統的關注控制流的結構化流程圖,或者UML活動工作流程圖,它將控制流和數據流作為一個統一的模型。
數據流圖從數據傳遞和加工的角度,以圖形的方式刻畫數據流從輸入到輸出的移動變換過程。
數據流程圖包括:
a.指明數據存在的數據符號,這些數據符號也可指明該數據所使用的媒體;
b.指明對數據執行的處理的處理符號,這些符號也可指明該處理所用到的機器功能;
c.指明幾個處理和(或)數據媒體之間的數據流的流線符號;
d.便於讀、寫數據流程圖的特殊符號。
在處理符號的前後都應是數據符號。數據流程圖以數據符號開始和結束,數據流圖有兩種典型結構,一是變換型結構,它所描述的工作可表示為輸入、主處理和輸出,呈線性狀態。另一種是事務型結構,這種數據流圖呈束狀,即一束數據流平行流入或流出,可能同時有幾個事務要求處理。
圖2 變換型結構數據流圖
圖1 事務型結構數據流圖
在二十世紀七十年代,結構設計的原始開發者拉里·康斯坦丁(Larry Constantine)根據Martin和Estrin的“數據流圖”(Data Flow Graph)計算模型提出了一種實用技術的數據流圖。
數據流圖(DFD)迅速成為一種流行的方式,可視化軟體系統流程中涉及的主要步驟和數據。DFD通常用於顯示計算機系統中的數據流,儘管它們理論上可以應用於業務流程建模。DFD有助於記錄主要的數據流,或者在數據流方面探索新的高級設計。
圖3 數據流圖示例
圖4 數據流圖 - Yourdon / DeMarco符號
數據流圖也稱為氣泡圖。DFD是系統設計自上而下方法中使用的一種設計工具。這個上下文級別的DFD接下來是“爆炸式”的,以產生一個1級的DFD,顯示正在建模的系統的一些細節。Level 1 DFD顯示了系統如何分成子系統(過程),每個系統處理一個或多個來自或來自外部代理的數據流,它們一起提供系統的所有功能整個。它還識別必須存在的內部數據存儲庫,以便系統執行其工作,並顯示系統各個部分之間的數據流。
數據流圖是結構化系統分析和設計方法SSADM的三個基本視角之一。項目發起人和最終用戶需要在系統演進的各個階段得到簡要介紹和諮詢。通過數據流圖,用戶可以看到系統將如何運行,系統將完成什麼以及如何實現系統。可以繪製舊系統的數據流圖,並與新系統的數據流圖進行比較,以便比較以實現更高效的系統。數據流圖可以用來為最終用戶提供一個物理的概念,即它們輸入的數據最終對整個系統的結構從訂單到發送到報告有影響。如何開發系統可以通過數據流圖模型來確定。
在開發一組的過程中整平數據流圖分析員/設計者被迫處理系統可以如何被分解為分量的子系統,以及標識的交易數據中的數據模型。
數據流圖可以在SDLC的分析和設計階段使用。
繪製數據流圖(Yourdon&Coad和Gane&Sarson)有不同的表示法,為流程,數據存儲,數據流和外部實體定義不同的可視表示。
邏輯DFD捕獲系統運行所需的數據流。它描述了所進行的過程,每個過程所需要的和所產生的數據以及保存數據所需的商店。另一方面,物理DFD展示了系統如何實現(當前的物理DFD),或者設計者未來打算如何實現(必需的物理DFD)。因此,可以使用物理DFD來描述在辦公室周圍移動的每張紙上出現的一組數據項目以及將特定的一組紙張一起存儲在文件櫃中的事實。物理DFD很可能會包含對重複數據或冗餘數據的引用,並且數據存儲(如果作為一組資料庫表將構成一個非規範化(或非規範化)的關係資料庫。相反,邏輯DFD試圖以既不冗餘又不重複的形式捕獲系統的數據流方面。
數據流是一組數據。在數據流圖中數據流用帶箭頭的線表示,在其線旁標註數據流名。在數據流圖中應該描繪所有可能的數據流向,而不應該描繪出現某個數據流的條件。
在數據流圖中加工用圓圈表示,在圓圈內寫上加工名。一個處理框可以代表一系列程序、單個程序或者程序的一個模塊。
圖5 數據流圖符號
數據流。數據流是數據在系統內傳播的路徑,因此由一組成分固定的數據組成。如訂票單由旅客姓名、年齡、單位、身份證號、日期、目的地等數據項組成。由於數據流是流動中的數據,所以必須有流向,除了與數據存儲之間的數據流不用命名外,數據流應該用名詞或名詞短語命名。
數據源或宿(“宿”表示數據的終點)。代表系統之外的實體,可以是人、物或其他軟體系統。
對數據的加工(處理)。加工是對數據進行處理的單元,它接收一定的數據輸入,對其進行處理,併產生輸出。
徠數據存儲。表示信息的靜態存儲,可以代表文件、文件的一部分、資料庫的元素等。
圖6 數據流圖
頂層數據流圖只含有一個加工表示整個系統;輸出數據流和輸入數據流為系統的輸入數據和輸出數據,表明系統的範圍,以及與外部環境的數據交換關係。
中層數據流圖是對父層數據流圖中某個加工進行細化,而它的某個加工也可以再次細化,形成子圖;中間層次的多少,一般視系統的複雜程度而定。
底層數據流圖是指其加工不能再分解的數據流圖,其加工稱為“原子加工”。
圖7 數據流圖
1.一個加工的輸出數據流不應與輸入數據流同名,即使它們的組成成分相同。
2.保持數據守恆。也就是說,一個加工所有輸出數據流中的數據必須能從該加工的輸入數據流中直接獲得,或者說是通過該加工能產生的數據。
3.每個加工必須既有輸入數據流,又有輸出數據流。
4.所有的數據流必須以一個外部實體開始,並以一個外部實體結束。
5.外部實體之間不應該存在數據流
(一)確定系統的輸入輸出
由於系統究竟包括哪些功能可能一時難於弄清楚,可使範圍盡量大一些,把可能有的內容全部都包括進去。此時,應該向用戶了解“系統從外界接受什麼數據”、“系統向外界送出什麼數據”等信息,然後,根據用戶的答覆畫出數據流圖的外圍。
(二)由外向里畫系統的頂層數據流圖
首先,將系統的輸入數據和輸出數據用一連串的加工連接起來。在數據流的值發生變化的地方就是一個加工。接著,給各個加工命名。然後,給加工之間的數據命名。最後,給文件命名。
(三)自頂向下逐層分解,繪出分層數據流圖
對於大型的系統,為了控制複雜性,便於理解,需要採用自頂向下逐層分解的方法進行,即用分層的方法將一個數據流圖分解成幾個數據流圖來分別表示。
圖8 數據流圖
(2)畫系統內部,即畫下層數據流圖。不再分解的加工稱為基本加工。一般將層號從0開始編號,採用自頂向下,由外向內的原則。畫0層數據流圖時,分解頂層流圖的系統為若干子系統,決定每個子系統間的數據介面和活動關係。例如,在上面的機票預訂系統按功能可分成兩部分,一部分為旅行社預訂機票,另一部分為旅客取票,兩部分通過機票文件的數據存儲聯繫起來,0層數據流圖如圖3-4。
(3)注意事項。
①命名。不論數據流、數據存儲還是加工,合適的命名使人們易於理解其含義。
②畫數據流而不是控制流。數據流反映系統“做什麼”,不反映“如何做”,因此箭頭上的數據流名稱只能是名詞或名詞短語,整個圖中不反映加工的執行順序。
③一般不畫物質流。數據流反映能用計算機處理的數據,並不是實物,因此對目標系統的數據流圖一般不要畫物質流。
④每個加工至少有一個輸入數據流和一個輸出數據流,反映出此加工數據的來源與加工的結果。
⑤編號。如果一張數據流圖中的某個加工分解成另一張數據流圖時,則上層圖為父圖,直接下層圖為子圖。子圖及其所有的加工都應編號。
⑥父圖與子圖的平衡。子圖的輸入輸出數據流同父圖相應加工的輸入輸出數據流必須一致,此即父圖與子圖的平衡。
⑦局部數據存儲。當某層數據流圖中的數據存儲不是父圖中相應加工的外部介面,而只是本圖中某些加工之間的數據介面,則稱這些數據存儲為局部數據存儲。
⑧提高數據流圖的易懂性。注意合理分解,要把一個加工分解成幾個功能相對獨立的子加工,這樣可以減少加工之間輸入、輸出數據流的數目,增加數據流圖的可理解性。
某企業銷售管理系統的功能為:
圖9 數據流圖
(2)根據缺貨記錄進行缺貨統計,將缺貨通知單發給採購部門,以便採購。
(3)根據採購部門發來的進貨通知單處理進貨,即修改庫存,並從缺貨記錄中取出缺貨訂單進行供貨處理。
(4)根據留底的訂單進行銷售統計,列印統計表給經理。
根據上述的功能描述,畫出如下的數據流程圖。