測(cè)試金字塔的奧秘和數(shù)學(xué)


它可能被稱(chēng)為“測(cè)試自動(dòng)化金字塔”,但在大多數(shù)情況下看起來(lái)都像三角形一樣可怕。如果使用吉薩大金字塔的尺寸和本文中討論的數(shù)學(xué)方程式,您將最終對(duì)測(cè)試金字塔的每一層的作用和依賴(lài)性以及建立牢固基礎(chǔ)的重要性有更深入的了解。

通過(guò)將自動(dòng)測(cè)試金字塔視為一個(gè)三角形,我們可以使用幾何和三角元素查找每個(gè)級(jí)別的大小。為了弄清楚這一點(diǎn),我們首先將金字塔分解成3個(gè)獨(dú)立的三角形。我們將確定每個(gè)三角形的面積,然后使用切片技術(shù)確定每個(gè)級(jí)別的大小。

我們需要做的第一步是使用來(lái)自吉薩大金字塔的這些尺寸來(lái)找到三角形的總面積:


使用這些尺寸,我們可以找到組成金字塔一側(cè)的三角形的總面積。
面積=?(230 * 147)≈16905從頂部(UI級(jí)別)開(kāi)始,我們可以找出每個(gè)級(jí)別的大小以及它所占整個(gè)金字塔的百分比。

將大金字塔的高度平均分為3個(gè)部分,這意味著我們的頂部UI層高49米。現(xiàn)在,我們可以使用一些三角函數(shù)和勾股定理來(lái)查找該三角形的區(qū)域,以查看所涉及的數(shù)學(xué)細(xì)節(jié)。
通過(guò)數(shù)學(xué)運(yùn)算,我們發(fā)現(xiàn)金字塔的UI層的面積為1909.4,約占金字塔總數(shù)的11%。

使用相同的過(guò)程找到中間層的面積,我們發(fā)現(xiàn)金字塔的服務(wù)層為5726.76,約占金字塔總數(shù)的33%。


為了找到單位層的面積,我們從測(cè)試金字塔的總面積中減去服務(wù)和UI層的總面積
16905-5726.76-1909.4 = 9268.84
金字塔的單位層約占金字塔總數(shù)的56%。



您可能會(huì)發(fā)現(xiàn)一些測(cè)試金字塔有3層以上。為了了解更多層如何影響UI測(cè)試應(yīng)該在您的測(cè)試策略中表示的數(shù)量。對(duì)4個(gè)和5個(gè)相等的圖層使用相同的數(shù)學(xué)過(guò)程的結(jié)果如下:

由于F層的不同三角形類(lèi)型之間始終只有很小的變化,因此基于基于大金字塔的三角形的四舍五入結(jié)果得出結(jié)論似乎很安全。



人們了解金字塔的頂部和底部。我們可以同意什么是單元測(cè)試,而我們大多數(shù)可以同意什么是UI或端到端測(cè)試。
中間部分是測(cè)試類(lèi)型和所引用測(cè)試的基礎(chǔ)定義上肯定有更多差異的地方。如果我們將3層,4層和5層測(cè)試自動(dòng)化金字塔的數(shù)字合并為單位,UI和介于兩者之間的東西的三個(gè)范圍,我們可以開(kāi)始看到一個(gè)有用的指標(biāo)。

單元測(cè)試有很多好處;它是眾所周知的測(cè)試自動(dòng)化工作的基礎(chǔ)。數(shù)字證明了這一點(diǎn),表明36-55%的測(cè)試自動(dòng)化應(yīng)該在單元級(jí)別。
但是,數(shù)字還突出表明,“膠粘中心”(即許多人通常不確定的服務(wù)水平)應(yīng)該是測(cè)試自動(dòng)化的33-60%。該數(shù)量大致等于或可能大于單元測(cè)試水平。
對(duì)于UI級(jí)別,這剩下4-11%的測(cè)試自動(dòng)化。如果UI級(jí)別占測(cè)試自動(dòng)化的4-11%,并且這些數(shù)字告訴我們,單元和服務(wù)級(jí)別測(cè)試的大小通常相等,則基于測(cè)試金字塔的測(cè)試自動(dòng)化的合理分布將大致為:

將其付諸實(shí)踐時(shí),這些百分比實(shí)際代表什么?對(duì)于我們一直使用的三角形,單位長(zhǎng)度以米為單位,面積為平方米。什么是測(cè)試自動(dòng)化有用的單位?


我敢打賭,“測(cè)試的數(shù)量”就是您的想法。這可能是大多數(shù)人在看測(cè)試自動(dòng)化金字塔時(shí)所想到的。即使不進(jìn)行所有數(shù)學(xué)運(yùn)算,您也可以從視覺(jué)上得出這樣的想法:隨著您在金字塔中向上移動(dòng),測(cè)試次數(shù)應(yīng)該越來(lái)越少。
從技術(shù)上講,這意味著每添加100個(gè)測(cè)試,您應(yīng)該有大約45-48個(gè)單元測(cè)試,45-48個(gè)服務(wù)測(cè)試以及4-11個(gè)UI /端到端測(cè)試??紤]一下。這如何適合您的思維模式或團(tuán)隊(duì)中的當(dāng)前實(shí)踐?
在UI級(jí)別看到過(guò)度測(cè)試是很常見(jiàn)的。實(shí)際上,這可能是人們實(shí)際引用測(cè)試自動(dòng)化金字塔的主要原因之一。我們知道UI測(cè)試很昂貴,而且通常很脆弱或易碎。數(shù)字還突出顯示,很有可能在單元級(jí)別進(jìn)行過(guò)度測(cè)試,而在服務(wù)級(jí)別進(jìn)行過(guò)度測(cè)試。
在單元級(jí)別進(jìn)行過(guò)度測(cè)試甚至更加容易。單元測(cè)試便宜,快速且可靠。許多團(tuán)隊(duì)經(jīng)常追求代碼覆蓋率指標(biāo)。發(fā)生這種情況時(shí),您可能不會(huì)感覺(jué)到在單元級(jí)別進(jìn)行過(guò)度測(cè)試的問(wèn)題,直到問(wèn)題可能變得更大為止。過(guò)去需要幾秒鐘或幾分鐘才能完成的構(gòu)建,最多要花費(fèi)30分鐘,一個(gè)小時(shí)甚至更長(zhǎng)的時(shí)間。當(dāng)小的更改或重構(gòu)導(dǎo)致花費(fèi)大量時(shí)間更新失敗的測(cè)試時(shí),它也可能使開(kāi)發(fā)人員感到沮喪。?
單元測(cè)試的質(zhì)量與UI級(jí)別的測(cè)試一樣重要。像Goldilocks和“三只熊”一樣,我們希望測(cè)試不要太大也不要太小,而恰恰是正確的。將更多的精力放在金字塔中間的測(cè)試上可以幫助實(shí)現(xiàn)這一目標(biāo)。


