パッケージの依存関係を可視化する「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による依存関係マップの生成
ソースコードからバグを見つける「PMD」
「PMD 」は、Javaのソースコードを解析し、バグを発生させやすいコードパターンを見つけ出して警告することによって、プログラムの品質を確保する静的解析ツールです。単体テストのようにテストコードを実行させてエラーを検出するのではなく、あくまでもソースコードの解析によって、バグが起こりやすいとされるコードを除去するのが目的です。したがって、PMDによってエラーが検出されたコードでも、実際にはバグの発生につながらないケースもあります。
PMDでは、たとえば次のようなコードパターンが検出の対象となります。
空のtry/catch/finally/switchステートメント
使用していないローカル変数やメソッドパラメータ、privateメソッドなど
非効率なString/StringBufferの使い方
不必要なif文や、whileで事足りるfor文の使い方
不必要にコピー&ペーストされたコード
その他にも膨大な種類のコードパターンが用意されており、どのパターンの検出を有効/無効にするのかは、[ ツール] -[ オプション]メニューの[Quality]タブの画面で選択することができます(図2 ) 。
図2 PMDによるコード解析の設定項目
PMDによる解析は、プロジェクト名を右クリックして、メニューから[Quality] -[ CodeDefects] -[ Run PMD]を選択することで実行します。解析が完了すると、[ PMD]ウィンドウに図3 のように検出されたコードの一覧が表示されます。対象のコードパターンがあるクラス名と行番号が表示されており、ダブルクリックすることでソースコードエディタ上の該当の箇所にカーソルを飛ばすことができます。
図3 PMDによる解析結果の例
エディタ上では、図4 のように検出された警告の内容がコードヒントとして表示されるので、該当箇所が一目で分かるようになっています。
図4 ソースコードエディタ上ではコードヒントとして警告が表示される
バイトコードからバグを見つける「FindBugs」
「FindBugs 」は、PMDと同様にコードパターンから潜在的なバグを検出する静的コード解析ツールです。PMDとの違いは、PMDがソースコードそのものを解析するのに対して、FindBugsではコンパイル済みのバイトコードを対象に解析を行うという点です。PMDで検出されるパターンのコードであっても、コンパイラの最適化などによってバイトコードレベルではコードが書き換わっている場合があります。そのようなコードの場合、FindBugsでは検出の対象になりません。
FindBugsで検出するコードパターンは、、[ ツール] -[ オプション]メニューの[Quality]タブの画面で有効/無効を選択することができます(図5 ) 。パターンごとに解析にかかる時間がfast(高速)/moderate(中速)/slow(低速)のいずれかで表示されているので、設定の際に参考にするといいでしょう。FindBugsプロジェクトでは日本語化作業が進められているため、一部の設定項目や警告内容は日本語で表示されます。
図5 FindBugsによるコード解析の設定項目
FindBugsによる解析は、プロジェクト名を右クリックして、メニューから[Quality] -[CodeDefects] -[Run FindBugs]を選択することで実行します。解析が完了すると、[FindBugs]ウィンドウに図6 のように検出内容が表示されます。また、PMDと同様にソースコードエディタ上では図7 のように警告の内容がコードヒントとして表示されます。
図6 FindBugsによるコード解析の設定項目
図7 ソースコードエディタ上ではコードヒントとして警告が表示される
ダッシュボードでコードの品質を確認する
SQEには、コードの品質管理の様子を確認するためのダッシュボードとして「Quality Control Center」という画面が用意されています。この画面は、[ウィンドウ]メニューから[Quality] -[Quality Control Center]を選択することで表示できます。Quality Control Centerでは、図8 のように各ツールによる警告がどの程度残っているのかを一目で確認できるようになっています。また上部の4つのアイコンのうち、右から2番目のアイコンをクリックすることで、解析結果のスナップショットを撮ることができます。これによって解析の履歴を残すことができ、警告数の推移を下部のグラフで確認することが可能になります。
図8 コード品質管理のダッシュボードとなるQuality Control Center
SQEに含まれる4つのツールは、それぞれ単体で利用することもできます。しかしこれらを同時に使い、異なる視点からソースコードの検証を行うことができる点がSQEの魅力と言えます。導入が容易であり、使い慣れた統合開発環境の中で利用できるという点も大きなメリットです。アプリケーションの品質を向上させるために、SQEのような静的コード検証ツールの導入も検討してみてはいかがでしょうか。