畫面狀態矩陣的定義與填寫方法
畫面狀態矩陣是一張表格,每行代表一個畫面的一個狀態,每列描述該狀態的四個面向:顯示了什麼、使用者能做什麼操作、什麼條件進入這個狀態、怎麼離開。這張表格的目的是在實作前暴露導航缺口 — 退出路徑欄位為空代表使用者一旦進入就出不去。
四欄定義
顯示
使用者看到的畫面元素。進度指示器、錯誤訊息、表單欄位、資料列表 — 任何視覺上呈現的內容。
可用操作
使用者在這個狀態下能執行的動作。按鈕、手勢、鍵盤輸入、下拉選單選擇。重點是「能做什麼」,不是「看到什麼」。
「顯示」和「可用操作」的區別在於互動性。顯示一段錯誤訊息和顯示一個重試按鈕都是「顯示」;按下重試按鈕觸發重新連線是「可用操作」。
進入條件
什麼事件或動作讓畫面進入這個狀態。使用者操作(點擊按鈕)、系統事件(連線成功)、外部事件(推播通知)。
退出路徑
使用者如何離開這個狀態。返回上一頁、導航到另一個畫面、取消當前操作、完成流程後自動轉場。
退出路徑是這張表格中最容易遺漏的欄位。開發者設計畫面時,注意力集中在「進來後看到什麼、能做什麼」,容易忽略「怎麼離開」。
填寫步驟
第一步:列出畫面的所有狀態
從程式碼中的狀態管理機制取得狀態清單。Flutter 的 enum、React 的 state、Vue 的 reactive data — 任何控制畫面呈現的狀態變數。
如果沒有明確的狀態 enum,從畫面的視覺變化反推:loading 時長什麼樣、成功時長什麼樣、失敗時長什麼樣。每種不同的視覺呈現就是一個狀態。
第二步:每個狀態填四欄
逐一填寫每個狀態的顯示、可用操作、進入條件、退出路徑。填不出來的欄位先留空,留空本身就是發現。
第三步:檢查退出路徑欄
退出路徑為空的狀態是 UX 死胡同。使用者進入後無法靠自己的操作離開,只能殺掉 app 或等系統逾時。
app_tunnel 的 Terminal 畫面有五個 enum 狀態(idle / connecting / connected / error / disconnected),每個狀態的退出路徑都是空的。使用者從首頁點 Connect Terminal 進入後,無論處於哪個狀態都無法返回首頁(U.C1)。10 分鐘填完這張表格就能發現全部五個缺口(本章合成,UF-3 Derive)。
第四步:檢查操作欄
操作欄為空的狀態可能合理(loading 時使用者等待),也可能代表缺少互動設計。loading 狀態通常應該有「取消」操作,error 狀態通常應該有「重試」和「返回」。
填寫範例
以 app_tunnel Terminal 畫面為例,修復前的矩陣如下:
| 狀態 | 顯示 | 可用操作 | 進入條件 | 退出路徑 |
|---|---|---|---|---|
| idle | 空白(自動連線) | 無 | 進入畫面 | 無 |
| connecting | 進度指示 | 無 | idle 自動觸發 | 無 |
| connected | 終端機 + 工具列 | 打字、特殊鍵 | WebSocket 連線成功 | 無 |
| error | 錯誤訊息 + 重連按鈕 | 重新連線 | 連線失敗 | 無 |
| disconnected | 「連線中斷」+ 重連按鈕 | 重新連線 | 連線斷開 | 無 |
退出路徑欄全空 — 五個 UX 死胡同。修復後的矩陣應該每個狀態都有至少一條退出路徑:
| 狀態 | 顯示 | 可用操作 | 進入條件 | 退出路徑 |
|---|---|---|---|---|
| idle | 空白(自動連線) | 取消 | 進入畫面 | 取消 → 返回首頁 |
| connecting | 進度指示 + back 按鈕 | 取消連線 | idle 自動觸發 | back → 返回首頁 |
| connected | 終端機 + 工具列 + back | 打字、特殊鍵、中斷連線 | WebSocket 連線成功 | back / disconnect → 首頁 |
| error | 錯誤訊息 + 重連 + back | 重新連線、返回 | 連線失敗 | back → 返回首頁 |
| disconnected | 中斷訊息 + 重連 + back | 重新連線、返回 | 連線斷開 | back → 返回首頁 |
每個狀態至少一條退出路徑
退出路徑是預設要求。即使是 connecting 這種過渡狀態,使用者也應該能取消 — 連線卡住時使用者需要能離開。iOS HIG 和 Material Design 對 modal 畫面都要求 dismiss 機制;畫面狀態矩陣的退出路徑欄是這個要求的具體檢查方式。
退出路徑為空只在一種情況下合理:該狀態持續時間極短(< 1 秒)且有保證的自動轉場。即使如此,仍建議保留取消操作 — 因為「極短」是在正常情況下的預期,異常情況(網路中斷、服務當機)可能讓這個狀態停留很久。
下一步路由
- 從 BDD 操作盤點展開到狀態矩陣 → 從 BDD 操作盤點展開到狀態矩陣
- 路由可達性檢查 → 路由可達性檢查
- 狀態矩陣轉 widget test case → testing 模組四 UI 自動化
- 狀態矩陣加「可觀測性」欄位 → testing 模組二 客戶端可觀測性
- 狀態轉換事件作為 funnel 分析原料 → monitoring 模組八 行為資料的商業利用