DFD圖

DFD圖

Data Flow Diagram,縮寫為DFD。中文名數據流圖數據流程圖。數據流圖DFD是描述系統中數據流程的一種圖形工具,它標誌了一個系統的邏輯輸入和邏輯輸出,以及把邏輯輸入轉換邏輯輸出所需的加工處理。它從數據傳遞和加工角度,以圖形方式來表達系統的邏輯功能、數據在系統內部的邏輯流向和邏輯變換過程,是結構化系統分析方法的主要表達工具及用於表示軟體模型的一種圖示方法。

值得注意的是,數據流圖不是傳統的流程圖框圖數據流也不是控制流。數據流圖是從數據的角度來描述一個系統,而框圖是從對數據進行加工的工作人員的角度來描述系統。

基本介紹

  • 中文名:數據流圖
  • 外文名:Data Flow Diagram
  • 簡稱:DFD
  • 性質結構化系統分析方法表達工具
  • 別稱:數據流程圖
  • 標誌:一個系統的邏輯輸入和邏輯輸出
簡介,歷史,理論,數據流,用途,數據流細化過程,符號的命名,數據字典,數據項,數據結構,數據流,數據存儲,主要元素,原則,分層DFD,畫法,舉例說明,

簡介

數據流圖是結構化分析方法中使用的工具,它以圖形的方式描繪數據在系統中流動和處理的過程,由於它只反映系統必須完成的邏輯功能,所以它是一種功能模型。
數據流圖英文縮寫DFD(Data Flow Diagram)它是描繪信息流和數據從輸入移動到輸出的過程中所經受的變換。
數據流圖從數據傳遞和加工的角度,以圖形的方式刻畫數據流從輸入到輸出的移動變換過程。
數據流程圖包括:
  • a.指明數據存在的數據符號,這些數據符號也可指明該數據所使用的媒體;
  • b.指明對數據執行的處理的處理符號,這些符號也可指明該處理所用到的機器功能;
  • c.指明幾個處理和(或)數據媒體之間的數據流的流線符號;
  • d.便於讀、寫數據流程圖的特殊符號。
在處理符號的前後都應是數據符號。數據流程圖以數據符號開始和結束。數據流圖有兩種典型結構,一是變換型結構,它所描述的工作可表示為輸入、主處理和輸出,呈線性狀態。另一種是事務型結構,這種數據流圖呈束狀,即一束數據流平行流入或流出,可能同時有幾個事務要求處理。

歷史

在二十世紀七十年代,結構設計的原始開發者拉里·康斯坦丁(Larry Constantine)根據Martin和Estrin的“數據流圖”(Data Flow Graph)計算模型提出了一種實用技術的數據流圖
數據流圖(DFD)迅速成為一種流行的方式,可視化軟體系統流程中涉及的主要步驟和數據。DFD通常用於顯示計算機系統中的數據流,儘管它們理論上可以套用於業務流程建模。DFD有助於記錄主要的數據流,或者在數據流方面探索新的高級設計。

理論

數據流圖也稱為氣泡圖。DFD是系統設計自上而下方法中使用的一種設計工具。這個上下文級別的DFD接下來是“爆炸式”的,以產生一個1級的DFD,顯示正在建模的系統的一些細節。Level 1 DFD顯示了系統如何分成子系統(過程),每個系統處理一個或多個來自或來自外部代理的數據流,它們一起提供系統的所有功能整個。它還識別必須存在的內部數據存儲庫,以便系統執行其工作,並顯示系統各個部分之間的數據流。
數據流圖是結構化系統分析和設計方法SSADM的三個基本視角之一。項目發起人和最終用戶需要在系統演進的各個階段得到簡要介紹和諮詢。通過數據流圖,用戶可以看到系統將如何運行,系統將完成什麼以及如何實現系統。可以繪製舊系統的數據流圖,並與新系統的數據流圖進行比較,以便比較以實現更高效的系統。數據流圖可以用來為最終用戶提供一個物理的概念,即它們輸入的數據最終對整個系統的結構從訂單到傳送到報告有影響。如何開發系統可以通過數據流圖模型來確定。
在開發一組的過程中整平數據流圖分析員/設計者被迫處理系統可以如何被分解為分量的子系統,以及標識的交易數據中的數據模型
數據流圖可以在SDLC的分析和設計階段使用。
繪製數據流圖(Yourdon&Coad和Gane&Sarson)有不同的表示法,為流程,數據存儲數據流和外部實體定義不同的可視表示。

