我遇到了Coverity Scan的假阳性结果模式。我有一个界面I
和两个实现,IImpl
和FakeI
interface I {
String f();
}
class IImpl {
String f() {
return "f";
}
}
class FakeI {
String f() {
return null;
}
}
鉴于此代码,如果我然后执行以下操作
I i;
i.f().equals(other);
我收到空取消引用警告,因为i.f()
的结果可能是FakeI
的空值。 FakeI
在测试代码中实现,因此我的生产代码甚至看不到它。但Coverity不知道这一点。
有哪些可能的解决方案?我想要么完全从分析中删除测试代码,要么重新审视我的假货并确保它们不会返回null。是否有一些Coverity功能可能有助于处理此问题?
答案 0 :(得分:0)
静态分析仪通常不会将测试代码包含在分析中。这与动态分析形成对比,动态分析中的测试起着至关重要的作用。它们正在被执行,因此有一些东西需要分析。由于测试代表API的简化(更短,自包含)使用,因此分析测试生成的报告比实际运行的二进制文件更容易。
在静态分析中包含测试代码有一些好处。
我现在正试图从分析范围中删除测试,这实际上似乎是Coverity Scan文档推荐的内容。他们的maven构建命令是mvn compile
。