精準測試與開源工具Jacoco的覆蓋率能力對比

精準測試發表於2019-08-12

導讀:本文根據實際使用情況,簡要分析了精準測試和類Jacoco等傳統白盒工具在設計理念、功能和應用場景的異同點,並闡述了覆蓋率技術如何在新型企業開發體系中,發揮應有的重要作用。

 

覆蓋率技術可以說是測試理論中最基本的技術體系,但由於傳統覆蓋率並沒有很好的適應新型軟體開發模型,導致應用場景越來越窄。比如:Jacoco等同類工具,仍停留在傳統白盒覆蓋技術的技術演化層面,目前基本僅適用在瀑布模式的開發體系下。最新的測試黑馬技術—“精準測試”覆蓋率功能是企業級、面向敏捷迭代場景、全新的覆蓋率技術。它明確提出了用例層級覆蓋率的概念,並將用例層級覆蓋率技術廣泛應用於智慧的測試分析演算法。

     精準測試的專利技術之一:測試用例與程式碼的雙向追溯,可以簡單理解為:所有分析和計算依賴於測試用例維度的覆蓋資訊。它創新性的將覆蓋率統計維度從全域性維度顯示,降維到了測試用例這一細節,使覆蓋率的放大作用遠超出原有能力。它如同放大鏡一樣,使測試分析、測試演算法以及測試資料真正做到一覽無餘,不錯過任何重要細節。

Jacoco 是傳統的白盒覆蓋率工具,不具備將覆蓋率與用例關聯的功能,很遺憾的不具備精準測試的所有高階特性。下面僅就“覆蓋率”這一功能,將精準測試與Jacoco為代表的傳統白盒覆蓋工具進行一個簡單比對:

 

1        覆蓋率分析能力PK 

Jacoco 作為傳統白盒功能的代表,它的應用模式是部署在後臺,採集所有執行程式碼的覆蓋率,所有使用者請求和功能的覆蓋資料為混合統計,範圍僅圍繞在看覆蓋率上。但這種覆蓋資訊的弊端是:它從全系統維度來統計,導致顆粒度太大,無法詳細定位和深度分析覆蓋率的真正問題。

精準測試: 可以像調焦距一樣,在併發訪問的後臺服務中,將某個測試用例的執行路徑分離出來,進行各種細緻分析。它用例級的雙向追溯的覆蓋資訊,帶有執行時序,可以很快定位缺陷發生時刻程式碼的執行路徑(類似於重現單步除錯場景),與此同時,還可以對測試人員的用例執行情況,進行非常精確的程式碼級跟蹤。

 

2        對於敏捷測試的響應能力PK

Jacoco 不適應于敏捷迭代過程對於覆蓋率的企業級需求。當程式碼發生變更後,Jacoco將重新採集覆蓋率,各個釋出版本採集的結果孤立存在。現代企業通常每天會發布多個版本,孤島式無對比分析的覆蓋率結果,價值不大。因為每組測試執行通常是在每個版本上跑一部分用例,而不是瀑布模型下在一個版本上進行所有用例的測試。

精準測試: 在覆蓋率計算和應用上有累積覆蓋率、增量覆蓋率、相關覆蓋率、高風險覆蓋分析、可變分母覆蓋等諸多創新辦法,隨時響應敏捷迭代需求。

1 )累積覆蓋率:精準測試可以將多個測試覆蓋進行累計和投影,這樣就無所謂中間釋出多少個版本、每個版本上跑多少個用例,可以自由選擇看一個階段的總體覆蓋率。

2 )增量覆蓋率:由於企業軟體體量龐大,因此無論如何測試都很難滿足100%覆蓋率的要求。所以通常企業更關注的是增量覆蓋率,即新發布版本相比上一個測試版本修改後的程式碼覆蓋情況。精準測試由於每個版本釋出的時候都有詳細的程式碼靜態分析資料支援,因此它可以智慧標識版本差異,並將版本差異的程式碼覆蓋進行高亮顯示,幫助企業關注新增/調整程式碼部分的覆蓋率。

