寫給程式設計師的軟體測試指南:人人都可以開發無Bug程式碼

人郵社非同步社群發表於2018-05-04

​點選關注非同步圖書,置頂公眾號

每天與你分享IT好書 技術乾貨 職場知識


​參與文末話題討論,每日贈送非同步圖書。

——非同步小編

一年前,也是端午節,很巧合,本書的一個譯者為另一個譯者的新書《軟體測試價值提升之路》寫序。一年之後,還是端午節,兩位譯者一起為不一樣風格的軟體測試譯著《程式開發人員測試指南:構建高質量的軟體》(後簡稱《程式開發人員測試指南》)寫序,依舊充滿詩意,享受著成功的喜悅,並鄭重推薦本書給所有的軟體開發者和測試人員。

回想當初,朱少民老師從人民郵電出版社接下這本書的翻譯任務,邀請 3 位測試界朋友楊曉慧、歐陽辰、曾天樂組成翻譯團隊,開啟了本書的翻譯旅程。他們雖是測試老兵,但從接下任務之後,還是感到較大的壓力,始終懷有一顆謙遜的心來做這項工作。一方面它是全球第一本以“開發人員測試”命名的專業圖書,希望中譯本能夠得到大家的長久喜愛。另一方面,翻譯不是一件很容易的事,比寫書還難。寫書可以按照自己的想法、意願去寫,翻譯則是“戴著腳鏈在跳舞”,經常需要仔細地揣摩原作者的寫作思路或所表達的具體含義。就拿我們所整理的一個術語表為例,其中收集了218個術語,幾經修改,先後出了好幾個版本。多數術語很容易統一起來,有些術語(如quirk、circular argument、code bloat等)會有爭議,不容易達成一致,查證各種資料,最終才達成一致。甚至面對個別術語(如Mockist、Test Double、Stub),我們覺得多數開發人員更容易理解英文術語,沒必要翻譯成中文,但為了圖書規範,儘量把各種術語翻譯成中文,只是在其第一次出現時,註明原英文術語。

十年前或更早,許多優秀的軟體公司都有獨立的測試團隊,更強調測試的獨立性、客觀性,開發的質量很大程度上依賴於獨立測試的質量。那時,微軟公司擁有大約一萬名專業的測試人員(Software Development Engineer for Test,SDET),成為全球為數不多的測試大軍團,因此,那個時代微軟是許多公司的測試標杆,大家學習微軟如何做測試,參加由微軟資深人士開設的培訓講座。那個時候,我們曾經親身經歷的專案,開發人員所做的測試很少,更多的測試是由專業的測試團隊完成。即使大家都認為“單元測試應該是由開發人員來做”,單元測試的覆蓋率也非常低,其效果依舊不理想,可圈可點的專案很少。 不少專案推行過開發者測試,成功者寥寥,甚至個別專案想擺脫獨立的測試團隊就直接上線,結果也是鎩羽而歸。

然而,最近幾年敏捷開發席捲而來,到處開花結果,所有開發者越來越關注質量,開始做越來越多的測試。微軟測試軍團從2010年開始瓦解,到2014年煙消雲散,絕大多數的SDET快速融入開發團隊之中,成為開發工程師的一員,而剩餘的SDET要麼改行,去幹運維、技術支援等工作,要麼辭職,去其他公司繼續專職的測試工作。今天,Google、Facebook等公司成為新的標杆,人們開始推崇非常簡單的工程師文化、推崇開發與測試的融合。在這樣的環境下,開發人員不僅需要完成程式碼,還需要全力保證程式碼的質量,要求開發人員做足夠的測試。但是,開發人員不是天生下來就會做測試,測試能力還比較弱,甚至有些開發人員在今天敏捷開發的環境下,依舊排斥測試,開發者測試在國內不容樂觀,這裡面有客觀因素,也有主觀因素,但無論如何需要改變。

如果按照過去那種瀑布模型做測試,先開發,後測試,開發人員會遇到心理上、思維上的障礙。而從理論上看,測試驅動開發(TDD)則徹底解決了這個問題,因為測試在前,開發在後。在開發前,測試的思維不會受到實現思維的影響;實現的程式碼還沒有,自然也不存在心理上的障礙。理想很豐滿,現實很骨感,TDD的應用還是鳳毛麟角,因為TDD的具體實施會面對各種困難,如給開發人員帶來額外的工作量、如何擺脫過去寫程式碼的習慣等。例如,在TDD實施時,我們經常能夠聽到開發人員說,“再給我加一倍的時間”。由於增加較大的工作量,在進度壓力下就很難實施TDD,或者說,許多團隊不知如何實施TDD,如何更高效地完成軟體的開發且提高質量,不僅讓客戶滿意,而且也帶來生產力。如果管理層有堅定的決心,並敢於在組織、流程、策略上做出相應的改變,TDD可以帶來“質量”和“生產力”的雙收益,不靠事後檢驗,可以大大降低質量劣化帶來的成本。

開發者測試不僅僅侷限在TDD、單元測試和整合測試,元件之間的互動性測試、呼叫系統進行更高層次的測試也會出現在開發者測試中,開發者測試也不僅僅使用測試技術,可測試性、依賴關係、複用和契約式程式設計、防禦式程式設計等以構建高質量的程式碼為目的的技術也與開發者測試息息相關。測試不能真正保證質量,軟體質量是在設計、程式設計過程中慢慢形成的。從這個角度看,開發者測試更為重要,在開始構造功能時就要思考怎麼測試它,相對於找到程式碼錯誤,他們更關注於如何避免錯誤。在成功的團隊中,團隊的每個成員都擁有這樣的理念:構建高質量的軟體(正是本書的副標題)。他們與客戶、交付團隊協作,試圖理解什麼才能幫助客戶獲得成功,如何找到最有效、最簡單的解決方案。這本書正是從這個角度展開討論,以幫助開發人員正確地理解和掌握開發者測試,解決開發人員從準單元測試開始,到測試替身、模擬框架、不同的TDD模式等測試中遇到的各種障礙。本書還有其他一些特點,下面就讓我們逐一介紹。

