文/于曉虹
大型系統承載用戶量大,處理海量數據,需支撐大量業務需求,系統質量及穩定性要求極高,隨之對軟件研發質量、測試質量都有很高要求。一般講,傳統開發模式下,測試要涵蓋單元測試、功能測試、冒煙測試、回歸測試等類別,大型系統測試任務可達上萬項。在業務復雜度和系統規模不斷增加的情況下,系統質量的穩定,一開始主要依賴不斷增加人工測試成本。但成本投入是有限的,同時人工測試的限制也越來越明顯,比如要不斷重復執行用例,比如要覆蓋越多的測試用例,這些都導致測試時間越來越長,保持穩定的系統質量越來越不容易。與此同時,敏捷開發模式在項目中越來越有必要,業務發展要求需求要做到快速響應、快速支撐、高質量交付。對測試進行有效管理,就具體體現在對測試任務良好的過程管理和測試效能最大化上。
面臨這種傳統開發模式和敏捷開發模式的雙態運行挑戰,筆者所在項目開展了項目自動化測試建設的工作,通過流程、管理、團隊與工具四大關鍵要素的優化與協同,通過人工測試與自動化測試的結合運用,經過幾個階段,形成傳統人工測試與自動化測試優勢互補的雙保障測試體系,建立敏捷高效的測試流程,提高業務支撐速度,取得良好的業務效果;大幅提升測試產能,提升軟件交付的效率與質量,實現全面智能保障系統質量,確保系統穩定運行,并沉淀企業DevOps最佳實踐。
第一階段,以實用性為主導思想,首先在冒煙測試、回歸測試這些測試工作中,對規則比較明確,重復的機械的工作,進行自動化,把人力從重復性的工作中解脫出來。這一階段,人工測試無論在功能測試,還是冒煙、回歸測試中,仍完成主要工作量。進行自動化測試的探索,針對前臺頁面和后臺程序,采取了分而治之的自動化測試理念。前臺界面主要采取QTP腳本錄制結合Jenkins調度的方法,后臺程序主要通過搭建框架,通過界面可視化實現腳本錄入及自動化調度腳本。將冒煙測試、回歸測試的核心測試用例形成了自動化腳本,建立了初步的自動化測試用例庫,并簡單實現測試計劃構建和調度。
通過自動化測試替代人工在冒煙測試和回歸測試工作中的投入,解決傳統手工測試方法效率較低、占用人力資源較大等問題,通過自動化測試提升了回歸測試、穩定性測試以及兼容性測試的工作效率,有效提升測試產能。
第二階段,結合容器化,實現持續集成的結合。人工測試進行功能測試,自動化測試擴大測試覆蓋面。隨著容器化的推廣,應用的自動化編譯、部署等持續集成工作展現出在快速部署和自動化測試方面的優勢。通過業務梳理,將大部分測試用例自動化,并結合持續集成,通過自動化測試工具開發,貫穿代碼開發、自動構建、自動測試的流程。自動化測試工具也在不斷提升,用例庫有了較大沉淀。對項目應用敏捷研發模式,提供了保障和支持。
敏捷研發的最終目標是業務需求的快速響應與高質量交付,通過構建雙保障測試體系,確保業務成功,確保系統質量,并快速響應、快速支撐、快速交付,持續測試、持續質量反饋。雙保障測試體系的測試管理模式,作為敏捷開發的最佳實踐,符合敏捷模式的發展方向,取得顯著效果的同時,對敏捷研發流程的廣泛應用有很大借鑒意義。
第三階段,整合不同模塊的自動化測試方法,建立自動化測試平臺。進行自動化測試技術的改進。在這個階段,自動化測試工具發展為自動化測試管理平臺,基于Python自主研發 Smart、Spider、Fitnesse、React等多種自動化引擎,采用容器化、消息隊列、分布式等先進技術,結合項目特點,整合業務邏輯,封裝業務組件,支持多環境、多維度、多語言、多種類場景覆蓋。靈活可擴展性高,腳本開發門檻低,可快速提升驗證點覆蓋度。
充分解決市面上的自動化測試工具,在公司級別的自動化體系建設中適應不良問題。自動化測試框架,高度封裝公共函數,整合業務邏輯,封裝業務組件,支持各種腳本語言,靈活可擴展性高。全面覆蓋前后臺業務,全面覆蓋java和C++,全面覆蓋文件流與消息流。同時通過測試管理的自動化、測試執行的自動化和測試報告及分析的自動化,測試體系涵蓋測試用例、任務管理一體化,測試報告、統計分析一體化。
第四階段,不斷豐富用例庫,進行專項功能、客戶敏感度高的功能、異常數據的自動化測試用例沉淀和積累。自動化測試效果,比較大的依賴于自動化用例的數量。無論是在功能測試中、冒煙測試中,還是回歸測試中,自動化用例數量越多、越豐富,與人工功能測試的結合越好,質量越高,帶來的項目質量收益越高。在完成冒煙測試的自動化全面覆蓋后,有重點的,加大測試用例庫的沉淀,利用自動化測試,更全面的覆蓋功能范圍,人工功能測試的效能充分釋放,兩種測試工作的充分結合,大幅提升測試產能,提升軟件交付的效率與質量,實現全面智能保障系統質量,確保系統穩定運行。
第五階段,發展性能測試的自動化。性能對大型業務系統的重要性不言而喻。在日常需求開發過程中,很容易只關注了功能實現,忽略了性能是否發生了改變,尤其是性能下降。筆者所在項目,一開始會在有較大調整的設計方案出現時,針對性的、專人的進行性能測試。隨著自動化平臺的應用推廣,將性能測試作為了固定的測試內容。在自動化功能測試任務完成后,自動構建性能測試任務并執行,從而識別出每個需求所進行的代碼修改對系統性能的影響。
通過幾個階段的實踐,筆者所在項目,建設形成了具有項目特點的自動化測試平臺,從建設初期的只能覆蓋主要冒煙場景的自動化測試,已發展到覆蓋系統功能、流程、性能的自動化回歸測試,已形成一定規模測試用例的用例庫,節省大量人工測試投入,測試覆蓋度大幅提升。隨著自動化應用不斷探索、推進并與現有測試管理深度整合,系統在回歸測試、穩定性測試、冒煙測試、性能測試的工作效率顯著提升。自動化測試能夠持續、及時的對軟件質量情況進行反饋,在保障產品質量和持續構建等方面,與人工測試優勢互補,起到舉足輕重的作用。人工測試充分發揮技能和用戶經驗,重點應用于功能測試,保證業務成功。通過結合人工測試及自動化測試,實現了測試任務良好的過程管理和測試效能最大化、持續質量反饋,全面體現降低系統質量風險的價值。
在人工測試與自動化測試結合運用的解決方案中,也還存在一些問題,道阻且長。比如自動化測試的維護投入,自動化測試要隨著業務、系統功能的變化而不斷更新,自動化測試用例的適用性也要不斷判斷和調整,這都需要對自動化測試不斷投入,要保持穩定的自動化測試開發團隊;自動化測試的準確性測試及驗證,也是必須要考慮的問題,如果自動化測試的準確性不能保證,對測試質量將造成持續和大范圍的影響,筆者所在項目主要通過測試自動化測試用例的方式來保證。隨著自動化測試用例的不斷增加,自動化測試用例執行效率也要不斷提升,要能夠滿足項目對測試結果采集的時長要求,可以通過對自動化測試平臺的優化以及自動化測試用例選取策略兩方面共同實現。
總之,敏捷時代的來臨,自動化測試必不可少,人工測試也依然不可替代。實踐和研究符合系統要求的結合方式,才能帶來最大的質量收益。也非常推薦業內已經實踐研究的成果,比如“對新功能進行靈活性高的手工測試,而對原有功能進行自動化回歸測試是目前看來最合理的一種手工測試與自動化測試的分工”。傳統人工測試與自動化測試優勢互補的雙保障測試體系,重點結合傳統人工測試與自動化測試的不同特點,人工測試充分發揮技能和用戶經驗,重點應用于功能測試,保證業務成功;自動化測試主要用于擴大測試覆蓋面,重點應用于冒煙測試、回歸測試,有效降低人工測試成本。從而實現全面智能保障系統質量的目標。希望本篇能對其他項目有一定的借鑒意義。