本质上,所有代码覆盖工具都会对代码进行检测,以检查代码的哪些部分被执行。
正如您提供的链接中所定义的那样,从编写仪器的人的角度来看,C0 和 C1 非常相似。唯一的区别是您放置代码的位置。我将进一步推测 C1 甚至比 C0 更容易,因为检测发生在抽象语法级别,其中行尾并不重要。
我说 C1 更容易的另一个原因是因为它处理句法实体而不是词法实体:你将如何检测:
if
c > 1 && c
< 10
then
blabla
end
嗯,只是一个想法。
至于C2,我在实践中从未见过。原因是你可以得到指数级的爆炸:
if c1 then * else * end
if c2 then * else * end
...
if cn then * else * end
对于 n 行代码,您需要 2^n 次测试。另外,你对循环做什么?通常,您将它们抽象为简单的 if 语句(即,对于您测试的每个循环,它的主体在一个测试中执行了 0 次,而在另一个测试中至少执行了一次)。
我相信对 PC 进行采样是一种特别糟糕的代码覆盖方式,因为您可能会因为执行速度太快而错过一些语句:D 模糊逻辑也是如此,它用于推理近似值;通常,您希望代码覆盖率具有确定性。
卡诺图用于最小化布尔函数,我没有看到与代码覆盖工具的任何有用链接。
此外,您的问题有时也不是很清楚:您想要实现更好的代码覆盖率的技术,还是只是您感兴趣的代码覆盖率工具的实现?