2

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

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

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

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

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

先感谢您。

麦克风

4

2 回答 2

2

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

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

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

于 2011-04-14T06:37:44.370 回答
0

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

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

于 2011-03-03T14:40:47.953 回答