BDD 操作盤點描述使用者操作的情境和預期結果,但操作盤點的格式(Given / When / Then)聚焦在「什麼情境下做什麼得到什麼」,容易漏掉畫面層級的兩個面向:每個狀態下使用者能執行哪些操作,以及如何離開當前狀態。畫面狀態矩陣補上這兩個面向,讓導航缺口在實作前浮現。

操作盤點的覆蓋範圍

BDD 操作盤點通常包含:

  • 使用者操作(When):「使用者點擊連線按鈕」
  • 前端引導(Then):「顯示連線進度指示」
  • 後端回應:「WebSocket 連線建立」

「前端引導」描述的是畫面的顯示內容 — 對應狀態矩陣的「顯示」欄。但操作盤點通常不會展開:連線中的畫面除了顯示進度指示,使用者能做什麼?如果連線失敗,使用者怎麼離開失敗畫面?

app_tunnel 的操作盤點在「前端引導」欄寫了「連線失敗顯示無法連線」,覆蓋了 error 狀態的顯示。但是「顯示無法連線之後使用者能做什麼」和「使用者怎麼離開這個畫面」都沒有描述。實作出來的 error 狀態有重連按鈕但沒有 back 按鈕 — 重連失敗時使用者被困在 error → retry → error 循環裡(U.C1)。

展開步驟

步驟一:從操作盤點抽出所有畫面

每個 BDD 情境至少涉及一個畫面。列出所有情境提到的畫面名稱,去重後得到畫面清單。

例:app_tunnel 的操作盤點涉及三個畫面 — 首頁、配對畫面、終端機畫面。

步驟二:每個畫面列出狀態

從操作盤點的 Given / When / Then 條件中抽出狀態。「Given 連線已建立」暗示有 connected 狀態;「Then 顯示無法連線」暗示有 error 狀態。

同時檢查程式碼中的狀態 enum — 操作盤點可能遺漏了某些狀態(如 idle、disconnected),程式碼裡有但操作盤點沒提到的狀態同樣需要設計 UI。

步驟三:每個狀態填「顯示」欄

從操作盤點的「前端引導」直接填入。這一步通常不缺資料,因為操作盤點的強項就是描述顯示內容。

步驟四:每個狀態填「可用操作」和「退出路徑」欄

這一步是關鍵 — 操作盤點通常不提供這些資訊,需要主動補上。

對每個狀態問兩個問題:

  • 使用者在這個狀態下想做什麼?(可用操作)
  • 使用者怎麼離開這個狀態?(退出路徑)

開發者容易假設 connected 狀態下使用者只想打字,不會想返回首頁。但使用者可能想切換到配對畫面重新配對、想暫時離開做其他事、想結束當前操作。把這些可能性列出來,判斷哪些需要提供操作按鈕。

步驟五:檢查矩陣的空白格

退出路徑欄為空的狀態是 UX 死胡同,需要補上退出路徑。可用操作欄為空的狀態需要判斷是否合理 — loading 狀態操作欄為空可能合理,但建議至少提供取消操作。

操作盤點的「描述顯示」偏差

操作盤點的「前端引導」傾向描述顯示(What the user sees)而非描述互動(What the user can do)。這個偏差的根源在 BDD 的 Then 語法 — Then 通常描述可觀察的結果,而「畫面顯示 X」比「使用者可以做 Y」更容易寫成可觀察的斷言。

app_tunnel 的操作盤點就是這個模式。四個操作情境的「前端引導」都寫了顯示內容(「顯示終端機畫面」「顯示連線中」「顯示無法連線」),沒有一個寫了操作(「使用者可以取消」「使用者可以返回」)或退出路徑(「使用者可以回到首頁」)(U.C1)。

畫面狀態矩陣的四欄結構強制補上這兩個面向。從 BDD 操作盤點到畫面狀態矩陣的展開步驟,就是把「只描述顯示」擴展成「顯示 + 操作 + 退出」的過程。

下一步路由