2017-09-06 10 views
0

Coverity Scanの誤った結果でパターンが発生しました。 i.f()の結果は、おそらく可能性があるため、私は、私は次のテストでのスタブ実装からの静的解析でnull参照解除の警告を表示しない

I i; 
i.f().equals(other); 

をすれば、私がnullの間接参照の警告を取得し、IImplFakeI

interface I { 
    String f(); 
} 

class IImpl { 
    String f() { 
    return "f"; 
    } 
} 

class FakeI { 
    String f() { 
    return null; 
    } 
} 

このコードを考えると、インタフェースI、および2つの実装を持っていますその値はFakeIです。 FakeIはテストコードで実装されているため、私の生産コードではそれが見えません。しかし、Coverityはそのことを知らない。

どのような解決策がありますか?私は完全に分析からテストコードを削除するか、私の偽物を再訪し、nullを返さないようにすることを考えました。これを処理するのに役立ついくつかのCoverity機能がありますか?

+0

使用する前に戻り値をチェックすると、苦情はなくなります。 – tipaye

答えて

0

一般に、スタティックアナライザは、テストコードを解析に含めることのメリットがありません。これは、テストが重要な役割を果たす動的分析とは対照的です。彼らは実行されているものなので、分析するものがあります。テストはAPIの簡略化された(より短い自己完結型の)使用法を表しているので、実際のバイナリからのテストよりもテストから生成されたレポートを分析する方が簡単です。

静的解析にテストコードを含めるといくつかの利点があります。

  1. テストにバグがあり、アナライザーが見つけて解決するのに役立つことがあります。

しかし、欠点があります。特に私がここで何を求めていたのか。

私は現在、実際にCoverity Scanのドキュメントで推奨されているような分析の範囲からテストを削除しようとしています。ビルドコマンドはmvn compileです。

関連する問題