Java代码覆盖率的原理是什么?
Java代码覆盖率的原理是什么?成熟的框架有 clover emma,它们的原理是什么呢?具体怎么实现呢?
先说一下我的想法,我自己目前的实现方式是:根据LineNumberAttribute属性修改class文件,在每一行代码的前后插一个标志代码,如果运行到这行代码,插入的代码就会被执行,并且生成统计信息。参见下图
但是,如果遇到下面的代码就没有办法了
上面的代码等效于
其实是两个语句,对于emma,它可以统计到是执行了a>b?(a-b):(b-a)的前半部分还是后半部分,而我的方案则不行。
PS:不知道为什么问题被投反对票,至少这个问题对我而言还是比较难的,如果反对该问题的话,麻烦在评论里说一下原因。
narya
12 years, 1 month ago