軟件測(cè)試 | 精準(zhǔn)化測(cè)試
精準(zhǔn)化測(cè)試的發(fā)展歷史
精準(zhǔn)化測(cè)試在 2019 年開(kāi)始大熱,在此之前的 10 年里,已經(jīng)陸續(xù)有很多人投入研究,螞蟻金服的兩位 同學(xué)周為、翟帥兩位同學(xué)的實(shí)時(shí)代碼染色技術(shù),把精準(zhǔn)化測(cè)試提高了一個(gè)新的高度,并迅速在業(yè)界大 熱。
百度利用覆蓋率增量從回歸數(shù)據(jù)中提取有效覆蓋
精準(zhǔn)定位用例數(shù)據(jù)與覆蓋率關(guān)系
代碼行為流建模
星云測(cè)試
有贊集成測(cè)試覆蓋率統(tǒng)計(jì)實(shí)踐
螞蟻金服的代碼實(shí)時(shí)染色
代碼調(diào)用鏈分析
常見(jiàn)的調(diào)用鏈分析方法主要有
基于 AST 的語(yǔ)法樹(shù)分析
基于字節(jié)碼分析
調(diào)用鏈的動(dòng)態(tài)分析方法
基于 gdb/jdb 的調(diào)試器分析
jvmti/jvmpi
jvm-sandbox、bytebuddy、btrace 共工具
代碼覆蓋率其實(shí)是一種丟失了時(shí)序結(jié)構(gòu)的調(diào)用鏈數(shù)據(jù)。調(diào)用鏈的本質(zhì)是一種具備調(diào)用節(jié)點(diǎn)順序的列表, 覆蓋率則是為了方便分析把列表降級(jí)成了集合。
調(diào)用鏈?zhǔn)且环N圖結(jié)構(gòu),可以適當(dāng)?shù)暮?jiǎn)化為樹(shù)結(jié)構(gòu)方便分析。根據(jù)代碼的調(diào)用鏈,根據(jù)一些真實(shí)的項(xiàng)目做 了一個(gè)調(diào)用鏈的示意圖,方便大家理解。

調(diào)用鏈就是一種帶有分支的流程圖。測(cè)試工程師提到的調(diào)用鏈,與架構(gòu)師提到的調(diào)用鏈并不完全相同。 比如類似 skywalking、zipkin 之類的全鏈路 trace 系統(tǒng)是可以追蹤代碼的執(zhí)行鏈路,多數(shù)可以到函數(shù)級(jí) 別,而測(cè)試工程師要分析代碼的與業(yè)務(wù)之間的關(guān)系,需要追蹤到代碼行與分支級(jí)別。
用例與代碼關(guān)聯(lián)
建立關(guān)聯(lián)關(guān)系的步驟
執(zhí)行用例
獲取用例對(duì)應(yīng)的代碼調(diào)用鏈
建模分析
精準(zhǔn)化的關(guān)鍵,其實(shí)就是對(duì)業(yè)務(wù)、用例、代碼進(jìn)行關(guān)聯(lián)建模并追蹤他們的變化。
首先建立(業(yè)務(wù),用例,代碼調(diào)用鏈)三者的關(guān)聯(lián)數(shù)據(jù)表,可以簡(jiǎn)單理解為 python 的三元組,或者 java 的 hashmap。如果業(yè)務(wù)不清晰,可以暫時(shí)用用例代替業(yè)務(wù),如果調(diào)用鏈沒(méi)分析清楚,可以暫時(shí)用覆蓋率數(shù) 據(jù)作為替代。
應(yīng)用場(chǎng)景
精準(zhǔn)化測(cè)試的用途
根據(jù)代碼變更定位用例范圍
更準(zhǔn)確深入的覆蓋被測(cè)業(yè)務(wù)
白盒探索式測(cè)試
從線上數(shù)據(jù)反推有效測(cè)試用例
當(dāng)新版本發(fā)布的時(shí)候,代碼會(huì)發(fā)生變化(數(shù)據(jù)變化是另外一大話題,暫時(shí)忽略),首先分析代碼范圍, 然后分析變化點(diǎn)散落在哪些用例中,這樣就可以重點(diǎn)關(guān)注被影響波及的測(cè)試用例集合,這樣比全面回歸 測(cè)試能更高效精準(zhǔn)的發(fā)現(xiàn)問(wèn)題。
同時(shí)根據(jù)新增代碼的變更范圍,我們也可以了解到我們漏測(cè)的部分,并加強(qiáng)未覆蓋新增代碼的測(cè)試驗(yàn) 證。在白盒層面我們就可以建立起來(lái)具備快速探索與反饋的測(cè)試活動(dòng),有效避免漏測(cè)。
同樣利用線上的數(shù)據(jù),也可以幫助我們反推測(cè)試用例,比如百度曾經(jīng)就利用覆蓋率拆分技術(shù),把為期 2 天的全量回歸測(cè)試優(yōu)化為 2 個(gè)小時(shí)的回歸測(cè)試。把每個(gè)測(cè)試用例對(duì)應(yīng)的覆蓋率或者調(diào)用鏈拆分,根據(jù) 覆蓋率的不同可以自動(dòng)劃分為不同的等價(jià)類,從每個(gè)等價(jià)類集合中取少數(shù)代表性用例即可。通過(guò)這種方 式,可以有效彌補(bǔ)人工設(shè)計(jì)用例的不足。
打造自己的精準(zhǔn)化測(cè)試平臺(tái)
越來(lái)越多的公司開(kāi)始招聘測(cè)試開(kāi)發(fā)工程師,甚至是研發(fā)工程師設(shè)計(jì)自己的精準(zhǔn)化測(cè)試平臺(tái),精準(zhǔn)測(cè)試雖 然起源于測(cè)試團(tuán)隊(duì),但是他的應(yīng)用價(jià)值是超越測(cè)試,橫跨整個(gè)產(chǎn)品開(kāi)發(fā)團(tuán)隊(duì)的,所以精準(zhǔn)化測(cè)試的平臺(tái) 會(huì)是大勢(shì)所趨。
為了照顧很多中小公司的同學(xué),霍格沃茲測(cè)試學(xué)院為大家研究出了一套簡(jiǎn)化的適合中小公司使用的平民 版精準(zhǔn)化測(cè)試技術(shù)體系,可以用來(lái)簡(jiǎn)單的實(shí)現(xiàn)精準(zhǔn)化測(cè)試方案
使用 sonarqube 作為覆蓋率與測(cè)試用例的分析平臺(tái)
使用 jacoco 作為代碼覆蓋率的分析工具
使用 jacoco-cli 實(shí)現(xiàn)對(duì)單個(gè)用例的覆蓋率收集
使用 scanner 完成覆蓋率導(dǎo)入
調(diào)整 sonarqube 平臺(tái)中覆蓋率展示的信息,加入關(guān)聯(lián)測(cè)試用例的展示,方便在未覆蓋的代碼附近可 以找到最接近的測(cè)試用例