導(dǎo)讀:本文根據(jù)實際使用情況,簡要分析了精準(zhǔn)測試和類Jacoco等傳統(tǒng)白盒工具在設(shè)計理念、功能和應(yīng)用場景的異同點(diǎn),并闡述了覆蓋率技術(shù)如何在新型企業(yè)開發(fā)體系中,發(fā)揮應(yīng)有的重要作用。
覆蓋率技術(shù)可以說是測試?yán)碚撝凶罨镜募夹g(shù)體系,但由于傳統(tǒng)覆蓋率并沒有很好的適應(yīng)新型軟件開發(fā)模型,導(dǎo)致應(yīng)用場景越來越窄。比如:Jacoco等同類工具,仍停留在傳統(tǒng)白盒覆蓋技術(shù)的技術(shù)演化層面,目前基本僅適用在瀑布模式的開發(fā)體系下。最新的測試黑馬技術(shù)—“精準(zhǔn)測試”覆蓋率功能是企業(yè)級、面向敏捷迭代場景、全新的覆蓋率技術(shù)。它明確提出了用例層級覆蓋率的概念,并將用例層級覆蓋率技術(shù)廣泛應(yīng)用于智能的測試分析算法。
精準(zhǔn)測試的專利技術(shù)之一:測試用例與代碼的雙向追溯,可以簡單理解為:所有分析和計算依賴于測試用例維度的覆蓋信息。它創(chuàng)新性的將覆蓋率統(tǒng)計維度從全局維度顯示,降維到了測試用例這一細(xì)節(jié),使覆蓋率的放大作用遠(yuǎn)超出原有能力。它如同放大鏡一樣,使測試分析、測試算法以及測試數(shù)據(jù)真正做到一覽無余,不錯過任何重要細(xì)節(jié)。
Jacoco是傳統(tǒng)的白盒覆蓋率工具,不具備將覆蓋率與用例關(guān)聯(lián)的功能,很遺憾的不具備精準(zhǔn)測試的所有高級特性。
下面僅就“覆蓋率”這一功能,將精準(zhǔn)測試與Jacoco為代表的傳統(tǒng)白盒覆蓋工具進(jìn)行一個簡單比對:
Jacoco:作為傳統(tǒng)白盒功能的代表,它的應(yīng)用模式是部署在后臺,采集所有執(zhí)行代碼的覆蓋率,所有用戶請求和功能的覆蓋數(shù)據(jù)為混合統(tǒng)計,范圍僅圍繞在看覆蓋率上。但這種覆蓋信息的弊端是:它從全系統(tǒng)維度來統(tǒng)計,導(dǎo)致顆粒度太大,無法詳細(xì)定位和深度分析覆蓋率的真正問題。
精準(zhǔn)測試:可以像調(diào)焦距一樣,在并發(fā)訪問的后臺服務(wù)中,將某個測試用例的執(zhí)行路徑分離出來,進(jìn)行各種細(xì)致分析。它用例級的雙向追溯的覆蓋信息,帶有執(zhí)行時序,可以很快定位缺陷發(fā)生時刻代碼的執(zhí)行路徑(類似于重現(xiàn)單步調(diào)試場景),與此同時,還可以對測試人員的用例執(zhí)行情況,進(jìn)行非常精確的代碼級跟蹤。
Jacoco:不適應(yīng)于敏捷迭代過程對于覆蓋率的企業(yè)級需求。當(dāng)代碼發(fā)生變更后,Jacoco將重新采集覆蓋率,各個發(fā)布版本采集的結(jié)果孤立存在?,F(xiàn)代企業(yè)通常每天會發(fā)布多個版本,孤島式無對比分析的覆蓋率結(jié)果,價值不大。因為每組測試執(zhí)行通常是在每個版本上跑一部分用例,而不是瀑布模型下在一個版本上進(jìn)行所有用例的測試。
精準(zhǔn)測試:在覆蓋率計算和應(yīng)用上有累積覆蓋率、增量覆蓋率、相關(guān)覆蓋率、高風(fēng)險覆蓋分析、可變分母覆蓋等諸多創(chuàng)新辦法,隨時響應(yīng)敏捷迭代需求。
1)累積覆蓋率:精準(zhǔn)測試可以將多個測試覆蓋進(jìn)行累計和投影,這樣就無所謂中間發(fā)布多少個版本、每個版本上跑多少個用例,可以自由選擇看一個階段的總體覆蓋率。
2)增量覆蓋率:由于企業(yè)軟件體量龐大,因此無論如何測試都很難滿足100%覆蓋率的要求。所以通常企業(yè)更關(guān)注的是增量覆蓋率,即新發(fā)布版本相比上一個測試版本修改后的代碼覆蓋情況。精準(zhǔn)測試由于每個版本發(fā)布的時候都有詳細(xì)的代碼靜態(tài)分析數(shù)據(jù)支持,因此它可以智能標(biāo)識版本差異,并將版本差異的代碼覆蓋進(jìn)行高亮顯示,幫助企業(yè)關(guān)注新增/調(diào)整代碼部分的覆蓋率。
3)相關(guān)覆蓋率:精準(zhǔn)測試創(chuàng)新性提出了相關(guān)覆蓋率技術(shù),即把一個功能模塊相關(guān)的代碼作為計算的分母計算覆蓋率。這樣非常有利于在敏捷迭代場景下,只測試部分功能的覆蓋率分析。相關(guān)覆蓋率可用于支持功能模塊(用例分類)級別的覆蓋率,從業(yè)務(wù)角度統(tǒng)計某一個功能模塊相關(guān)代碼范圍的覆蓋率,明確指出某一個功能范圍的測試覆蓋充分度,而不是傳統(tǒng)的全局代碼覆蓋率。
4)高風(fēng)險覆蓋分析:精準(zhǔn)測試支持基于靜態(tài)數(shù)據(jù)和動態(tài)數(shù)據(jù)高風(fēng)險的模塊檢出,引導(dǎo)用戶把精力投入到最高風(fēng)險的模塊覆蓋邏輯補(bǔ)充上。
5)可變分母覆蓋:精準(zhǔn)測試支持多種系列的企業(yè)級覆蓋計算要求,例如通過界面設(shè)置,將某些確定不需要或者無法覆蓋的代碼(例如暫時保留的無效代碼)從覆蓋率計算結(jié)果中排出,整體重新進(jìn)行覆蓋率的計算。支持某一個代碼路徑下(某一程度模塊)范圍內(nèi)的代碼覆蓋等高級特性。
Jacoco:基于字節(jié)碼插裝,沒有全面的程序靜態(tài)分析過程,因此無法將覆蓋率通過靜態(tài)分析得到的可視化圖形結(jié)合清晰展示覆蓋率信息。另外,Jacoco必須提供源碼才能看懂覆蓋率。
精準(zhǔn)測試:具有多種函數(shù)調(diào)用圖,控制流程圖上展示覆蓋率信息,可以在沒有源碼的情況下,基于精準(zhǔn)分析結(jié)果,結(jié)合動態(tài)覆蓋率視圖,清晰展示程序的覆蓋和執(zhí)行路徑信息。
Jacoco:以行覆蓋和分支覆蓋為主。Jacoco是傳統(tǒng)行覆蓋,基本上每行都需要進(jìn)行插裝。在結(jié)合代碼展示覆蓋的視圖方面,無法取得程序的深入靜態(tài)信息,因此一般只能再代碼視圖上以顏色表達(dá)是否覆蓋。
精準(zhǔn)測試:支持覆蓋率計算可視化、多覆蓋率算法標(biāo)準(zhǔn)及深度的數(shù)據(jù)分析。
1)支持覆蓋率計算可視化,覆蓋率是如何計算的都表達(dá)的非常清晰(貢獻(xiàn)覆蓋率的分子分母對應(yīng)的程序元素、數(shù)量),方便用戶去深入理解覆蓋率的含義和信息。
2)精準(zhǔn)測試支持更加深度的條件以及條件組合級別以及航天級MC/DC的覆蓋率標(biāo)準(zhǔn)。精準(zhǔn)測試提供的語句覆蓋是基本塊覆蓋,一個順序的代碼段因為有靜態(tài)分析結(jié)果的支撐,只需要一個插裝點(diǎn)。
3)精準(zhǔn)測試對程序的靜態(tài)結(jié)構(gòu)有深度的分析數(shù)據(jù),因此它的代碼展示視圖很清晰,程序結(jié)構(gòu)都可以繪制出來,代碼覆蓋率視圖看起來非常清晰。例如中間沒有跳轉(zhuǎn)的基本塊會在展示效果上繪制為一個整體,并有是否覆蓋標(biāo)識,而不是每行都要進(jìn)行標(biāo)識。
Jacoco:屬于開源范疇,采用字節(jié)碼插裝(指令層級),插裝后的代碼不可見不可維護(hù),出現(xiàn)問題后很難排查原因,很難定位和修復(fù),商用使用風(fēng)險較高。每次獲取一次覆蓋數(shù)據(jù)都需要訪問一個網(wǎng)頁地址顯示的重新生成。
Jacoco的應(yīng)用模式是部署在后臺采集,無前端顯示。出現(xiàn)異常時,測試人員無法知曉自己執(zhí)行的測試用例是否有效。
精準(zhǔn)測試:由星云測試(www.teststars.cc) 主導(dǎo)研發(fā),自主可控。在產(chǎn)品化特性有不可比擬的優(yōu)越性:
1)基于源碼插裝,插裝代碼可見且開放,非常利于企業(yè)應(yīng)用排查問題和進(jìn)行流程整合等。萬一出現(xiàn)特殊語法問題引起插裝問題,用戶可以隨時查看并自行處理,不會因為極個別情況影響產(chǎn)品應(yīng)用。
2)覆蓋率信息是實時匯總的,通過客戶端可以由多個有查看權(quán)限的用戶(包括開發(fā)、測試以及管理人員)實時查閱。
3)軟件示波器可實時傳輸測試過程中的數(shù)據(jù),對于傳輸過程中測試執(zhí)行覆蓋率采集是否有效,可進(jìn)行可視化的故障排查。
創(chuàng)新互聯(lián)www.cdcxhl.cn,專業(yè)提供香港、美國云服務(wù)器,動態(tài)BGP最優(yōu)骨干路由自動選擇,持續(xù)穩(wěn)定高效的網(wǎng)絡(luò)助力業(yè)務(wù)部署。公司持有工信部辦法的idc、isp許可證, 機(jī)房獨(dú)有T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確進(jìn)行流量調(diào)度,確保服務(wù)器高可用性。佳節(jié)活動現(xiàn)已開啟,新人活動云服務(wù)器買多久送多久。