數據流

數據流是一組數據。在數據流圖中數據流用帶箭頭的線表示,在其線旁標註數據流名。在數據流圖中應該描繪所有可能的數據流向,而不應該描繪出現某個數據流的條件。
數據流圖中加工用圓圈表示,在圓圈內寫上加工名。一個處理框可以代表一系列程式、單個程式或者程式的一個模組。

用途

可以依靠數據流圖來實現從用戶需求到系統需求的過渡。例如,可以將用戶需求陳述中的關鍵名詞、動詞提取出來,其中的名詞可以作為數據流圖中數據源、數據存儲,而動詞則可以作為數據流圖中的數據加工進程。數據流圖也能夠方便系統物理模型邏輯模型之間的轉換,可以將系統流程圖經過符號轉換而獲得系統的數據流圖。數據流圖的這個特點表明,可以基於系統的基本物理框架而抽取它的邏輯模型
軟體系統是複雜的,為了方便問題的解決,有必要將系統進行分解,由此將一個大的複雜問題解剖為許多小的相對簡單的問題。例如,可以按照系統的功能構成,將系統分解為許多子系統,各子系統又可以再分解為許多更小的功能模組,由此可以不斷深入地了解軟體系統的功能細節。由於數據流圖使用的是抽象的圖形符號,因此,它不僅能夠描述系統對數據的加工步驟,而且能夠依靠對其圖形符號的邏輯細化而方便地實現對系統中數據加工步驟的有效分解。

數據流細化過程

數據流細化的過程即是從上至下對系統功能進行分層描述的過程,如圖1所示。其中高層數據流對功能的描述是抽象的,但通過邏輯細化能夠深入到系統內部的低層數據流,而使對功能的描述逐步具體化。結構化分析就是基於數據流的細化實現的,它是結構化分析方法的關鍵。
圖1 數據流圖對系統的分層描述圖1 數據流圖對系統的分層描述
實際上,數據流圖對系統的描述可以從任何層面開始,只要那個層面的諸多軟體問題是清晰的,則在該層面上獲得的數據流圖也就可以是清晰的。但是,進入系統的層面越深,則遇到的問題點越多,數據流越複雜。為了更加清楚地表現系統的功能,數據流圖往往從容易辨別的高層開始,然後通過數據流的細化逐步深入。這個過程也就是從抽象到具體的解決問題方法在軟體分析上的具體體現。
當面對一個有待開發的新系統進行數據流描述時,數據流圖往往需要從最頂層畫起,使用個數據處理框來表示整個系統,以反映系統與周圍環境的關係,然後通過數據流的細化而獲得0層、1層,以及更下層的數據流圖。
圖2是一個“工資管理系統”的頂層數據流圖,其中的處理框表示所要描述的系統,而個外部接口(人事處、財務處、員工所在工作部門)則可以表示系統的工作環境。系統與外部接口之間的通信可以通過數據流,圖2中有四個數據流,即:職工清單、檔案工資、業績工資、工資報表。
圖2 “工資管理系統”的頂層數據流圖圖2 “工資管理系統”的頂層數據流圖
當需要對高層數據流細化以獲得對低層數據流的描述時,一種有效的方法是對高層數據流圖中的數據加工進行合理分解。通過把一個數據加工分解為多個數據加工可以看到這個數據加工的內部細節例如,圖2所描述的“工資管理系統”數據流圖。
假如“工資管理系統”可以具有以下三項功能:
  • 輸入職工名冊清單;
  • 從員工的檔案工資和業績工資的計算中產生工資數據;
  • 依據人事部門提供的職工清單按月列印出員工的工資報表
