March 09 16:18~17:42
以下這幾個名詞是在學習BDD時經常會看到的:
- SBE:Specification By Example
- BDD:Behavior Driven Development
- ATDD:Acceptance Test Driven Development
- TDD:Test Driven Development
初學者經常被這幾個名詞搞得頭暈腦脹,就算是查了網路上的資料,也不太容易分別出來,因為不同的資料說法不太一樣。
***
▼agilealliance網站在解釋ATDD的時候提到:
依據這個說明基本上把ATDD 和BDD(以及比較少聽到的SDD)視為同義字。
▼繼續看agilealliance網站對於BDD的解釋:
BDD是源自TDD和ATDD的一種綜合與細化後的實踐。
▼網站上接著說,BDD又叫做Specification By Example(SBE)。
根據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觀點
▼綜合以上資料還有一堆網路上部落格文章,也許可以用下圖來表達這些名詞之間的關係:
把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(達到這個目標),不管叫做什麼名字,其實並不那麼重要。
***
友藏內心獨白:大家互相學來學去到後來都變成一樣了。
沒有留言:
張貼留言