官术网_书友最值得收藏!

譯者序

測試驅動開發(Test-Driven Development, TDD)這種編程手法或許很早就出現了,它后來能夠重新得到關注的其中一個原因在于,有一群開發者很樂意通過各種實例向我們介紹該手法的好處。我剛學編程的那幾年,依然在用老辦法寫程序,雖然也做過一些測試,但都是實現完功能之后補寫的,直到2007年看了Kent Beck的《測試驅動開發》(Test-Driven Development: By Example),才發現原來程序可以這樣寫。

從最基本的流程上說,TDD可以概括成三個環節:首先,寫一項測試,以描述有待實現的某個功能,并在其中做出斷言,以表示產品的執行效果必定與期望的效果相符,由于我們還沒有編寫相關的產品代碼,因此這樣的測試幾乎總是無法通過;其次,用極其簡單的方式(甚至可以是硬代碼)來編寫產品,讓這項測試能夠通過;最后,重構產品與測試代碼,讓兩者都變得更加準確、清晰。

測試代碼明確地描述了需求,促使開發者必須寫出滿足該需求的產品代碼,這確保我們不會走錯方向。測試越寫越多,這些測試所覆蓋的范圍也逐漸擴大,這促使我們把代碼寫得越來越通用,但是,由于我們在每一輪迭代時都力求用最簡單的寫法讓測試通過,因此不會像以前那樣總是想一下子就寫出極為通用的代碼,從而導致過度設計。另外,有這套測試做保障,就不用害怕新編的代碼會破壞已經寫好的功能了,因為假如出現那樣的情況,就會有測試無法通過,從而提醒我們注意該問題。

現在距離《測試驅動開發》一書面世已經20多年了,但仍有一些朋友尚未嘗試過TDD,還有一些雖然嘗試過,但尚未完全了解它的理念并體會到它的好處。如果說Kent Beck重新發現了TDD,那么Saleem Siddiqui的這本書則有可能讓TDD變得更加流行。

本書采用一個完整的項目貫穿各章,作者全程示范了如何把項目拆解成多個小功能,并依次采用測試驅動的方式實現這些功能。每實現一個功能,作者都會演示如何通過重構,把這個功能的代碼乃至項目的結構調整得更好。作者采用三種編程語言講解,這不僅能吸引更多的人來閱讀,而且讓我們能夠觀察各種編程語言在設計思路與實現細節方面的異同,進而養成一種超越編程語言的設計思維。大家在書中會看到如何結合具體語言的優勢,以清晰的代碼將這種思維表達出來。此外,作者還指引我們把這個項目提交到本地的git代碼庫中,以便做版本管理,并且告訴我們如何將本地倉庫與遠程的GitHub庫同步,以及如何通過腳本制作CI(持續集成)管道,讓項目代碼每次推送到遠程庫之后都能夠自動接受測試。

總之,這是一本流暢而連貫的教程,能讓大家很快喜歡上TDD。當然,TDD本身仍有一些地方尚待思考,例如怎樣測試圖形界面以及多線程的代碼等,希望大家結合自己的實際工作來探索這些問題。

為便于閱讀,譯者根據漢語習慣及原文語境補充了部分詞句,以六角括號〔〕標出,原書中某些不便翻譯的術語酌情保留原樣,讓大家能夠直接用這些英文詞來溝通,以避免誤解。

翻譯過程中,我得到了家人和朋友的幫助,在此深表謝意。

由于譯者水平有限,錯誤與疏漏在所難免,請大家訪問github.com/jeffreybaoshenlee/ltdd-errata/issues留言,或發郵件至eastarstormlee@gmail.com,給予批評和指正。

愛飛翔

2022年7月21日

主站蜘蛛池模板: 华安县| 抚松县| 磐安县| 喜德县| 邵武市| 巴南区| 历史| 鱼台县| 新疆| 方山县| 鱼台县| 长寿区| 南乐县| 江门市| 贵定县| 囊谦县| 绥阳县| 镇远县| 海阳市| 安阳县| 宝山区| 隆回县| 松阳县| 常熟市| 柳林县| 民乐县| 乐山市| 平湖市| 洮南市| 西和县| 通江县| 上犹县| 梧州市| 绥滨县| 隆化县| 天全县| 大宁县| 宜良县| 长宁区| 宽甸| 安义县|