QA@IT

[Android][PMD]ルール:DataflowAnomalyAnalysis の見方・解決方法

3444 PV

[経緯・現象]
・開発しているAndroidアプリに
 静的解析ツールPMD(4.0.7.v20150522-1709)をかけて、
 バグなどを取り除けないか試みた
 →ルール「DataflowAnomalyAnalysis」がコードの複数個所で引っかかった

[相談]
・ルール「DataflowAnomalyAnalysis」は治すべきなのか、またその治し方を御教授頂きたいです
 (以下、当相談を投稿するに至った詳細な理由を記載します)

 ルール「DataflowAnomalyAnalysis」の重要度はPMDでは低いと認識しています。
 しかしPMDの説明に因ると、同じ「DataflowAnomalyAnalysis」でも以下の3種類が存在し
 その内の「1. UR -(中略)This is a bug and leads to an error.」の部分が気になっています。

  1. UR - Anomaly: There is a reference to a variable that was not defined before. This is a bug and leads to an error.
  2. DU - Anomaly: A recently defined variable is undefined. These anomalies may appear in normal source text.
  3. DD - Anomaly: A recently defined variable is redefined. This is ominous but don't have to be a bug.

 「(1.UR該当箇所は)バグである」と言い切っているように見えるのですが、そのように解釈していいのでしょうか?

 ちなみに、「1. UR 」に該当しているコードは、すべて拡張for文の部分でした。
 例)以下の場合、「int seiseki」にルールがひっかかります。
 for (int seiseki: data){
  System.out.println(seiseki);
 }

 解析を掛けたAndroidアプリですが、今のところ上記の箇所は問題なく動作しています。
 しかし指摘箇所が潜在的バグの要素であるのならば
 除去をしたいのですが取り除き方がわかりません。
 
 お手数ですが御教授の程よろしくお願いいたします。

回答

for-eachループを認識できないのはPMDのDataflowAnomalyAnalysisのバグ(制限?)っぽいですよね。下の参照先を見るとPMDの新しいバージョンでもバグは直ってなさそうな感じですが、カスタムルールセットを定義してエラーを抑止できるようなことが書いてありますね。

Java for each loop being flagged as UR anomaly by PMD - Stack Overflow

PMD / Issues / #1383 Foreach loop flagged as UR anomaly

PMD / Issues / #1190 False "UR Anomaly" from DataflowAnomalyAnalysis rule

PMD / Issues / #1393 PMD hanging during DataflowAnomalyAnalysis

編集 履歴 (0)
  • 早期に御回答頂いた上に、
    ルールのセット方法の御提案までして頂きありがとうございます!

    解析側のバグだったのですね(制限かもしれないとのことで、お勉強します…)
    修正方法が全く思いつかなかったので
    (そもそもどう問題なのかわからず)焦りました…ありがとうございました。
    -
ウォッチ

この質問への回答やコメントをメールでお知らせします。