Jacoco收集覆盖率信息函数MethodAnalyzer分析1

来源:互联网 发布:python matplotlib曲线 编辑:程序博客网 时间:2024/06/05 06:51

jacoco收集覆盖率信息最小单元是在MethodAnalyzer中进行分析,其对每一个指令进行判断,在visitend后对每一个指令进行一系列的操作(在一个for循环中),下面通过log判断其对一直指令的执行过程。以iload_1为例:

//该指令执行情况[jacoco:report] MethodAnalyzer i.getBranches(): 1[jacoco:report] MethodAnalyzer i.getCoveredBranches():  1//首先进行line[jacoco:report] SourceNodeImpl increment (ICounter instructions, ICounter branches,int line)[jacoco:report] SourceNodeImpl  line != UNKNOWN_LINE[jacoco:report] SourceNodeImpl incrementLine[jacoco:report] SourceNodeImpl getLine  11//incrementLine函数中 oldTotal和oldCovered时调用[jacoco:report] LineImpl ICounter getInstructionCounter()[jacoco:report] CounterImpl getTotalCount   0[jacoco:report] LineImpl ICounter getInstructionCounter()[jacoco:report] CounterImpl getCoveredCount 0//下一行line.crement()函数,进入LineLmpl//在abstract LineImpl increment函数后转入 Fix的increment里面[jacoco:report] LineImpl Fix increment//return 中,对instructions和branches,分别进入了CounterImple进行了增量[jacoco:report] CounterImpl increment(final ICounter counter) [jacoco:report] CounterImpl getMissedCount  0[jacoco:report] CounterImpl getCoveredCount 1[jacoco:report]  CounterImpl Fix increment missed+covered01[jacoco:report] CounterImpl getInstance missed covered[jacoco:report]  CounterImpl getInstance SINGLETONS[][]01//branch进行了增量[jacoco:report] CounterImpl increment(final ICounter counter) [jacoco:report] CounterImpl getMissedCount  0[jacoco:report] CounterImpl getCoveredCount 0[jacoco:report]  CounterImpl Fix increment missed+covered00[jacoco:report] CounterImpl getInstance missed covered[jacoco:report]  CounterImpl getInstance SINGLETONS[][]00//return参数增量完毕,进入getInstance函数[jacoco:report] LineImpl getInstance//函数中计算了下面的四种值,之后返回SourceNodeImpl[jacoco:report] CounterImpl getMissedCount  0[jacoco:report] CounterImpl getCoveredCount 1[jacoco:report] CounterImpl getMissedCount  0[jacoco:report] CounterImpl getCoveredCount 0//// Increment line counter: if判断时调用[jacoco:report] CounterImpl getTotalCount   1[jacoco:report] CounterImpl getCoveredCount 1[jacoco:report] 22 //此时认为是新行[jacoco:report] CounterImpl increment(final ICounter counter) //进入CounterImpl increment函数//return函数时,调用的,相当于参数[jacoco:report] CounterImpl getMissedCount  0[jacoco:report] CounterImpl getCoveredCount 1//return到了Fix类的increment函数[jacoco:report]  CounterImpl Fix increment missed+covered01//进入getInstance函数[jacoco:report] CounterImpl getInstance missed covered//认为是SINGLETON,执行完毕,返回之前的SourceNodeImpl[jacoco:report]  CounterImpl getInstance SINGLETONS[][]01//回到MethodAnalyzer最开始进入该类时位置,下面进行instructionCounter的increment[jacoco:report] SourceNodeImpl  instructionCounter.increment(instructions)[jacoco:report] CounterImpl increment(final ICounter counter) [jacoco:report] CounterImpl getMissedCount  0[jacoco:report] CounterImpl getCoveredCount 1[jacoco:report]  CounterImpl Fix increment missed+covered01[jacoco:report] CounterImpl getInstance missed covered[jacoco:report]  CounterImpl getInstance SINGLETONS[][]01//第二个 branchesCounter[jacoco:report] SourceNodeImpl  branchCounter.increment(branches)[jacoco:report] CounterImpl increment(final ICounter counter) [jacoco:report] CounterImpl getMissedCount  0[jacoco:report] CounterImpl getCoveredCount 0[jacoco:report]  CounterImpl Fix increment missed+covered00[jacoco:report] CounterImpl getInstance missed covered[jacoco:report]  CounterImpl getInstance SINGLETONS[][]00//该指令执行结束