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

導讀:本文根據實際使用情況,簡要分析了精準測試和類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的應用模式是部署在後臺採集,無前端顯示。出現異常時,測試人員無法知曉自己執行的測試用例是否有效。

精準測試:由星雲測試(www.teststars.cc) 主導研發,自主可控。在產品化特性有不可比擬的優越性:
1)基於源碼插裝,插裝代碼可見且開放,非常利於企業應用排查問題和進行流程整合等。萬一出現特殊語法問題引起插裝問題,用戶可以隨時查看並自行處理,不會因爲極個別情況影響產品應用。

2)覆蓋率信息是實時彙總的,通過客戶端可以由多個有查看權限的用戶(包括開發、測試以及管理人員)實時查閱。
 
3)軟件示波器可實時傳輸測試過程中的數據,對於傳輸過程中測試執行覆蓋率採集是否有效,可進行可視化的故障排查。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章