持續測試在商業銀行的本地化實踐
近年來,隨著業務快速交付訴求的增加以及敏捷開發模式的流行,越來越多的企業都采用DevOps模式進行項目開發,DevOps越來越多地出現在各大商業銀行的重點工作中。2020年中國農業銀行建成了從需求、開發、測試到部署的端到端持續交付流水線,并通過了 DevOps 標準持續交付部分的3級評估。探索具有農行特色的DevOps建設之路,仍需在DevOps各個環節的不斷摸索與實踐,尤其在企業落地敏捷及DevOps實踐視為瓶頸的測試環節,只有實現持續測試才能實現持續交付的目標。
持續交付的關鍵——持續測試
持續交付是銀行對軟件研發能力的核心目標,以實現向用戶持續交付有價值的軟件服務,商業銀行以組織、流程和系統為基礎,依托持續交付能力,服務銀行業務目標和戰略。

圖1 持續交付能力
測試環節之所以被企業落地敏捷及DevOps實踐視為瓶頸,是因為在持續交付流水線中,相比持續集成、持續部署等,持續測試的建設相對落后,在測試基礎設施、測試自動化、測試創新上還做得不夠。持續測試是DevOps倡導的6C(Continuous)核心理念之一,是保證銀行DevOps轉型成功的關鍵因素。相對于傳統測試中測試投入集中于測試執行階段,持續測試在研發全生命周期中的測試投入則更為平滑連續。強調測試貫穿于整個軟件交付周期的所有活動中持續進行,引導建立跨職能團隊,促進各部門協同工作,持續發現缺陷并迅速修復,提倡盡早測試、不斷測試和自動化測試。
商業銀行持續測試體系
自動化測試在商業銀行已推行多年,但在測試方法中占據主要地位的仍然是手工測試,這是因為自動化測試仍然面臨著一些痛點問題,如自動化有成本、穩定性和可靠性不高、測試數據和關聯系統可用性問題等。雖然通過大力發展自動化測試,商業銀行一定程度上實現了回歸測試效率提升,但要滿足持續交付的要求,只有自動化測試還不夠。建立持續測試體系,不僅能夠解決上述痛點問題,還能以恰到好處的測試、最快的速度覆蓋交付所面臨的業務風險,給研發團隊提供快速的質量反饋。

圖2 持續測試體系
近兩年來,商業銀行的DevOps建設走向深入,持續測試體系已初步構建完成。從軟件產品質量模型角度出發建立測試策略模型,對測試體系形成自上而下的整體統籌,進一步確定在持續迭代的測試活動中,該驗證哪些質量屬性、采用哪些測試方法、運用哪些測試工具、達成哪些質量目標,可以從根本上提升測試充分性,達成質效合一的目標。持續測試體系主要包含四個方面。
1.手工測試。自動化測試并不能完全替代手工測試,一些功能的自動化工具支持度不高,一些功能使用探索性測試反而更加快速靈活,一些需要主觀感受的用戶體驗測試也離不開手工。借助TMOCK工具,可基于UI設計圖快速開展前端測試和體驗性測試,而不依賴于后端開發完成。由此在開發早期就獲得UI用戶體驗反饋,快速定版UI,提升研發效能。
2.自動化測試。功能測試中,擎云平臺作為自動化測試平臺UI級/API級自動化的設計、執行和結果分析,AUIT作為擎云平臺錄制/回放模式的補充,用于支持敏捷研發模式的UI自動化測試;性能測試中,Xmeter作為性能測試平臺完成性能腳本生成和壓力模擬,輔以性能監控工具進行測試結果搜集;安全測試中,安全漏洞掃描工具用于系統安全診斷,滲透測試工具用于模擬系統外部攻擊;可靠性測試中,借助混沌工程測試工具完成實驗,在可控范圍內注入異常場景,驗證系統彈性,發現系統未知缺陷,驗證應急手段的有效性。
3.測試服務。數據管理服務,用于在持續測試中縮短測試數據的創建和維護時間,擎云平臺實現了測試數據與腳本分離,借助數據抽象和數據資源池達到了測試數據與環境無關;環境管理服務,擎云平臺實現了測試環境自管理,環境可用性心跳監控機制;MOCK服務,依托服務虛擬化技術,被測試對象依賴的系統組件不能被正常訪問的情況下,保證測試環境和測試數據問題不影響測試的速度、準確性和完整性,TMOCK實現了對測試請求數據的解耦和對關聯系統環境的解耦,還可模擬測試環境中的極端和異常條件下的行為,以覆蓋更多的測試場景。
4.測試管理。測試過程管理,基于DevOps工程實踐,依托以ITA為主的管理鏈、以TFS為主的研發鏈,測試設計積累的測試用例,在ITA完成測試評審后,與測試執行發現的測試缺陷,統一納入TFS資產管理;測試度量,應用精準測試技術,使用Jacoco開展代碼覆蓋統計與分析,改進自動化測試案例以提升測試充分性。統計測試全生命周期度量指標,作為DevOps流水線質量門禁,并與質量目標對比完成產品質量評價。
持續測試的本地化實踐
持續測試不能簡單采取“拿來主義”,商業銀行持續測試的本地化實踐也因地制宜、各具特色。測試自動化作為持續測試的核心,如何達到盡早測試、測試左移的目標,實現測試可以隨時開展、平滑有序、快速高效,商業銀行進行了如下探索與實踐。

