TDD、BDD

TDD 、BDD和軟體開發

BDD:

將一個系統分成多個feature,每個feature會有多個scenarios lists,每個scenario會有多個Griven、When、Then,對應到tdd裡的3A(arrange,act,assert)。


TDD:

TDD是一個開發方法,強迫開發者必須先思考需要做什麼,知道自己在做什麼,而不是悶下去寫code,TDD幫助開發者在寫一個功能時,先建立測試環境,再去寫產品代碼,之後不管怎麼重構,都可以確保正確性。

TDD不等於寫unit test,unit test可能是必要的,但TDD不是。

TDD步驟:

1. 理解需求

    從scenario list去挑選一個scenario,先選重要的。

2. 先寫測試代碼,並執行,得到失敗結果

    測試是為了讓開發者思考應該要測試的情境,讓寫出來的程式擁有可測性。

3. 寫實現代碼讓測試通過

    以最快的速度通過,目的是為重構建立情境。

4. 重構代碼,並保證測試通過。

    由於有了情境,可以任意重構,直到功能皆通過測試。

5. 反復實行這個步驟 測試失敗 -> 測試成功 -> 重構

   

TDD還是需要預先設計架構,理解需求,避免寫了一系列的test最後因為需求改變而被刪除,每個unit test的重構需遵守solid原則、grasp原則、design pattern、避免壞味道(尤其是重複的代碼),TDD只告訴你要思考可測試性,而不會教你如何設計,要讓設計變好,還是要去了解軟體的設計原理。

先有大概架構,再去實踐TDD ( 也就是先寫測試,再去寫產品代碼,然後重構的TDD標準流程),寫的時候思考如何測試這個function或是class,如何傳入mock物件,達到可以隨時抽換不同的實作(也就是面對接口編程)。

TDD不只包含unit test,驗收測試,整合測試也在TDD裡面,TDD是一個逐步增量的過程。

unit test應該只測那些該被測試的東西,不是追求100%覆蓋率。

留言

這個網誌中的熱門文章

WINDOWS cmd 操作:查看進程、TCP連線、刪除TCP連線和進程

mongodb aggregate 筆記

mongodb shell 操作