除了數(shù)量之外,一個(gè)相當(dāng)恒定的話(huà)題是應(yīng)該花多少時(shí)間進(jìn)行自動(dòng)化。
而不是測(cè)試數(shù)量,相反,如果測(cè)試自動(dòng)化金字塔能夠啟發(fā)團(tuán)隊(duì)在各個(gè)級(jí)別上花費(fèi)時(shí)間來(lái)編寫(xiě)和維護(hù)自動(dòng)化,該怎么辦?
對(duì)于給定的每周40小時(shí)工作時(shí)間,這將花費(fèi)大約18個(gè)小時(shí)來(lái)編寫(xiě)和維護(hù)單元級(jí)別測(cè)試,大約花費(fèi)18個(gè)小時(shí)來(lái)編寫(xiě)和維護(hù)服務(wù)級(jí)別測(cè)試,并且如果有足夠的數(shù)字,大約需要花費(fèi)4個(gè)小時(shí)來(lái)編寫(xiě)和維護(hù)UI級(jí)別測(cè)試。
一開(kāi)始聽(tīng)起來(lái)可能有點(diǎn)不對(duì)勁。但是,良好的開(kāi)發(fā)實(shí)踐將在添加,固定和重構(gòu)代碼時(shí)引起相當(dāng)一致的注意力和時(shí)間,以專(zhuān)門(mén)用于添加和維護(hù)測(cè)試。開(kāi)發(fā)人員花費(fèi)少于一半的時(shí)間參加單元測(cè)試和一些服務(wù)層測(cè)試聽(tīng)起來(lái)很合理。
假設(shè)團(tuán)隊(duì)中的QA或測(cè)試人員負(fù)責(zé)服務(wù)層測(cè)試和UI測(cè)試的某些部分,那么大約有四分之一到三分之一的時(shí)間專(zhuān)門(mén)用于自動(dòng)化。這可能很低,尤其是在團(tuán)隊(duì)不熟悉自動(dòng)化或項(xiàng)目剛剛開(kāi)始并且需要構(gòu)建一些框架或基礎(chǔ)結(jié)構(gòu)的情況下。一旦建立起來(lái),那段時(shí)間就變得很合理了。
通過(guò)將更多的精力放在服務(wù)層頻譜的高端測(cè)試上,并僅引入少數(shù)幾個(gè)端到端UI自動(dòng)化測(cè)試,您將獲得一組更健壯和可靠的測(cè)試。這種關(guān)注減少了支持和維護(hù)更高級(jí)別測(cè)試所需的時(shí)間,因?yàn)楦嗟臏y(cè)試成為無(wú)法承受的負(fù)擔(dān)。時(shí)間限制有助于指導(dǎo)我們僅允許在UI級(jí)別添加表征業(yè)務(wù)關(guān)鍵功能的測(cè)試。
編寫(xiě)自動(dòng)化可以提高生產(chǎn)率。必須花費(fèi)比這些數(shù)字所顯示的更多的時(shí)間可能表明存在著一些更深層次的問(wèn)題。
在應(yīng)用程序或代碼庫(kù)變得難以測(cè)試的情況下,團(tuán)隊(duì)?wèi)?yīng)承擔(dān)的某些技術(shù)債務(wù)嗎?測(cè)試基礎(chǔ)架構(gòu)是否存在缺陷,導(dǎo)致測(cè)試不可靠?在某些級(jí)別上測(cè)試太多了,和/或在其他級(jí)別上測(cè)試太少了嗎?
這可能是各種各樣的問(wèn)題,但是如果感覺(jué)需要花費(fèi)大量時(shí)間在自動(dòng)化上,則表明該團(tuán)隊(duì)可能需要退后一步。抓住機(jī)會(huì),以團(tuán)隊(duì)的形式聚在一起,詢(xún)問(wèn)為什么需要那么多時(shí)間,然后承認(rèn)并希望制定解決任何問(wèn)題的計(jì)劃。


與其專(zhuān)注于一個(gè)特定的指標(biāo)(例如多少測(cè)試或花費(fèi)多少時(shí)間用于測(cè)試自動(dòng)化),不如讓我們從沖刺計(jì)劃中抽出一頁(yè),看看這些數(shù)字類(lèi)似于在敏捷項(xiàng)目評(píng)估中使用故事點(diǎn)的方式。
故事點(diǎn)是一種無(wú)單位的度量,用于了解事物的相對(duì)大小。查看測(cè)試金字塔時(shí),您會(huì)對(duì)此有所了解。將頂層分配為任意大小,然后估計(jì)與此相對(duì)的其他各個(gè)級(jí)別的大小。?
通過(guò)將測(cè)試金字塔中的這些數(shù)字用作團(tuán)隊(duì)?wèi)?yīng)為自動(dòng)化所進(jìn)行的預(yù)期工作的啟發(fā),我們正在與如何估算功能工作保持一致。這并不是邀請(qǐng)您開(kāi)始單獨(dú)估算自動(dòng)化工作,而與功能工作分開(kāi)進(jìn)行。在估算工作量時(shí),您希望將任何自動(dòng)化工作都包括在估算中。取而代之的是,我們擁有的一種方法可以比較應(yīng)該在自動(dòng)化上共同花費(fèi)多少精力,這與團(tuán)隊(duì)已經(jīng)在評(píng)估工作的標(biāo)準(zhǔn)方式直接一致。
重要的是要記住將每個(gè)測(cè)試級(jí)別視為一個(gè)較大的整體的一部分,其中每一層都充當(dāng)其之上級(jí)別的基礎(chǔ)。較低級(jí)別的不穩(wěn)定和缺陷將破壞整個(gè)測(cè)試策略的完整性。我們完成的數(shù)學(xué)為相對(duì)比較提供了一個(gè)起點(diǎn),因此您可以開(kāi)始就團(tuán)隊(duì)中各個(gè)角色的測(cè)試策略進(jìn)行更深入的討論。