圖3 軟件產品質量模型
測試沒有必要也無法窮盡所有分支路徑,既不多測也不少測的測試策略是持續測試的目標之一。通過制定基于質量模型的測試策略,定義測試范圍、測試重點和質量目標,自上而下的實現對軟件產品的整體質量把控。從產品價值和風險的角度出發,不同價值類型的需求(質量要求)是不一樣的,首先按照產品價值可以對系統功能進行分類,再通過歷史版本測試情況風險分析,識別問題或風險的高發區,測試范圍和測試重點即可確定。
結合測試范圍、測試重點和質量目標,可確定自動化測試分層,測試重點中的功能需完成UI自動化測試覆蓋,測試范圍中的全部功能需完成API自動化測試覆蓋。基于某敏捷項目測試實踐,將測試設計活動左移到系統設計階段,利用系統UI設計圖和前后端接口設計文檔快速生成UI自動化測試案例和API自動化測試案例。應用自研的UI自動化測試工具(AUIT,Agile UI automated Testing tool),根據系統UI標注圖和開發框架定制的界面,為所有交互UI元素約定唯一的ID屬性值,創建UI元素素材庫并最終形成可進行自動化案例編寫的測試對象庫,依托測試對象庫設計并生成UI自動化案例,自動化案例執行時按照測試對象庫ID信息進行UI元素定位捕捉。這樣,不但可以省去手工測試案例的設計和執行環節,而且在UI開發完成前就可生成自動化案例。

圖4 傳統測試與持續測試
此外,將測試執行活動左移到系統開發階段,對應于前后端分離開發,利用Mock測試服務和UI/API自動化測試案例,分別完成前端和后端的測試執行,實現前后端分離測試。應用自研的虛擬測試服務工具(TMOCK,MOCK for Testing),為系統測試提供MOCK服務,根據不同的通信協議,完成報文解碼、交易識別、報文校驗、報文編碼,返回報文等操作。在前端開發完成,后端開發尚未完成的情況下,支持使用HTTP+Jason和TCP+NETE協議進行前后端通訊的系統,為待測前端程序提供虛擬后端服務響應,并支持正常業務邏輯、測試數據異常(數據長度、數據類型)、測試報文異常(多參、少參、報文格式)以及系統網絡異常(網絡中斷、延遲)等測試場景,使用UI自動化案例在測試交付前即可完成前端測試;在后端開發完成,關聯系統組件開發尚未完成的情況下,同樣可以為待測后端程序提供虛擬關聯系統服務響應,使用API自動化案例在測試交付前即可完成后端測試。

圖5 TMOCK解決方案框架
待到前后端完成系統聯調和測試交付后,可復用前期積累的UI/API自動化測試案例,即刻完成自動化回歸測試;對于當前自動化測試框架不支持的功能特性,使用少量手工的探索性測試進行補充,快速完成系統測試反饋,較傳統測試縮短了測試周期,提升了交付效率。基于系統開發階段的前后端分離測試,將bug提交在編碼階段,解決了前后端耦合導致缺陷定位成本升高的問題,降低了bug解決成本。
結 語
持續測試在促進團隊協作、縮短交付周期、提升產品質量等方面的作用日趨明顯,展望軟件測試的未來,持續測試是最具確定性的趨勢之一。然而,目前商業銀行所能實現的持續測試和理想中的持續測試還有一定差距,在持續測試體系的落地實踐中,仍然會碰到很多問題,一些環節仍需手工完成,一些流程還不夠平滑連續。商業銀行在持續測試的本地化實踐仍在繼續,經過組織、流程、工具鏈的不斷創新與磨合,相信不久的將來定能實現真正意義的持續測試。