那么,可以考慮將“工資管理系統”分解為以下三項處理,即:
  1. 提供職工清單;
  2. 產生工資數據;
  3. 列印工資報表
圖3即是依照上述功能分解而從頂層數據流圖細化出來的0層數據流圖。從0層數據流圖可以看到數據流在細化時具有以下特點:
  • 與上一層數據處理“工資管理系統”相關的數據流被繼承了下來。
  • 上一層數據處理“工資管理系統”中不可見的內部數據流變成了可見的外部數據流。
數據流細化被用來分析系統的內部功能構造。然而,面對一個具有一定規模的軟體系統,0層數據流圖往往只能對其功能進行一般性的高層描述。因此,為了使數據流對系統功能的描述更加具體,數據流細化往往還需要繼續深入下去。
圖3 “工資管理系統”的0層數據流圖圖3 “工資管理系統”的0層數據流圖
實際上,可以使用數據流進行軟體結構的映射(結構化設計)。一般情況下,假如希望將數據流用於軟體設計,則對數據流細化更需要以設計中的模組構件作為分解目標。
因此,可以考慮對“工資管理系統”進行更加深入的數據流細化。例如,“工資管理系統”0層數據流圖中的“產生工資數據”處理,假如其工資數據的產生涉及數據錄入、數據計算等更加具體的數據操作,則“產生工資數據”處理可以進一步分解為:“錄入檔案工資”、“錄入業績工資”、“計算工資”這三項處理。
圖4即是對“產生工資數據”處理框進一步細化後產生出來的1層數據流圖。其中的數據加工流程是:
(1)來源於“人事處”和“員工所在工作部門”的“檔案工資”、“業績工資”數據流,經“錄入檔案工資”、“錄入業績工資”的處理之後,被分別存入到“檔案工資表”、“業績工資表”這兩個數據存儲之中。
(2)系統可以從“檔案工資表”和“業績工資表”這兩個數據存儲讀取數據,然後通過“計算工資”的處理產生出“工資數據”數據流。這個數據流將被存入到“工資數據表”中。
圖4對“產生工資數據”處理框進一步細化後的1層數據流圖圖4對“產生工資數據”處理框進一步細化後的1層數據流圖
顯然,這又是一個既涉及細化又包含繼承的分析過程。與“工資管理系統”直接相關的數據流成分被繼承了下來(人事處、員工所在工作部門、工資數據表),而圖3中不可見的內部數據流則經過細化變成了可見的外部數據流

符號的命名

數據流圖中的圖形符號一般都需要命名,並遵循以下命名規則:
(1)數據接口:使用名詞或名詞短語命名。例如:人事處、財務處、工資數據錄入員、系統管理員、讀卡設備、列印設備。
(2)數據存儲:使用名詞或名詞短語命名。例如“工資數據表”。當數據存儲是存儲介質上某個存儲單元的存儲片段時,其名稱還需要用到限定詞,例如“在職人員檔案工資”。
(3)數據流:使用名詞或名詞短語命名。但為了提高數據流圖的清晰度,從數據存儲中流出,或流入數據存儲的數據流,在不會發生名稱混淆的前提下,可以省略名稱。
(4)數據處理:數據處理涉及處理方式與處理對象兩方面的內容,一般使用“動詞+名詞短語”的動賓結構來進行命名。例如,“錄入檔案工資”、“列印工資報表”。由於對數據流的細化是通過對數據處理的分解實現的,考慮到對細化後的數據流圖進行分層檢索的便利,可以對處理框進行合適的數字編碼。

數據字典

在需求分析中,數據字典是各類數據描述的集合,能夠提供對數據的詳細規格定義,並可用於驗證數據,以發現系統在數據需求描述中是否出現遺漏。數據流圖中的數據字典能夠提供對圖中的諸多數據元素的更加詳細的說明。其一般要求是:
  • 對數據的定義應該是嚴密、精確、一致的,不能有二義性;
  • 需要對數據流圖中的每一個被命名的數據元素進行定義;
  • 需要分類定義各種不同種類的數據元素,或採用類別代號加以區別。
