質(zhì)量保障: 聊一聊精準測試!

作者| 舒暢,中國工商銀行成研產(chǎn)品部
來源| 成研e家
一、背景與概念
隨著軟件測試行業(yè)的長足發(fā)展,測試理念、技術(shù)都在發(fā)生著日新月異的變化。因此一套完整的自動化測試用例對于每個軟件公司都是不可或缺的,然而雖然有如此規(guī)模宏大的自動化案例集資源投入,同時也有大量人力的投入,但是當版本更新時,無法精確知曉哪些功能受到影響,進而不能精準選取測試用例。
而金融科技更是發(fā)展迅猛,服務(wù)于銀行業(yè)的軟件越來越多,需求迭代越來越快,系統(tǒng)架構(gòu)越來越復(fù)雜,測試周期也越來越短;而銀行業(yè)務(wù)系統(tǒng)有著業(yè)務(wù)鏈條長、系統(tǒng)結(jié)構(gòu)復(fù)雜、無法完全解耦等特性,因此基于經(jīng)驗是無法精準選取測試用例的,不足以保障測試范圍準確。
為了解決這些難點,精準測試在2012年被提出,所謂精準測試是一種可追溯的軟件測試技術(shù),就是借助一定的技術(shù)手段,通過算法輔助對傳統(tǒng)的軟件測試過程進行可視化、分析和優(yōu)化的流程,其核心思想就是對測試過程的活動進行監(jiān)測,將采集到的監(jiān)控數(shù)據(jù)進行分析,得到精準的量化數(shù)據(jù)進行質(zhì)量評價。
程序的微小變動也會帶來新的測試工作,通過經(jīng)驗進行質(zhì)量評估很容易引入問題,而全量的回歸測試也難以負荷。下圖是目前的測試工作現(xiàn)狀。

因此使用精準的數(shù)據(jù)來判斷,讓測試人員精準地知道程序變更、測試范圍、測試覆蓋完整性等等,最終提供更加有效地測試分析結(jié)果。精準測試的目標如下圖所示。

目標一是通過識別變更代碼獲取變更程序。精準測試可以更精確地圈定需要回歸測試的用例范圍。
目標二 是精準測試基于變更程序或調(diào)用鏈維度提供測試度量結(jié)果,用以判斷本次測試的變更程序代碼是否覆蓋完全,進而幫助測試更精準地評估測試風(fēng)險,并形成測試準出標準。
目標三 是精準定位錯誤原因,在測試用例執(zhí)行時,精準測試針對失敗案例,提供可視化調(diào)用關(guān)系,幫助測試快速定位問題,提升開發(fā)測試的協(xié)同效能。
綜上,精準測試在測試范圍分析、測試度量和定位錯誤等方面提供分析手段,使得測試工作事半功倍。
二、業(yè)界實踐
(一)愛奇藝精準測試體系
愛奇藝精準測試支持客戶端和服務(wù)端多端使用,支持手工和自動化場景,內(nèi)部多個平臺聯(lián)動,打通整體使用流程,可以準確獲取單個用例的代碼覆蓋。服務(wù)端能做到系統(tǒng)級別串聯(lián),客戶端則能實現(xiàn)多組件整合,已經(jīng)實現(xiàn)用例和代碼分支或代碼塊級別的關(guān)聯(lián)。
下圖為愛奇藝精準測試體系整體架構(gòu)圖:精準測試服務(wù)是核心,負責(zé)建立用例和代碼映射關(guān)系知識庫并根據(jù)git提交記錄計算測試范圍和影響范圍。不同的終端用到的代碼覆蓋率工具也不相同,在與外圍平臺的集成上,服務(wù)端可以和環(huán)境平臺相結(jié)合,通過環(huán)境平臺實現(xiàn)代碼覆蓋率工具的安裝;客戶端則可以和構(gòu)建平臺做集成。

(二)字節(jié)跳動精準測試實踐

上圖為字節(jié)跳動研發(fā)團隊常見的研發(fā)流程。需求研發(fā)分為了五個階段,精準測試主要在自測和功能驗收測試和回歸測試節(jié)點。在三個節(jié)點中,業(yè)務(wù)通過請求SmartEye服務(wù),可以分別獲取到自測推薦用例、功能測試推薦用例以及回歸測試推薦用例。其中,自測用例和功能測試推薦用例用于驗證代碼變更是否引起存量程序功能異常,將功能缺陷發(fā)現(xiàn)前置,為研發(fā)團隊爭取更多的修復(fù)時間?;貧w測試用例推薦用來精簡回歸測試人力,幫助業(yè)務(wù)節(jié)省回歸測試人效。

