導讀:本文根據實際使用狀況,簡要分析了精準測試和類Jacoco等傳統白盒工具在設計理念、功能和應用場景的異同點,並闡述了覆蓋率技術如何在新型企業開發體系中,發揮應有的重要做用。
覆蓋率技術能夠說是測試理論中最基本的技術體系,但因爲傳統覆蓋率並無很好的適應新型軟件開發模型,致使應用場景愈來愈窄。好比:Jacoco等同類工具,仍停留在傳統白盒覆蓋技術的技術演化層面,目前基本僅適用在瀑布模式的開發體系下。最新的測試黑馬技術—「精準測試」覆蓋率功能是企業級、面向敏捷迭代場景、全新的覆蓋率技術。它明確提出了用例層級覆蓋率的概念,並將用例層級覆蓋率技術普遍應用於智能的測試分析算法。
精準測試的專利技術之一:測試用例與代碼的雙向追溯,能夠簡單理解爲:全部分析和計算依賴於測試用例維度的覆蓋信息。它創新性的將覆蓋率統計維度從全局維度顯示,降維到了測試用例這一細節,使覆蓋率的放大做用遠超出原有能力。它如同放大鏡同樣,使測試分析、測試算法以及測試數據真正作到盡收眼底,不錯過任何重要細節。
Jacoco是傳統的白盒覆蓋率工具,不具有將覆蓋率與用例關聯的功能,很遺憾的不具有精準測試的全部高級特性。
下面僅就「覆蓋率」這一功能,將精準測試與Jacoco爲表明的傳統白盒覆蓋工具進行一個簡單比對: 前端
Jacoco:做爲傳統白盒功能的表明,它的應用模式是部署在後臺,採集全部執行代碼的覆蓋率,全部用戶請求和功能的覆蓋數據爲混合統計,範圍僅圍繞在看覆蓋率上。但這種覆蓋信息的弊端是:它從全系統維度來統計,致使顆粒度太大,沒法詳細定位和深度分析覆蓋率的真正問題。
精準測試:能夠像調焦距同樣,在併發訪問的後臺服務中,將某個測試用例的執行路徑分離出來,進行各類細緻分析。它用例級的雙向追溯的覆蓋信息,帶有執行時序,能夠很快定位缺陷發生時刻代碼的執行路徑(相似於重現單步調試場景),與此同時,還能夠對測試人員的用例執行狀況,進行很是精確的代碼級跟蹤。算法
Jacoco:不適應于敏捷迭代過程對於覆蓋率的企業級需求。當代碼發生變動後,Jacoco將從新採集覆蓋率,各個發佈版本採集的結果孤立存在。現代企業一般天天會發布多個版本,孤島式無對比分析的覆蓋率結果,價值不大。由於每組測試執行一般是在每一個版本上跑一部分用例,而不是瀑布模型下在一個版本上進行全部用例的測試。
精準測試:在覆蓋率計算和應用上有累積覆蓋率、增量覆蓋率、相關覆蓋率、高風險覆蓋分析、可變分母覆蓋等諸多創新辦法,隨時響應敏捷迭代需求。
1)累積覆蓋率:精準測試能夠將多個測試覆蓋進行累計和投影,這樣就無所謂中間發佈多少個版本、每一個版本上跑多少個用例,能夠自由選擇看一個階段的整體覆蓋率。
2)增量覆蓋率:因爲企業軟件體量龐大,所以不管如何測試都很難知足100%覆蓋率的要求。因此一般企業更關注的是增量覆蓋率,即新發布版本相比上一個測試版本修改後的代碼覆蓋狀況。精準測試因爲每一個版本發佈的時候都有詳細的代碼靜態分析數據支持,所以它能夠智能標識版本差別,並將版本差別的代碼覆蓋進行高亮顯示,幫助企業關注新增/調整代碼部分的覆蓋率。
3)相關覆蓋率:精準測試創新性提出了相關覆蓋率技術,即把一個功能模塊相關的代碼做爲計算的分母計算覆蓋率。這樣很是有利於在敏捷迭代場景下,只測試部分功能的覆蓋率分析。相關覆蓋率可用於支持功能模塊(用例分類)級別的覆蓋率,從業務角度統計某一個功能模塊相關代碼範圍的覆蓋率,明確指出某一個功能範圍的測試覆蓋充分度,而不是傳統的全局代碼覆蓋率。
4)高風險覆蓋分析:精準測試支持基於靜態數據和動態數據高風險的模塊檢出,引導用戶把精力投入到最高風險的模塊覆蓋邏輯補充上。
5)可變分母覆蓋:精準測試支持多種系列的企業級覆蓋計算要求,例如經過界面設置,將某些肯定不須要或者沒法覆蓋的代碼(例如暫時保留的無效代碼)從覆蓋率計算結果中排出,總體從新進行覆蓋率的計算。支持某一個代碼路徑下(某一程度模塊)範圍內的代碼覆蓋等高級特性。併發
Jacoco:基於字節碼插裝,沒有全面的程序靜態分析過程,所以沒法將覆蓋率經過靜態分析獲得的可視化圖形結合清晰展現覆蓋率信息。另外,Jacoco必須提供源碼才能看懂覆蓋率。
精準測試:具備多種函數調用圖,控制流程圖上展現覆蓋率信息,能夠在沒有源碼的狀況下,基於精準分析結果,結合動態覆蓋率視圖,清晰展現程序的覆蓋和執行路徑信息。ide
Jacoco:以行覆蓋和分支覆蓋爲主。Jacoco是傳統行覆蓋,基本上每行都須要進行插裝。在結合代碼展現覆蓋的視圖方面,沒法取得程序的深刻靜態信息,所以通常只能再代碼視圖上以顏色表達是否覆蓋。
精準測試:支持覆蓋率計算可視化、多覆蓋率算法標準及深度的數據分析。
1)支持覆蓋率計算可視化,覆蓋率是如何計算的都表達的很是清晰(貢獻覆蓋率的分子分母對應的程序元素、數量),方便用戶去深刻理解覆蓋率的含義和信息。
2)精準測試支持更加深度的條件以及條件組合級別以及航天級MC/DC的覆蓋率標準。精準測試提供的語句覆蓋是基本塊覆蓋,一個順序的代碼段由於有靜態分析結果的支撐,只須要一個插裝點。
3)精準測試對程序的靜態結構有深度的分析數據,所以它的代碼展現視圖很清晰,程序結構均可以繪製出來,代碼覆蓋率視圖看起來很是清晰。例如中間沒有跳轉的基本塊會在展現效果上繪製爲一個總體,並有是否覆蓋標識,而不是每行都要進行標識。函數
Jacoco:屬於開源範疇,採用字節碼插裝(指令層級),插裝後的代碼不可見不可維護,出現問題後很難排查緣由,很難定位和修復,商用使用風險較高。每次獲取一次覆蓋數據都須要訪問一個網頁地址顯示的從新生成。
Jacoco的應用模式是部署在後臺採集,無前端顯示。出現異常時,測試人員沒法知曉本身執行的測試用例是否有效。
精準測試:由星雲測試(www.teststars.cc) 主導研發,自主可控。在產品化特性有不可比擬的優越性:
1)基於源碼插裝,插裝代碼可見且開放,很是利於企業應用排查問題和進行流程整合等。萬一出現特殊語法問題引發插裝問題,用戶能夠隨時查看並自行處理,不會由於極個別狀況影響產品應用。
2)覆蓋率信息是實時彙總的,經過客戶端能夠由多個有查看權限的用戶(包括開發、測試以及管理人員)實時查閱。
3)軟件示波器可實時傳輸測試過程當中的數據,對於傳輸過程當中測試執行覆蓋率採集是否有效,可進行可視化的故障排查。 工具