有哪些支持模板的最佳C++代码覆盖率工具?

17

我曾使用gcov来测试代码覆盖率,但对于模板化的C++代码而言,效果不是很好。我广泛使用boost::spirit,但gcov似乎会简单地忽略模板化的spirit代码。

此外,我想知道是否有一种覆盖工具可以显示线程之间的交互,找出可能的分支/竞争条件/实际执行的执行流。


1
@TomalakGeret'kal:代码覆盖率? - CharlesB
@TomalakGeret'kal 正在测试代码覆盖率。 - fantasticsid
3
有大量的模板代码是在编译时评估的。对于这种情况,“代码覆盖率”是什么意思?通常的代码覆盖率是在运行时确定的。 - MSalters
@MSalters:我会假设运行时部分的代码覆盖率,但我从未见过一种工具可以为每个模板实例指示这一点。我猜这是一个内联问题... - Matthieu M.
5个回答

2
"

TestCocoon 是一个很棒的工具,比 gcov 更好,有很好的工具和报告功能。由于模板是编译时的“野兽”,我不确定您想要获取什么覆盖信息?

我的两分钱

"

一个好的选择是Testwell CTC++,它具有良好的HTML报告,支持每个编译器并且适用于每个嵌入式目标。 - B_PRIEUR
@B_PRIEUR:我不知道这个。testcocoon当时是免费的。我不知道Testwell的产品,但看起来很专业。把它加入到回答中... - neuro
是的,这是专业的,但我认为它并没有增加太多信息,而且版主们也不太喜欢工具回答 :p - B_PRIEUR

1

1

我们的C++测试覆盖工具可以提供模板体的测试覆盖率,或者至少是您指定要覆盖的文件中定义的那些模板。

它不区分模板的实例化。

如果您有一个多线程应用程序,该工具将记录所有线程执行的分支,如果您配置该工具使用原子可写标志(通常是CPU的自然字大小[32位或64位])。 (如果您不这样做,您可能会遇到线程竞争,在更新覆盖标志时会丢失一些覆盖范围。这不是工具的缺陷;它是未同步访问存储探针数据的后果。)

对于竞态检测,OP需要找到一个竞态检测工具;测试覆盖工具无法完成此任务。


1

1

我从事大型产品的开发,我们使用了一个叫做 BullsEye 的第三方应用进行覆盖测试,效果非常好。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接