2012-10-04 43 views
0

採用兩種不同的方式來說明相同的行爲。BDD場景具體如何?

選項A:

Given a customer has 50 items in their shopping cart 
When they check out 
Then they will receive a 10% discount on their order 

選項B:

Given a customer has a high volume of items in their shopping cart 
When they check out 
Then they will receive a high volume discount on their order 

前者是更爲具體。如果有人對某個客戶何時獲得大量折扣或給他們多少錢有什麼疑問,閱讀這個場景說明了這一點。爲了記錄行爲的目的,它儘可能具體,儘管這些值的任何變化都需要改變場景。

第二種是更一般化,並沒有第一個的清晰度。自動化它將需要在步驟實現中合併值「50」和「10」。另一方面,該方案捕捉到核心業務需求:大批量客戶獲得折扣。如果我們稍後決定使用「40」和「15」,則該情景不必更改,因爲核心業務需求並沒有真正改變(儘管步驟實施會)。此外,「高容量客戶」這個詞彙表達了我們爲什麼給他們打折的原因。

那麼,哪個更好?相反,在什麼情況下我應該支持前者還是後者呢?

回答

0

我想我會去的選項A.

的事情是,BDD場景必須作爲系統的文檔。

因此,如果一個非技術人員想知道您的折扣系統是如何工作的(一個商業夥伴,一個測試人員或來自客戶支持團隊的人員),他們當然想知道具有大量物品以及應用的折扣是什麼。 而且他們不想在管道代碼中找回這些信息。

我認爲這些信息很重要,不能從讀者隱藏。

另一個好處是,它將允許非開發人員(例如測試人員)編寫新場景,並檢查購物車中有1件物品或100件物品時會發生什麼情況。

當你對事物抽象太多時,應用有意識的發現會變得更加困難。 所以有一個場景是在選項B中,你失去的機會,問你自己這些問題:

  • ,如果我們有超過50個項目,如100個項目,會發生什麼有沒有其他任何可用的折扣
  • 發生什麼事如果我們有1件商品,我們不需要申請折扣,或者我們應該根據購物車的總價格而不是其中的商品數量來申請折扣,那麼只購買一件非常昂貴的商品的用戶也應該享受折扣?
  • 是唯一可用的折扣類型的10%,我們是否有例如固定金額的折扣?我們有更復雜的折扣策略嗎?

當業務變量可見時,您可以玩弄它們並找出您可能已經忘記的東西或想到新的有趣(或不)功能。

作爲一般規則,我會隱藏在場景中知道的並不重要,在這種情況下,項目的數量和應用的折扣值對讀者確實非常重要。