閱讀有關(guān)TDD的任何提倡,它總是會(huì)歸結(jié)為進(jìn)行自我測(cè)試的論點(diǎn),沒有人反對(duì)。從來沒有理由在實(shí)現(xiàn)之前編寫測(cè)試。這里是執(zhí)行之前編寫測(cè)試沒有理由,所以測(cè)試驅(qū)動(dòng)開發(fā)從根本上就是錯(cuò)誤的,因?yàn)槭堑雇恕5搅?008年下半年,我正在為Windows 7任務(wù)欄編寫擴(kuò)展程序。我的工作基本上完成了,最終的應(yīng)用程序很小,只有幾屏代碼。我被指示為此編寫單元測(cè)試,以便經(jīng)理可以選中一個(gè)框。我拒絕了,因?yàn)樵擁?xiàng)目太小了,沒有任何單元,將其拆開以添加這些愚蠢的測(cè)試,將破壞已經(jīng)通過所有測(cè)試并準(zhǔn)備發(fā)布的工作的穩(wěn)定性。
隨著談話的惡化,我的經(jīng)理告訴我有關(guān)“測(cè)試驅(qū)動(dòng)開發(fā)”的新內(nèi)容,這時(shí)我確保有一條通向退出的明確道路,因?yàn)槲绎@然是在與瘋子交談。這是我第一次聽到教理。
測(cè)試全部通過后,您就完成了
我見過的每一個(gè)TDD倡導(dǎo)者都以同樣的空洞信念重復(fù)了這個(gè)逐字記錄。
設(shè)計(jì)總是在變化
當(dāng)時(shí)我有20多年的經(jīng)驗(yàn),我認(rèn)識(shí)到第一個(gè)明顯的缺陷。在編碼之前編寫測(cè)試是要記住一句古老的格言:沒有戰(zhàn)斗計(jì)劃能夠幸免于敵。我工作過的大多數(shù)地方都將軟件計(jì)劃視為浪費(fèi)時(shí)間。充其量是他們通過的動(dòng)作。
在Microsoft,我 多次受到徹底性的懲罰 ,尤其是編寫威脅模型時(shí)。但是,我總是從需求 和 功能規(guī)格入手來計(jì)劃工作,并且拒絕了那些不想花時(shí)間在編碼之前進(jìn)行設(shè)計(jì)的潛在客戶。
但是,即使是最徹底的計(jì)劃,也可能在啟動(dòng)實(shí)施后的幾天甚至數(shù)小時(shí)之內(nèi)顯示出意外的突發(fā)事件。客戶的設(shè)計(jì)總是比他們意識(shí)到的 還要模糊,即使我盡我所能地勤奮工作,也會(huì)有一些我沒有想到的事情。
因此,如果我遵循TDD架構(gòu),我將不得不不斷地回顧我的測(cè)試,復(fù)習(xí)所有測(cè)試,并根據(jù)我的發(fā)現(xiàn)修改它們。而且由于在工作完成或接近完成時(shí)編寫測(cè)試將包括我在實(shí)施過程中發(fā)現(xiàn)的所有內(nèi)容,因此事后編寫測(cè)試更加有意義。
當(dāng)然很有趣,一遍又一遍地重寫這些-照片由Elnur Amikishiyev
這是TDD對(duì)我來說的樣子:
1.編寫TDD測(cè)試
2.開始執(zhí)行
3.發(fā)現(xiàn)意想不到的考慮
4.重寫測(cè)試
5.繼續(xù)執(zhí)行
6.goto3一遍又一遍…
7.(實(shí)際上更像項(xiàng)目150)所有測(cè)試均通過
8.發(fā)送到質(zhì)量檢查
假設(shè),由于TDD,QA部門還沒有全部裁員。請(qǐng)注意,上述4在一個(gè)大型項(xiàng)目的過程中可能會(huì)發(fā)生數(shù)十次,并且每次重訪TDD測(cè)試都是 100%的浪費(fèi)時(shí)間。
老辦法更好
1.開始執(zhí)行
2.發(fā)現(xiàn)意外的問題并加以解決
3.在代碼完成時(shí)、編寫測(cè)試并運(yùn)行
4.修復(fù)所有錯(cuò)誤
5.發(fā)送到質(zhì)量檢查
通過這種方法,我在發(fā)現(xiàn)冒險(xiǎn)之旅之后編寫了測(cè)試,因此僅將測(cè)試寫到最終設(shè)計(jì)中,并且僅根據(jù)需求重新進(jìn)行測(cè)試。
(1)質(zhì)量檢查中發(fā)現(xiàn)的錯(cuò)誤
(2)新功能
(3)發(fā)布后發(fā)現(xiàn)的錯(cuò)誤
老鼠和男人等的最佳計(jì)劃。因?yàn)槲覀兌加小?/p>
盲區(qū)
這里的第二個(gè)問題是TDD假定開發(fā)人員應(yīng)該編寫自己的測(cè)試。 這太荒謬了。我已經(jīng)看過很多次了;該項(xiàng)目對(duì)我來說似乎很可靠,我無法打破它,但是其他人可以在不到一分鐘的時(shí)間內(nèi)打破它,為什么?
因?yàn)槲业脑O(shè)計(jì)中會(huì)出現(xiàn)同樣的盲點(diǎn)。
我的腦海只在這里盤旋。沒有人會(huì)怎么寫比“是-否”消息框更復(fù)雜的東西而不會(huì)遇到這種情況?解決此問題之前,無需編寫測(cè)試就可以了。無論我在實(shí)施之前還是之后編寫測(cè)試,都存在我沒有想到的情況,而這些情況不必是“極端情況”。每個(gè)人的工作都需要由其他人根據(jù)要求和功能規(guī)范進(jìn)行黑盒測(cè)試。
討論區(qū)
容易想到這樣的態(tài)度,即在TDD方案中浪費(fèi)時(shí)間重訪測(cè)試只是增加了收入;所以該項(xiàng)目需要20%到50%的時(shí)間,那又如何呢?我得到的報(bào)酬多20–50%。但是我不認(rèn)為這是道德的。坦率地說,這很無聊。
以上就是關(guān)于淺談測(cè)試驅(qū)動(dòng)開發(fā)究竟對(duì)不對(duì)的全內(nèi)容介紹,想了解更多關(guān)于軟件研發(fā)的信息,請(qǐng)繼續(xù)關(guān)注中培偉業(yè)。