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