數據流圖中的數據字典通常包括數據項、數據結構數據流數據存儲數據接口數據處理過程這幾個部分的數據內容。其中,數據項是數據的最小組成單位,若干個數據項可以組成一個數據結構。數據字典就是通過對數據項和數據結構的定義來描述數據流、數據存儲的邏輯內容的。

數據項

數據項是不可再分的數據單位。對數據項的描述通常包括以下內容:
{ 數據項名,數據項含義說明,別名,數據類型,長度,取值範圍,取值含義,與其他數據項的邏輯關係 }

數據結構

數據結構反映了數據之間的組合關係。一個數據結構可以由若干個數據項組成,也可以由若干個數據結構組成,或由若干個數據項和數據結構混合組成。對數據結構的描述通常包括以下內容:
[數據結構名,含義說明,組成:{數據項或數據結構}]
在定義數據結構時,可以採用以下符號說明數據的組成:
=
被定義為,表示數據組成
+
與,用於連線兩個數據分量
[…|…]
或,從若干數據分量中選擇一個,方括弧中的數據分量用“|”號隔開
m{…}n
重複,重複花括弧內的數據,最少重複m次,最多重複n次
(…)
可選,圓括弧內數據可有可無

數據流

數據流是數據結構在軟體系統內傳輸的路徑。對數據流的描述通常包括以下內容:
{ 數據流名,說明,數據流來源,數據流去向,組成 { 數據結構 },平均流量,高峰期流量 }
其中,數據流來源是說明該數據流來自哪個過程。數據流去向是說明該數據流將到哪個過程去。平均流量則是指在單位時間(每天、每周、每月等)里的傳輸次數。高峰期流量則是指在高峰時期的數據流量。

數據存儲

數據存儲是數據結構停留或保存的地方,也是數據流的來源和去向之一。對數據存儲的描述通常包括以下內容:
{ 數據存儲名,說明,編號,流入的數據流,流出的數據流,組成{數據結構},數據量,存取方式 }
其中,數據量是指每次存取多少數據,每天(或每小時、每周等)存取幾次等信息。存取方式則包括:是批處理還是在線上處理,是檢索還是更新,是順序檢索還是隨機檢索等。另外流入的數據流要指出其來源,流出的數據流要指出其去向可以使用表格將數據字典分類列出。

主要元素

數據流程圖中有以下幾種主要元素:
→:數據流。數據流是數據在系統內傳播的路徑,因此由一組成分固定的數據組成。如訂票單由旅客 姓名、年齡、單位、身份證號、日期、目的地等數據項組成。由於數據流是流動中的數據,所以必須有流向,除了與數據存儲之間的數據流不用命名外,數據流應該 用名詞或名詞短語命名。
□:數據源(終點)。代表系統之外的實體,可以是人、物或其他軟體系統。
○:對數據的加工(處理)。加工是對數據進行處理的單元,它接收一定的數據輸入,對其進行處理,並產生輸出。
〓:數據存儲。表示信息的靜態存儲,可以代表檔案、檔案的一部分、資料庫的元素等。
根據層級數據流圖分為頂層數據流圖、中層數據流圖和底層數據流圖。除頂層數據流圖外,其他數據流圖從零開始編號。
頂層數據流圖只含有一個加工表示整個系統;輸出數據流和輸入數據流為系統的輸入數據和輸出數據,表明系統的範圍,以及與外部環境的數據交換關係。
中層數據流圖是對父層數據流圖中某個加工進行細化,而它的某個加工也可以再次細化,形成子圖;中間層次的多少,一般視系統的複雜程度而定。
底層數據流圖是指其加工不能再分解的數據流圖,其加工成為“原子加工”。

原則

在單張數據流圖時,必須注意以下原則:
1.一個加工的輸出數據流不應與輸入數據流同名,即使它們的組成成分相同。
2.保持數據守恆。也就是說,一個加工所有輸出數據流中的數據必須能從該加工的輸入數據流中直接獲得,或者說是通過該加工能產生的數據。
3.每個加工必須既有輸入數據流,又有輸出數據流。
4.所有的數據流必須以一個外部實體開始,並以一個外部實體結束。
5.外部實體之間不應該存在數據流。

