擁有完整而有效的自動(dòng)化測(cè)試策略,是團(tuán)隊(duì)達(dá)成持續(xù)集成目標(biāo)的一個(gè)至關(guān)重要的前提條件昂秃。
自動(dòng)化測(cè)試的定位
測(cè)試領(lǐng)域存在四類基本活動(dòng)肠骆,即:
- 問題認(rèn)知:對(duì)業(yè)務(wù)問題本身的理解和認(rèn)識(shí)蚀腿,來源于探索環(huán)
- 分析:測(cè)試分析和設(shè)計(jì)莉钙,通過對(duì)業(yè)務(wù)的認(rèn)知,分析并設(shè)計(jì)能夠驗(yàn)證是否成功解決業(yè)務(wù)問題的方式和方法停忿,不斷優(yōu)化席赂,在確保驗(yàn)證質(zhì)量的前提下降低測(cè)試成本
- 執(zhí)行:執(zhí)行測(cè)試分析得到的測(cè)試用例颅停,得到測(cè)試結(jié)果或數(shù)據(jù)
- 決策:根據(jù)測(cè)試結(jié)果做出下一步行動(dòng)判斷
自動(dòng)化測(cè)試:將“執(zhí)行”階段的大量重復(fù)性的勞動(dòng)力交付給機(jī)器來完成别垮,將人從重復(fù)的手工勞動(dòng)中解放出來碳想。
敏捷測(cè)試四象限
- 面向業(yè)務(wù)專家:指能夠與業(yè)務(wù)專家無障礙溝通
- 面向技術(shù)人員:容易與技術(shù)人員達(dá)成共識(shí)
- 支持編程:為了幫助產(chǎn)品研發(fā)團(tuán)隊(duì)自己檢查功能需求是否開發(fā)完成
- 評(píng)判標(biāo)準(zhǔn):用于找出產(chǎn)品是否有缺陷
第二象限和第三象限的測(cè)試類型都可以被自動(dòng)化逊移,包括功能驗(yàn)收測(cè)試龙填、單元測(cè)試岩遗、組件測(cè)試和系統(tǒng)集成測(cè)試宿礁;第四象限一部分可以自動(dòng)化,大部分可以半自動(dòng)化控汉;第一象限只能通過手工方式運(yùn)行姑子。
自動(dòng)化測(cè)試的優(yōu)勢(shì)
- 減少失誤率街佑,提高準(zhǔn)確性:自動(dòng)化測(cè)試每次執(zhí)行相同的步驟,并且每次都會(huì)記錄詳細(xì)的執(zhí)行結(jié)果岳服,且不受人的因素影響吊宋;人手動(dòng)測(cè)試會(huì)因個(gè)人的經(jīng)驗(yàn)和情緒不同而導(dǎo)致執(zhí)行結(jié)果不同璃搜;
- 節(jié)省時(shí)間和執(zhí)行成本:在軟件的生命周期中鳞上,測(cè)試活動(dòng)需要經(jīng)常重復(fù)執(zhí)行以確保質(zhì)量篙议,自動(dòng)化測(cè)試用例一旦創(chuàng)建鬼贱,就可以做到無人看守地運(yùn)行这难;
- 提升測(cè)試覆蓋率:自動(dòng)化測(cè)試可以增加測(cè)試的深度和范圍以提高軟件質(zhì)量,從而提供手動(dòng)測(cè)試所不及的覆蓋范圍嵌溢;
- 做手工無法完成的測(cè)試:比如性能測(cè)試赖草,靠人工模擬成千上萬的用戶訪問軟件秧骑,憑手工測(cè)試時(shí)無法完成的腿堤;
- 為開發(fā)人員提供質(zhì)量反饋速度:開發(fā)人員可以使用共享的自動(dòng)化測(cè)試快速發(fā)現(xiàn)問題如暖,通過持續(xù)集成自動(dòng)觸發(fā)運(yùn)行盒至,并將通知團(tuán)隊(duì)成員是否失敗枷遂,這樣會(huì)節(jié)省開發(fā)人員的驗(yàn)證時(shí)間酒唉,也增加他們對(duì)自己編寫軟件代碼質(zhì)量的信心;
- 提供團(tuán)隊(duì)士氣:將重復(fù)性的測(cè)試任務(wù)自動(dòng)化侄榴,團(tuán)隊(duì)可以將時(shí)間花費(fèi)在更具挑戰(zhàn)性和更有價(jià)值的活動(dòng)中癞蚕,團(tuán)隊(duì)成員個(gè)人技能和信息的提高也同時(shí)反饋給了團(tuán)隊(duì)桦山,提升了士氣恒水。
自動(dòng)化測(cè)試的成本投入
- 工具投入成本:自動(dòng)化測(cè)試需要工具的支持寇窑,需要相關(guān)測(cè)試工具的研發(fā)投入箩张,以及對(duì)團(tuán)隊(duì)成員的測(cè)試框架先慷、測(cè)試技能和工具培訓(xùn)论熙;
- 用例成本維護(hù):功能的新增、珊瑚和修改媒役,其所對(duì)應(yīng)的自動(dòng)化測(cè)試用例也需要同步的改動(dòng)酣衷,帶來一定的維護(hù)成本次泽;
- 專業(yè)技能人員成本:需要對(duì)自動(dòng)化測(cè)試用例的創(chuàng)建者掌握軟件設(shè)計(jì)與代碼編寫能力進(jìn)行培訓(xùn)意荤;
- 設(shè)備資源的投入:由于自動(dòng)化測(cè)試無法完全代理手工測(cè)試玖像,因此不但需要保留手工測(cè)試所需的測(cè)試環(huán)境捐寥,同時(shí)還要為自動(dòng)化測(cè)試用例的執(zhí)行準(zhǔn)備相應(yīng)的測(cè)試環(huán)境上真。
持續(xù)集成下的自動(dòng)化測(cè)試
持續(xù)集成對(duì)自動(dòng)化測(cè)試的要求
持續(xù)集成實(shí)踐對(duì)自動(dòng)化測(cè)試建設(shè)的四個(gè)基本衡量維度如下:
- 快速:自動(dòng)化測(cè)試用例的執(zhí)行速度要快睡互,執(zhí)行的時(shí)間代表著開發(fā)人員得到反饋的時(shí)間,最好在10分鐘之內(nèi)完成寇壳,不要超過15分鐘壳炎;
- 便捷:團(tuán)隊(duì)成員能夠隨時(shí)隨地很方便地執(zhí)行自動(dòng)化測(cè)試用例匿辩,而不需要他們幫助铲球,也不會(huì)影響到他人稼病,避免出現(xiàn)延遲反饋的問題;
- 及時(shí):一旦功能發(fā)生改變援制,就能夠通過自動(dòng)化測(cè)試用例的運(yùn)行晨仑,告知本次代碼變更對(duì)軟件質(zhì)量的影響,包括對(duì)原有功能的影響秩仆,以及新增功能的質(zhì)量情況澄耍;
- 可信:自動(dòng)化測(cè)試用例運(yùn)行的結(jié)果可以信賴齐莲,不存在隨機(jī)失敗的現(xiàn)象磷箕。持續(xù)集成要求一旦自動(dòng)化測(cè)試用例失敗岳枷,必須立即修復(fù)空繁,“隨機(jī)失敗”會(huì)大大增加工程師的“無效投入”盛泡。
《Scrum敏捷軟件開發(fā)》中指出傲诵,針對(duì)被測(cè)對(duì)象范圍較大的上層測(cè)試用例拴竹,數(shù)量應(yīng)該越少殖熟,而被測(cè)對(duì)象粒度較細(xì)的下層測(cè)試用例數(shù)量應(yīng)該增加,形成穩(wěn)定的正三角形舰罚。
不同類型的測(cè)試金字塔
微核架構(gòu)的測(cè)試金字塔
- 組件測(cè)試:對(duì)單個(gè)組件或框架本身進(jìn)行質(zhì)量驗(yàn)證
-
組件和插件間服務(wù)的接口自動(dòng)化測(cè)試:主要是驗(yàn)證兩個(gè)或兩個(gè)以上組件間的功能正確性营罢。
微核架構(gòu)下的測(cè)試金字塔
微服務(wù)應(yīng)用的測(cè)試金字塔
- 業(yè)務(wù)組件或服務(wù)測(cè)試:對(duì)單個(gè)組件或服務(wù)的測(cè)試,以驗(yàn)證該組件的行為是否符合設(shè)計(jì)預(yù)期考传。
- 契約測(cè)試:又稱消費(fèi)者驅(qū)動(dòng)的契約測(cè)試僚楞,契約是指軟件系統(tǒng)中各個(gè)服務(wù)間交互的數(shù)據(jù)標(biāo)準(zhǔn)格式泉褐,其目標(biāo)是測(cè)試消費(fèi)者接口與服務(wù)者接口之間的正確性膜赃,驗(yàn)證服務(wù)者提供的數(shù)據(jù)是否為消費(fèi)者所需要的财剖,從而將測(cè)試范圍縮小到兩個(gè)服務(wù)間的契約躺坟,以更低的成本發(fā)現(xiàn)問題乳蓄。
- 業(yè)務(wù)工作流測(cè)試:?jiǎn)?dòng)兩個(gè)或以上微服務(wù)美侦,進(jìn)行業(yè)務(wù)流程上的測(cè)試魂奥,以驗(yàn)證多個(gè)被測(cè)服務(wù)之間是否可以正常工作耻煤, 完成某一業(yè)務(wù)請(qǐng)求,關(guān)注的是多服務(wù)組合交互棺妓、測(cè)試接口連通性和流程的可用性攘已。
- 端到端測(cè)試:對(duì)整個(gè)軟件服務(wù)的流程進(jìn)行測(cè)試,以驗(yàn)證其工作流自始至終的執(zhí)行是否符合設(shè)計(jì)預(yù)期怜跑,識(shí)別系統(tǒng)以來關(guān)系样勃,確保在各種系統(tǒng)之間傳遞正確的信息。其中一種端到端的測(cè)試時(shí)模擬用戶在可視化界面上執(zhí)行各種操作性芬。
自動(dòng)化測(cè)試的實(shí)施策略
增加自動(dòng)化測(cè)試用例的著手點(diǎn)
除了符合測(cè)試金字塔結(jié)構(gòu)峡眶,還可以從以下四個(gè)方面入手:
- 針對(duì)代碼熱區(qū)補(bǔ)充自動(dòng)化測(cè)試用例:代碼熱區(qū)指那些改動(dòng)頻率相對(duì)較高的文件或函數(shù)植锉,以及經(jīng)常出問題的功能組件辫樱;對(duì)代碼熱區(qū)寫自動(dòng)化測(cè)試是投入產(chǎn)出比最劃算的。
- 跟隨新功能開發(fā)的進(jìn)度:跟隨開發(fā)進(jìn)度編寫對(duì)應(yīng)的自動(dòng)化測(cè)試用例汽煮。寫好的測(cè)試用例可以直接應(yīng)用為開發(fā)提供及時(shí)的質(zhì)量反饋搏熄。如果自動(dòng)化測(cè)試用例覆蓋一直落后于功能開發(fā)棚唆,就無法起到保護(hù)網(wǎng)的作用暇赤。
- 從測(cè)試金字塔的中間層向上下兩端擴(kuò)展:從中間層級(jí)別開始入手,投入產(chǎn)出比最高宵凌。
- 自動(dòng)化測(cè)試用例的質(zhì)量比數(shù)量重要:自動(dòng)化測(cè)試具有維護(hù)成本鞋囊,在達(dá)到質(zhì)量目的的前提下,自動(dòng)化測(cè)試的數(shù)量越少越好瞎惫,數(shù)量夠用就行溜腐,不必要的測(cè)試用例只會(huì)單純?cè)黾泳S護(hù)成本和工作量。
良好自動(dòng)化測(cè)試的特征
- 用例之間必須相互獨(dú)立:用例之間的執(zhí)行順序依賴會(huì)降低測(cè)試用例并行能力瓜喇,從而導(dǎo)致執(zhí)行時(shí)間太長(zhǎng)挺益,大大降低自動(dòng)化測(cè)試的反饋效率;
- 測(cè)試用例的運(yùn)行結(jié)果必須穩(wěn)定:當(dāng)測(cè)試腳本和被測(cè)代碼都保持不變的情況下乘寒,多次執(zhí)行的測(cè)試結(jié)果應(yīng)該是穩(wěn)定的望众、不變的,降低無效的時(shí)間浪費(fèi)伞辛;
- 測(cè)試用例的運(yùn)行速度必須快:通過測(cè)試用例的拆分和“輪詢”來去除測(cè)試用例中的“等待”烂翰,減少等待時(shí)間,從而縮短整個(gè)測(cè)試用例的執(zhí)行時(shí)間蚤氏;
- 測(cè)試環(huán)境應(yīng)該統(tǒng)一:環(huán)境的依賴和易用性會(huì)降低自動(dòng)化測(cè)試用例的收益甘耿,環(huán)境的統(tǒng)一對(duì)自動(dòng)化測(cè)試的回報(bào)至關(guān)重要。
用戶驗(yàn)收自動(dòng)化測(cè)試的要點(diǎn)
處于測(cè)試金字塔頂層的用戶驗(yàn)收測(cè)試的數(shù)量不應(yīng)該太多竿滨,其重點(diǎn)在于:
- 以用戶旅程地圖的方式來驗(yàn)證軟件應(yīng)該活服務(wù)的核心工作流程佳恬,從用戶的角度出發(fā)捏境,以敘述故事的方式描述用戶與軟件產(chǎn)品之間的交互;
- 應(yīng)該驗(yàn)證軟件應(yīng)用或服務(wù)的端到端行為殿怜,而非具體的實(shí)現(xiàn)細(xì)節(jié)典蝌;
- 通過各種手段讓端到端自動(dòng)化測(cè)試的調(diào)試更容易,如提供完整的日志文件头谜,記錄常用的測(cè)試失敗模式骏掀,保留所有相關(guān)的系統(tǒng)狀態(tài)信息(自動(dòng)截屏、出錯(cuò)時(shí)現(xiàn)場(chǎng)鏡像保存)等柱告;
- 數(shù)據(jù)準(zhǔn)備截驮。可以將生產(chǎn)環(huán)境的數(shù)據(jù)克隆一份請(qǐng)求际度,原有的請(qǐng)求仍舊通過原來的服務(wù)正常處理葵袭,而克隆出來的請(qǐng)求引流到新版本的服務(wù)。
其他質(zhì)量檢查方法
差異批注測(cè)試方法
一種半自動(dòng)測(cè)試方法乖菱,當(dāng)做預(yù)定義的數(shù)據(jù)集輸入系統(tǒng)后坡锡,收集運(yùn)行后的輸出結(jié)果,對(duì)其中需要驗(yàn)證的數(shù)據(jù)進(jìn)行提取窒所,并將提取結(jié)果放入文本文件中鹉勒,通過對(duì)比前后兩次測(cè)試的結(jié)果,用人工批注的方式進(jìn)行半自動(dòng)測(cè)試吵取。需要特別注意動(dòng)態(tài)信息的處理禽额,常見的工具包括TextTest和ApprovalTests等。
代碼規(guī)范檢查與代碼動(dòng)靜態(tài)檢測(cè)
- 代碼規(guī)范檢查:通過一些工具依賴團(tuán)隊(duì)定義的一些代碼編寫規(guī)范皮官,針對(duì)源代碼進(jìn)行檢查脯倒,發(fā)現(xiàn)破壞規(guī)則的代碼并加以指正。常用的工具包括:Checkstyle捺氢,PMD藻丢,SonarQube等。
- 代碼動(dòng)靜態(tài)檢測(cè):通過一些工具對(duì)產(chǎn)品源代碼進(jìn)行自動(dòng)化掃描摄乒,發(fā)現(xiàn)代碼中存在的問題或潛在風(fēng)險(xiǎn)悠反。
- 靜態(tài)掃描:無需編譯器編譯而直接使用一些掃描工具對(duì)其進(jìn)行掃描,找出代碼中存在的一些語義缺陷缺狠、安全漏洞的解決方案问慎。常用的工具包括:lint,Coverity挤茄,ColcWork等如叼。
- 動(dòng)態(tài)分析:通過在真實(shí)或虛擬處理機(jī)器上執(zhí)行目標(biāo)程序進(jìn)行分析,比如穷劈,在可能的漏洞處插入專門編制的故障發(fā)生函數(shù)笼恰,迫使目標(biāo)軟件產(chǎn)生異常踊沸,然后通過監(jiān)控程序來檢查是否發(fā)生了邊界溢出或者其他異常現(xiàn)象社证。常用工具包括:Valgrind逼龟,Purify等。
總結(jié)
前置周期越短追葡,說明交付效率越高腺律,越能提升客戶的滿意度;對(duì)交付頻率的要求越高宜肉,希望前置周期越短匀钧,自動(dòng)化測(cè)試就越為重要。秉承著快速谬返、便捷之斯、可信和即使的自動(dòng)化測(cè)試原則,遵循自動(dòng)化測(cè)試金字塔結(jié)構(gòu)遣铝,合理設(shè)計(jì)自動(dòng)化測(cè)試的實(shí)施策略佑刷,降低自動(dòng)化測(cè)試的成本,從而增加自動(dòng)化測(cè)試的收益酿炸。