數據流圖(date flow diagram , DFD),是SA方法中用于表示系統邏輯模型的一種工具,它以圖形的方式描繪數據在系統中流動和處理的過程,由于它只反映系統必須完成的邏輯功能,所以它是一種功能模型。
數據流圖是從數據的角度來描述一個系統的,而流程圖則是從對數據加工的角度來描述系統的;數據流圖中的箭頭是數據流,而流程圖中的箭頭則是控制流,它表達的是程序執行的次序;數據流圖適合于宏觀地分析一個組織業務概況,而程序流程圖只適合于描述系統中某個加工的執行細節。
一、數據流圖的基本組成成分
數據流:是由一組固定成分的數據組成,表示數據的流向。值得注意的是,數據流圖中描述的是數據流,而不是控制流。除了流向數據存儲或從數據存儲流出的數據不必命名外,每個數據流必須要有一個合適的名字,以反映該數據流的含義。
加工:加工描述了輸入數據流到輸出數據之間的變換,也就是輸入數據流經過什么處理后變成了輸出數據。每個加工都有一個名字和編號。編號能反映該加工位于分層的數據流圖的哪個層次和哪張圖中,能夠看出它是由哪個加工分解出來的子加工。
數據存儲:數據存儲表示暫時存儲的數據。每個數據存儲都有一個名字。
外部實體:外部實體是存在于軟件系統之外的人員或組織,他指出數據所需要的發源地或系統所產生的數據的歸屬地。
二、分層數據流圖的設計方法
1、畫子系統的輸入輸出
把整個系統視為一個大的加工,然后根據數據系統從哪些外部實體接收數據流,以及系統發送數據流到那些外部實體,就可以畫出輸入輸出圖。這張圖稱為頂層圖。
2、畫子系統的內部
把頂層圖的加工分解成若干個加工,并用數據流將這些加工連接起來,使得頂層圖的輸入數據經過若干加工處理后,變成頂層圖的輸出數據流。這張圖稱為0層圖。從一個加工畫出一張數據流圖的過程就是對加工的分解。
確定加工的方法:在數據流的組成或值發生變化的地方應該畫出一個加工,這個加工的功能就是實現這一變化,也可以根據系統的功能決定加工。
確定數據流的方法:用戶把若干數據當作一個單位來處理(這些數據一起到達、一起處理)時,可以把這些數據看成一個數據流。
關于數據存儲:對于一些以后某個時間要使用的數據,可以組織成為一個數據存儲來表示。
3、畫加工的內部
把每個加工看作一個小系統,把加工的輸入輸出數據流看成小系統的輸入輸出流。于是可以象畫0層圖一樣畫出每個小系統的加工的DFD圖。
4、畫子加工的分解圖
對第三步分解出來的DFD圖中的每個加工,重復第三步的分解過程,直到圖中尚未分解的加工都是足夠簡單的(即不可再分解)。至此,得到了一套分層數據流圖。
5、對數據流圖和加工編號
對于一個軟件系統,其數據流圖可能有許多層,每一層又有許多張圖。為了區分不同的加工和不同的DFD子圖,應該對每張圖進行編號,以便于管理。
● 頂層圖只有一張,圖中的加工也只有一個,所以不必為其編號。
● 0層圖只有一張,圖中的加工號分別是0.1、0.2、…,或者1, 2 。
● 子圖就是父圖中被分解的加工號。
● 子圖中的加工號是由圖號、圓點和序號組成,如:1.12,1.3 等等。
三、應該注意的問題:
1、命名。 應適當的為數據流、加工、數據存儲以及外部實體命名,名字應該反映該成分的實際含義,避免使用空洞的名字。
2、畫數據流圖,不是畫控制流。數據流反映系統“做什么”,不反映“如何做”,因此箭頭上的數據流名稱只能是名詞或名詞短語,整個圖中不反映加工的執行順序。
3、一般不畫物質流。數據流反映能用計算機處理的數據,并不是實物,因此對目標系統的數據流圖一般不要畫物質流。
4、一個加工的輸出數據流,不應與輸入數據流同名,即使他們的組成完全相同。
5、允許一個加工有多條數據流流向另一個加工,也允許一個加工有兩條相同的輸出數據流流向不同的加工。
6、編號。如果一張數據流圖中的某個加工分解成另一張數據流圖時,則上層圖為父圖,直接下層圖為子圖。子圖及其所有的加工都應編號。
7、保持父圖與子圖的平衡。也就是說,父圖中的某加工的輸入輸出流必須與他的子圖的輸入輸出數據流在數量上和名字上相同。值得注意的是,如果父圖中的一個輸入(輸出)數據流對應于子圖中的幾個輸入(輸出)數據流,而子圖中組成這些數據流的數據項的全體正好是父圖中的這一個數據流,那么他們仍然算是平衡的。
8、在自頂向下的分解過程中,若一個數據存儲首次出現時,只與一個加工有關系,那么這個數據存儲應作為這個加工的內部文件而不必畫出。
9、保持數據守恒,也就是,一個加工的所有輸出數據流中的數據必須能從該加工的輸出流中直接獲得,或者通過該加工能產生的數據。
10、每個加工必須既有輸入數據流,又有輸出數據流。
11、在整套數據流圖中,每個數據存儲必須既有讀的數據流,又有寫的數據流。但是在某張子圖中,可能只有讀沒有寫,或者只有寫沒有讀。
12、提高數據流圖的易懂性。注意合理分解,要把一個加工分解成幾個功能相對獨立的子加工,這樣可以減少加工之間輸入、輸出數據流的數目,增加數據流圖的可理解性。
=============================================================================
基本圖形符號
數據流圖有四種基本圖形符號:
:箭頭,表示數據流;
〇:圓或橢圓,表示加工;
=:雙杠(帶一邊開口,一邊閉合),表示數據存儲;
□:方框,表示數據的源點或終點。
(1) 數據流。數據流是數據在系統內傳播的路徑,因此由一組成分固定的數據組成。如訂票單由旅客姓名、年齡、單位、身份證號、日期、目的地等數據項組成。由于數據流是流動中的數據,所以必須有流向,除了與數據存儲之間的數據流不用命名外,數據流應該用名詞或名詞短語命名。
(2)加工(又稱為數據處理)。對數據流進行某些操作或變換。每個加工也要有名字,通常是動詞短語,簡明地描述完成什么加工。在分層的數據流圖中,加工還應編號。
(3)數據存儲(又稱為文件),指暫時保存的數據,它可以是數據庫文件或任何形式的數據組織。
(4)數據源點或終點,是本軟件系統外部環境中的實體(包括人員、組織或其他軟件系統),統稱外部實體。一般只出現在數據流圖的頂層圖。
畫數據流圖的步驟
(1)首先畫系統的輸入輸出,即先畫頂層數據流圖。頂層流圖只包含一個加工,用以表示被開發的系統,然后考慮該系統有哪些輸入數據、輸出數據流。頂層圖的作用在于表明被開發系統的范圍以及它和周圍環境的數據交換關系。下圖為飛機機票預訂系統的頂層圖。
(2)畫系統內部,即畫下層數據流圖。不再分解的加工稱為基本加工。一般將層號從0開始編號,采用自頂向下,由外向內的原則。畫0層數據流圖時,分解頂層流圖的系統為若干子系統,決定每個子系統間的數據接口和活動關系。例如,在上面的機票預訂系統按功能可分成兩部分,一部分為旅行社預訂機票,另一部分為旅客取票,兩部分通過機票文件的數據存儲聯系起來,0層數據流圖如圖3-4。
(3)注意事項。
①命名。不論數據流、數據存儲還是加工,合適的命名使人們易于理解其含義。
②畫數據流而不是控制流。數據流反映系統”做什么”,不反映“如何做”,因此箭頭上的數據流名稱只能是名詞或名詞短語,整個圖中不反映加工的執行順序。
③一般不畫物質流。數據流反映能用計算機處理的數據,并不是實物,因此對目標系統的數據流圖一般不要畫物質流。
④每個加工至少有一個輸入數據流和一個輸出數據流,反映出此加工數據的來源與加工的結果。
⑤編號。如果一張數據流圖中的某個加工分解成另一張數據流圖時,則上層圖為父圖,直接下層圖為子圖。子圖及其所有的加工都應編號。
⑥父圖與子圖的平衡。子圖的輸入輸出數據流同父圖相應加工的輸入輸出數據流必須一致,此即父圖與子圖的平衡。
⑦局部數據存儲。當某層數據流圖中的數據存儲不是父圖中相應加工的外部接口,而只是本圖中某些加工之間的數據接口,則稱這些數據存儲為局部數據存儲。
⑧提高數據流圖的易懂性。注意合理分解,要把一個加工分解成幾個功能相對獨立的子加工,這樣可以減少加工之間輸入、輸出數據流的數目,增加數據流圖的可理解性。