上圖為精準測試整體方案,Code Graph平臺為SmartEye提供數(shù)據(jù)支撐,Code Graph平臺的雙端靜態(tài)代碼調(diào)用鏈分析能力與整體調(diào)用鏈路拓撲數(shù)據(jù),完成基于MR的變動DIFF分析以及上下游調(diào)用鏈分析,并針對變動DIFF部分,完成代碼變動率的統(tǒng)計。
三、行內(nèi)現(xiàn)狀及發(fā)展
總體而言行內(nèi)(中國工商銀行)的精準測試目前缺少用例錄制以及用例推薦功能。
1、覆蓋率采集類型
我行在覆蓋率采集方面有較深入的探索,目前支持多語言的覆蓋率采集,包括JAVA、存儲過程、CTP與MYBATIS。
2、使用覆蓋率工具代碼染色系統(tǒng)輔助測試
從GIT提交的JAVA變更獲取到變更方法的維度,并支持采集變更存過,變更Mybatis方法,變更CTP文件。目前的覆蓋率工具通過代碼染色直觀地展現(xiàn)了配置應(yīng)用多種語言的增量覆蓋率情況,為降低系統(tǒng)上線風(fēng)險提供支持。

配置接入代碼染色的應(yīng)用,可直觀獲取到對應(yīng)月度版本的變更程序方法級別覆蓋率,將此作為精準測試的實踐數(shù)據(jù),在后續(xù)可展開更深度的分析,并不斷擴大推廣規(guī)模以及深度,增強精準測試的應(yīng)用效果。
3、支持靜態(tài)調(diào)用鏈解析,全鏈路精準上 ,工行探索異構(gòu)調(diào)用鏈之間的關(guān)系,給出的測試分析更為全面。
4、靜態(tài)調(diào)用鏈解析 包括 CTP、存過、JAVA三大類
5、同行內(nèi)平臺打通部署
在行內(nèi)環(huán)境集成之上,現(xiàn)已嵌入PAAS平臺,改造后的應(yīng)用只需要配置三個PAAS參數(shù)即可下載工具包,使用服務(wù)。若為非云環(huán)境的was,我們會從cmdb上取到配置信息做夜間的自動部署。

該示意圖展現(xiàn)了數(shù)據(jù)流向,最底層的Docker鏡像解析服務(wù)通過解析.dockfile文件獲取字節(jié)碼內(nèi)容;向上是數(shù)據(jù)采集,客戶端采集到的覆蓋率結(jié)果通過覆蓋率集群輸送到消息中間件支上,同時靜態(tài)調(diào)用鏈解析服務(wù),會進行一個靜態(tài)文件的解析;再向上是數(shù)據(jù)存儲層,將覆蓋率數(shù)據(jù)存在redis上,把海量覆蓋數(shù)據(jù),調(diào)用鏈數(shù)據(jù)存在hbase里面,環(huán)境相關(guān)的方法信息存在oracle里面;然后是服務(wù)層,根據(jù)擁有的數(shù)據(jù)提供實時變更方法覆蓋率采集展示,投產(chǎn)日維度覆蓋率報表,一級入度調(diào)用鏈覆蓋報表三大功能。
四、進一步建設(shè)
1、目前的變更影響分析中,主要是基于靜態(tài)調(diào)用鏈分析,但靜態(tài)代碼存在局限性,如反射,未來還需要進一步結(jié)合動態(tài)代碼分析的結(jié)果進行修正和補充調(diào)用鏈。
2、精準測試智能化,主要體現(xiàn)在測試用例推薦方面,準確地推薦案例,形成“精準分析->自動化測試->覆蓋度量”地測試閉環(huán)。目前中國工商銀行內(nèi)也在推進這方面發(fā)展,上研已提出“智能規(guī)范推送工具”基于現(xiàn)有的需求數(shù)據(jù)、案例內(nèi)容、測試規(guī)范庫的信息進行智能化提取,在無需額外投入的情況下,實現(xiàn)智能化案例推薦,用以提高測試效能。
3、在服務(wù)層的三項服務(wù)基礎(chǔ)上進行拓展,基于數(shù)據(jù)基礎(chǔ)層提供的數(shù)據(jù)支持,提供全鏈路精準打通不通異構(gòu)程序間的關(guān)系,支持微服務(wù)之間的調(diào)度,全方位度量包含調(diào)用鏈的測試分析。
END
所有原創(chuàng)文章 第一時間發(fā)布至此公眾號「測試開發(fā)技術(shù)」
長按二維碼/微信掃碼 添加作者
