軟件工程導(dǎo)論實驗一:數(shù)據(jù)流圖的設(shè)計與實現(xiàn)
在軟件設(shè)計與開發(fā)的生命周期中,需求分析是至關(guān)重要的一環(huán)。結(jié)構(gòu)化分析方法是一種經(jīng)典且有效的需求分析技術(shù),其核心工具之一便是數(shù)據(jù)流圖。本次實驗旨在通過一個具體的軟件設(shè)計與開發(fā)案例,引導(dǎo)學(xué)生掌握數(shù)據(jù)流圖的基本概念、設(shè)計原則與繪制方法,從而為后續(xù)的系統(tǒng)設(shè)計與實現(xiàn)奠定堅實的基礎(chǔ)。
一、 實驗?zāi)康呐c意義
- 理解數(shù)據(jù)流圖的基本概念:明確數(shù)據(jù)流、加工、數(shù)據(jù)存儲和外部實體四大構(gòu)成要素的定義與表示方法。
- 掌握數(shù)據(jù)流圖的設(shè)計原則:學(xué)習(xí)如何從頂層上下文圖開始,通過逐層分解(分層細(xì)化)的方式,構(gòu)建清晰、一致、平衡的層次化數(shù)據(jù)流圖。
- 應(yīng)用數(shù)據(jù)流圖進行系統(tǒng)建模:針對一個中等復(fù)雜度的軟件系統(tǒng)(如“圖書館管理系統(tǒng)”、“在線購物系統(tǒng)”或“學(xué)生選課系統(tǒng)”),運用數(shù)據(jù)流圖對其功能需求和數(shù)據(jù)流動過程進行可視化描述。
- 建立需求分析的工程化思維:體驗從用戶需求到形式化、結(jié)構(gòu)化模型轉(zhuǎn)化的過程,理解數(shù)據(jù)流圖作為開發(fā)人員與用戶之間溝通橋梁的作用。
二、 數(shù)據(jù)流圖核心要素與設(shè)計步驟
1. 核心要素
- 外部實體:代表系統(tǒng)之外的、與系統(tǒng)進行數(shù)據(jù)交互的人、物或系統(tǒng),用方框表示。
- 加工:代表對輸入數(shù)據(jù)進行處理并產(chǎn)生輸出數(shù)據(jù)的變換過程,用圓角矩形或圓形表示。每個加工必須有輸入和輸出。
- 數(shù)據(jù)流:代表在系統(tǒng)中流動的數(shù)據(jù),用帶箭頭的線段表示,旁邊標(biāo)注數(shù)據(jù)內(nèi)容。
- 數(shù)據(jù)存儲:代表系統(tǒng)需要持久化或臨時保存的數(shù)據(jù)集合,用開口矩形或兩條平行線表示。
2. 設(shè)計步驟
- 確定系統(tǒng)邊界與外部實體:明確系統(tǒng)范圍,識別所有與系統(tǒng)交互的外部對象。
- 繪制頂層圖(0層圖):將整個系統(tǒng)視為一個加工,描繪系統(tǒng)與所有外部實體之間的輸入和輸出數(shù)據(jù)流。
- 逐層分解,繪制下層圖:對頂層圖中的加工進行分解,形成更詳細(xì)的子圖。每一層都應(yīng)保持父圖與子圖之間的輸入/輸出數(shù)據(jù)流平衡。
- 檢查與優(yōu)化:檢查圖的完整性、一致性,消除冗余,確保每個數(shù)據(jù)流都有其來源和去向,每個加工都有明確的功能。
三、 實驗案例:簡易在線書店系統(tǒng)
1. 系統(tǒng)需求簡述
系統(tǒng)主要用戶包括:顧客、倉庫管理員、系統(tǒng)管理員。核心功能需求如下:
- 顧客:瀏覽圖書、查詢圖書、注冊/登錄、將圖書加入購物車、提交訂單、在線支付、查看訂單狀態(tài)。
- 倉庫管理員:處理訂單(確認(rèn)、配貨、發(fā)貨)、更新庫存信息。
- 系統(tǒng)管理員:管理圖書信息(增刪改查)、管理用戶賬戶。
2. 數(shù)據(jù)流圖設(shè)計與實現(xiàn)示例(部分)
頂層圖(0層圖):
外部實體:顧客、倉庫管理員、系統(tǒng)管理員、支付網(wǎng)關(guān)(外部系統(tǒng))。
唯一加工:“在線書店系統(tǒng)”。
主要數(shù)據(jù)流:
輸入:來自顧客的查詢請求、登錄信息、訂單信息、支付請求;來自管理員的圖書管理指令、訂單處理指令等。
- 輸出:向顧客返回的圖書列表、訂單確認(rèn)、支付結(jié)果;向管理員反饋的處理結(jié)果;向支付網(wǎng)關(guān)發(fā)送的支付數(shù)據(jù)。
第一層分解圖(將“在線書店系統(tǒng)”分解):
將主加工分解為幾個核心加工,例如:
- P1:用戶交互與認(rèn)證:處理用戶注冊、登錄、會話管理。
- P2:圖書目錄管理:處理圖書的瀏覽、搜索、信息展示。
- P3:購物車與訂單處理:處理購物車操作、訂單生成與提交。
- P4:支付處理:與外部支付網(wǎng)關(guān)交互,完成支付流程。
- P5:后臺管理:處理圖書上架/下架、訂單狀態(tài)更新(配貨、發(fā)貨)、庫存管理。
- 數(shù)據(jù)存儲:用戶信息庫、圖書目錄庫、購物車臨時存儲、訂單庫、庫存庫。
進一步分解(以P3“購物車與訂單處理”為例):
P3可進一步分解為:“添加商品至購物車”、“編輯購物車”、“生成訂單”、“保存訂單至數(shù)據(jù)庫”等子加工,并詳細(xì)描述其與“用戶信息庫”、“圖書目錄庫”、“訂單庫”之間的數(shù)據(jù)讀寫關(guān)系。
四、 實驗與思考
通過本次實驗,學(xué)生不僅能夠繪制出一套符合規(guī)范的數(shù)據(jù)流圖,更應(yīng)深入理解其背后的軟件工程思想:
- 抽象與分解:通過分層將復(fù)雜系統(tǒng)化繁為簡,控制每一層的復(fù)雜度。
- 數(shù)據(jù)驅(qū)動:關(guān)注系統(tǒng)中的數(shù)據(jù)流動與變換,而非控制流,這有助于清晰地界定系統(tǒng)功能。
- 溝通與驗證:圖形化的模型便于與領(lǐng)域?qū)<遥ㄓ脩簦┻M行溝通,早期發(fā)現(xiàn)需求歧義或遺漏。
- 設(shè)計基礎(chǔ):數(shù)據(jù)流圖中識別的數(shù)據(jù)存儲和加工,將直接轉(zhuǎn)化為后續(xù)數(shù)據(jù)庫設(shè)計中的表結(jié)構(gòu)和系統(tǒng)模塊/類設(shè)計的重要依據(jù)。
思考題:
1. 數(shù)據(jù)流圖在描述實時控制系統(tǒng)或強調(diào)過程控制順序的系統(tǒng)時有何局限性?
2. 如何判斷數(shù)據(jù)流圖的分解層次是否已經(jīng)足夠(即“加工足夠簡單”)?
3. 數(shù)據(jù)流圖與用例圖在描述系統(tǒng)需求時,側(cè)重點有何不同?它們之間如何互補?
掌握數(shù)據(jù)流圖的設(shè)計與實現(xiàn),是邁向?qū)I(yè)軟件工程師的第一步。它訓(xùn)練了結(jié)構(gòu)化、邏輯化的思維方式,是后續(xù)學(xué)習(xí)軟件設(shè)計模式、系統(tǒng)架構(gòu)等高級主題的必備基礎(chǔ)。