眾所周知,在軟體開發的生命周期中,開發人員往往需要修改已有代碼,或將新功能引入目標系統。不過,此類更改可能會通過影響現有功能對系統造成破壞。因此,我們需要執行一系列測試,以驗證新的代碼對系統不會造成負面影響。這便是回歸測試。
在本文中,我們將從回歸測試的概念入手,討論其實施的重要性,以及那些實現自動化測試的方法與優秀實踐。
什麼是回歸測試?
回歸測試是一種軟體的測試形式,能夠涵蓋軟體系統中的各種功能性和非功能性的元素。我們可以在執行如下操作後,通過它來發現潛在的問題或錯誤。
部署新的功能添加新的模塊修復現有缺陷重構程序代碼更改系統配置改善應用程式的性能針對上述任何事件,如果採用手動的方式測試整個系統,顯然既費時又費力。開發團隊往往希望通過自動化測試的方式,來加快整個工作流程,以實現每修改一次代碼,都能執行一系列預先開發好的測試腳本。據此,他們能夠在進行連續性回歸測試的同時,降低測試的總體成本,減少人為錯誤,並保持更高的準確性。
為何要使用自動化回歸測試?
如前文所述,我們在對每個系統組件進行下一階段開發之前,需要對其進行徹底的測試,否則就會積累所謂的技術債(technical debt)。這不僅成本高昂,而且對於開發工作流程來說也是危害極大的。
值得注意的是,錯誤的修復成本會在軟體開發的各個階段呈指數性增長,並且會在產品發布的時候高達30倍以上。下圖是此類費用隨時間增加的統計圖。
可見,通過在開發的早期階段進行徹底的測試,不但可以及時地發現錯誤,還能夠避免糾正錯誤所帶來的高昂成本。這也正是自動化回歸測試發揮作用的地方。當然,除了改進錯誤檢測的效率,自動化回歸測試還能夠為開發工作、及其流程帶來如下好處:
更高的測試覆蓋範圍 - 自動化能夠讓我們通過運行更多的回歸測試,來檢查系統的各個方面。顯然,這是手動回歸測試所無法達到的徹底水平。更高的測試投資回報率 - 儘管自動化測試有時會引發更高的初期投資,但是從長遠來看,由於軟體開發和維護是一個連續性的過程,因此自動化回歸測試往往可以在可預見的將來,為團隊節省大量的時間與金錢,並能收穫更大的回報。更少的人力成本 - 使用自動化測試平臺時,團隊只需一名QA(質量檢測)工程師即可測試腳本。相反,手動回歸測試將需要數名專業人員,才能達到相似的效果。因此,自動化大幅減少了回歸測試所需的總體時間和人力成本。增強的穩定性 - 手動回歸測試的結果,往往取決於團隊中QA專家的專業知識和測試方法。而自動化卻能夠確保用相同的專業技術,來測試整個系統的方方面面。重複性 - 自動化回歸測試可以按需隨時執行,而無需顧及QA團隊是否有時間和精力。而手動測試則需要為每個新項目配備足夠的QA人員。如何執行自動化回歸測試?
正如執行任何其他類型的自動化軟體測試一樣,我們需要遵循預定義的測試路線,才能成功地完成回歸測試。
正所謂「工欲善其事,必先利其器」,我們在執行自動化回歸測試前,首先也是最重要的一步是:選擇合適的工具。目前市場上的自動化回歸測試工具林林總總,其中比較流行的包括Selenium、TestComplete、Ranorex Studio和Perfecto。
接著,我們可以按照如下四步來開展自動執行回歸測試:
發現和計劃 - 首先概述產品將要發布的範圍,確定哪些測試用例可能會被包含在回歸測試的套件中。設計和開發 – 在確定測試項目需包含的所有任務後,開始為每個測試用例編寫自動化的腳本。測試執行 – 運行測試,並在執行過程中識別錯誤。測試結束 - 最後,記錄和提交測試報告,進而執行其他的後續測試。自動化回歸測試的方法
目前,業界通常會使用如下三種方法,來執行自動化回歸測試。您該具體選擇哪種方法,則完全取決於開發的優先級、代碼庫的大小、以及可用在測試中的資源。
全部重新測試 - 有時候,在代碼庫上執行所有現有的回歸測試是一種最佳選擇。儘管需要初期大量的投入,但是只要設計合理,就能夠發現一些不需要回歸的環節。當然,客觀地說,該方法對於大型代碼庫幾乎是不可行的。基於優先級重新測試 – 按照重要性和緊迫性的順序,執行測試用例。在確定具有最高優先級的測試用例時,往往需要QA專家給出專家意見。而且,優先級測試應涵蓋所有關鍵的代碼路徑,以發現那些嚴重的錯誤。選擇性重新測試 - 您可以選擇回歸測試套件中的一個子集來執行,而不是重新運行整個測試套件。在後續的回歸周期中,您只需執行那些可以在代碼庫上復用的測試用例,並將過時的用例剔除出去。此外,您還可以使用混合回歸測試技術,即:先執行優先級測試,然後再運行其他必要的測試,以避免遺漏並實現全覆蓋。
自動化回歸測試的實例
如前所述,我們可以根據對代碼庫所進行的更改,來採用不同形式的回歸測試。有些是在添加新的功能後執行,而有些是在修復了系統中已知錯誤後執行。下面,讓我們來討論回歸測試的一些實際案例:
場景1:假設有一個具有資料庫管理功能的應用,其核心功能有三個,即:數據添加、數據保存、以及數據刪除。當我們在新版本中,引入允許用戶對數據進行修改的「數據更新」功能時,則需要通過執行回歸測試,來確保該功能不會影響到既有的「添加」、「保存」和「刪除」功能。場景2:某個系統具有管理員、版主、客戶和作者,四個角色模塊。如果管理員模塊出現了錯誤,那麼就會導致作者使用其憑據,以版主的身份登錄到後臺系統中。因此,測試團隊需要反饋開發團隊修復該錯誤。而在實施了有效修復後,測試團隊將再次檢查系統,以確保具有修復功效的代碼能夠正常工作,且不會影響到其他模塊與功能(該過程便是回歸測試)。根據上述的場景,我們來討論其中的登錄驗證功能,即:用戶輸入其登錄憑據(如用戶名和密碼),然後單擊登錄按鈕。其中,用於測試此功能的分步實施代碼如下:
如下代碼則展示了當我們對該功能性代碼進行測試時,生成的具有登錄功能的類:
上述代碼實為手動回歸測試的示例。如果我們使用諸如Perfecto之類的自動化回歸測試工具,則無需對測試腳本進行硬編碼。我們只需做到:首先,確定可能用到的回歸測試,並記錄每個測試用例的工作流程。接著,使用Perfecto儀錶板對測試方案進行建模。如下圖所示,我們可以讓Perfecto協助將工作流程轉換為測試腳本。
在工作流程準備就緒後,我們即可執行測試並捕獲結果。而在完成測試之後,Perfecto將返回對應的測試通過或失敗狀態,並為每個執行的命令提供詳細的反饋。據此,您可以相繼開展分析測試結果,生成報告,以及重新測試更改等工作。
自動執行回歸測試的最佳做法
在執行回歸測試時,開發團隊往往會碰到包括:時間與資源有限,測試時間過長,測試用例增多等各方面的挑戰。為了避免「踩坑」,並能夠成功地完成自動化回歸測試,我在此為您羅列了如下實踐建議:
選用可靠的自動化工具,以擴大測試的範圍,並利用其自動化的優勢。在整個項目中採用常規化的測試方案。通過獨立可重用的回歸測試,以節省時間。在修改代碼庫後,應重新運行過往已成功完成的測試。通過定期更新回歸測試包,以確保與更新的產品版本相對應。為每個新發現的錯誤編寫各種測試。確保所有集成測試用例都被包含在回歸測試的套件中。希望上述實踐經驗能夠幫助您平滑地開展回歸測試,並獲得預期的結果。
小結
回歸測試是在減少潛在技術債,並改善軟體項目維護態勢的有效方法。藉助自動化測試工具,開發團隊不但能夠簡化測試的整體工作量,並且可以確保產品在交付到生產環境之前的穩定性與代碼質量。