楠木軒

精準化測試技術解讀與平台構建最佳實踐 & 測試開發前沿趨勢

由 司徒元基 發佈於 科技

一、精準化測試是什麼?

傳統的軟件測試技術主要基於測試人員對業務的理解,但由於經驗與真實業務數據的差距,肯定會測試不充分,所以很多情況下,測試結果無法精確保證對軟件質量的定義和判斷。

精準化測試技術從字面理解,就是非常準確的測試,這意味着要用量化的數字説話

精準化測試是一種可追溯的軟件測試技術。通過構建一套計算機測試輔助分析系統,對測試過程的活動進行監控,將採集到的監控數據進行分析,得到精準的量化數據,使用這些量化數據進行質量評價,利用這些分析數據可以促進測試過程的不斷完善,形成度量及分析閉環。

精準化測試的核心思想就是:使用非常精確和智能的軟件來解決軟件測試的問題,從根本上引領軟件測試從經驗型方法向技術型方法的轉型。質量的評估不再靠經驗,而是通過精準的數據來判定。

二、精準化測試的發展歷史

早在十年之前,測試行業就已經有很多人陸續投入精準化測試的技術研究。2019 年開始,精準化測試在業界大熱,其中,螞蟻金服的兩位同學周為、翟帥在 MTSC 測試開發大會上分享的《進擊的覆蓋率 —— 實時代碼染色技術》,可以説把精準化測試技術提到了一個新的高度,並迅速推動了在業界的應用普及。

百度利用覆蓋率增量從迴歸數據中提取有效覆蓋

精準定位用例數據與覆蓋率關係

代碼行為流建模

星雲測試

有贊集成測試覆蓋率統計實踐

螞蟻金服的代碼實時染色

三、核心技術:代碼調用鏈分析

常見的調用鏈分析方法主要有:

基於 AST 的語法樹分析

基於字節碼分析

調用鏈的動態分析方法:

基於 gdb/jdb 的調試器分析

jvmti/jvmpi

jvm-sandbox、bytebuddy、btrace 等工具

代碼覆蓋率其實是一種丟失了時序結構的調用鏈數據。調用鏈的本質是一種具備調用節點順序的列表,覆蓋率則是為了方便分析把列表降級成了集合。

調用鏈是一種圖結構,可以適當的簡化為樹結構方便分析(誰説測試不需要懂數據結構與算法的……)

我們根據代碼的調用鏈,根據一些真實的項目做了一個調用鏈的示意圖,方便大家理解。

調用鏈就是一種帶有分支的流程圖。測試工程師提到的調用鏈,與架構師提到的調用鏈並不完全相同。

比如類似 Skywalking、Zipkin 之類的全鏈路 Trace 系統是可以追蹤代碼的執行鏈路,多數可以到函數級別,而測試工程師要分析代碼的與業務之間的關係,需要追蹤到代碼行與分支級別。

四、用例與代碼關聯

建立關聯關係的步驟:

執行用例

獲取用例對應的代碼調用鏈

建模分析

精準化的關鍵,其實就是對業務、用例、代碼進行關聯建模並追蹤他們的變化。

首先建立業務、用例、代碼調用鏈三者的關聯數據表,可以簡單理解為 Python 的三元組,或者 Java 的hashmap。

如果業務不清晰,可以暫時用用例代替業務,如果調用鏈沒分析清楚,可以暫時用覆蓋率數據作為替代。

五、精準化測試應用場景

精準化測試的用途:

根據代碼變更定位用例範圍

更準確深入的覆蓋被測業務

白盒探索式測試

從線上數據反推有效測試用例

當新版本發佈的時候,代碼會發生變化(數據變化是另外一大話題,暫時忽略),首先分析代碼範圍,然後分析變化點散落在哪些用例中,這樣就可以重點關注被影響波及的測試用例集合,這樣比全面迴歸測試能更高效精準的發現問題

同時根據新增代碼的變更範圍,我們也可以瞭解到我們漏測的部分,並加強未覆蓋新增代碼的測試驗證。在白盒層面我們就可以建立起來具備快速探索與反饋的測試活動,有效避免漏測

同樣利用線上的數據,也可以幫助我們反推測試用例,比如百度曾經就利用覆蓋率拆分技術,把為期2天的全量回歸測試優化為 2 個小時的迴歸測試。把每個測試用例對應的覆蓋率或者調用鏈拆分,根據覆蓋率的不同可以自動劃分為不同的等價類,從每個等價類集合中取少數代表性用例即可。通過這種方式,可以有效彌補人工設計用例的不足

六、打造自己的精準化測試平台

越來越多的公司開始招聘測試開發工程師,甚至是通過研發工程師來設計自己的精準化測試平台。精準測試雖然起源於測試團隊,但是他的應用價值是超越測試,橫跨整個產品開發團隊的,所以精準化測試的平台會是大勢所趨

為了照顧很多中小公司的同學,霍格沃茲測試學院為大家研究出了一套簡化的、適合中小公司使用的平民版精準化測試技術體系,可以用來簡單的實現精準化測試方案:

使用 SonarQube 作為覆蓋率與測試用例的分析平台

使用 JaCoCo 作為代碼覆蓋率的分析工具

使用 JaCoCo-cli 實現對單個用例的覆蓋率收集

使用 Scanner 完成覆蓋率導入

調整 SonarQube 平台中覆蓋率展示的信息,加入關聯測試用例的展示,方便在未覆蓋的代碼附近可以找到最接近的測試用例

總結一下,精準化測試不僅僅是測試左移的技術,它同時也可以是一種測試右移的實踐。

線上數據的提煉、線上用户的調用鏈分析,也會逐漸成為未來線上測試的一種趨勢,到時候就會需要一些強大的大數據平台做質量分析。