大多数已建立的语言都可以使用可靠的测试覆盖工具,但是每种工具的功能深度差异很大。
同样,所有各种VM和编译器都具有这种异构结构,例如,编写代码覆盖率工具与使用Lisp相比,在C语言中必须是非常不同的工作。
sys.settrace
可以直接告诉您哪些行正在执行我对不同语言的代码覆盖率的实现感兴趣:
最佳答案
基本上,所有代码覆盖率工具都会对代码进行检测,以检查代码的哪些部分已执行。
根据您提供的链接中的定义,从编写工具的人的角度来看,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进行采样是进行代码覆盖的一种特别糟糕的方法,因为您可能会错过某些语句,因为它们执行得太快了。通常,您希望代码覆盖率是确定性的。
Karnaugh映射用于最小化 bool 函数,我看不到代码覆盖工具的任何有用链接。
另外,您的问题有时并不十分清楚:您是要使用技术来实现更好的代码覆盖率,还是只是使您感兴趣的代码覆盖率工具的实现?