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