第 6 章

6.1 從需求分析進入系統建模

使用案例分析與建模

6.1.1 有了需求規格,為什麼還需要模型

需求分析的成果通常包括功能需求、非功能需求、業務規則、資料需求、介面需求、驗收準則,以及需求之間的追蹤關係。這些成果可以說明系統必須滿足哪些要求,也能作為確認系統範圍、安排開發工作與進行驗收的重要依據。

然而,即使每一項需求都已經寫得清楚,讀者仍可能難以從大量文字中迅速看出系統的整體結構。例如:

  • 哪些外部角色或系統會與資訊系統互動?
  • 各角色希望透過系統完成哪些目標?
  • 哪些系統功能彼此相關?
  • 工作會依照什麼順序進行?
  • 哪些資料會被建立、使用或修改?
  • 不同物件之間具有什麼關係?
  • 在不同條件、替代或例外情況下,資訊系統應如何回應?
  • 系統邊界內外的責任如何區分?

單一需求通常只描述系統的一項要求。例如:

這句描述說明系統應提供的能力,但未必完整呈現:

  • 隊長在什麼情況下開始報名?
  • 建立報名資料前需要符合哪些條件?
  • 報名過程涉及哪些資料?
  • 系統需要檢查哪些業務規則?
  • 資料不完整時應如何處理?
  • 報名完成後,系統應產生什麼結果或狀態?
  • 報名這項功能與其他功能有何關係?

因此,除了需求規格之外,還需要利用不同形式的系統模型(System Model)來呈現系統。也就是說:

文字具有高度表達能力,可以記錄條件、規則、限制、例外及驗收方式。但是,當需求數量增加,而且不同需求彼此關聯時,只依靠逐項文字描述,可能產生幾項困難。

§ 需求規格難以看出整體範圍

需求規格可能分別記錄學生報名、資格審查、評審分派、專題評分及結果公告等功能,但讀者不一定能立即看出:

  • 系統涉及哪些外部角色
  • 每個角色可以使用哪些系統服務
  • 哪些作業屬於系統範圍
  • 哪些作業仍由人員或外部系統負責

模型可以將分散在不同需求中的角色、功能及邊界集中呈現,使系統範圍更容易理解。

§ 需求規格難以辨識需求之間的關係

一項業務規則可能影響多項功能需求。例如:

這項規則可能同時影響:

  • 評審名單建立
  • 評審分派
  • 分派結果檢查
  • 人工調整分派
  • 評審存取專題資料的權限

如果只逐項閱讀需求,可能不容易發現這些關係,或者漏列這些關係。適當的模型可以協助系統分析者找出共同角色、共同行為、資料依賴及規則影響範圍。

§ 難以發現需求規格的缺漏與不一致

需求逐項閱讀時,每一項都可能看起來合理;但將需求放入模型後,可能出現新的問題。

例如:

  • 系統提供「審核評分更正」功能,卻未明確說明哪些角色可使用。
  • 需求提到評審可以提出更正申請,但未說明誰會收到更正申請,因此無法確定誰可以審核更正申請。
  • 結果公告前需要主辦單位確認,但需求中沒有相對應的系統服務。
  • 某項功能需要外部身分驗證,卻未說明資訊系統與外部身分驗證系統之間的互動。

這些問題不一定代表模型本身錯誤,而可能表示原有需求仍存在缺漏、衝突或尚未確認的事項。因此:

§ 不同讀者需要不同的模型觀點

利害關係人、系統分析者、設計人員、開發人員及測試人員關心的內容並不完全相同。不同模型可以協助各類讀者從其關注的觀點理解系統。

例如:

  • 利害關係人可能關心系統是否能支援實際工作。
  • 系統分析者可能關心範圍、角色、規則與例外。
  • 設計人員可能關心系統結構及元件責任。
  • 開發人員可能關心物件、介面與資料。
  • 測試人員可能關心情境、條件與預期結果。

單一模型不需要同時滿足所有讀者,而應根據溝通目的選擇合適的觀點。


6.1.2 系統模型的目的

模型(Model)是對真實事物有目的的簡化表示。模型不會保留真實系統的所有細節,而是根據特定目的選擇需要呈現的資訊。舉例來說,「地圖」就是常見的模型。同一個城市可以有道路圖、大眾運輸圖、行政區域圖及觀光地圖。這些地圖描述的是同一個城市,但保留的內容並不相同。

  • 道路圖重視道路及行車方向。
  • 大眾運輸圖重視路線、車站及轉乘關係。
  • 行政區域圖重視區域邊界。
  • 觀光地圖重視景點與旅遊資訊。

