軟件開發過程有一個很天然的比喻:建樓房,要畫圖紙、搭架構、砌磚頭。這個比喻大致說得過去,問題是,這個「磚頭」絕非普通的磚頭,具備如下特性:程序員
1、每一塊都由手工製做;編程
2、每一塊的材質、形狀、尺寸都不一樣;架構
3、任何一塊有問題,在某種天氣下,房子會漏水;若是1%甚至1‰的磚頭有問題,房子會處處漏水;更嚴重的是,一塊或多塊磚頭有問題,還可能形成房子在某些時間倒塌。ide
正是由於「磚頭」的上述特性,因此存在兩個80%:軟件的質量,80%依賴於代碼;軟件的開發成本,80%用於編寫合格代碼,請注意,是「合格代碼」,不是「代碼」,後期的測試和排錯,也是編寫「合格代碼」的組成部分。即便兩個80%不許確,改成70%,甚至60%,決定軟件質量和開發成本的大頭,也仍然是編碼。不重視編碼過程的改進,提高質量和產能就失去了最主要的着力點,必然會感受什麼措施都效果不明顯。工具
若是建樓房的磚頭也具備上述特性,相信任何一個建築商,都會絞盡腦汁,找出一次性作出合格磚頭的辦法,而不是等到樓房建起來再查找和修補有問題的磚頭。單元測試
軟件開發,有沒有一次性編寫合格代碼的方法?有,例如TDD。TDD是敏捷開發的核心實踐之一, Ruby On Rails的創始人DavidHeinemeier曾說,當年它打開了一扇門,讓本身看到了高質量代碼的全新世界。測試
然而,TDD太難了,並且爲了解決可測性問題,須要作不少額外工做,例如爲了支持Mock而作的不少重構。David Heinemeier近日發表了一篇文章:《TDD已死,測試永生》,痛批TDD過於偏重單元測試,過於瑣碎,會使系統同許多中間層、中間對象組成,帶來複雜臃腫的架構。他明確聲明本身將放棄TDD。編碼
若是對TDD進行改進,消滅它的主要成本,並放大它的效益,就獲得了一個大幅提高代碼質量、大量下降開發成本的開發方式,這種開發方式,就是easy TDD,簡稱eTDD。.net
eTDD如何作到消滅TDD的主要成本、放大TDD的效益呢?答案是利用工具:由工具完成苦活、髒活、重活;由工具描述程序行實現可視編程。對象
苦活、髒活、重活包括:編寫測試驅動、編寫樁代碼、編寫Mock、覆蓋統計、找出遺漏用例、編寫測試報告,並避免僅僅爲了單元測試而作的重構,總之一句話:除了測試數據須要人工設定外,其餘都由工具完成,這樣,就消滅了TDD的主要成本。
可視編程則顯著放大TDD的效益。可視編程就是編寫代碼時,能夠隨時察看程序行爲。程序行爲,就是在什麼輸入下,會執行哪些代碼,會產生什麼輸出。單元測試的輸出能夠完整描述程序行爲,使程序行爲可視,這是極寶貴資源,TDD忽略了這一點,甚爲惋惜。利用可視編程,程序員寫幾行代碼,就能夠看看程序會作什麼,從而驗證思路、發現錯誤、激發靈感。對於比較複雜的程序,用可視編程編寫合格代碼的效率,是傳統方式的四、5倍,同時,還能下降編程的勞動強度,保護程序員的健康。
人類生產力的提高,絕大多數依賴工具的進步,軟件開發也不例外。編程是高技術工做,人才成本很高,並且會愈來愈高,一名月薪1萬的程序員,公司要付出的實際成本爲1.5萬至2萬,折算成小時成本,大概是100元,即手工編寫測試代碼,1小時要付出100元,而這種工做徹底能夠由工具代勞。eTDD將麻煩的事情交給工具,避免了以手工爲主的TDD所產生的高成本,更重要的是,eTDD簡單易行,不用考慮讓人頭疼的「可測性」問題,由於解決可測性問題,是eTDD工具的基本功能。eTDD能夠在項目週期的任意時段引入,還能夠部分引入,例如,只對較底層或較重要的代碼使用eTDD。總之,只要使用合適的工具,eTDD很容易實施,效果立竿見影。
eTDD與傳統方式對比實驗,以及實際開發任務實驗,能夠證實:eTDD使編程產能翻二番,固然,這是指單純編寫合格代碼的產能。除了編寫代碼,程序員的工做還包括:對技術難點的研究、查閱文檔、溝通、開會、寫文檔、發呆等等,這些時間,eTDD固然不能產生做用。通常來講,若是沒有大規模的需求變動,eTDD縮短開發週期30%是能夠預期的。這裏說的開發週期並非「計劃」週期,而是「實際」週期,例如,計劃三個月完成的項目,實際週期每每是六個月,若是用eTDD,則能夠四個月完成。縮短開發週期只是eTDD的次要效益,eTDD的首要效益,是保證代碼質量。
關於eTDD的更詳細信息,請下載瀏覽eTDD電子書:
PDF格式CSDN下載:http://download.csdn.net/detail/dellfox/7313953
PDF格式:http://www.kailesoft.com/download/eTDD_pdf.rar
Word格式:http://www.kailesoft.com/download/eTDD_word.rar
電子書內容包括:eTDD概念、過程、示例、關鍵技術、實驗過程與結果、效益分析。若是對eTDD的效益有所懷疑,還能夠依照電子書中的說明,親自進行小實驗或實際任務實驗。