當我談論TDD的時候德挣,我在談論什么?

最近機緣巧合快毛,又一次讀到好幾篇關于爭論TDD是否還活著格嗅,以及它到底好不好用的問題。似乎在幾年前DHH那篇檄文后唠帝,過一段時間就會聽到一次余響吗浩。
這也促使我對反思了一下自己對TDD是什么,TDD與Unit Test的關系没隘,TDD實用么等問題的看法懂扼。

TDD是什么

可以從它的名字切入:

  • Test —— 測試,可以不是單元測試右蒲,可以沒有一層層的mock阀湿,甚至可以不能作為程序執(zhí)行,不能自動判斷結(jié)果……
    但是有一條是測試的關鍵
    無二義的成功/失敗標準瑰妄。
    換句話說陷嘴,在給定的上下文中,測試要么成功间坐,要么失敗灾挨。且項目所有成員對此都有共識。
    缺少這點竹宋,測試就退化為寬泛的功能規(guī)范劳澄,接著就會出現(xiàn)“完成了80%”,“已經(jīng)開發(fā)完了蜈七,只需要調(diào)好一個bug”這樣的進度黑洞秒拔。
  • Driven —— 驅(qū)動有兩層含義,一個是嚴格意義上浮現(xiàn)式設計要求的寫測試之前不能寫生產(chǎn)代碼飒硅。如果說奧卡姆剃刀是“如無必要砂缩,勿增實體”那么TDD則是“如無測試作谚,勿增實體”。
    這一部分也許過于嚴格庵芭,有爭議妹懒。但是從另一方面來看Driven可以看作是對整個軟件發(fā)展過程提供保駕護航的作用。就像是司機替我們操心了交通情況双吆,我們就可以在上下班路上解放腦子刷刷朋友圈眨唬,讀讀書什么的。
    沒有Test提供的快速伊诵,持續(xù),統(tǒng)一的反饋回官,軟件的進展很容易就脫軌了曹宴。
    很多測試用例的要求和具體技術,其實都只是為了這種反饋的目的而設計的歉提。比如說UT和Mock笛坦,是為了測試更快速,而不是說這樣才是TDD苔巨。
  • Development —— 開發(fā)版扩,TDD是直接關于開發(fā)的,也就是說測試描述的行為要直接體現(xiàn)在可執(zhí)行的交付物中侄泽。
    這是我為什么不認同把ATDD與UTDD并舉的說法礁芦。驗收測試的循環(huán)中(ATDD)包含著非常多小的TDD循環(huán),就像是程序中的遞歸或者自相似的分形結(jié)構(gòu)一樣悼尾。
    ATDD是在單元的TDD基礎上的自然延伸柿扣,而不是割裂的另一個概念」胛海或者這樣說未状,一個小系統(tǒng)的ATDD,放到更大的范圍內(nèi)析桥,可能也只是系統(tǒng)的一顆螺絲釘而已司草。這時候莫不是要提出AATDD不成?

另一方面泡仗,這也是為什么我不理解TDD必須要xxx埋虹,yyy配合才能做成的說法。在我看來TDD是非趁湓酰基礎的實踐吨岭,是它給其它更高層面的技術和理念提供支持,而非相反峦树。
這就像如果沒有Git之類的版本管理工具辣辫,敏捷開發(fā)是不可想象的旦事。但是絕不是說,只有采用了敏捷方法才能用起來Git急灭。
TDD也是類似姐浮,歸根結(jié)底是一種更高效的寫代碼的技術。比如我就把TDD看作是一種主動debug的手段葬馋。它在這方面起到的作用也就和一個調(diào)試器這種工具差不多卖鲤。
是否使用某種工具,是否花時間來學習工具為將來提高效率畴嘶,應該是程序員為自己作出的決定蛋逾。

我的兩個標準

當然如果用了工具,有時結(jié)果也不理想窗悯。
那么有兩種可能区匣,要么這個工具不好用,或者至少對要解決的問題不好用蒋院。要么亏钩,使用者還沒有完全掌握用法。

