有一位軟體設計的夥伴,是我看過上千軟體人員之中唯一的天才。他不只學習能力快速,更具備靈活的頭腦與身段,抽象思考能力極高,擅長把軟體作「軟」的他,作品總是令人嘆為觀止。不過,我覺得他與國外的軟體先驅仍差了一截,並不是實作或學習能力不夠好,最主要的差距在於「創新能力」。

什麼是創新能力?舉個例子,我可以看得出早期EJB規格的問題點(軟體結構會被該規格綁死死的),所以會批判與避免使用它。Rod Johnson 卻不只是批判反對而已,而且還身體力行,寫出Spring Framework,實現IoC(Inversion of Control)、AOP(Aspect-Oriented Programming)的輕量級開發框架,釐清軟體開發人員與系統層級服務的責任。

另外,《Test Driven Development By Examples》作者Kent Beck在輔導專案的過程,有感於測試應伴隨所開發的程式碼,而不是延遲,所以主張「測試先行」(Test First),他甚至設計免費開放的JUnit Framework等測試框架,並寫書推廣正確觀念,讓開發者了解測試先行是維繫軟體品質的重要關鍵。太多大型單位把測試當作一個重要製程,但又交給其他部門,而且在開發後才展開測試,這樣的應變測試效果令人懷疑。

先測試,再反覆修正到正確為止

全書分成三大部分,前兩大部分是範例,第三部分則是測試驅動開發(Test Driven Development,TDD)的設計模式(Patterns)。
第一部分以一個「幣值轉換」的程式範例,利用Java程式碼揭露TDD的設計意涵。

看到這個範例,你可能會覺得程式碼的寫法實在不高明。是的, Kent Beck盡量模仿初學者的程度撰寫程式碼,這同時說明TDD簡單明瞭,能讓初學者快速上手,並懂得如何修正程式碼 (這其實已經逐漸走向設計之道了)。這部分內容讓你了解什麼才是Test First──還沒寫類別程式碼之前先寫測試程式碼。當然,測試一定不會過,再來才開始寫主題程式,新增類別、編輯屬性、修改參數……等。簡單的設計、列出工作清單、一次只解決一個問題、測試它、讓它正確……如此地反覆修正,這正是TDD最重要的精神。

第二部分藉由Python語法探索xUnit測試框架的設計過程,教你如何撰寫屬於自己的測試框架。你也許認為開發Framework相當困難,但Kent beck的作法是如此簡單,三兩下就可以開發出測試框架,而且在設計的過程中,還能秉持測試先行的原則。作者使用Python作為範例,原因除了語法易懂之外,因為Python屬於Script-Based語言,也能藉此證明Python能實現測試框架的實作。

不過,目前已有30多種程式語言支援xUnit Framework,為何作者還要鼓勵程式人員開發屬於自己的測試框架?

有兩個理由:一、讓你對測試工具有自我主宰的感覺;二、藉此探索測試內部的機制。

第三部分是TDD的設計模式,這部分談到測試的策略思考,包括測試的意涵、什麼時候要測試、應該選擇什麼樣的邏輯與資料作測試。

簡單就是力量

TDD的核心精髓是:讓程式碼可以運行並能保持純潔無瑕(Clean code that works)。另外還有兩項原則:一、只有自動化測試失敗時,才寫新的程式碼;二、消除重複(Duplication)。其中,消除重複又與系統架構的相依性(Dependency)設計有相當密切的關係,消除重複的程式碼後,系統的耦合(Coupling)程度往往能夠降低,進而提升可再利用性的價值。

Kent Beck 還特別在序文提到「勇氣」(Courage)。他認為測試驅動可以在開發過程中控制開發者的憂慮感,它可以讓你:快速具體地學習,而不是一直處於試驗性的階段;取代沈默寡言,而有更多的溝通交流;不是躲開回報,而是更能尋求具體有幫助的回饋(Feedback)。

當閱讀完本書後,我相信你應該就能掌握TDD的開發精神,能落實:(1)從簡單開始做起;(2)寫自動化的測試程式;(3)重構 (Refactor),而且每次只增加一個新的設計。

 

Test Driven Development By Example

Kent Beck /著

Addison-Wesley Professional出版

售價:44.99美元

推薦:Amazon四顆星

 

《作者簡介》

王克明

台北工專五專部電子科畢業。現於HSDc軟體設計顧問團隊擔任架構師/顧問/講師。興趣為整體架構性的思考與學習、期貨投機操作與閱讀。

相關閱讀:
軟體設計必讀經典(1)以簡約之道介紹UML最實用的部分
軟體設計必讀經典(2)物件導向分析與設計入門
軟體設計必讀經典(3)洞悉易學難精的Use Case
軟體設計必讀經典(4)知易行難的極致軟體製程
軟體設計必讀經典(5)用科學化方式搞懂設計模式
軟體設計必讀經典(6)RUP活用,也可以是敏捷開發
軟體設計必讀經典(7)重構讓程式回到應有位置
軟體設計必讀經典(8)由生活出發,輕鬆領會物件導向
軟體設計必讀經典(9)優質使用者介面,源自好的狀態圖設計
軟體設計必讀經典(10)幫助SA紮穩UML底子的實務手冊

熱門新聞

Advertisement