自動(dòng)化回歸測(cè)試全接觸:概念、方法和實(shí)踐
譯文【51CTO.com快譯】眾所周知,在軟件開(kāi)發(fā)的生命周期中,開(kāi)發(fā)人員往往需要修改已有代碼,或?qū)⑿鹿δ芤肽繕?biāo)系統(tǒng)。不過(guò),此類更改可能會(huì)通過(guò)影響現(xiàn)有功能對(duì)系統(tǒng)造成破壞。因此,我們需要執(zhí)行一系列測(cè)試,以驗(yàn)證新的代碼對(duì)系統(tǒng)不會(huì)造成負(fù)面影響。這便是回歸測(cè)試。
在本文中,我們將從回歸測(cè)試的概念入手,討論其實(shí)施的重要性,以及那些實(shí)現(xiàn)自動(dòng)化測(cè)試的方法與優(yōu)秀實(shí)踐。
什么是回歸測(cè)試?
回歸測(cè)試(https://en.wikipedia.org/wiki/Regression_testing)是一種軟件的測(cè)試形式,能夠涵蓋軟件系統(tǒng)中的各種功能性和非功能性的元素。我們可以在執(zhí)行如下操作后,通過(guò)它來(lái)發(fā)現(xiàn)潛在的問(wèn)題或錯(cuò)誤。
- 部署新的功能
- 添加新的模塊
- 修復(fù)現(xiàn)有缺陷
- 重構(gòu)程序代碼
- 更改系統(tǒng)配置
- 改善應(yīng)用程序的性能
針對(duì)上述任何事件,如果采用手動(dòng)的方式測(cè)試整個(gè)系統(tǒng),顯然既費(fèi)時(shí)又費(fèi)力。開(kāi)發(fā)團(tuán)隊(duì)往往希望通過(guò)自動(dòng)化測(cè)試的方式,來(lái)加快整個(gè)工作流程,以實(shí)現(xiàn)每修改一次代碼,都能執(zhí)行一系列預(yù)先開(kāi)發(fā)好的測(cè)試腳本。據(jù)此,他們能夠在進(jìn)行連續(xù)性回歸測(cè)試的同時(shí),降低測(cè)試的總體成本,減少人為錯(cuò)誤,并保持更高的準(zhǔn)確性。
為何要使用自動(dòng)化回歸測(cè)試?
如前文所述,我們?cè)趯?duì)每個(gè)系統(tǒng)組件進(jìn)行下一階段開(kāi)發(fā)之前,需要對(duì)其進(jìn)行徹底的測(cè)試,否則就會(huì)積累所謂的技術(shù)債(technical debt)。這不僅成本高昂,而且對(duì)于開(kāi)發(fā)工作流程來(lái)說(shuō)也是危害極大的。
值得注意的是,錯(cuò)誤的修復(fù)成本會(huì)在軟件開(kāi)發(fā)的各個(gè)階段呈指數(shù)性增長(zhǎng)(請(qǐng)參考:https://www.nist.gov/system/files/documents/director/planning/report02-3.pdf),并且會(huì)在產(chǎn)品發(fā)布的時(shí)候高達(dá)30倍以上。下圖是此類費(fèi)用隨時(shí)間增加的統(tǒng)計(jì)圖。
可見(jiàn),通過(guò)在開(kāi)發(fā)的早期階段進(jìn)行徹底的測(cè)試,不但可以及時(shí)地發(fā)現(xiàn)錯(cuò)誤,還能夠避免糾正錯(cuò)誤所帶來(lái)的高昂成本。這也正是自動(dòng)化回歸測(cè)試發(fā)揮作用的地方。當(dāng)然,除了改進(jìn)錯(cuò)誤檢測(cè)的效率,自動(dòng)化回歸測(cè)試還能夠?yàn)殚_(kāi)發(fā)工作、及其流程帶來(lái)如下好處:
- 更高的測(cè)試覆蓋范圍 - 自動(dòng)化能夠讓我們通過(guò)運(yùn)行更多的回歸測(cè)試,來(lái)檢查系統(tǒng)的各個(gè)方面。顯然,這是手動(dòng)回歸測(cè)試所無(wú)法達(dá)到的徹底水平。
- 更高的測(cè)試投資回報(bào)率 - 盡管自動(dòng)化測(cè)試有時(shí)會(huì)引發(fā)更高的初期投資,但是從長(zhǎng)遠(yuǎn)來(lái)看,由于軟件開(kāi)發(fā)和維護(hù)是一個(gè)連續(xù)性的過(guò)程,因此自動(dòng)化回歸測(cè)試往往可以在可預(yù)見(jiàn)的將來(lái),為團(tuán)隊(duì)節(jié)省大量的時(shí)間與金錢,并能收獲更大的回報(bào)。
- 更少的人力成本 - 使用自動(dòng)化測(cè)試平臺(tái)時(shí),團(tuán)隊(duì)只需一名QA(質(zhì)量檢測(cè))工程師即可測(cè)試腳本。相反,手動(dòng)回歸測(cè)試將需要數(shù)名專業(yè)人員,才能達(dá)到相似的效果。因此,自動(dòng)化大幅減少了回歸測(cè)試所需的總體時(shí)間和人力成本。
- 增強(qiáng)的穩(wěn)定性 - 手動(dòng)回歸測(cè)試的結(jié)果,往往取決于團(tuán)隊(duì)中QA專家的專業(yè)知識(shí)和測(cè)試方法。而自動(dòng)化卻能夠確保用相同的專業(yè)技術(shù),來(lái)測(cè)試整個(gè)系統(tǒng)的方方面面。
- 重復(fù)性 - 自動(dòng)化回歸測(cè)試可以按需隨時(shí)執(zhí)行,而無(wú)需顧及QA團(tuán)隊(duì)是否有時(shí)間和精力。而手動(dòng)測(cè)試則需要為每個(gè)新項(xiàng)目配備足夠的QA人員。
如何執(zhí)行自動(dòng)化回歸測(cè)試?
正如執(zhí)行任何其他類型的自動(dòng)化軟件測(cè)試一樣,我們需要遵循預(yù)定義的測(cè)試路線,才能成功地完成回歸測(cè)試。
正所謂“工欲善其事,必先利其器”,我們?cè)趫?zhí)行自動(dòng)化回歸測(cè)試前,首先也是最重要的一步是:選擇合適的工具。目前市場(chǎng)上的自動(dòng)化回歸測(cè)試工具林林總總,其中比較流行的包括Selenium、TestComplete、Ranorex Studio和Perfecto。
接著,我們可以按照如下四步來(lái)開(kāi)展自動(dòng)執(zhí)行回歸測(cè)試:
- 發(fā)現(xiàn)和計(jì)劃 - 首先概述產(chǎn)品將要發(fā)布的范圍,確定哪些測(cè)試用例可能會(huì)被包含在回歸測(cè)試的套件中。
- 設(shè)計(jì)和開(kāi)發(fā) – 在確定測(cè)試項(xiàng)目需包含的所有任務(wù)后,開(kāi)始為每個(gè)測(cè)試用例編寫自動(dòng)化的腳本。
- 測(cè)試執(zhí)行 – 運(yùn)行測(cè)試,并在執(zhí)行過(guò)程中識(shí)別錯(cuò)誤。
- 測(cè)試結(jié)束 - 最后,記錄和提交測(cè)試報(bào)告,進(jìn)而執(zhí)行其他的后續(xù)測(cè)試。
自動(dòng)化回歸測(cè)試的方法
目前,業(yè)界通常會(huì)使用如下三種方法,來(lái)執(zhí)行自動(dòng)化回歸測(cè)試(請(qǐng)參見(jiàn)--https://ieeexplore.ieee.org/document/10189)。您該具體選擇哪種方法,則完全取決于開(kāi)發(fā)的優(yōu)先級(jí)、代碼庫(kù)的大小、以及可用在測(cè)試中的資源。
- 全部重新測(cè)試 - 有時(shí)候,在代碼庫(kù)上執(zhí)行所有現(xiàn)有的回歸測(cè)試是一種最佳選擇。盡管需要初期大量的投入,但是只要設(shè)計(jì)合理,就能夠發(fā)現(xiàn)一些不需要回歸的環(huán)節(jié)。當(dāng)然,客觀地說(shuō),該方法對(duì)于大型代碼庫(kù)幾乎是不可行的。
- 基于優(yōu)先級(jí)重新測(cè)試 – 按照重要性和緊迫性的順序,執(zhí)行測(cè)試用例。在確定具有最高優(yōu)先級(jí)的測(cè)試用例時(shí),往往需要QA專家給出專家意見(jiàn)。而且,優(yōu)先級(jí)測(cè)試應(yīng)涵蓋所有關(guān)鍵的代碼路徑,以發(fā)現(xiàn)那些嚴(yán)重的錯(cuò)誤。
- 選擇性重新測(cè)試 - 您可以選擇回歸測(cè)試套件中的一個(gè)子集來(lái)執(zhí)行,而不是重新運(yùn)行整個(gè)測(cè)試套件。在后續(xù)的回歸周期中,您只需執(zhí)行那些可以在代碼庫(kù)上復(fù)用的測(cè)試用例,并將過(guò)時(shí)的用例剔除出去。
此外,您還可以使用混合回歸測(cè)試技術(shù),即:先執(zhí)行優(yōu)先級(jí)測(cè)試,然后再運(yùn)行其他必要的測(cè)試,以避免遺漏并實(shí)現(xiàn)全覆蓋。
自動(dòng)化回歸測(cè)試的實(shí)例
如前所述,我們可以根據(jù)對(duì)代碼庫(kù)所進(jìn)行的更改,來(lái)采用不同形式的回歸測(cè)試。有些是在添加新的功能后執(zhí)行,而有些是在修復(fù)了系統(tǒng)中已知錯(cuò)誤后執(zhí)行。下面,讓我們來(lái)討論回歸測(cè)試的一些實(shí)際案例:
- 場(chǎng)景1:假設(shè)有一個(gè)具有數(shù)據(jù)庫(kù)管理功能的應(yīng)用,其核心功能有三個(gè),即:數(shù)據(jù)添加、數(shù)據(jù)保存、以及數(shù)據(jù)刪除。當(dāng)我們?cè)谛掳姹局?,引入允許用戶對(duì)數(shù)據(jù)進(jìn)行修改的“數(shù)據(jù)更新”功能時(shí),則需要通過(guò)執(zhí)行回歸測(cè)試,來(lái)確保該功能不會(huì)影響到既有的“添加”、“保存”和“刪除”功能。
- 場(chǎng)景2:某個(gè)系統(tǒng)具有管理員、版主、客戶和作者,四個(gè)角色模塊。如果管理員模塊出現(xiàn)了錯(cuò)誤,那么就會(huì)導(dǎo)致作者使用其憑據(jù),以版主的身份登錄到后臺(tái)系統(tǒng)中。因此,測(cè)試團(tuán)隊(duì)需要反饋開(kāi)發(fā)團(tuán)隊(duì)修復(fù)該錯(cuò)誤。而在實(shí)施了有效修復(fù)后,測(cè)試團(tuán)隊(duì)將再次檢查系統(tǒng),以確保具有修復(fù)功效的代碼能夠正常工作,且不會(huì)影響到其他模塊與功能(該過(guò)程便是回歸測(cè)試)。
根據(jù)上述的場(chǎng)景,我們來(lái)討論其中的登錄驗(yàn)證功能,即:用戶輸入其登錄憑據(jù)(如用戶名和密碼),然后單擊登錄按鈕。其中,用于測(cè)試此功能的分步實(shí)施代碼如下:
如下代碼則展示了當(dāng)我們對(duì)該功能性代碼進(jìn)行測(cè)試時(shí),生成的具有登錄功能的類:
上述代碼實(shí)為手動(dòng)回歸測(cè)試的示例。如果我們使用諸如Perfecto之類的自動(dòng)化回歸測(cè)試工具,則無(wú)需對(duì)測(cè)試腳本進(jìn)行硬編碼。我們只需做到:首先,確定可能用到的回歸測(cè)試,并記錄每個(gè)測(cè)試用例的工作流程。接著,使用Perfecto儀表板對(duì)測(cè)試方案進(jìn)行建模。如下圖所示,我們可以讓Perfecto協(xié)助將工作流程轉(zhuǎn)換為測(cè)試腳本。
在工作流程準(zhǔn)備就緒后,我們即可執(zhí)行測(cè)試并捕獲結(jié)果。而在完成測(cè)試之后,Perfecto將返回對(duì)應(yīng)的測(cè)試通過(guò)或失敗狀態(tài),并為每個(gè)執(zhí)行的命令提供詳細(xì)的反饋。據(jù)此,您可以相繼開(kāi)展分析測(cè)試結(jié)果,生成報(bào)告,以及重新測(cè)試更改等工作。
自動(dòng)執(zhí)行回歸測(cè)試的最佳做法
在執(zhí)行回歸測(cè)試時(shí),開(kāi)發(fā)團(tuán)隊(duì)往往會(huì)碰到包括:時(shí)間與資源有限,測(cè)試時(shí)間過(guò)長(zhǎng),測(cè)試用例增多等各方面的挑戰(zhàn)。為了避免“踩坑”,并能夠成功地完成自動(dòng)化回歸測(cè)試,我在此為您羅列了如下實(shí)踐建議:
- 選用可靠的自動(dòng)化工具,以擴(kuò)大測(cè)試的范圍,并利用其自動(dòng)化的優(yōu)勢(shì)。
- 在整個(gè)項(xiàng)目中采用常規(guī)化的測(cè)試方案。
- 通過(guò)獨(dú)立可重用的回歸測(cè)試,以節(jié)省時(shí)間。
- 在修改代碼庫(kù)后,應(yīng)重新運(yùn)行過(guò)往已成功完成的測(cè)試。
- 通過(guò)定期更新回歸測(cè)試包,以確保與更新的產(chǎn)品版本相對(duì)應(yīng)。
- 為每個(gè)新發(fā)現(xiàn)的錯(cuò)誤編寫各種測(cè)試。
- 確保所有集成測(cè)試用例都被包含在回歸測(cè)試的套件中。
希望上述實(shí)踐經(jīng)驗(yàn)?zāi)軌驇椭交亻_(kāi)展回歸測(cè)試,并獲得預(yù)期的結(jié)果。
小結(jié)
回歸測(cè)試是在減少潛在技術(shù)債,并改善軟件項(xiàng)目維護(hù)態(tài)勢(shì)的有效方法。借助自動(dòng)化測(cè)試工具,開(kāi)發(fā)團(tuán)隊(duì)不但能夠簡(jiǎn)化測(cè)試的整體工作量,并且可以確保產(chǎn)品在交付到生產(chǎn)環(huán)境之前的穩(wěn)定性與代碼質(zhì)量。
原文標(biāo)題:All You Need To Know About Automating Regression Tests,作者: Dickson Mwendia
【51CTO譯稿,合作站點(diǎn)轉(zhuǎn)載請(qǐng)注明原文譯者和出處為51CTO.com】