自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

用不同的測(cè)試模型來(lái)構(gòu)建測(cè)試套件

譯文 精選
開發(fā) 開發(fā)工具
本文介紹了經(jīng)典的測(cè)試金字塔模型的構(gòu)成、用途、以及各個(gè)層面的特點(diǎn),也和你討論了測(cè)試獎(jiǎng)杯、測(cè)試矩陣模型的各自特點(diǎn)。

譯者 | 陳峻

審校 | 孫淑娟

2009年,Mike Cohn在他的Succeeding with Agile 一書中用金字塔來(lái)比喻軟件的測(cè)試模型。逐漸,該說(shuō)法流傳開來(lái),如今它已成為了業(yè)界的行業(yè)標(biāo)準(zhǔn)。

總的說(shuō)來(lái),測(cè)試金字塔能夠直觀地表示出測(cè)試的標(biāo)準(zhǔn)化邏輯結(jié)構(gòu)。它由如下三個(gè)不同的層次所組成:

金字塔的底部是單元測(cè)試。該單元實(shí)際上是一些小段的邏輯代碼。它們可以是函數(shù)、類、甚至是類中的方法。單元測(cè)試僅會(huì)檢查目標(biāo)單元的行為,是否符合開發(fā)人員的預(yù)期。開發(fā)人員可以通過(guò)編寫單元測(cè)試,在無(wú)需依賴任何其他組件、服務(wù)或UI的情況下,直接調(diào)用被測(cè)試代碼,進(jìn)而評(píng)估其輸出。

金字塔的中間層是集成測(cè)試,Mike在他的書中也稱為“服務(wù)測(cè)試”,其主要目的是測(cè)試系統(tǒng)的不同組件是如何協(xié)同工作的。例如,代碼中的模型是否可以正確地與數(shù)據(jù)庫(kù)交換數(shù)據(jù),或者某個(gè)方法是否可以從API中檢索到信息。同樣,集成測(cè)試不需要UI的交互,便可以直接調(diào)用接口處的代碼。

金字塔的頂層是端到端(end-to-end,E2E)測(cè)試,也稱為UI測(cè)試,E2E是從最直觀的角度進(jìn)行測(cè)試,即通過(guò)運(yùn)行應(yīng)用程序,來(lái)查看其效果。當(dāng)然,E2E測(cè)試并不一定需要人工去執(zhí)行,而可以完全依靠自動(dòng)化。E2E測(cè)試能夠模擬出每個(gè)用戶與應(yīng)該交互的動(dòng)作,例如:?jiǎn)螕舭粹o、輸入信息、以及捕獲UI的顯示內(nèi)容等。

可見,這三種類型的測(cè)試會(huì)涉及到不同的范疇:

單元測(cè)試,只能在最基本的層面上發(fā)現(xiàn)邏輯錯(cuò)誤。它們速度比較快,而且運(yùn)行時(shí)所需的資源也比較少。

集成測(cè)試,主要驗(yàn)證應(yīng)用服務(wù)和數(shù)據(jù)庫(kù),是否能與編寫的代碼和類進(jìn)行良好的系統(tǒng)化協(xié)同。他們只能在兩個(gè)或多個(gè)組件交互的接口處發(fā)現(xiàn)問(wèn)題。

E2E測(cè)試,關(guān)注能否啟動(dòng)的完整應(yīng)用程序。由于屬于最全面的測(cè)試類型,因此它在運(yùn)行時(shí)往往會(huì)耗費(fèi)最多的計(jì)算資源和時(shí)間。

1.測(cè)試金字塔的復(fù)雜性

在了解了測(cè)試金字塔的基本測(cè)試層次后,讓我們來(lái)討論一下每種測(cè)試的復(fù)雜性。單元測(cè)試由于比較簡(jiǎn)單,因此易于編寫和維護(hù)。雖然它們僅僅測(cè)試的是非常狹窄的代碼部分,但是卻經(jīng)常被使用到。我們往往可以在幾秒鐘內(nèi)運(yùn)行數(shù)千個(gè)單元測(cè)試。

集成測(cè)試在復(fù)雜性、以及數(shù)量級(jí)上與單元測(cè)試差不多,畢竟我們只對(duì)待測(cè)應(yīng)用程序的“邊界”部分感興趣。不過(guò),與單元測(cè)試相比,集成測(cè)試需要更多的資源才能運(yùn)行。

