彭立
摘 要:數(shù)據(jù)流圖是軟件工程實踐中一種非常重要的建模工具。因為缺乏足夠的重視,加之沒有全面掌握數(shù)據(jù)流圖的畫法,學生對該知識點的掌握情況往往不盡如人意。本文對數(shù)據(jù)流圖的教學進行了探討,強調(diào)了數(shù)據(jù)流圖對整個項目開發(fā)的重要性,闡明了數(shù)據(jù)流圖中各種元素的含義以及繪圖的原則。
關鍵詞:軟件工程;數(shù)據(jù)流圖;教學;繪圖原則
一、引言
軟件工程是人們?yōu)榱藨獙浖C而提出并研究的一門學科,對于大型軟件的開發(fā)和維護,它具有極其重要的指導作用,因而一直以來都是高校計算機專業(yè)的必修課。軟件工程提出了軟件生命周期這個概念,而需求分析是軟件生命周期中最為重要的一個階段,因為這個階段工作的好壞決定了開發(fā)出的系統(tǒng)是否滿足用戶的要求。在該階段,分析員需要建立系統(tǒng)的邏輯模型,其中包括系統(tǒng)的功能模型。無論是采用結(jié)構(gòu)化分析方法還是面向?qū)ο蠓治龇椒?,?shù)據(jù)流圖都是功能建模的最好工具,原因有二:一方面,數(shù)據(jù)流圖中的符號少而簡單,且易于理解和掌握,對于用戶而言也是如此;另一方面,數(shù)據(jù)流圖描繪了數(shù)據(jù)從輸入到輸出的過程中所經(jīng)歷的變換,使系統(tǒng)的功能可從一個比較高的層面被展現(xiàn)出來,從而便于分析員和用戶之間的交流。數(shù)據(jù)流圖對需求分析的重要性決定了它是軟件工程教學中的一項重要內(nèi)容,教師往往會花大量的時間對該知識點進行講解。盡管如此,筆者從作業(yè)、課程設計和畢業(yè)設計等方面發(fā)現(xiàn)許多學生對該知識點的掌握情況并不理想。究其原因主要有兩點:一是沒有真正意識到數(shù)據(jù)流圖對整個項目開發(fā)的重要性;二是沒有全面掌握數(shù)據(jù)流圖的畫法。本文從這兩方面原因入手,就如何抓好數(shù)據(jù)流圖的教學進行了探討。
二、數(shù)據(jù)流圖對整個項目開發(fā)的重要性
因為數(shù)據(jù)流圖只是在一個比較抽象的層面對軟件系統(tǒng)的功能進行描述,學生很難認識到它對整個項目開發(fā)的重要性,他們往往覺得繪制數(shù)據(jù)流圖只是做做樣子而已,流圖的質(zhì)量無關緊要。為了糾正學生的錯誤認識,教師在教學中應跟學生講清楚并強調(diào)以下事實。
數(shù)據(jù)流圖的重要性主要體現(xiàn)在需求分析階段,在該階段,數(shù)據(jù)流圖被用于建立系統(tǒng)的完整邏輯模型,它明確了系統(tǒng)的邊界以及數(shù)據(jù)在系統(tǒng)內(nèi)部流動及變換的邏輯過程。通過繪制分層數(shù)據(jù)流圖,系統(tǒng)的所有功能以一種由抽象到具體的方式被展現(xiàn)出來。數(shù)據(jù)流圖是分析員和用戶之間交流的工具。通過數(shù)據(jù)流圖,分析員表達了他們對用戶需求的理解,用戶能判斷分析員是否真正理解了他們的需求。數(shù)據(jù)流圖是需求規(guī)格說明書的重要組成部分,在描述業(yè)務流程較為復雜的功能項時,它具有文字說明所無法比擬的優(yōu)勢,而需求規(guī)格說明書是系統(tǒng)設計和測試的主要依據(jù)。
除了在需求分析階段,數(shù)據(jù)流圖在軟件生命周期的其它階段也能發(fā)揮作用??尚行匝芯渴且粋€簡化和壓縮了的分析和設計過程,在該階段,數(shù)據(jù)流圖能被用于建立系統(tǒng)的高層邏輯模型。在總體設計階段,基于自動化邊界劃分,數(shù)據(jù)流圖能幫助設計人員確定系統(tǒng)的物理實現(xiàn)方案,此外,若采用結(jié)構(gòu)化設計方法,從數(shù)據(jù)流圖能直接導出系統(tǒng)的體系結(jié)構(gòu)。在系統(tǒng)測試中,數(shù)據(jù)流圖能指導測試人員設計測試用例。
三、數(shù)據(jù)流圖的畫法
1.數(shù)據(jù)流圖中的元素
在講授數(shù)據(jù)流圖的畫法之前,首先要讓學生弄清楚圖中各種元素的含義。流圖中的元素有5種:源點、終點、數(shù)據(jù)流、加工、數(shù)據(jù)存儲。
(1)源點和終點。源點和終點是與系統(tǒng)存在數(shù)據(jù)交換的外部實體,它們可以是人,也可以是其它系統(tǒng)。其中,源點為系統(tǒng)提供輸入,終點接收系統(tǒng)的輸出。
(2)數(shù)據(jù)流。數(shù)據(jù)流代表了流圖中不同元素之間傳遞的數(shù)據(jù),它具有一定的數(shù)據(jù)結(jié)構(gòu),更具體地說,它是由若干個數(shù)據(jù)項按一定的方式(例如順序、選擇和循環(huán)或這三種方式的組合)組織而成。
(3)加工。將接收到的輸入流變換成輸出流,這種變換主要體現(xiàn)在以下幾個方面:
*數(shù)據(jù)的轉(zhuǎn)移。例如將數(shù)據(jù)從一個文件取出來,存入另一個文件。
*執(zhí)行計算。例如根據(jù)所采購的商品的數(shù)量和單價計算總價。
*做出判斷。例如根據(jù)用戶名和密碼判斷當前登陸的用戶是否合法。
*基于內(nèi)容和業(yè)務規(guī)則劃分數(shù)據(jù)流。例如將某個訂單劃分為可供貨的訂單或不可供貨的訂單。
*過濾或匯總數(shù)據(jù)記錄以產(chǎn)生新的數(shù)據(jù)流。例如過濾掉班級學生記錄中女生的記錄,只保留男生的記錄;或者將不同班級的學生記錄組合在一起構(gòu)成全年級的學生記錄。
(4)數(shù)據(jù)存儲。數(shù)據(jù)存儲是為加工存放數(shù)據(jù)的地方。例如文件和表都可看成是數(shù)據(jù)存儲。加工可對數(shù)據(jù)存儲進行讀寫刪改操作。數(shù)據(jù)存儲和數(shù)據(jù)流的不同之處在于,前者存放的是靜態(tài)數(shù)據(jù),而后者中的數(shù)據(jù)是動態(tài)數(shù)據(jù)。
2.繪制數(shù)據(jù)流圖的原則
為了繪制有效的數(shù)據(jù)流圖,必須掌握繪圖的原則。在軟考中,有關數(shù)據(jù)流圖的試題很多都涉及到繪圖原則,因此在教學中,教師應通過案例教學法跟學生講清楚每一條原則。通過查找資料,筆者總結(jié)了一套完整的繪圖原則,現(xiàn)分兩部分說明如下。
(1)總的原則
①為流圖中的每一個元素采用合適的命名。數(shù)據(jù)流或數(shù)據(jù)存儲的名字應反映其全部內(nèi)容,而不僅僅是它的某些成分,一般采用名詞或名詞短語。加工的名字應反映它全部的功能,而不僅僅是它的部分功能,最好是由一個及物動詞加上一個賓語組成。絕不要用“如果,則”這樣的聲明作為加工的名字。源點和終點的名字可采用它們在問題域中習慣使用的名字。
②流圖中每個元素都必須有名字,與數(shù)據(jù)存儲相連的數(shù)據(jù)流除外。
③加工的輸入數(shù)據(jù)流和輸出數(shù)據(jù)流不能同名,即使它們有相同的結(jié)構(gòu)。
④每一個加工至少有一個輸入數(shù)據(jù)流和一個輸出數(shù)據(jù)流。
⑤所有的數(shù)據(jù)流必須以一個加工開始或者結(jié)束。
根據(jù)以上原則,可發(fā)現(xiàn)圖1中有5處錯誤:數(shù)據(jù)流X不應出現(xiàn)在流圖中;數(shù)據(jù)流H不應出現(xiàn)在流圖中;加工2的的輸入數(shù)據(jù)流和輸出數(shù)據(jù)流同名,都為Z;加工4只有輸入數(shù)據(jù)流;加工5只有輸出數(shù)據(jù)流。
■
圖1 數(shù)據(jù)流圖繪圖原則例1
⑥流圖中不可夾帶控制流。這條原則指出數(shù)據(jù)流圖不能和程序流程圖混為一談。數(shù)據(jù)流圖中的加工代表的都是對數(shù)據(jù)的處理,數(shù)據(jù)流的方向反映的是數(shù)據(jù)流動的方向,而不是加工執(zhí)行的順序。程序流程圖中所包含的步驟既可以是對數(shù)據(jù)的處理,也可以是控制轉(zhuǎn)移,圖中的箭頭線指明了步驟執(zhí)行的順序。圖2中的兩張流圖違背了該原則。(a)中的“取下一張卡片”并不代表數(shù)據(jù)流動,而是表明“檢查卡片合理性”結(jié)束后,應由“操作員”取出下一張卡片,所以它是控制流。類似地,(b)中的“每月第一天”也不代表數(shù)據(jù)流動,它只是“計算工資”的激發(fā)條件。
■
圖2 數(shù)據(jù)流圖繪圖原則例2
⑦為了避免流圖中出現(xiàn)線條交叉,同一個源點、終點或數(shù)據(jù)存儲均可在不同位置多次出現(xiàn),對于相同的源點或終點,要在其符號的右下方畫小斜線,對于相同的數(shù)據(jù)存儲,要在其符號左邊畫豎線。
⑧若某個數(shù)據(jù)存儲只被一個加工訪問,它應隱含在該加工內(nèi)部,而不應出現(xiàn)在流圖中。
⑨保持數(shù)據(jù)守恒。一個加工的輸出流中的數(shù)據(jù)項要么來自該加工的輸入流,要么是該加工所產(chǎn)生的數(shù)據(jù)。例如:某個加工有兩個輸入流“學生信息”和“教材”,其輸出流為“訂書單”,其中,學生信息=學號+姓名,教材=教材ISBN+教材價格,訂書單=教材ISBN+教材價格+教材數(shù)量;若該加工能根據(jù)“學生信息”計算出“教材數(shù)量”,則對其而言數(shù)據(jù)是守恒的。
⑩自頂向下逐層分解,繪出分層數(shù)據(jù)流圖。對于一個大型的軟件系統(tǒng),若在一張流圖中畫出其所有的數(shù)據(jù)流和加工,則該圖將極其龐大復雜且難以理解。而繪制分層數(shù)據(jù)流圖是控制畫圖復雜性的最好方法。一套分層數(shù)據(jù)流圖可分為頂層、中間層和底層三個層次。頂層中的流圖只有一張,它明確了系統(tǒng)的邊界。該圖中只有一個加工,它代表整個系統(tǒng),它的輸入流代表了系統(tǒng)的輸入數(shù)據(jù),它的輸出流代表了系統(tǒng)的輸出數(shù)據(jù)。底層中的每一張流圖由一些無需分解的加工組成,這些加工都已足夠簡單,稱為基本加工。中間層位于底層和頂層之間。中間層的每一張流圖是對其上層父圖中某個加工的細化,它包含的每一加工可能還會繼續(xù)分解,從而形成子圖。
(2)繪制分層數(shù)據(jù)流圖的原則
①保持父圖與子圖的平衡。對于父圖中任意一個加工,其輸入數(shù)據(jù)流(或輸出數(shù)據(jù)流)必須與其分解后產(chǎn)生的子圖的輸入數(shù)據(jù)流(或輸出數(shù)據(jù)流)保持“一致”。這并不意味著兩者在數(shù)量上和名稱上必須完全相同,而意味著兩者所包含的數(shù)據(jù)項在數(shù)量上和名稱上必須完全相同。在圖3中,(b)為(a)中的加工“開領書單”細化后得到的子圖,若“發(fā)票”包含的數(shù)據(jù)項=“學生”包含的數(shù)據(jù)項+“教材”包含的數(shù)據(jù)項,則(a)和(b)是平衡的。
■
圖3 數(shù)據(jù)流圖繪圖原則例3
②注意分解的速度。一般來說,一個加工最好分解為2~4個子加工,最多不得超過7個。
③遵守圖和加工的編號規(guī)則。頂層圖只有一張,圖中的加工也只有一個,該圖和圖中的加工都無需編號。0層圖(位于頂層圖下方)只有一張,該圖無需編號,圖中的加工編號分別是1,2,……,n。對于其余層次中的每一張流圖,其編號就是父圖中相應加工的編號,圖中加工的編號由圖號、圓點和序號組成,例如1.1,1.2,……,1.n。
四、結(jié)語
除了讓學生掌握數(shù)據(jù)流圖的畫法外,教師還應設法為學生提供更多的練習素材??紤]到教材上的習題太少且與實際脫節(jié),教師應從網(wǎng)絡或其它途徑搜集習題和資料,并從中挑選難度適中的題目作為學生的練習素材。我們相信,學生只要樹立了對數(shù)據(jù)流圖重要性的正確認識,全面掌握了其畫法并勤于練習,他們就能在軟件項目開發(fā)中真正用好這個工具。
參考文獻:
[1]Donald S Le Vie,Jr.Understanding Data Flow Diagrams[EB/OL].http://ratandon.mysite.syr.edu/cis453/notes/DFD_over_Flowcharts.pdf.
[2]張海藩.軟件工程導論[M].北京:清華大學出版社,2008.
[3]Data flows:Note on Data-Driven Process Modeling[EB/OL].http://faculty.babson.edu/dewire/Readings/dfdintro.htm.
[4]張雅軍.淺析軟件工程中的數(shù)據(jù)流圖的畫法[J].天津職業(yè)院校聯(lián)合學報,2008,10(2):70-73.