Jacoco
- 原理
- Android中的使用
- 商家端實踐
原理
Jacoco是EclEmma團隊開發(fā)的Java代碼覆蓋率的開源庫
- 代碼覆蓋率
- Jacoco模式
- 探針
模式
implementation.png
- on the fly
- offline
探針的數(shù)據(jù)結(jié)構(gòu)
public final class ExecutionData {
private final long id;
private final String name;
private final boolean[] probes;
***
}
被執(zhí)行的代碼/測試的代碼
foo(){
int a = 1
}
foo(){
int a = 1
prob[0] = true
}
總結(jié):
如果已經(jīng)執(zhí)行了探測,我們知道已經(jīng)訪問了相應(yīng)的邊緣,從這個邊緣我們可以得出其他前面的節(jié)點和邊:
(1)如果訪問了邊站绪,我們知道該邊的源節(jié)點已經(jīng)被執(zhí)行卫玖。
(2)如果節(jié)點已經(jīng)被執(zhí)行且節(jié)點是一個邊緣的目標節(jié)點领铐,則我們知道已經(jīng)訪問了該邊栏饮。
- 每一個方法的出口(return throw)
- 邊的目標指令包含多條邊
jacoco4.png
ALOAD probearray
xPUSH probeid
ICONST_1
BASTORE
增量的實現(xiàn)
- 源文件獲取diff
- class文件獲取diff
Android中的使用
jacoco5.png
商家端實踐
TODO
- diff方案
- 后端改造挖函,部署到云上