軟件設計師考試的下午題的第壹道題,數據庫系統工程師考試的下午題的第壹道題都是數據流圖題,而能夠將這道題全部做對的考生是非常少的。根據歷年的輔導和閱卷經驗,發現很多考生不是因為這方面的解題能力不夠,而是缺乏解這種題的方法與技巧。本文介紹壹些解這種類型題的方法和技巧,希望起來拋磚引玉的效果。
壹.解題當中考生表現出的特點
由於這是下午考試的第壹道題,所以很多考生從考前的緊張氛圍當中逐漸平靜下來開始答題,頭腦還比較清醒,閱讀起來比較流暢,速度還可以,自我感覺不錯。可偏偏這道題有很多人不能全取15分,糾其原因有以下壹些特點:
1.拿卷就做,不全面了解試卷,做到心中有數。這樣會導致在解題過程當中缺少壹種整體概念,不能明確自己在哪些題上必需拿分(多花時間),哪些題上自己拿不了分(少花時間)。這樣,在解題時目標就會明確很多。
2.速度快,讀壹遍題就開始動手做。
3.速度慢,用手指逐個字的去看,心想看壹遍就能做出題來。
4.在閱讀題目時,不打記,不前後聯系起來思考。
5.邊做邊懷疑邊修改,浪費時間。
6.缺少的數據流找不準,可去掉的文件找不出來。
7.由於缺少項目開發經驗,對壹些事務分析不知如何去思考。
8.盲目樂觀,卻忽略了答題格式,丟了不應該丟的分。
二.解題的方法與技巧
1.首先要懂得數據流圖設計要略。
有時為了增加數據流圖的清晰性,防止數據流的箭頭線太長,減少交叉繪制數據流條數,壹般在壹張圖上可以重復同名的數據源點、終點與數據存儲文件。如某個外部實體既是數據源點又是數據匯點,可以在數據流圖的不同的地方重復繪制。在繪制時應該註意以下要點:
(1)自外向內,自頂向下,逐層細化,完善求精。
(2)保持父圖與子圖的平衡。
為了表達較為復雜問題的數據處理過程,用壹個數據流圖往往不夠。壹般按問題的層次結構進行逐步分解,並以分層的數據流圖反映這種結構關系。根據層次關系壹般將數據流圖分為頂層數據流圖、中間數據流圖和底層數據流圖,除頂層圖外,其余分層數據流圖從0開始編號。對任何壹層數據流圖來說,稱它的上層數據流圖為父圖,在它的下壹層的數據流圖為子圖。
頂層數據流圖只含有壹個加工,表示整個系統;輸入數據流和輸出數據流為系統的輸入數據和輸出數據,表明了系統的範圍,以及與外部環境的數據交換關系。
底層數據流圖是指其加工不能再分解的數據流圖,其加工稱為“原子加工”。
中間數據流圖是對父層數據流圖中某個加工進行細化,而它的某個加工也可以再次細化,形成子圖。中間層次的多少,壹般視系統的復雜程度而定。
任何壹個數據流子圖必須與它上壹層父圖的某個加工對應,二者的輸入數據流和輸出數據流必須保持壹致,此即父圖與子圖的平衡。父圖與子圖的平衡是數據流圖中的重要性質,保證了數據流圖的壹致性,便於分析人員閱讀和理解。
在父圖與子圖平衡中,數據流的數目和名稱可以完全相同;也可以在數目上不相等,但是可以借助數據字典中數據流描述,確定父圖中的數據流是由子圖中幾個數據流合並而成的,也即子圖是對父圖中加工和數據流同時進行分解,因此也屬於父圖與子圖的平衡,如圖1所示。
圖1 父圖與子圖的平衡
(3)保持數據守恒。也就是說,壹個加工所有輸出數據流中的數據必須能從該加工的輸入數據流中直接獲得,或者是通過該加工能產生的數據。每個加工必須有輸入數據流和輸出數據流,反映此加工的數據來源和加工變換結果。壹個加工的輸出數據流只由它的輸入數據流確定。數據流必須經過加工,即必須進入加工或從加工中流出。
(4)加工細節隱蔽。根據抽象原則,在畫父圖時,只需畫出加工和加工之間的關系,而不必畫出各個加工內部的細節。當某層數據流圖中的數據存儲不是父圖中相應加工的外部接口,而只是本圖中某些加工之間的數據接口時,那麽這些數據存儲為局部數據存儲。
為了強調局部數據存儲的隱蔽性,壹般情況下,局部數據存儲只有作為某些加工的數據接口或某個特定加工的輸入和輸出時,才畫出來。即按照自頂向下的分析方法,某數據存儲首次出現時只與壹個加工有關,那麽這個數據存儲應該作為與之關聯加工的局部數據存儲,在該層數據流子圖中不必畫出,而在該加工的子圖中畫出,除非該加工為原子加工。
(5)簡化加工間的關系。在數據流圖中,加工間的數據流越少,各個加工就越相對獨立,所以應盡量減少加工間輸入輸出數據流的數目。
(6)均勻分解。應該使壹個數據流中的各個加工分解層次大致相同。
(7)適當地為數據流、加工、文件、源/宿命名,名字應反映該成分的實際意義,避免空洞的名字。
(8)忽略枝節。應集中精力於主要的數據流,而暫不考慮壹些例外情況、出錯處理等枝節性的問題。
(9)表現的是數據流而不是控制流。數據流圖與傳統的程序流程圖不同,數據流圖是從數據的角度來描述壹個系統的,而流程圖則是從對數據加工的角度來描述系統的。數據流圖中的箭頭是數據流,而流程圖中的箭頭則是控制流,它表達的是程序執行的次序。數據流圖適合於宏觀地分析壹個組織的業務概況,而程序流程圖只適合於描述系統中某個加工的執行細節。
每個加工必須既有輸入數據流,又有輸出數據流;在整套數據流圖中,每個文件必須既有讀文件的數據流又有寫文件的數據流,但在某壹張子圖中可能只有讀、沒有寫,或者只有寫、沒有讀。
2.解題的方法。
(1) 數據平衡原則。
數據平衡原則分為兩個方面:
① 在分層數據流圖中,父圖和子圖要平衡,也就是說,父圖中某加工的輸入輸出數據流必須與它的子圖的輸入輸出數據流在數量和名字上相同。
②數據平衡的另壹個方面是說:每個加工必須即有輸入數據流又有輸出數據流,而且壹個加工所有輸出數據流中的數據必須能從該加工的輸入數據流中直接獲得,或者是通過該加工能產生的數據。
(2) 要特別註意的幾個細節問題。
① 除了流向數據存儲(文件)或從數據存儲流出的數據流不必命名外,其它每個數據流都必須有壹個合適的名字。
②流向文件的數據流,表示寫入數據,流出文件的數據流表示讀文件。在整套數據流圖中,每個文件必須既有讀的數據流又有寫的數據流,但在某壹張子圖中可能只有讀沒有寫,或者只有寫沒有讀。
③在逐步精化的過程中,若壹個文件首次出現時只與壹個加工有關,既該文件是個加工的內部文件,那麽該文件在當層圖中不必畫出,可在該加工的細化圖中畫出。
3.解題的技巧。
(1)閱讀題幹的技巧。快速的閱讀第壹遍,基本了解題目所涉及到的知識點或者事務,打記實體對象和存儲文件,甚至可以將數據流也標記壹下;這壹步重點落在問題上,壹般問題不難,但壹定要看清問題。帶著問題來看第二遍,邊看邊解決。
(2)要有整體的概念,不能因壹個點符合就斷定是它,尤其是數據對象。
(3)註意解題的速度,壹般在20分鐘以內為最好。
(4)解題的過程中,每壹條數據流都能夠在[說明]中找到相應的語句。
(5)數據流名稱要寫對,每錯壹個字扣0.5分;流向也要寫對。
(6)做好以後,復查壹遍;不要邊做邊懷疑、邊修改,那樣會擔誤時間,且錯誤更多。