【问题标题】:shared library coverage test with gcov [Linux/Fortran]使用 gcov 进行共享库覆盖率测试 [Linux/Fortran]
【发布时间】:2011-07-05 21:38:03
【问题描述】:

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

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

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

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

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

提前谢谢你。

迈克

【问题讨论】:

    标签: testing fortran code-coverage gcov


    【解决方案1】:

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

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

    【讨论】:

    • 感谢您的回答。这是我通常会做的,但是这里库的测试是特殊的输入数据集,它被输入 ADAMS 并将输出与预期结果进行比较。代码覆盖应该找到任何“死代码”,不再使用的代码,而不是检查单元测试的质量。如果没有其他解决方案,我们只需要实施大量的单元测试。我希望我可以通过使用 gcov 来避免它。问候,迈克
    【解决方案2】:

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

    对所有组件使用 gcc-3.4.6 提供了非常吸引人的代码覆盖率测试结果。

    认为该主题已关闭,但如果有人有问题,请提出。我很乐意分享我的经验。

    【讨论】:

      猜你喜欢
      • 2012-11-03
      • 2012-11-22
      • 2023-03-03
      • 2013-12-07
      • 1970-01-01
      • 2015-09-04
      • 1970-01-01
      • 1970-01-01
      • 2010-10-06
      相关资源
      最近更新 更多