E2E測(cè)試則具有編寫復(fù)雜、難以維護(hù)、需要大量資源、并且運(yùn)行緩慢等特征。不過(guò),由于我們可以通過(guò)各種E2E測(cè)試工具來(lái)覆蓋更多的應(yīng)用程序,因此我們需要執(zhí)行的測(cè)試工作量并不大。

由金字塔的形狀可知,每一層次的寬度會(huì)與該層的測(cè)試量成正比。也就是說(shuō),端到端的測(cè)試量相對(duì)較少、而集成測(cè)試的數(shù)量不及單元測(cè)試那么多、那么廣。

如前所述,三類測(cè)試的復(fù)雜程度和代碼庫(kù)的覆蓋率都是逐層增加的。下圖展示了各種測(cè)試在編寫、運(yùn)行和維護(hù)方面的工作量比例。據(jù)此,您可以最大限度地利用更少的工作,找到更多的缺陷與錯(cuò)誤。

2.如何給測(cè)試金字塔符能

在項(xiàng)目伊始時(shí)編寫E2E測(cè)試往往極富挑戰(zhàn)性。除非開發(fā)團(tuán)隊(duì)能夠采用BDD等框架,并從一開始就著手編寫驗(yàn)收測(cè)試(https://semaphoreci.com/blog/the-benefits-of-acceptance-testing),否則大多數(shù)E2E測(cè)試都將只能在基本原型、或最小可行產(chǎn)品就緒時(shí),才能被編寫。如下圖所示,開發(fā)人員在整個(gè)開發(fā)過(guò)程中,也會(huì)逐步增加單元測(cè)試與集成測(cè)試的編寫工作量。

讓我們?cè)賮?lái)看看測(cè)試的效率。眾所周知,緩慢的測(cè)試往往會(huì)拖慢生產(chǎn)環(huán)境所需的重要信息反饋。因此開發(fā)人員需要高效地運(yùn)行三種測(cè)試套件,以穩(wěn)定提升軟件質(zhì)量。

位于金字塔底部的單元測(cè)試具有最高的運(yùn)行效率,因此開發(fā)人員往往樂(lè)于編寫與使用。相反,鑒于復(fù)雜性,E2E測(cè)試的效率最低。一個(gè)大型的Web應(yīng)用程序往往需要進(jìn)行數(shù)千個(gè)單元測(cè)試、數(shù)百個(gè)集成測(cè)試、以及幾十個(gè)E2E測(cè)試。而它們的用時(shí),可以體現(xiàn)在下圖中:

3.使用測(cè)試獎(jiǎng)杯來(lái)測(cè)試前端