不能因為大眾運輸圖沒有畫出每一棟建築,就認為它不完整。也不要因為觀光地圖沒有呈現行政區域界線,就認為觀光地圖有誤。判斷模型是否合宜,應該先確認:

同一個資訊系統可以從不同角度建立不同的模型。不同的模型滿足不同的需求。

模型觀點主要問題
情境觀點系統與哪些外部角色或系統互動?
使用者目標觀點使用者希望透過系統完成什麼?
流程觀點工作、活動與決策如何進行?
資料觀點系統需要哪些資料及資料關係?
結構觀點系統包含哪些概念或組成元素?
互動觀點參與者或物件如何依時間順序交換訊息?
狀態觀點特定物件會經歷哪些狀態與轉換?
架構觀點系統如何由軟體元件及執行環境組成?

這些模型不是互相競爭,也不一定具有一對一的對應關係。每一種模型都從特定角度呈現系統,共同協助讀者建立較完整的理解。系統模型的主要用途說明如下。

§ 簡化複雜系統

真實系統通常同時涉及人員、流程、規則、資料、軟體及外部服務。模型可以暫時忽略較無關的細節,讓分析者專注處理特定問題。

§ 促進溝通

圖形或結構化模型可以為討論建立共同焦點。利害關係人可以針對模型中的角色、功能、流程或資料提出修正,而不必只依賴抽象的口頭描述。

§ 支援需求分析

模型可以協助檢查需求分析的結果是否合宜、是否有遺漏或不一致——例如角色、目標是否齊全,功能與業務規則是否一致,資料是否足以支援作業——補強單靠文字不容易察覺的問題。

§ 保存分析成果

需求分析過程中的重要判斷,例如系統邊界、角色責任及概念關係,可以透過模型加以保存。模型也能作為後續討論、修改與驗證的依據。

§ 連結分析、設計與驗證

經過確認的分析模型,可以提供給系統設計作為輸入,也能協助測試人員理解應驗證的使用情境。但必須注意的是:模型不能自行取代需求規格。圖中未呈現的規則、限制、品質要求及例外條件,仍需要透過文字、表格或其他規格形式保存。


6.1.3 分析模型與設計模型

系統建模可以出現在系統分析與系統設計的不同階段。為避免模型過早加入實作假設,需要區分分析模型(Analysis Model)與設計模型(Design Model)。

§ 分析模型

分析模型著重:

分析模型通常關心:

  • 系統邊界
  • 外部角色
  • 使用者目標
  • 業務流程
  • 領域概念
  • 資料關係
  • 系統責任
  • 重要事件
  • 業務狀態與規則

例如,在Case M01中,分析模型可以呈現:

  • 團隊隊長可以提交競賽報名。
  • 候選內容:競賽承辦人員可以審查報名資格;此項服務尚須核對需求來源,未確認前不得直接納入正式模型。
  • 評審可以評定被分派的專題。
  • 主辦單位負責確認競賽結果。
  • 評審不得審查本人所指導之學生團隊。

分析模型著重業務需求與系統責任,不需要先決定以下內容:

  • 使用哪一種程式語言
  • 採用哪一種前端框架
  • 資料要儲存在哪一張實體資料表
  • 系統要部署在哪一個雲端平台
  • 程式內部需要建立哪些技術類別

§ 設計模型

設計模型著重:

設計模型可能進一步呈現:

  • 軟體架構
  • 元件責任
  • 程式介面
  • 資料庫結構
  • 訊息交換
  • 外部服務整合
  • 安全控制
  • 部署環境

例如,為了實現「評審只能查看被分派的專題資料」,設計模型可能進一步考慮:

  • 權限檢查由哪個元件負責
  • 評審與分派紀錄如何儲存
  • 查詢服務如何限制資料範圍
  • 未授權存取如何被拒絕與記錄
  • 哪些介面會使用這項服務

分析模型與設計模型之間並非完全分離。分析結果會影響設計,設計過程也可能發現需求不足或存在矛盾,需要重新確認。但兩者的主要問題不同:

模型類型主要問題
分析模型系統必須做什麼?
設計模型系統準備如何實現?

§ 避免過早進入設計

初學者在分析階段常會直接加入熟悉的技術方案。例如,需求是:

過早加入設計後,可能直接變成:

後面的說法已經加入:

  • 前端技術:React函式庫
  • 畫面形式:卡片
  • 顏色:藍色
  • 資料庫:MySQL

