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