Clean Code 無瑕的程式碼 第9章 單元測試
第九章是非常重要的一章!作者提到了測試驅動程式開發(Test Driven Development)。說到「測試」兩字,給人的印象是重要性不如正式的產品程式,通常測試程式寫完立刻就會被丟棄。測試驅動程式開發的寫法產品程式與測試程式的關係如同太極圖的陰與陽同樣重要,兩者是對立又相依的關係。
TDD的三大法則
第一法則:在寫一個單元測試前,不寫產品程式。
第二法則:只寫剛好無法通過的單元測試。
第三法則:只寫剛好能通過測試失敗的產品程式。
說人話吧!傳統軟體開發方法是先寫產品程式,再寫測試程式。測試驅動程式開發先寫測試程式,再寫產品程式。
此處的測試程式是每的小單元都有測試程式,測試程式只比產品程式早幾秒寫,幾乎是兩者同時開發。
讓測試程式整潔
作者分享自己的工作經驗,測試程式依然要保持整潔,不然到最後雜亂無章的測試程式也會被拋棄。沒有測試程式之後就會出現惡性循環,變成不敢修改產品程式導致軟體品質下降。
作者認為測試程式與產品程式一樣重要。
測試帶來更多的好處
測試程式讓產品程式保持擴充性、可維護性。有測試程式讓人不怕修改軟體程式。
整潔的測試
可讀性最重要,測試程式要寫得簡單明瞭。
9-1是錯誤示範,寫得太複雜。
9-2是重構之後簡潔的範例。
每個測試程式單元呈現了建造、操作、檢查三個部分。
範例中assert開頭的函數是測試程式
特定領域的測試語言
測試程式寫多了可以演化出測試API。
雙重標準
測試程式注重可讀性,可以犧牲效率。
一個測試一次斷言(Assert)
斷言數量越少越好。
一個測試一個概念
相當於一個測試不要測試太多項目。
FIRST
整潔的測試遵循五個法則
Fast
測試程式執行快速
Independent
每個測試程式能夠獨立運行,不用管其他測試程式
Repeatable
任何系統環境都能夠執行測試程式
Self-Validating
測試程式的輸出是對或錯(true or false)
Timely
測試程式要在產品程式「之前不久」撰寫
總結
測試程式與產品程式同等重要,甚至更重要。測試程式腐化會導致產品程式接著腐化,引發惡性循環。
我覺得測試驅動程式開發(Test Driven Development)是好東西,無奈要實際運作有很大的困難,通常軟體公司的每個人進度都被安排好,不可能再安排時間再寫詳盡的測試程式,更何況做到本章節所言測試先行、測試程式與產品程式同時開發。
雖然如此有機會「制度環境許可」的情況下,還是試試看測試驅動程式開發(Test Driven Development)的寫作方法。
留言
張貼留言