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%覆蓋率。
留言
張貼留言