? ?
目錄
5.1需求分析與驗證
5.1.1 順序圖
5.1.2 通信圖
5.1.3 狀態圖
5.1.4 擴充機制
5.2 需求分析的過程模型
5.3 需求優先級分析
5.3.1 確定需求項優先級
5.3.2 排定用例分析的優先順序
5.4 用例分析
5.4.1 精化領域概念模型
5.4.2 設置分析類
5.4.3 構思分析類之間的協作關系
5.4.4 導出分析類圖
5.5 利用快速原型輔助需求分析
5.6 評審分析模型
5.7 需求規約
5.8 需求驗證
思維導圖
? ?在完成需求獲取后,需求分析是將原始需求轉化為精確、可實現模型的關鍵環節。本章將圍繞需求分析模型的多種表示方法、分析過程、優先級確定以及驗證等內容展開,結合 Java 代碼和在線圖書借閱系統案例,幫助讀者深入理解需求分析的核心要點。
5.1需求分析與驗證
5.1.1 順序圖
? 順序圖用于描述對象之間的交互順序,強調消息傳遞的時間先后關系,能清晰展現系統在特定場景下的動態行為。
以在線圖書借閱系統的 “圖書借閱” 流程為例,順序圖如下:
5.1.2 通信圖
? ?通信圖同樣用于展示對象間的交互,但它更側重于對象之間的鏈接關系,通過在對象之間標注消息來體現交互過程。
“圖書借閱” 的通信圖如下:
5.1.3 狀態圖
? ?狀態圖用于描述對象的狀態變化以及導致狀態變化的事件,適用于展示具有多種狀態轉換的對象行為,如圖書的狀態變化。
圖書的狀態圖如下:
5.1.4 擴充機制
UML 的擴充機制包括構造型(Stereotype)、標記值(Tagged Value)和約束(Constraint):
- 構造型:用于擴展 UML 元素的語義,例如定義 <<WebService>> 構造型表示一個 Web 服務類。
- 標記值:為 UML 元素添加額外信息,如為類添加 version="1.0" 的標記值表示版本號。
- 約束:用于定義元素必須滿足的條件,例如 “圖書的庫存數量必須大于等于 0”。
在 Java 代碼中使用注釋模擬構造型示例:
// <<Entity>> 表示這是一個實體類class Book {// 標記值:bookType="fiction" 表示圖書類型為小說private String title;private String author;// 約束:庫存數量必須大于等于0private int stock;// 省略其他方法}
5.2 需求分析的過程模型
需求分析的過程模型一般包含以下步驟:
- 對獲取的需求進行梳理和分類;
- 運用 UML 圖(如順序圖、類圖)建立需求分析模型;
- 進行需求優先級分析;
- 對模型進行評審和驗證。
其流程圖如下:
5.3 需求優先級分析
5.3.1 確定需求項優先級
? 確定需求項優先級可采用 MoSCoW 法,將需求分為:
- Must have(必須有):如在線圖書借閱系統的 “圖書借閱”“圖書歸還” 功能。
- Should have(應該有):如 “圖書續借” 功能。
- Could have(可以有):如 “圖書推薦” 功能。
- Won't have(本次不做):如 “圖書社交分享” 功能。
5.3.2 排定用例分析的優先順序
根據需求優先級,對用例分析排序。例如,先分析 “圖書借閱”“圖書歸還” 等高優先級用例,再處理 “圖書續借” 等次要用例。
5.4 用例分析
5.4.1 精化領域概念模型
在在線圖書借閱系統中,領域概念包括 “圖書”“讀者”“借閱記錄” 等。通過分析需求,明確各概念的屬性和關系,如 “讀者” 與 “借閱記錄” 是一對多關系。
5.4.2 設置分析類
根據領域概念模型,設置分析類。Java 代碼示例如下:
class Book {private String title;private String author;private int stock;public Book(String title, String author, int stock) {this.title = title;this.author = author;this.stock = stock;}// 省略getter和setter方法}class Reader {private String name;private String id;public Reader(String name, String id) {this.name = name;this.id = id;}// 省略getter和setter方法}class BorrowRecord {private Reader reader;private Book book;private java.util.Date borrowDate;public BorrowRecord(Reader reader, Book book) {this.reader = reader;this.book = book;this.borrowDate = new java.util.Date();}// 省略getter和setter方法}
5.4.3 構思分析類之間的協作關系
? ?分析類之間通過方法調用實現協作。例如,Reader 類通過調用 Book 類的 borrowBook 方法實現圖書借閱,同時創建 BorrowRecord 記錄借閱信息。
5.4.4 導出分析類圖
根據上述分析,生成分析類圖:
5.5 利用快速原型輔助需求分析
? ?通過開發快速原型(如使用 HTML/CSS/JavaScript 搭建簡單的圖書借閱界面原型),可以更直觀地向用戶展示系統功能,獲取用戶反饋,進一步完善需求分析。例如,用戶可能在體驗原型后提出 “希望借閱界面顯示推薦圖書”,從而補充需求。
5.6 評審分析模型
? ?組織開發團隊、用戶和客戶對需求分析模型進行評審,檢查模型是否準確反映需求、是否存在邏輯錯誤或遺漏。例如,評審時發現分析類圖中 “借閱記錄” 缺少 “歸還日期” 屬性,及時進行修正。
5.7 需求規約
? ?需求規約是對軟件需求的正式文檔描述,包含功能需求、非功能需求、約束條件等內容。以下是在線圖書借閱系統需求規約的部分示例:
5.8 需求驗證
通過以下方式驗證需求:
- 評審:檢查需求文檔的完整性和一致性。
- 測試:編寫測試用例驗證需求的可實現性,例如編寫測試方法驗證圖書借閱功能是否正確更新庫存。Java 測試代碼示例:
import org.junit.jupiter.api.Test;import static org.junit.jupiter.api.Assertions.*;class BookTest {@Testpublic void testBorrowBook() {Book book = new Book("Test Book", "Author", 5);assertTrue(book.borrowBook());assertEquals(4, book.getStock());}}
? ?本章詳細介紹了需求分析模型的多種表示方法及分析過程,通過案例、代碼和圖表幫助讀者掌握需求分析的核心技能。在實際項目中,需求分析是一個不斷迭代優化的過程,需要靈活運用這些知識確保需求的準確性和完整性。如果對某個知識點有疑問,或希望補充更多案例,歡迎隨時交流!
? 為了更清晰呈現本章知識結構,可通過思維導圖梳理需求分析模型相關要點,涵蓋從表示方法到驗證的全流程,幫助讀者構建系統化認知框架。