? ? 今天接著上一篇http://www.itdecent.cn/p/bcda928981cd,從第2章:軟件測(cè)試開(kāi)發(fā)工程師的2.1.9(SET的工作流程:一個(gè)實(shí)例)開(kāi)始~
? ? 9)SET的工作流程:一個(gè)實(shí)例
? ? 該實(shí)例講述了如何使用Protocol Buffer定義數(shù)據(jù)和接口的設(shè)計(jì)、如何使用C++語(yǔ)言編寫(xiě)源碼和測(cè)試代碼、如何將測(cè)試代碼加入構(gòu)建規(guī)則,最后形成CL提交審核的整個(gè)流程。
? ? 10)測(cè)試執(zhí)行
? ? 只有能加速開(kāi)發(fā)過(guò)程的自動(dòng)化測(cè)試才有意義,測(cè)試不應(yīng)拖慢開(kāi)發(fā)的速度。因此,一個(gè)可以做代碼編譯、測(cè)試執(zhí)行、結(jié)果分析、數(shù)據(jù)存儲(chǔ)、報(bào)表展示的通用測(cè)試框架逐漸形成,工程師專注于測(cè)試程序的編寫(xiě)、運(yùn)行的細(xì)節(jié)留給通用基礎(chǔ)執(zhí)行框架。
? ? 11)測(cè)試大小的定義
? ? a)小型測(cè)試
? ? 小型測(cè)試是為了驗(yàn)證一個(gè)代碼單元的功能,一般集中精力在函數(shù)級(jí)別的獨(dú)立操作與調(diào)用上。在Google之外,小型測(cè)試通常就是單元測(cè)試。小型測(cè)試范疇隔離且沒(méi)有外部依賴,這讓小型測(cè)試可以在很短時(shí)間內(nèi)就運(yùn)行結(jié)束。
? ? b)中型測(cè)試
? ? 中型測(cè)試是驗(yàn)證兩個(gè)或多個(gè)模塊應(yīng)用之間的交互。在Google之外,中型測(cè)試也稱集成測(cè)試。一般是由SET來(lái)組織運(yùn)行中型測(cè)試。小型測(cè)試會(huì)嘗試走遍單獨(dú)函數(shù)的所有路徑,而中型測(cè)試的主要目標(biāo)是驗(yàn)證指定模塊之間的交互。
? ? c)大型測(cè)試
? ? 在Google之外,大型測(cè)試也稱系統(tǒng)測(cè)試/端到端測(cè)試。大型測(cè)試在一個(gè)較高層次上運(yùn)行,驗(yàn)證系統(tǒng)作為一個(gè)整體是如何工作的。
? ? 12)測(cè)試規(guī)模在共享測(cè)試平臺(tái)中的使用
? ? Google不同的測(cè)試項(xiàng)目共享測(cè)試平臺(tái),有可能同時(shí)并發(fā)提交到Google測(cè)試執(zhí)行系統(tǒng)的項(xiàng)目有多個(gè)。一些測(cè)試可能極度消耗資源,使得公用測(cè)試機(jī)器處于不可用狀態(tài)。因此,Google測(cè)試執(zhí)行系統(tǒng)利用測(cè)試規(guī)模的定義,把運(yùn)行較快的任務(wù)從較慢的任務(wù)中挑選出來(lái)。Google測(cè)試執(zhí)行系統(tǒng)在發(fā)現(xiàn)任何測(cè)試超時(shí),會(huì)把這個(gè)測(cè)試任務(wù)取消并報(bào)告這個(gè)錯(cuò)誤。這迫使工程師提供精準(zhǔn)的測(cè)試規(guī)模標(biāo)簽。

? ? 13)測(cè)試規(guī)模的益處
? ? 各測(cè)試規(guī)模的優(yōu)缺點(diǎn),見(jiàn)圖:

? ? a)大型測(cè)試
? ? 對(duì)外部有依賴,非確定性強(qiáng);測(cè)試數(shù)據(jù)的準(zhǔn)備非常耗時(shí);測(cè)試失敗根源較難定位。
? ? b)中型測(cè)試
? ? 運(yùn)行速度相對(duì)較快;可在標(biāo)準(zhǔn)的開(kāi)發(fā)環(huán)境中運(yùn)行;依賴外部系統(tǒng)有不確定性。
? ? c)小型測(cè)試
? ? 運(yùn)行速度很快;所有的環(huán)境均可運(yùn)行;測(cè)試范圍較小,可很容易地做邊界場(chǎng)景與錯(cuò)誤條件測(cè)試;使用mock或fake,可不與真實(shí)環(huán)境同步。
? ? Google有許多不同類型的項(xiàng)目,這些項(xiàng)目對(duì)測(cè)試的需求也不同,小型、中型、大型測(cè)試之間的比例隨著項(xiàng)目團(tuán)隊(duì)的不同而不同。這個(gè)比例并不固定,總體上有個(gè)經(jīng)驗(yàn)法則,即70/20/10原則:70%小型測(cè)試,20%中型測(cè)試,10%小型測(cè)試。
? ? 14)測(cè)試運(yùn)行要求
? ? 由于Google的測(cè)試執(zhí)行系統(tǒng)是一個(gè)公用環(huán)境,因此要求:
? ? 測(cè)試之間相互獨(dú)立,能以任意順序來(lái)執(zhí)行;
? ? 測(cè)試不做任何數(shù)據(jù)持久化方面的工作,即在測(cè)試用例離開(kāi)測(cè)試環(huán)境時(shí),要保證測(cè)試環(huán)境的狀態(tài)與測(cè)試用例開(kāi)始執(zhí)行之前的狀態(tài)一致。
? ? 另外,測(cè)試用例要求可“并發(fā)”,如果存在兩個(gè)測(cè)試需同一個(gè)端口、同一個(gè)目錄、操作同一張表可能會(huì)導(dǎo)致用例失敗。
? ? 一個(gè)持續(xù)集成系統(tǒng),如果測(cè)試失敗,為了精確定位哪次代碼變更導(dǎo)致測(cè)試用例運(yùn)行失敗,可利用依賴分析技術(shù)尋找所有可能受影響的模塊,針對(duì)一個(gè)代碼變更只運(yùn)行受影響模塊的測(cè)試。
? ? a)對(duì)于通用代碼庫(kù)上的變更

? ? 此時(shí),所有的測(cè)試均需要運(yùn)行。
? ? b)對(duì)于一個(gè)依賴項(xiàng)目上的代碼變更

只需要運(yùn)行受影響的模塊,即運(yùn)行buzz_client_tests即可。
? ? 今天到此為止,下篇從測(cè)試認(rèn)證開(kāi)始讀起~
? ? 今天讀完的感受是:更清楚了測(cè)試規(guī)模的意義,重溫了自動(dòng)化中該注意的點(diǎn),另外,從整體項(xiàng)目的角度,項(xiàng)目流程、修改后的測(cè)試方面也得到了新的認(rèn)識(shí)~