3 )相關覆蓋率:精準測試創新性提出了相關覆蓋率技術,即把一個功能模組相關的程式碼作為計算的分母計算覆蓋率。這樣非常有利於在敏捷迭代場景下,只測試部分功能的覆蓋率分析。相關覆蓋率可用於支援功能模組(用例分類)級別的覆蓋率,從業務角度統計某一個功能模組相關程式碼範圍的覆蓋率,明確指出某一個功能範圍的測試覆蓋充分度,而不是傳統的全域性程式碼覆蓋率。

4 )高風險覆蓋分析:精準測試支援基於靜態資料和動態資料高風險的模組檢出,引導使用者把精力投入到最高風險的模組覆蓋邏輯補充上。

5 )可變分母覆蓋:精準測試支援多種系列的企業級覆蓋計算要求,例如透過介面設定,將某些確定不需要或者無法覆蓋的程式碼(例如暫時保留的無效程式碼)從覆蓋率計算結果中排出,整體重新進行覆蓋率的計算。支援某一個程式碼路徑下(某一程度模組)範圍內的程式碼覆蓋等高階特性。

 

3        覆蓋率視覺化能力 PK

Jacoco 基於位元組碼插裝,沒有全面的程式靜態分析過程,因此無法將覆蓋率透過靜態分析得到的視覺化圖形結合清晰展示覆蓋率資訊。另外,Jacoco必須提供原始碼才能看懂覆蓋率。

精準測試: 具有多種函式呼叫圖,控制流程圖上展示覆蓋率資訊,可以在沒有原始碼的情況下,基於精準分析結果,結合動態覆蓋率檢視,清晰展示程式的覆蓋和執行路徑資訊。

 

4        覆蓋率統計能力 PK

Jacoco 以行覆蓋和分支覆蓋為主。Jacoco是傳統行覆蓋,基本上每行都需要進行插裝。在結合程式碼展示覆蓋的檢視方面,無法取得程式的深入靜態資訊,因此一般只能再程式碼檢視上以顏色表達是否覆蓋。

       精準測試: 支援覆蓋率計算視覺化、多覆蓋率演算法標準及深度的資料分析。

1 )支援覆蓋率計算視覺化,覆蓋率是如何計算的都表達的非常清晰(貢獻覆蓋率的分子分母對應的程式元素、數量),方便使用者去深入理解覆蓋率的含義和資訊。

2 )精準測試支援更加深度的條件以及條件組合級別以及航天級MC/DC的覆蓋率標準。精準測試提供的語句覆蓋是基本塊覆蓋,一個順序的程式碼段因為有靜態分析結果的支撐,只需要一個插裝點。

3 )精準測試對程式的靜態結構有深度的分析資料,因此它的程式碼展示檢視很清晰,程式結構都可以繪製出來,程式碼覆蓋率檢視看起來非常清晰。例如中間沒有跳轉的基本塊會在展示效果上繪製為一個整體,並有是否覆蓋標識,而不是每行都要進行標識。

 

5        高度產品化特性 PK

       Jacoco 屬於開源範疇,採用位元組碼插裝(指令層級),插裝後的程式碼不可見不可維護,出現問題後很難排查原因,很難定位和修復,商用使用風險較高。每次獲取一次覆蓋資料都需要訪問一個網頁地址顯示的重新生成。Jacoco的應用模式是部署在後臺採集,無前端顯示。出現異常時,測試人員無法知曉自己執行的測試用例是否有效。  

       精準測試: 由星雲測試主導研發,自主可控。在產品化特性有不可比擬的優越性:

1 )基於原始碼插裝,插裝程式碼可見且開放,非常利於企業應用排查問題和進行流程整合等。萬一出現特殊語法問題引起插裝問題,使用者可以隨時檢視並自行處理,不會因為極個別情況影響產品應用。

2 )覆蓋率資訊是實時彙總的,透過客戶端可以由多個有檢視許可權的使用者(包括開發、測試以及管理人員)實時查閱。

3 )軟體示波器可實時傳輸測試過程中的資料,對於傳輸過程中測試執行覆蓋率採集是否有效,可進行視覺化的故障排查。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31547070/viewspace-2653373/,如需轉載,請註明出處,否則將追究法律責任。

相關文章