l

2017年3月9日 星期四

BDD(16)SBE、BDD、ATDD、TDD有何不同?

March 09 16:18~17:42

屏幕截图 2017-03-10 00.35.07

 

以下這幾個名詞是在學習BDD時經常會看到的:

  • SBE:Specification By Example
  • BDD:Behavior Driven Development
  • ATDD:Acceptance Test Driven Development
  • TDD:Test Driven Development

初學者經常被這幾個名詞搞得頭暈腦脹,就算是查了網路上的資料,也不太容易分別出來,因為不同的資料說法不太一樣。

***

agilealliance網站

agilealliance網站在解釋ATDD的時候提到:

屏幕截图 2017-03-09 16.37.50

依據這個說明基本上把ATDD 和BDD(以及比較少聽到的SDD)視為同義字。

 

▼繼續看agilealliance網站對於BDD的解釋:

屏幕截图 2017-03-09 16.35.38

BDD是源自TDD和ATDD的一種綜合與細化後的實踐。

 

▼網站上接著說,BDD又叫做Specification By Example(SBE)。

屏幕截图 2017-03-09 16.36.15

 

根據A=B ,B=C,則A=C的定律,可以推論出ATDD=BDD=SBE

▼***

《Specification by Example》

根據《Specification by Example》書中第三章的說法:

There are two popular models today for looking at the process and artifacts of Specification by Example: the acceptance-testing-centric(ATDD) model and the system-behavior-specification model(BDD).

書中的看法應該是把ATDD和BDD視為SBE的兩種實作方式。

***

《Cucumber BDD How-To》& 《BDD in Action》

《Cucumber BDD How-To》提到:

BDD is based on TDD; it inherits all the benefits and many of the principles/practices from TDD, but move on step forward—BDD combines TDD with ideas from domain-driven design (DDD) and object-oriented analysis and design which provide software development teams and business people with shared tools and a shared process to collaborate on software development.

根據以上敘述,BDD繼承了TDD所有的好處,從物件導向的角度來看,BDD是一種TDD(is-a的關係)

《BDD in Action》書中提到:「BDD is about writing specifications, not tests, at all levels」雖然傳統上還是習慣把BDD視為應用在使用者需求層次(feature level),把TDD視為規範技術層次(物件介面與互動關係),但《BDD in Action》認為BDD已經涵蓋了TDD,當BDD應用在撰寫物件規格的時候,就相當於傳統的TDD。

***

Teddy觀點

▼綜合以上資料還有一堆網路上部落格文章,也許可以用下圖來表達這些名詞之間的關係:

屏幕截图 2017-03-10 00.20.32

 

把SBE看成是一種Interface(介面),TDD看成一種Class(類別),BDD和ATDD是繼承了TDD,同時又是兩種SBE的實作。此外,BDD使用了DDD的若干觀念,所以BDD和DDD是association的關係。

扯了這麼多,又回到Quality Without A Name這個觀念上。不管是什麼「D」,最終要達成的目的也就只有兩句話:

  • Do the right thing(產品做對)
  • Do the thing right(品質做好)

只要能達到這個Quality(達到這個目標),不管叫做什麼名字,其實並不那麼重要。

***

友藏內心獨白:大家互相學來學去到後來都變成一樣了。  

沒有留言:

張貼留言