使用gcov进行共享库覆盖测试[Linux / Fortran]

时间:2011-02-28 16:24:11

标签: testing fortran code-coverage gcov

我正在尝试对共享库执行覆盖测试。我选择了gcov / lcov,因为它是免费和开源的,这意味着,我可以立即尝试(商业软件需要被批准/购买,必须做出很多决定 - 它费用时间)。

情况如下 - 库 - 我们的产品,用Fortran编写,然后用于模拟软件(来自MSC.Software的ADAMS,具体)。我可以使用-fprofile-arcs -ftest-coverage编译库,如果ADAMS使用它可以正常工作。但是,不会创建.gcda文件。

有一个小的测试可执行文件来测试库的基本行为(方法的小部分)。如果我用coverage测试开关编译这个可执行文件,我会获得可执行文件本身和库的.gcda文件。

问题是:如果使用库的可执行文件未使用覆盖测试开关编译,是否可以调用库的gcov测量值?如果是,如何?

可以编写大量的测试,但它几乎就像复制ADAMS(或任何其他模拟包)。或者我选择了错误的覆盖率测试工具,我应该转向商业产品?

提前谢谢你。

麦克

2 个答案:

答案 0 :(得分:2)

看来,专有软件调用的库的代码覆盖率测试没有任何问题。应该注意使用相同版本的编译器编译所有组件并使用相应的gcov版本。 在我的例子中,库(在Fortran中)是用f77(gcc-3.4.6)编译的,它的组件是用最新的gcc(gcc-4.4)编译的。 ADAMS使用的库的包装器再次使用gcc-3.4.6进行编译,使用的gcov为4.1。

使用gcc-3.4.6为所有组件提供了极具吸引力的代码覆盖率测试结果。

考虑关闭主题,但如果有人有疑问,请询问。我很乐意分享我的经验。

答案 1 :(得分:0)

我编译程序的方式通常是为所有模块提供与编译器完全相同的开关,所以,不,我不知道当可执行文件未使用coverage开关编译时是否可以使gcov正常工作

然而,我接下来要做的是对来自gcov的输出文件进行后处理,忽略与测试代码相关的文件,但保留与代码相关的所有文件直接称为 测试代码以及本身调用的库代码。