第 54 篇 · 台北 一份持續書寫的工作日誌

BDD 的三大實踐:Discovery → Formulation → Automation

前兩天介紹了 Cucumber 跟 Step Definitions 的實作,今天想往上拉一層,聊聊 BDD 的完整方法論。很多人以為 BDD 就是 "用 Gherkin 寫測試",但其實 BDD 的核心是三個實踐:Discovery、Formulation、Automation。今天就來拆解這三個階段。

一、Discovery(探索):搞清楚 "它可以做什麼"

Discovery 的核心是在寫任何程式碼之前,透過結構化對話來建立共識。

最常用的技巧是 Example Mapping,用四種顏色的卡片:

  • 黃色:要討論的 User Story
  • 藍色:治理這個 Story 的規則(Rule)
  • 綠色:說明每條規則的具體範例(Example)
  • 紅色:團隊當下無法回答的問題

搭配 Three Amigos(三劍客):Business(業務)、Development(開發)、Testing(測試)三個角色一起參與。Three Amigos 定義 "誰來參與",Example Mapping 定義 "怎麼對話",Discovery 則是包含兩者的上層實踐。

二、Formulation(表述):把共識寫成 "它應該做什麼"

Formulation 不是單純寫 Gherkin。它是一個協作活動,把 Discovery 階段已經建立的共識,用人跟機器都能讀懂的格式記錄下來。

好的 Formulation 遵循 BRIEF 原則:

  • Business language:使用業務領域的術語
  • Real data:使用真實具體的資料
  • Intention-revealing:描述行為的 "為什麼"
  • Essential:只包含理解該行為必要的資訊
  • Focused:每個 Scenario 只說明一條規則

跟 "只是寫 Gherkin" 最大的差別是:Formulation 是協作產出的(不是測試人員獨自寫的),描述的是行為(宣告式)而非實作步驟(命令式),產出物是活文件(Living Documentation),不是測試腳本。

三、Automation(自動化):驗證 "它實際做了什麼"

很多人以為 Automation 就是寫自動化測試,但 Cucumber 創辦人 Aslak Hellesøy 說得很直白:"TDD 跟 BDD 是設計與開發軟體的技術,測試只是副產品。"

BDD 的 Automation 有幾個重點:

  • 它是設計工具,不是事後驗證:自動化發生在寫正式程式碼之前
  • 它產出活文件:自動化的 Example 會持續對系統做驗證,取代過時的文件
  • 開發者必須主導:如果是測試人員在開發完成後才把 Gherkin 自動化,那就不是 BDD

最後分享一個有趣的資料:Specification by Example 的作者 Gojko Adzic 在 10 年回顧 (2020年) 中提到,29% 使用 Example 的團隊根本沒有做自動化,光是協作式的規格討論就已經帶來足夠的價值。這提醒我們,不管工具多厲害,Discovery 那個 "人跟人建立共識" 的過程始終是最有價值的。

延伸閱讀 看完整 137 篇 →