測試驅動開發——讀《浮現式設計》有感

來源:互聯網
上載者:User

        題記:正在讀《浮現式設計:專業軟體開發的演化本質》(榮獲第19屆Jolt生產力大獎)一書,順手寫下了一點自己的感想與淺見,是以為記。

 

        前幾天剛在我的微博上說我在讀一本《測試驅動開發》的書,今天在讀《浮現式設計》時又遇見了“測試驅動開發”,好友胡研還調侃說現在有需求驅動開發、系分驅動開發、文檔驅動開發、模型驅動開發、用例驅動開發、專案管理驅動開發、品質驅動開發等各種驅動開發。開發人員很悲催呀,各種被驅動:-(

        回到測試驅動開發上來吧,當然不是測試人員驅動開發人員,而是用測試的思路推動代碼的實現,針對的是開發人員一個角色,通過先寫測試代碼再寫產品代碼的方式完成開發活動的一種方法。簡稱TDD。

        我個人與作者一樣,一直對這個方法持有懷疑態度,也從來沒有付諸於實踐。我也曾認為測試是一個專業的活動,應由專門的人員(測試工程師)或部門(品質保證部)來實施方能得到更大的收益。本來開發人員就沒時間,還怎麼去再做測試的活呢?

        現在,我依然沒有採用這種進階的實踐方式,也沒能轉換到這種思考問題的方式上,但測試的作用我是認同的。

        還記得幾章前的軟體品質中提到的內聚、耦合與冗餘嗎?

        內聚強的類更易於測試。內聚強也是單一職責原則的體現,當一個類只有單一職責時,無論是先構造測試還是後構造測試,測試代碼都會簡潔高效,同時這種測試代碼也可以扮演用戶端的角色,測試代碼對類的使用方式,其實就是該類交付後用戶端代碼的調用方式,具有天然的demo功能,也是對文檔的有效補充。

        耦合度高的對象難於測試。耦合度高的對象,相互之間關係複雜,甚至於牽一髮而動全身,測試案例不好構造,不好隔離,出了問題仍然不好分析定位。還要引入Stub、Mock、Fake等額外的手段來輔助測試案例的構造。如果出現這種情況,其實也在某種程度上說明存在設計不當或設計過度的可能,也許要重構了。

        測試為檢驗冗餘提供了機會。無論是使用複製粘貼的代碼,還是複用並少量修改了前人的代碼,還是通過其他途徑,隨著時間的推移,系統中總會出現更多的易被忽視的冗餘,我曾在《架構如何才能抵制熵增》一文中有專門的描述,使用測試,如果出現冗餘的測試,很有可能就有冗餘的代碼,這個是利於檢測代碼冗餘的。

        對於測試驅動開發而言,完全具有測試的作用,編寫測試,或者考慮如何編寫測試,實質上都是以代碼的方式在思考。這對代碼的可測試性尤其有利。但TDD的實施肯定有一些條件,重要的不是先寫測試還是後寫測試,也不是糾結於要不要實施TDD,而是把對代碼的可測試性的要求作為衡量代碼品質的日常指標,從而引導開發人員擁抱測試。這個過程會漫長且煎熬,有人說像面向過程思維轉向物件導向思維一樣,但轉換成功後,一定會有他的價值的。


——歡迎轉載,請註明出處 http://blog.csdn.net/caowenbin ——


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.