TDD在開發過程中不斷利用單元測試 (Unit Test),確保程式的功能正確。
有別於直接開始實作功能的開發流程,TDD注重於先寫出測試,再寫出能通過測試的程式。
在開始實作程式邏輯之前,先寫測試。一旦最終完成的程式能夠通過測試案例,則代表程式正確,因為程式的正確性驗證已經透過測試確認完畢。
在開始實作程式功能之前,先進行一次測試,確保不會通過測試。
convert
、getAns
,與包含1個參數的建構子FizzBizz
。Work -> Correct -> Fast
可先直接回傳正確答案,確保程式與測試能正常運行。
成功通過測試後,用良好風格的程式實作真正的功能與邏輯。
直接回傳正確答案,確保測試功能正常。
逐步增加具代表性的測項
修改程式功能,使其能通過更多進階的測試案例。
在通過測試 (綠燈)後,找出可以重構的地方進行重構,測試也可能有重構的空間或必要。
重構完畢後,須確保能通過測試。
TDD在開發過程中,不斷進行測試與重構。
在專案還處於較小規模就進行重構,避免堆積成大專案時難以重構。
程式
,應確保測試
不變,待新程式通過測試後,才能更動測試
,反之亦然。將程式進行重構,預想未來若有其他數字的需求 (Line 21
),具有較好的維護與擴充性。
本次業界工作坊講題為測試驅動開發 (Test-Driven Development, TDD),並在課堂上以Fizz Buzz遊戲作為範例,學習TDD的開發流程,而我覺得在課堂上的即時練習非常有用,能在實作的過程中更加深刻地體會TDD的過程,
透過課堂上的互動,我也更深刻體驗到開放封閉原則的重要性。在軟體開發的過程中,可能會面臨到不斷有不合理的新要求提出,開發結束後仍可能會面臨到功能新增或修改,因此程式具有良好的維護與擴充性是非常重要。
在這堂課中,我學習到新的一種軟體工程專案開發的視角,在測試、主要程式與重構的不斷循環下,使專案在開發的過程,能在功能正確的前提下,不斷前進並維持良好架構。