本格派エンジニアの工具箱

第17回 「Software Quality Environment」による静的解析でソースコードの品質を向上させる

この記事を読むのに必要な時間:およそ 2 分

パッケージの依存関係を可視化する「Dependency Finder」

前回に引き続き,NetBeans向けの静的コード解析ツールであるSoftware Quality Environment⁠以下,SQE)を紹介します。

SQEに付属する4つのツールのうちのひとつ,Dependency Finderは,コンパイル済みのJavaコードからパッケージの依存関係を解析して可視化するツールです。もともとのツールは依存関係をXML形式やHTML形式またはテキスト形式で出力するものですが,SQEに含まれるNetBeansプラグインではグラフ状のマップとして出力する機能が提供されます。

Dependency Finderによる解析は,プロジェクト名を右クリックして,メニューから[Quality]⁠-⁠DependencyAnalysis]⁠-⁠Run DependencyFinder]を選択することで実行します。解析が完了すると,Dependenciesウィンドウが表示されて,パッケージの依存関係がグラフ表示されます。上部の[JDK]スイッチをオンにするとJDKの標準ライブラリが,⁠External]をオンにすると外部ライブラリがそれぞれ図1に表示されるようになります。これによって使われているパッケージや,ライブラリ間の依存関係などが一目で把握することが可能です。

図1 Dependency Finderによる依存関係マップの生成

図1 Dependency Finderによる依存関係マップの生成

ソースコードからバグを見つける「PMD」

PMDは,Javaのソースコードを解析し,バグを発生させやすいコードパターンを見つけ出して警告することによって,プログラムの品質を確保する静的解析ツールです。単体テストのようにテストコードを実行させてエラーを検出するのではなく,あくまでもソースコードの解析によって,バグが起こりやすいとされるコードを除去するのが目的です。したがって,PMDによってエラーが検出されたコードでも,実際にはバグの発生につながらないケースもあります。

PMDでは,たとえば次のようなコードパターンが検出の対象となります。

  • 空のtry/catch/finally/switchステートメント
  • 使用していないローカル変数やメソッドパラメータ,privateメソッドなど
  • 非効率なString/StringBufferの使い方
  • 不必要なif文や,whileで事足りるfor文の使い方
  • 不必要にコピー&ペーストされたコード

その他にも膨大な種類のコードパターンが用意されており,どのパターンの検出を有効/無効にするのかは,⁠ツール]⁠-⁠オプション]メニューの[Quality]タブの画面で選択することができます図2)⁠

図2 PMDによるコード解析の設定項目

図2 PMDによるコード解析の設定項目

PMDによる解析は,プロジェクト名を右クリックして,メニューから[Quality]⁠-⁠CodeDefects]⁠-⁠Run PMD]を選択することで実行します。解析が完了すると,⁠PMD]ウィンドウに図3のように検出されたコードの一覧が表示されます。対象のコードパターンがあるクラス名と行番号が表示されており,ダブルクリックすることでソースコードエディタ上の該当の箇所にカーソルを飛ばすことができます。

図3 PMDによる解析結果の例

図3 PMDによる解析結果の例

エディタ上では,図4のように検出された警告の内容がコードヒントとして表示されるので,該当箇所が一目で分かるようになっています。

図4 ソースコードエディタ上ではコードヒントとして警告が表示される

図4 ソースコードエディタ上ではコードヒントとして警告が表示される

コメント

コメントの記入