私は最近、行っていた Java ビルドで findbugs 静的分析ツールを使い始めました。最初のレポートには、優先度の高い警告が大量に含まれていました。強迫的なタイプの人なので、私はそれらをすべてノックアウトする準備ができていました. しかし、私は何かが欠けているに違いありません。物事を比較すると、ほとんどの警告が表示されます。次のコードのように:
public void setSpacesPerLevel(int value)
{
if( value >= 0)
{
spacesPerLevel = value;
}
else
{
spacesPerLevel = 0;
}
}
読み取る if ステートメントで優先度の高い警告を生成します。
ファイル: Indenter.java、行: 60、タイプ: BIT_AND_ZZ、優先度: 高、カテゴリ: CORRECTNESS sample.Indenter.setSpacesPerLevel(int) で ((...) & 0) == 0 かどうかを確認します
int と int を比較していますが、よくあることのようです。同様の単純な比較で、そのタイプのエラーがかなり発生します。
単純なコードブロックのように見えるものについて、他にも多くの優先度の高い警告があります。ここで何か不足していますか?静的分析では誤検知が発生する可能性があることは理解していますが、私が見ているエラーは、あまりにも些細なケースで誤検知とは思えません。
これも頭を悩ませています。
for(int spaces = 0;spaces < spacesPerLevel;spaces++)
{
result = result.concat(" ");
}
これにより、次の findbugs 警告が表示されます。
File: Indenter.java, Line: 160, Type: IL_INFINITE_LOOP, Priority: High, Category: CORRECTNESS
There is an apparent infinite loop in sample.Indenter.indent()
This loop doesn't seem to have a way to terminate (other than by perhaps throwing an exception).
何か案は?
したがって、基本的には、少数のファイルと、上記のような優先度の高い警告が 50 ~ 60 個あります。私はfindbugs 1.3.9を使用しており、findbugs antタスクから呼び出しています
更新: このビルドは hudson サーバーによって実行され、コード カバレッジのために Clover によってコードがインストルメント化されました。それをオフにすると、優先度の高い警告がすべて消えました。それは今では理にかなっています。フィードバックをお寄せいただきありがとうございます。