原創(chuàng)|使用教程|編輯:況魚杰|2020-12-01 13:43:38.200|閱讀 387 次
概述:如何在你的組織中成功地推出TDD呢?我們將在這里探討這個(gè)問題,其中會(huì)有一些提示,讓你最大限度地發(fā)揮采用TDD的好處。
# 界面/圖表報(bào)表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關(guān)鏈接:
如何在你的組織中成功推廣TDD?在這篇博客中:最大限度地提高采用TDD的好處的提示,以及對TDD采用的光譜的探索,從純粹的到TDD式的。
測試驅(qū)動(dòng)開發(fā)(TDD)是關(guān)于編寫精簡和吝嗇的代碼,并具有高水平的測試覆蓋率。開發(fā)人員在寫代碼之前,先針對需求寫出測試,只要測試通過,代碼就被認(rèn)為是完成了。聽起來很不錯(cuò),但是如何在你的組織中成功地推出TDD呢?我們將在這里探討這個(gè)問題,其中會(huì)有一些提示,讓你最大限度地發(fā)揮采用TDD的好處。
TDD的主要好處是幫助開發(fā)人員創(chuàng)建可維護(hù)和可測試的代碼。TDD還可以通過確保創(chuàng)建實(shí)現(xiàn)功能所需的最低限度的代碼來防止功能爬升和代碼的 "鍍金"。驗(yàn)證正在編寫的代碼是否正確,也使團(tuán)隊(duì)更加高效,避免將寶貴的開發(fā)資源浪費(fèi)在構(gòu)建錯(cuò)誤的功能上。
遵循TDD在組織內(nèi)部強(qiáng)制執(zhí)行單元測試作為一種實(shí)踐。但這不是為了單元測試而單元測試。它是一種確保你正在創(chuàng)建可測試代碼的方法,幫助你降低維護(hù)成本并保持技術(shù)債務(wù)的低水平。通過確保你有一個(gè)堅(jiān)實(shí)的回歸套件,當(dāng)一些東西因代碼更改而中斷時(shí),你會(huì)立即得到通知。
對TDD的興趣越來越大的一個(gè)重要原因是,許多組織正在向敏捷開發(fā)實(shí)踐過渡,并意識(shí)到他們現(xiàn)有的測試實(shí)踐過于依賴周期末的手動(dòng)測試。端到端測試實(shí)踐當(dāng)然有一席之地,但為了以保持競爭力所需的速度擴(kuò)展開發(fā)創(chuàng)新,組織必須將測試工作左移。TDD是一個(gè)過程,它完全可以保證你在開發(fā)項(xiàng)目開始時(shí)有一個(gè)健康的測試基礎(chǔ),以確保整個(gè)開發(fā)生命周期的軟件質(zhì)量。
就實(shí)際目的而言,很少有人開發(fā)軟件時(shí)遵循TDD的純粹愿景,原因有幾個(gè)。現(xiàn)代軟件開發(fā)通常涉及整合庫、連接遺留代碼和擴(kuò)展現(xiàn)有功能。很多人并不奢望編寫全新的代碼,所以純TDD在很多情況下并不實(shí)用。相反,許多 "做TDD "的人坐在類似這樣的光譜上。
雖然每個(gè)組織在TDD方面都有自己的一套具體挑戰(zhàn),但從客戶那里聽到最多的問題符合上述三種基本類型。但在這個(gè)范圍內(nèi),TDD從業(yè)者有很多類型。
在光譜的一端,是那些成功實(shí)踐TDD的 "黑帶 "級別的人。這些人完全致力于TDD原則,在寫測試之前不寫任何東西--沒有骨架,沒有定義,沒有任何東西--只要測試通過就結(jié)束了。因此,代碼效率高,可維護(hù)性強(qiáng)。當(dāng)人們與TDD Ninjas交談時(shí),他們經(jīng)常承認(rèn),他們在組織內(nèi)部各團(tuán)隊(duì)實(shí)施TDD的成功率是不均衡的。
接下來的人可能會(huì)設(shè)計(jì)類、方法簽名等,然后針對這些定義編寫測試。在API層面,這相當(dāng)于編寫OpenAPI/Swagger或WSDL定義。我們稱之為TDD的實(shí)用主義方法。
這種方法更容易采用,因?yàn)樗峁┝烁嗟慕Y(jié)構(gòu)和更清晰的內(nèi)容。所有的東西都是編譯的,這樣一個(gè)小隊(duì)就可以更容易地一起工作。然而,潛在的權(quán)衡是,TDD實(shí)用主義者可能并不總是能實(shí)現(xiàn)TDD忍者所實(shí)現(xiàn)的高效率、最小化的代碼設(shè)計(jì)。
有很多人很想完全投入到TDD中去,但又不舍得從綠地代碼開始。這些人經(jīng)常創(chuàng)建測試來重現(xiàn)缺陷,或者測試預(yù)期的行為,以便基于遺留代碼改變或擴(kuò)展現(xiàn)有功能。
在那些自認(rèn)為是TDD實(shí)踐者的人中,有很大一部分人處于或接近這個(gè)譜系中的這一點(diǎn)。其邏輯是,雖然測試和代碼是密不可分的,但測試并不一定先于代碼。然而,測試確實(shí)先于代碼的修改。
TDD的另一端,是測試和代碼并行的人。對于TDD式的從業(yè)者來說,只要測試和代碼一起投入和管理,就認(rèn)為開發(fā)是由測試驅(qū)動(dòng)的。
那么如何成功采用TDD呢?按照下面的四個(gè)技巧來實(shí)現(xiàn)TDD的成功。
當(dāng)一個(gè)組織繼承了不可測試的代碼,而它又沒有能力償還技術(shù)債務(wù)時(shí),一個(gè)常見的TDD實(shí)現(xiàn)問題再次出現(xiàn)。是否應(yīng)該對代碼進(jìn)行重構(gòu)?如果是的話,需要多少重構(gòu)才能以有意義的、可實(shí)現(xiàn)的方式開始實(shí)踐TDD?
如果有任務(wù)開始在遺留代碼上做TDD,那么試圖實(shí)現(xiàn)理想的TDD是行不通的。你所繼承的代碼并沒有考慮到可測試性,原作者可能已經(jīng)不在團(tuán)隊(duì)甚至不在組織中,依賴的庫可能已經(jīng)發(fā)生了變化,等等。
所以,如果遺留代碼已經(jīng)在那里工作了,相對于新的未經(jīng)測試的工作的風(fēng)險(xiǎn),技術(shù)債務(wù)帶來的風(fēng)險(xiǎn)是很低的。通過將TDD應(yīng)用于你正在編寫的新代碼,即對現(xiàn)有代碼的修改,你可以將風(fēng)險(xiǎn)降到最低,并且不會(huì)增加技術(shù)債務(wù)。
為了克服測試現(xiàn)有代碼的挑戰(zhàn),您可以使用Parasoft Jtest的單元測試功能來快速創(chuàng)建有意義的測試。Parasoft Jtest可以分析遺留代碼及其依賴關(guān)系,減少創(chuàng)建JUnit測試用例和實(shí)現(xiàn)現(xiàn)有代碼所需的復(fù)雜存根/對接的時(shí)間。
基于微服務(wù)的架構(gòu)比傳統(tǒng)的應(yīng)用堆棧具有更多的依賴性和復(fù)雜性,將更多的不穩(wěn)定性引入到測試環(huán)境中。由于需要先進(jìn)的嘲諷和存根,為基于微服務(wù)和其他復(fù)雜架構(gòu)的應(yīng)用程序創(chuàng)建測試可能是困難的。
然而,基于微服務(wù)的架構(gòu)提供了以非常有效的方式利用TDD最佳實(shí)踐的機(jī)會(huì)。如果你把微服務(wù)視為單元,而不是編譯單元,那么TDD實(shí)用主義方法就會(huì)變得非常有用。
當(dāng)在API層面應(yīng)用TDD時(shí),你的API是在合同(OpenAPI/Swagger,WSDL)中定義的。API測試解決方案,如Parasoft SOAtest,就可以根據(jù)這些定義自動(dòng)創(chuàng)建測試。然后只需要準(zhǔn)備好根據(jù)定義開發(fā)功能,直到SOAtest測試通過。
TDD通常被視為以開發(fā)人員為中心的活動(dòng),通常通過在單元測試框架(如JUnit或NUnit)中創(chuàng)建測試來封裝。然而,大多數(shù)組織根本沒有足夠的開發(fā)人員或時(shí)間來覆蓋所有的用例。這對于那些對其項(xiàng)目有多種角色和技能貢獻(xiàn)的企業(yè)組織來說,尤其是一個(gè)問題。
如上文所述,在API層面利用TDD實(shí)踐來處理微服務(wù),可以幫助您解決技術(shù)資源有限的問題,使您能夠利用測試人員的專業(yè)知識(shí)來根據(jù)合同定義測試。通過這種方法,業(yè)務(wù)分析師、測試人員和其他非開發(fā)人員資源能夠?yàn)門DD測試工作做出貢獻(xiàn)。
您也可以使用服務(wù)虛擬化解決方案,如Parasoft Virtualize,來立即創(chuàng)建模擬功能,您可以在編寫任何代碼之前,針對這些功能構(gòu)建和執(zhí)行測試。
實(shí)現(xiàn)TDD有幾個(gè)好處,但TDD本身并不一定能轉(zhuǎn)化為符合需求的代碼。它只是確保代碼被測試所覆蓋,并且測試通過。這就是行為驅(qū)動(dòng)開發(fā)(BDD)的作用。開發(fā)者不是在測試通過之前寫代碼,而是在行為實(shí)現(xiàn)之前寫代碼。
值得指出的是,過去曾有人試圖在編寫代碼之前定義功能框架。有誰還記得按合同設(shè)計(jì)(DbC)嗎?事實(shí)上,BDD是實(shí)現(xiàn)這種方法的最新嘗試。在BDD(或DbC)中,在創(chuàng)建測試或代碼之前,必須先定義前和后條件。BDD代表著將TDD提升到一個(gè)新的水平的機(jī)會(huì)。如果你使用的是BDD語言,如Gherkin,你可以擴(kuò)展自動(dòng)化測試。而Parasoft SOAtest(用于API測試)和Parasoft Selenic(用于Selenium驅(qū)動(dòng)的UI測試)可以降低編寫必要的膠合代碼和步驟定義的技術(shù)復(fù)雜性,而這通常需要開發(fā)人員資源。
測試驅(qū)動(dòng)開發(fā)的承諾是基于精益開發(fā)理念的。它旨在幫助你生成高效、可測試、可維護(hù)的代碼。但現(xiàn)實(shí)世界的條件并不總是讓TDD的采用變得容易。 可以幫助您以一種對您的組織來說實(shí)用的方式采用 TDD 實(shí)踐,使您能夠最大限度地利用您的開發(fā)/測試資源。聯(lián)系在線客服,了解如何幫助您在組織中實(shí)施TDD的詳情。
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請郵件反饋至chenjj@fc6vip.cn