首先,這不是“測試專家寫的開發者測試”,而是“開發專家寫的開發者測試”。書中並沒有花太多篇幅介紹測試的概念、測試設計技術、單元測試工具(這些可能是我們之前推行開發者測試的重點),而是把重心放在了可測試性、影響測試的編碼風格、實現開發者測試的方式、測試環境和條件的構造、開發者測試在全部測試活動中的位置和作用等方面(這些是真正影響開發者測試效率的問題)。因此,這本書對於開發人員具有很好的實用價值。

其次,這本書不是一座“大山”,而是若干“甜點”組成,除了前3章介紹測試的基本概念和術語,其他各章相對獨立,一章基本是一個主題,闡述開發者測試所遇到的問題、解決方法、注意事項等。即使隔了很長時間我們才讀另一章,或者跳過沒有興趣的個別章節,也完全不影響我們閱讀的體驗或收穫。“甜點”還隱藏在每一章中——每章穿插著一些“小竅門”“經驗之談”或“注意事項”等,點撥讀者,讀者獲得啟發或警醒。

再者,本書例項豐富,循序漸進,例如14.1 節就用了“一個簡單的搜尋引擎”的8個例項,一步一步地介紹經典風格的TDD是如何實施的。本書的內容安排得當,有主有次,主次分明,例如許多測試書籍都有“基於需求的測試方法”的詳細介紹,本書則用較少篇幅快速帶過。而對於重點內容,如可測試性、Mock技術和TDD,分別用了兩章闡述其不同的方面。在Mock技術中,逐一介紹瞭如何應用不同的Mock物件——樁物件、偽物件、模擬物件、監聽器、啞物件,更體現其專業水準。

最後,這本書中的開發者測試不是“孤立”的,而是“在上下文中”的(上下文是軟體工程中最重要的概念之一)。書中將開發人員與測試人員放在一個場景中,讓讀者更好地理解問題發生的前因後果。將問題放在程式碼中(很多還是來自於實際產品的程式碼),方便讀者對映到自己的產品和程式碼中,並設想解決問題的方法是否適合自己,留給讀者更大的思考空間。將測試活動放在實際的研發專案中,單元測試和模組整合、獨立模組測試的區別並不那麼明顯,書中也不迴避這些現實問題,而是幫助讀者看到這些測試的真正過程,使讀者可以根據專案的具體情況做出策略選擇。

我們非常高興參與本書的翻譯,翻譯過程雖然很辛苦,但也是快樂的學習過程,能解開我們對開發者測試的一些疑惑。唯一的遺憾是,相見恨晩矣!如果早幾年讀到此書,在之前的工作中,很多事情會有更好的方式做,比如TDD、單元測試,比如程式碼質量檢測、敏捷一體化團隊……相信本書對開發者們會有更大的幫助,會逐步提升開發者的測試能力。開發者測試做好了,在未來交付專案程式碼時,會感到很輕鬆,會更加充滿自信。

《程式開發人員測試指南:構建高質量的軟體》

《程式開發人員測試指南:構建高質量的軟體》

【瑞典】亞歷山大.塔林德 著 

點選封面購買紙書


第一本面向開發人員的、編寫可測試的程式碼、避免缺陷,提高軟體質量的測試書,測試專家朱少民、楊曉慧、歐陽辰、曾樂天翻譯並推薦。

在本書中,亞歷山大首先展示了那些需要關注的測試。他介紹了一些被人們忽視但很實用的觀念,例如契約式程式設計(Programming By Contract)。他教會我們如何設計出容易被測試的程式碼。他強調了兩個我喜歡的目標:

構建具有高可讀性的、基於規格說明的測試,依舊保持文件的價值;

消滅高質量系統的最大敵人之一——各種壞味道的複製。

他通過實用的、平衡的方法做好TDD,並呈現了傳統的TDD和Mockist TDD的應用技巧,從而向我們全面介紹了單元測試的內容

本書講解了開發人員需要了解的測試技術,以便幫助他們建設高質量的軟體,講解了如何編寫測試程式碼、如何進行單元測試、重構測試驅動的開發等實戰技術。幫助讀者快速吸收的關鍵測試概念,以及在編寫測試用例時需要重點掌握的技術和不可不知的方法。也包括需要學習的測試平臺或工具。本書作者也回答了有關開發團隊常常在測試中遇到的許多問題,包括:什麼是程式碼測試? 什麼使得它難以測試? 什麼時候進行足夠的測試等。


今日互動

你覺得開發人員需要測試技巧?為什麼?截止時間5月11日17時,留言+轉發本活動到朋友圈,小編將抽獎選出3名讀者贈送紙書1本和2張e讀版100元非同步社群代金券,(留言點贊最多的自動獲得一張)。非同步圖書後臺回覆“5月新書”進入新書交流群,獲得第一手新書資訊,點選此處直達活動

推薦閱讀

2018年4月新書書單

2018年5月新書書單(文末福利)

非同步圖書最全Python書單

一份程式設計師必備的演算法書單

第一本Python神經網路程式設計圖書

​長按二維碼,可以關注我們喲

每天與你分享IT好文。


在“非同步圖書”後臺回覆“關注”,即可免費獲得2000門線上視訊課程;推薦朋友關注根據提示獲取贈書連結,免費得非同步e讀版圖書一本。趕緊來參加哦!


點選閱讀原文,購買《程式開發人員測試指南 構建高質量的軟體》

閱讀原文

相關文章