代码覆盖率(c ++代码执行路径)

Pon*_*oni 9 c++ code-coverage path execution

假设我有这段代码:

int function(bool b)
{
    // execution path 1
    int ret = 0;
    if(b)
    {
        // execution path 2
        ret = 55;
    }
    else
    {
        // execution path 3
        ret = 120;
    }
    return ret;
}
Run Code Online (Sandbox Code Playgroud)

我需要某种机制来确保代码已经进入任何可能的路径,即上面代码中的执行路径1,2和3.

我想过有一个全局函数,向量和宏.
这个宏只是调用该函数,将源文件名和代码行作为参数传递,并且该函数将通过向向量插入宏传递的信息将其标记为"已检查".

问题是我不会看到任何没有"检查"的路径.
知道我该怎么做?如何在编译时"注册"一行代码,所以在运行时我可以看到它没有"检查"呢?

我希望我很清楚.

Mac*_*tka 7

通常,覆盖实用程序(例如gcov)随编译器一起提供.但请注意,他们通常只给你C0保险.即

  • C0 - 每行至少执行一次.请注意,a ? b : c即使只使用了一个分支,也会标记为已执行.
  • C1 - 每个分支至少执行一次.
  • C2 - 每条路径至少执行一次

因此,即使您的测试显示100%C0覆盖率,您也可能无法捕获代码中的每个路径 - 并且可能您没有时间去做(路径数量相对于分支呈指数增长).但是,如果你有10%的C2或70%的C2(或0.1%的C2),这是很好的.