很多人在撰寫實例化需求範例, 老是覺得分不清楚他跟測試的差別, 不是都是在寫測試個案嗎? 到底不同在哪? 今天就讓我們舉個例子來說明吧

讓我們來看下面這個範例:
| given I am an authorized user when I enter “David” into username field and I enter “test” into password field and I click on “login” then the system home page should open |
這個範例很明顯的是畫面操作, 只是系統要求用戶要怎麼做, 但是沒有說用戶想要做什麼.
這個過程只是說明了系統會這樣設計, 但是沒說明用戶的需求是什麼
用戶只是想要有安全機制來登入系統, 你可以請用戶輸入帳號和密碼, 也可以提供刷臉, 語音或是按指紋.
所以你可以改寫成
| given authorized user “David” when “David” login correctly then “David” can access their accounts |
需知道 spec by example 是在早期確認需求階段時寫的, 這時候不見得所有設計系統都已經知道. 這時候的重點是客戶要描述需求, 而實作不在這時候處理. 實作的細節可能隨著時間的演進, 會有所改變.
開發人員不是程式碼輸入員, 而是問題的解決者, 他需要了解是什麼. 當他了解問題後, 可以使用 copilot 之類工具, 幫你產生出好的程式碼. 所以你要小心的是, 你不懂你要解的問題領域, 是很容易被 copilot 所取代.
我們再來看另一個範例:
| given I am logged then I should see “User management homepage” when I select the “Profile” menu then I should see “Profile” and I should see a list of attributes when I click “edit” then I update address “xxxxxx” and I click “save” when I click “edit” then I update email “xxxxxx” and I click “save” ….. |
其實這邊要做的是在進行測試, 他並不是在描述需求或是系統行為. 而且這樣的自動化是很碎弱的, 只要有個地方改變了, 就可能導致執行錯誤. 這些細節可能在單元測試或是整合測試去做. 而不是在實例化需求時去做
你可以改寫成:
| Scenario: updating user attributes given I login when I update my attributes then the updated information should be available when view the information. |
所以看到這裡, 我想強調的實例化需求範例
(1) 是在描述系統行為, 而不是畫面操作
(2) 當你的範例太長時, 很可能你在描述測試, 而非需求
今天我們就先談到這裡
發表迴響