除非這些項目已確認為必要限制,否則不應在分析模型中提前固定。在這個階段,根本不需要確定要使用React函式庫、卡片、藍色、MySQL資料庫。過早進入設計可能造成以下缺點:

  • 把目前想到的方案誤認為唯一可行方案
  • 過早排除其他可能更合適的設計選擇
  • 使利害關係人把注意力轉向技術細節
  • 混合業務語言與技術語言
  • 因技術選擇改變而使分析模型失去穩定性

因此:


6.1.4 建立與使用模型的基本原則

系統模型的價值不在於圖形數量,而在於模型是否能有效回答分析問題。建立模型時,可以遵循以下原則。

§ 每個模型都應有明確目的

建模前應先回答:

  • 這個模型要回答什麼問題?
  • 主要讀者是誰?
  • 模型需要支援哪一項分析或決策?
  • 哪些內容應該呈現?
  • 哪些細節可以暫時省略?

如果無法說明模型的用途,就不應只因為某種圖形常見而建立它。

§ 選擇適當的抽象層次

模型過於概括,可能缺乏足夠資訊支援分析;模型過於詳細,則可能難以閱讀,且過早進入實作。

例如,下列使用者目標:

如果只寫成:

範圍過大,無法清楚表達具體目標。

如果拆成:

  • 點選新增按鈕
  • 輸入團隊名稱
  • 點選下一步
  • 顯示確認訊息

又可能過早進入介面操作細節。

適當的模型應保留完成業務目標所需的資訊,同時避免混入不必要的設計決策。

§ 使用一致的名稱

需求規格、模型、表格及驗收準則若使用不同名稱,容易造成誤解。例如,同一角色不宜交替稱為:

  • 承辦人
  • 承辦人員
  • 競賽管理者
  • 活動管理員

除非這些名稱代表不同角色,否則應選擇一個正式名稱並保持一致。同樣地,「提交競賽報名」與「送出報名資料」若代表同一項系統服務,也應確認是否需要統一。

§ 圖形與文字相互補充

圖形適合呈現:

  • 範圍
  • 結構
  • 關係
  • 流程
  • 互動
  • 狀態

文字適合記錄:

  • 詳細條件
  • 業務規則
  • 例外說明
  • 品質要求
  • 決議理由
  • 待確認事項

不應為了讓圖形看起來完整,而把大量文字全部塞進圖中;也不應只保留圖形,使重要規則與條件無處追蹤。文字與圖形是搭配使用的。

§ 模型元素應具有需求依據

模型中的角色、功能、資料及規則,應能追溯至:

  • 已確認的需求
  • 正式業務規則
  • 需求來源
  • 已核准的範圍
  • 經權責人員確認的決議

如果建模時發現看似必要但缺乏依據的內容,應將其標示為候選項目或待確認事項,而不是直接當成已確認的模型內容。

§ 模型之間應保持一致

同一個系統可能具有多個模型。不同模型的觀點可以不同,但核心概念不應互相矛盾。例如:

  • 如果使用案例模型中包含「評定專題」,流程模型就不應讓未被分派的評審直接評分。
  • 資料模型若包含「評分更正申請」,相關流程就應說明其建立及處理方式。
  • 狀態模型若規定正式送出的評分不能直接修改,使用案例描述就不應允許評審自行修改分數。
  • 所有模型中的角色、資料及狀態名稱應盡量一致。

§ 模型需要經過檢查與確認

模型完成後,至少應檢查:

  • 是否符合系統目的與範圍
  • 是否具有可查證的需求依據
  • 是否遺漏重要角色、目標或情境
  • 是否加入沒有來源的假設
  • 是否存在名稱或語意不一致
  • 是否混入過多實作細節
  • 是否能被主要讀者理解
  • 是否與其他需求成果一致

利害關係人、分析人員、設計人員及測試人員應共同針對模型進行查核確認,不同角色可能從模型中發現不同問題。

§ 建模工具與AI不能保證模型正確

建模軟體可以協助繪製、保存與輸出模型;生成式AI也可以整理候選元素、轉換表示語法及進行初步檢查。然而,工具能產生圖形或通過語法檢查,不表示模型已符合真實需求。模型仍須核對範圍、語意、需求依據及跨文件一致性。


需求規格與系統模型具有不同但互補的功能:

需求規格系統模型
逐項記錄系統要求從特定觀點呈現整體關係
適合描述規則與限制適合呈現範圍、結構與行為
支援需求追蹤與驗收支援理解、溝通與分析
保留詳細文字依據提供有目的的抽象表示
回答系統必須滿足什麼協助理解需求如何形成整體

系統建模不是在需求分析完成後才附加的繪圖工作。建立模型的過程,可能發現新的缺漏、衝突與待確認事項,使需求得到進一步修正。

整個過程可以表示為:

因此: