在軟體工程中,特別是在用例驅動的開發方法中,識別參與者是基礎且關鍵的一步。參與者作為開發中系統與外部互動實體之間的橋樑。正確地識別與理解參與者,可使團隊設計出以使用者為中心、功能完整且符合現實需求的系統。

本文全面探討了識別參與者的目標,以及參與者的類型(人類與非人類),以及他們的角色與職責,此流程如何支援軟體開發的各個領域,並提供關鍵概念、指南與實用技巧以確保成功。
識別參與者不僅僅是初步工作——它是一項戰略性活動,會影響整個開發週期。主要目的包括:
參與者有助於釐清系統內部(軟體)與外部的範圍。這種清晰性可防止範圍蔓延,確保團隊專注於正確的領域。
範例:在銀行系統中,客戶是系統外部的參與者,而交易處理模組則屬於系統的一部分。
參與者代表實際使用軟體的使用者或系統。透過識別他們,團隊可建立反映系統實際使用方式的實際用例。
每個用例通常涉及一個或多個參與者。了解參與者有助於發現完整的功能需求。若不了解系統的使用者,便無法定義他們的需求。
參與者為利益相關者、開發人員、測試人員與業務分析師提供共同語言。這使得討論功能、驗證需求與統一期望變得更容易。
測試人員可以使用角色來設計測試場景。例如,「客戶」角色可能需要執行「登入」、「轉帳」和「查看明細」——每一項都成為一個測試案例。
角色大致可分為兩種類型:人類角色和非人類角色.
這些是直接與系統互動的個人。
客戶
管理員
員工
經理
支援人員
病患(在醫療系統中)
有目標和意圖。
透過使用者介面、表單或語音指令進行互動。
可能擁有不同權限的角色(例如,管理員與一般使用者)。
✅ 提示:使用基於角色的命名方式(例如,使用「註冊客戶」而非「使用者」)以避免混淆。
這些是與軟體互動的外部系統、裝置或自動化流程。
自動櫃員機
支付網關(例如,Stripe、PayPal)
電子郵件伺服器
天氣服務API
物聯網感測器
遺留系統(例如舊型資料庫)
並非人類,但會啟動或回應系統動作。
通常代表整合點或外部服務。
可能自動觸發使用案例。
✅ 範例:在電子商務系統中,“支付網關”是一個處理付款並將確認訊息回傳至系統的參與者。
⚠️ 常見錯誤:將系統元件視為系統的一部分,而非外部參與者。務必問:「這個實體是否啟動使用案例?」
理解參與者的角色與職責能深化對其使用系統方式及期望的理解。
描述在情境中的個人或系統。
通常與職務功能或系統類型相關。
範例:「貸款經理」對比「客戶」
參與者在系統中執行的動作。
他們希望達成的目標。
他們提供的或接收的資料。
| 職責 | 描述 |
|---|---|
| 瀏覽產品 | 查看產品清單和詳細資訊 |
| 加入購物車 | 選擇商品並加入購物車 |
| 結帳 | 輸入運送和付款資訊 |
| 追蹤訂單 | 查看訂單狀態和配送更新 |
✅ 最佳實務:在表格或用例圖圖例中記錄參與者的責任,以提升清晰度。
正確的參與者識別會影響軟體開發生命週期的多個階段:
有助於識別所有使用者群組和外部系統。
避免遺漏關鍵的使用者需求。
鼓勵早期讓利害關係人參與。
每個用例均由參與者觸發。
促進功能需求的系統性發現。
有助於避免重複或重疊的用例。
指導介面設計(UI/UX)。
影響安全性與存取控制(例如:管理員與訪客)。
決定整合點(例如:第三方 API)。
測試人員使用角色來建立測試情境。
確保所有使用者路徑都已涵蓋。
支援自動化測試腳本的建立。
明確的角色定義有助於撰寫使用者手冊與訓練教材。
說明系統中誰可以執行什麼操作。
在敏捷開發中,角色有助於定義使用者故事(例如:「作為一位顧客,我想要重設我的密碼」)。
根據使用者需求,促進待辦事項的優先排序。
使用者是使用系統的人。
角色是任何與系統互動的實體。
一位使用者可以扮演多個角色(例如:同時是經理也是顧客)。
❌ 錯誤:僅以「使用者」作為唯一角色。
✅ 正確:「顧客」、「經理」、「系統管理員」
角色位於系統邊界之外。
不要包含內部組件(例如:「資料庫」不是角色——除非它是外部系統)。
單一角色可以參與多個使用案例。
範例:一位「顧客」可以進行「瀏覽」、「加入購物車」、「結帳」和「評價產品」。
用例描述了一個動作或目標。
參與者觸發或參與用例。
✅ 用例:「處理付款」
✅ 參與者:「客戶」和「支付網關」
遵循以下最佳實踐,以確保參與者識別的準確性和意義:
與業務分析師、終端用戶和系統所有者交談。
提問:「誰使用這個系統?誰向它發送資料?誰接收輸出?」
針對每個潛在的用例,提問:「誰啟動這個互動?」
答案很可能是參與者。
不要使用「使用者」、「系統」或「人」等模糊術語。
要具體:「註冊客戶」、「第三方 API」、「行動裝置」。
不要只考慮直接使用者:感測器、排程任務、外部服務。
範例:天氣感測器可能觸發「發送警告」用例。
如果不是人類,請問:「它是否向系統發送或接收訊息?」
如果是 → 它就是非人類參與者。
繪製用例圖,並檢查所有參與者是否都已呈現。
確保沒有用例是「無參與者」的。
| 提示 | 說明 |
|---|---|
| 使用基於角色的名稱 | 不要使用「使用者」,改用「客戶」、「管理員」、「供應商」——更清晰且更具行動性。 |
| 按角色分組參與者 | 建立一份「參與者清單」,包含描述、職責與權限。 |
| 利用人物角色 | 為關鍵參與者建立人物角色,以同理他們的目標與痛點。 |
| 檢查是否有遺漏的參與者 | 提問:「如果系統失效會發生什麼?誰會收到通知?」→ 通常能揭示隱藏的參與者。 |
| 使用「系統外部」原則 | 如果某事物在系統內部,它就不是參與者。 |
| 迭代與優化 | 在每個開發階段重新審視參與者。新功能可能會引入新的參與者。 |
| 在參考表格中記錄參與者 | 維持一份活文件,記錄參與者細節以供未來參考。 |
客戶 – 查看帳戶、轉帳
銀行櫃員 – 處理貸款申請
自動櫃員機 – 發送提款請求
詐欺檢測系統 – 監控交易並標記可疑活動
支付網關 – 處理信用卡付款
角色: 客戶與自動櫃員機
互動: 客戶插入卡片 → 自動櫃員機發送請求 → 系統驗證 → 釋放資金
✅ 自動櫃員機是角色,因為它啟動了互動。
| 陷阱 | 為何不好 | 如何修正 |
|---|---|---|
| 將內部模組視為角色 | 違反系統邊界概念 | 問:「這是在系統內還是系統外?」 |
| 使用模糊的用語,例如「使用者」 | 導致模糊不清與遺漏需求 | 使用具體角色:「客戶」、「供應商」 |
| 遺忘非人類角色 | 錯過整合與自動化 | 思考 API、感測器、排程工作 |
| 假設每個使用案例僅有一個角色 | 忽略複雜的互動 | 允許每個使用案例有多個角色 |
| 開發過程中未重新檢視角色 | 角色可能隨著新功能而演變 | 在迭代規劃與回顧中檢視角色 |
在以使用案例為導向的方法中識別角色,遠不止是形式上的程序——它是成功軟體開發的戰略基石 成功軟體開發的基石。透過明確定義與系統互動的對象(無論是人類還是非人類),團隊可獲得:
對使用者需求的更深入理解
更完整且準確的需求
更好的系統設計與架構
改進的測試與文件
更強的利害關係人協調
當做得正確時,角色識別能將抽象概念轉化為具體且可執行的洞察。它確保軟體不僅僅運作——解決真實人物與系統的實際問題.
書籍:
用例建模 作者:Alistair Cockburn
撰寫有效的用例 作者:Alistair Cockburn
工具:
Visual Paradigm(用於用例圖)
Lucidchart / Draw.io(繪圖)
Jira + Confluence(用於角色與用例文件)
方法論:
敏捷(使用者故事源自角色)
領域驅動設計(DDD)——角色是領域模型的一部分
🌟 最後的想法:
「你不是為系統開發軟體,而是為人類以及服務他們的系統開發。角色是理解這些人與系統究竟是誰的第一步。」
透過掌握角色識別,你為一個不僅具備功能,更真正具有價值的系統奠定了基礎。