我的兩個檢驗標準欺旧,來檢驗TDD是不是真的發(fā)揮了作用姑丑。

  • 團隊方面:
    • 團隊內(nèi)review代碼時,是先看測試還是先看實現(xiàn)代碼辞友?
    • 你的代碼寫好要和其他人對接時栅哀,他是跑來問你要文檔/要你口頭解釋,還是去看你的接口測試称龙?
  • 個人方面:
    你接手了一段遺留代碼要改一個bug昌屉,無文檔,無測試茵瀑,當初開發(fā)人員也走了间驮。
    你已經(jīng)跑起程序,重現(xiàn)出了bug马昨,并開始嘗試修改代碼調(diào)整程序行為竞帽。

這時你會情不自禁說出哪句話?

  • 算了太麻煩了鸿捧,不用寫測試了吧
  • 算了太麻煩了屹篓,還是先寫幾個測試吧
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市匙奴,隨后出現(xiàn)的幾起案子堆巧,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,188評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件谍肤,死亡現(xiàn)場離奇詭異啦租,居然都是意外死亡,警方通過查閱死者的電腦和手機荒揣,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,464評論 3 395
  • 文/潘曉璐 我一進店門篷角,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人系任,你說我怎么就攤上這事恳蹲。” “怎么了俩滥?”我有些...
    開封第一講書人閱讀 165,562評論 0 356
  • 文/不壞的土叔 我叫張陵嘉蕾,是天一觀的道長。 經(jīng)常有香客問我霜旧,道長错忱,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,893評論 1 295
  • 正文 為了忘掉前任颁糟,我火速辦了婚禮航背,結(jié)果婚禮上喉悴,老公的妹妹穿的比我還像新娘棱貌。我一直安慰自己,他們只是感情好箕肃,可當我...
    茶點故事閱讀 67,917評論 6 392
  • 文/花漫 我一把揭開白布婚脱。 她就那樣靜靜地躺著,像睡著了一般勺像。 火紅的嫁衣襯著肌膚如雪障贸。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,708評論 1 305
  • 那天吟宦,我揣著相機與錄音篮洁,去河邊找鬼。 笑死殃姓,一個胖子當著我的面吹牛袁波,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播蜗侈,決...
    沈念sama閱讀 40,430評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼篷牌,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了踏幻?” 一聲冷哼從身側(cè)響起枷颊,我...
    開封第一講書人閱讀 39,342評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后夭苗,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體信卡,經(jīng)...
    沈念sama閱讀 45,801評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,976評論 3 337
  • 正文 我和宋清朗相戀三年听诸,在試婚紗的時候發(fā)現(xiàn)自己被綠了坐求。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,115評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡晌梨,死狀恐怖桥嗤,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情仔蝌,我是刑警寧澤泛领,帶...
    沈念sama閱讀 35,804評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站敛惊,受9級特大地震影響渊鞋,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜瞧挤,卻給世界環(huán)境...
    茶點故事閱讀 41,458評論 3 331
  • 文/蒙蒙 一锡宋、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧特恬,春花似錦执俩、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,008評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至显拜,卻和暖如春衡奥,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背远荠。 一陣腳步聲響...
    開封第一講書人閱讀 33,135評論 1 272
  • 我被黑心中介騙來泰國打工矮固, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人譬淳。 一個月前我還...
    沈念sama閱讀 48,365評論 3 373
  • 正文 我出身青樓档址,卻偏偏與公主長得像,于是被迫代替她去往敵國和親瘦赫。 傳聞我的和親對象是個殘疾皇子辰晕,可洞房花燭夜當晚...
    茶點故事閱讀 45,055評論 2 355

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,180評論 25 707
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現(xiàn)确虱,斷路器含友,智...
    卡卡羅2017閱讀 134,665評論 18 139
  • 1.測試與軟件模型 軟件開發(fā)生命周期模型指的是軟件開發(fā)全過程、活動和任務的結(jié)構(gòu)性框架。軟件項目的開發(fā)包括:需求窘问、設...
    Mr希靈閱讀 21,961評論 7 278
  • 我記得上高中的時候辆童,大部分同學用的是按鍵型的諾基亞啊、htc啊惠赫、oppo啊之類的把鉴。也有幾個用的是觸屏的,那時候已經(jīng)...
    Nanguayaa閱讀 114評論 0 0
  • “娘...” 牧塵那顯得極為沙啞的聲音在這纖塵不染的竹屋內(nèi)傳蕩開來儿咱,然后讓得竹屋內(nèi)的兩人都是突然間安靜下來庭砍。 靈溪...
    混沌天書閱讀 512評論 0 0