我已经在我的计算机上安装了仅具有UnitTest许可证(仅限单元测试许可证)的C++Test作为Visual Studio2005插件( cpptest_7.2.11.35_win32_vs2005_plugin.exe )。
我有一个类似于下面的示例:
bool MyFunction(... parameters... )
{
bool bRet = true;
// do something
if( some_condition )
{
// do something
bRet = CallToAFunctionThatCanReturnBothTrueAndFalse....
}
else
{
bRet = false;
// do something
}
if(bRet == false)
{
// do something
}
return bRet;
}在我的例子中,在运行coverage工具之后,我得到了以下结果(对于类似于前面提到的函数):
[LC=100 BC=100 PC=75 DC=100 SCC=100 MCDC=50 (%)]我真的不明白为什么当涉及到PathCoverage (PC)时,我没有100%的覆盖率。此外,如果有C++Test Parasoft经验的人可以为我解释一下MCDC覆盖率低的原因,那就太好了。
我应该做些什么来增加覆盖率?因为在这种情况下我已经没有主意了。文档(某些部分)的说明是受欢迎的。
谢谢,
Iulian
发布于 2009-06-18 14:09:48
这是关于各种类型代码覆盖率的一个很好的参考:http://www.bullseye.com/coverage.html。
MCDC :为了提高MCDC的覆盖率,你需要看看some_condition。假设它是一个复杂的布尔表达式,您需要查看是否使用了必要的值组合。具体地说,每个布尔子表达式都需要执行true和false。
path :在上面的链接中提到的路径覆盖的缺点之一是,许多路径是不可能执行的。您的示例可能就是这种情况。
发布于 2009-06-18 13:58:15
对于您正在使用的特定工具,我无能为力,但是路径覆盖的一般思想是,应该执行通过代码的每条可能的路径。
如果你在整个程序中绘制了一个流程图,在每个if/break/continue等处进行分支,你应该会看到你的测试在程序中采用了哪些路径。要达到100% (这并不是完全必要的,也不能保证完美的测试),您的测试必须遍历代码的每一个分支,执行每一行。
希望这能有所帮助。
发布于 2009-06-18 14:03:37
您至少需要两个测试用例才能获得100%的覆盖率。一个some_condition为真,另一个不为真。如果你有,你应该得到100%的覆盖率。
尽管你应该认为100%的覆盖率是完美的。在这种情况下,你需要3个测试,这样所有的组合都可以测试。查看圈复杂度以了解更多信息。
https://stackoverflow.com/questions/1012741
复制相似问题