測(cè)試金字塔的歷史可以追溯到2009年。隨著技術(shù)的快速發(fā)展,人們?cè)趹?yīng)對(duì)不同的開發(fā)需求時(shí),也可能需要不同的測(cè)試模型。由Kent C. Dodds提出的測(cè)試獎(jiǎng)杯(https://twitter.com/kentcdodds/status/960723172591992832)就是一種針對(duì)前端開發(fā)所構(gòu)建的測(cè)試模型。

測(cè)試獎(jiǎng)杯重排了優(yōu)先級(jí)。它認(rèn)為由于大多數(shù)現(xiàn)代UI都會(huì)依賴于各種后端組件,而且難以開展單獨(dú)的測(cè)試,因此集成測(cè)試才是王道。

與金字塔相比,單元測(cè)試處于次要地位,而且可以被ESLint和JSHInt等靜態(tài)測(cè)試工具所取代。它們通過(guò)掃描代碼,便可發(fā)現(xiàn)諸如:使用了不安全的語(yǔ)句、或未遵守變量命名規(guī)則等潛在問(wèn)題。

獎(jiǎng)杯的頂端是E2E測(cè)試,它與在測(cè)試金字塔中的占比相似。

4.測(cè)試矩陣

在測(cè)試金字塔中,我們往往容易忽略測(cè)試結(jié)果可信度的問(wèn)題。也就是說(shuō),唯一可以真正驗(yàn)證應(yīng)用程序可行性的測(cè)試,只有E2E測(cè)試。通常,我們認(rèn)為開發(fā)人員投入在測(cè)試上(如E2E測(cè)試)的精力越多,測(cè)試結(jié)果的可信度就越高。對(duì)此,Gleb Bahmutov和Roman Sandler提出了測(cè)試矩陣(https://portal.gitnation.org/contents/testing-pyramid-makes-little-sense-what-we-can-use-instead)作為規(guī)劃測(cè)試相關(guān)策略時(shí)的工具。

如上圖矩陣所示,開發(fā)人員精力的投入是從左到右增加的,而可信度是從下到上上升的。顯然,最佳位置是在綠色區(qū)域。而大多數(shù)軟件項(xiàng)目都是從低投入和低可信度的黃色區(qū)域開始的。

隨著項(xiàng)目的成熟和新功能的添加,測(cè)試需求也會(huì)隨之處于熵增的狀態(tài)。倘若測(cè)試團(tuán)隊(duì)未能在測(cè)試方案上持續(xù)改進(jìn)和維護(hù),那么他們會(huì)很快滑到紅色區(qū)域。

對(duì)此,我們應(yīng)該如何以盡量少的投入,增加測(cè)試的可信度呢?我們需要定期重新評(píng)估如下五類與測(cè)試相關(guān)的方面:

安裝:包括安裝和設(shè)置測(cè)試框架所涉及的工作。

編寫:涉及到為給定框架編寫測(cè)試的復(fù)雜程度、以及開發(fā)人員的技能水平。

運(yùn)行:包括運(yùn)行測(cè)試套件的難度、以及CI/CD的性能。

調(diào)試:涉及到發(fā)生測(cè)試失敗時(shí),發(fā)現(xiàn)和修復(fù)問(wèn)題難易程度。

維護(hù):包含在項(xiàng)目的整個(gè)生命周期中,維護(hù)測(cè)試所耗費(fèi)的精力。

在該模型中,我們往往需要在項(xiàng)目的開端,給予單元測(cè)試一定的投入。不過(guò),一旦項(xiàng)目功能穩(wěn)定下來(lái),開發(fā)團(tuán)隊(duì)就需要通過(guò)添加更多的E2E測(cè)試、以及減少其他測(cè)試類別,來(lái)平衡組合測(cè)試。據(jù)此,測(cè)試有效性在穩(wěn)步增加的同時(shí),團(tuán)隊(duì)可以有條不紊地調(diào)整在不同類別上的投入。

5.謹(jǐn)防教條思維

由于速度、成本和維護(hù)問(wèn)題,金字塔在一定程度上限制了我們盡早地開展E2E測(cè)試。當(dāng)然,也有人認(rèn)為:鑒于端到端測(cè)試更接近于用戶的真實(shí)場(chǎng)景操作,團(tuán)隊(duì)可以通過(guò)應(yīng)用提供的公共界面予以開展。因此,如果您更改了后臺(tái)的實(shí)現(xiàn),甚至更換了整個(gè)后端的話,那么E2E測(cè)試不應(yīng)被推倒重來(lái),而只需沿用原有的測(cè)試案例,進(jìn)行測(cè)試微調(diào)便可。據(jù)此,其維護(hù)的工作量實(shí)際上也并非多得驚人。

當(dāng)然,每個(gè)團(tuán)隊(duì)、每個(gè)項(xiàng)目、以及每個(gè)組織都是不同的。而且隨著需求的變化,團(tuán)隊(duì)可能會(huì)需要通過(guò)重新決定或規(guī)范化測(cè)試套件,以靈活的方式停止現(xiàn)有的、或評(píng)估新的測(cè)試模型,按需進(jìn)行調(diào)整,以達(dá)到多快好省的測(cè)試效果。

6.小結(jié)

歷史悠久的測(cè)試金字塔模型,為整個(gè)測(cè)試領(lǐng)域樹立了一個(gè)典型的通用模型,方便大家參考與交流。當(dāng)然,隨著新技術(shù)、新實(shí)踐、以及新理念的出現(xiàn),各種不同的改進(jìn)模型也相繼出現(xiàn)。它們各有專攻,服務(wù)于特定的開發(fā)領(lǐng)域。其中不乏服務(wù)于CI/CD管道的自動(dòng)化測(cè)試套件??傊枰鶕?jù)自己的實(shí)際項(xiàng)目,來(lái)選擇最適合的測(cè)試套件。

原文標(biāo)題:https://dzone.com/articles/the-testing-pyramid-how-to-structure-your-test-sui

譯者介紹

陳峻 (Julian Chen),51CTO社區(qū)編輯,具有十多年的IT項(xiàng)目實(shí)施經(jīng)驗(yàn),善于對(duì)內(nèi)外部資源與風(fēng)險(xiǎn)實(shí)施管控,專注傳播網(wǎng)絡(luò)與信息安全知識(shí)與經(jīng)驗(yàn);持續(xù)以博文、專題和譯文等形式,分享前沿技術(shù)與新知;經(jīng)常以線上、線下等方式,開展信息安全類培訓(xùn)與授課。

責(zé)任編輯:武曉燕 來(lái)源: 51CTO技術(shù)棧
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)