抑制来自测试中存根实现的静态分析中的空解除引用警告

时间:2017-09-06 21:25:57

标签: static-analysis coverity

我遇到了Coverity Scan的假阳性结果模式。我有一个界面I和两个实现,IImplFakeI

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功能可能有助于处理此问题?

1 个答案:

答案 0 :(得分:0)

静态分析仪通常不会将测试代码包含在分析中。这与动态分析形成对比,动态分析中的测试起着至关重要的作用。它们正在被执行,因此有一些东西需要分析。由于测试代表API的简化(更短,自包含)使用,因此分析测试生成的报告比实际运行的二进制文件更容易。

在静态分析中包含测试代码有一些好处。

  1. 测试中可能存在错误,分析仪可以帮助查找和解决。
  2. 但是,有一些缺点。特别是我在这里问的问题。

    我现在正试图从分析范围中删除测试,这实际上似乎是Coverity Scan文档推荐的内容。他们的maven构建命令是mvn compile