分層DFD

如果系統的規模較大,僅用一個DFD難以描述,會使得系統變得複雜、龐大而又難以理解。為了降低系統的複雜性,一般採取“逐層分解”的方法,繪製分層的DFD。
  • 繪製分層DFD的原則一般是:先全局後局部,先整體後細節,先抽象後具體。
  • 繪製分層DFD的步驟一般是:
  • 先確定整個系統的範圍和功能,繪製頂層的DFD。
  • 繪製出頂層的DFD之後,然後逐層分解頂層DFD,獲得若干中間層DFD。
  • 根據獲得的中間層DFD繪製各個底層的DFD。

畫法

(一)確定系統的輸入輸出
DFD圖
由於系統究竟包括哪些功能可能一時難於弄清楚,可使範圍儘量大一些,把可能有的內容全部都包括進去。此時,應該向用戶了解“系統從外界接受什麼數據”、“系統向外界送出什麼數據”等信息,然後,根據用戶的答覆畫出數據流圖的外圍。
(二)由外向里畫系統的頂層數據流圖
首先,將系統的輸入數據和輸出數據用一連串的加工連線起來。在數據流的值發生變化的地方就是一個加工。接著,給各個加工命名。然後,給加工之間的數據命名。最後,給檔案命名。
(三)自頂向下逐層分解,繪出分層數據流圖
對於大型的系統,為了控制複雜性,便於理解,需要採用自頂向下逐層分解的方法進行,即用分層的方法將一個數據流圖分解成幾個數據流圖來分別表示。

舉例說明

(1) 首先畫系統的輸入輸出,即先畫頂層數據流圖。頂層流圖只包含一個加工,用以表示被開發的系統,然後考慮該系統有哪些輸入數據、輸出數據流。頂層圖的作用在於表明被開發系統的範圍以及它和周圍環境的數據交換關係。下圖為頂層圖。
(2)畫系統內部,即畫下層數據流圖。不再分解的加工稱為基本加工。一般將層號從0開始編號,採用自頂向下,由外向內的原則。畫0層數據流圖時,分解頂層流圖的系統為若干子系統,決定每個子系統間的數據接口和活動關 系。例如,在上面的機票預訂系統按功能可分成兩部分,一部分為旅行社預訂機票,另一部分為旅客取票,兩部分通過機票檔案的數據存儲聯繫起來。
(3)注意事項。
  • ①命名。不論數據流數據存儲還是加工,合適的命名使人們易於理解其含義。
  • ②畫數據流而不是控制流數據流反映系統“做什麼”,不反映“如何做”,因此箭頭上的數據流名稱只能是名詞或名詞短語,整個圖中不反映加工的執行順序。
  • ③一般不畫物質流。數據流反映能用計算機處理的數據,並不是實物,因此對目標系統的數據流圖一般不要畫物質流。
  • ④每個加工至少有一個輸入數據流和一個輸出數據流,反映出此加工數據的來源與加工的結果。
  • ⑤編號。如果一張數據流圖中的某個加工分解成另一張數據流圖時,則上層圖為父圖,直接下層圖為子圖。子圖及其所有的加工都應編號。
  • ⑥父圖與子圖的平衡。子圖的輸入輸出數據流同父圖相應加工的輸入輸出數據流必須一致,此即父圖與子圖的平衡。
  • ⑦局部數據存儲。當某層數據流圖中的數據存儲不是父圖中相應加工的外部接口,而只是本圖中某些加工之間的數據接口,則稱這些數據存儲為局部數據存儲。
  • ⑧提高數據流圖的易懂性。注意合理分解,要把一個加工分解成幾個功能相對獨立的子加工,這樣可以減少加工之間輸入、輸出數據流的數目,增加數據流圖的可理解性。

相關詞條

熱門詞條

聯絡我們