Shoeisha Technology Media

CodeZine(コードジン)

記事種別から探す

Java開発においてバグを除去する効率的な方法はこれだ――オープンソースツールの「FindBugs」とバグ検出に優れた「Jtest」の併用のすすめ

  • LINEで送る
  • このエントリーをはてなブックマークに追加
2017/07/18 14:00

目次

FindBugsだけで本当に満足できる解析ができているか?

 しかし「FindBugsだけではコードの品質を担保することは難しい」と天久氏は続ける。というのも、各テストツールの解析精度や検出できるバグの種類(ルール)には違いがあるからだ。FindBugsには、クラスやメソッドが分かれている処理の問題を検出できない弱点がある。

 例えばNullPointerExceptionを検出したいとする。FindBugsでは「検出は可能だが不十分」と天久氏は指摘する。他のメソッドやクラスにまたがった場合、問題を検出できないからだ。

FindBugsでNullPointerExceptionが検出できない例
FindBugsでNullPointerExceptionが検出できない例

 また、クロスサイトスクリプティングの検出能力についても不十分だという。サーブレットの出力にHTTPパラメータを直接書き込む処理が一つのクラスに閉じていれば問題ないが、別のクラスで処理する場合には検出できない。

FindBugsでクロスサイトスクリプティングが検出できない例
FindBugsでクロスサイトスクリプティングが検出できない例

 こうしたFindBugsの弱点を補うツールとして「ぜひ使ってほしい」と天久氏が勧めるのが、Parasoftの「Jtest」である。

FindBugsでは検出できないNullPointerExceptionの例
FindBugsでは検出できないNullPointerExceptionの例
Jtestでは検出できる
Jtestでは検出できる

FindBugsの弱点を補う「Jtest」

Jtest
Jtest

 Jtestは高速な静的解析とCIとの高い親和性を実現したJava対応テストツールだ。静的解析に加えてフロー解析が行え、検出するバグの種類(ルール)の豊富さとその解析精度の高さが大きな特長だ。静的解析は約1000種類のコーディングルールに従ってソースコードを静的に解析し、違反している箇所をレポートしてくれる。多くのルールにはカスタマイズ可能なパラメータがあり、ニーズに合わせて詳細な条件が設定できるようになっている。また、静的フロー解析は、クラスやメソッドにまたがった解析を行えるため、FindBugsで検出できないさまざまなソースコードの問題を検出できる。もちろん、例として先に挙げたバグも、Jtestなら検出可能だ。

 Jtestを導入するメリットはそれだけではない。導入支援として「実プロジェクトの解析・簡易アセスメント」「ツールのトレーニング」「環境構築支援」などを、テクマトリックスが用意する。「お客さまの実プロジェクトの状況に併せてコーディングルールを選定し、要望に応じて、CI環境の構築も行うことができる」と天久氏。テクマトリックスの支援の下で静的解析を自動化する環境を実現可能というわけだ。

 その他、Jtestでは次の機能が提供されている。例えば、コーディングルール作成ツール「RuleWizard」だ。これにより、ユーザー独自のコーディングルールを自由に追加できる。RuleWizard上では、フローチャートのような図を編集して視覚的にルールを作成できる他、不正なサンプルコードからルールを自動生成することも可能だ。また、コードメトリクスの計測によってメソッド数、オブジェクトの結合度、サイクロマティック複雑度などの約70種類のメトリクスをレポートしてくれる機能もある。さらに動的テストもカバーしており、これまでJUnitの利用に苦労してきた開発者が単体テストをすぐに行えるような単体テストアシスト機能や、テストカバレッジ収集機能などが搭載されている。

 Jtestはすでに国内企業600社、5000ライセンス以上の導入実績がある。例えば、交通インフラ系のSI企業がJtestを選んだ理由は、導入していたオープンソースのテストツールで検出できなかったルールをカバーできるなど、標準で搭載されているルールの数が圧倒的に多かったからだ。それに加え、目視では見つけることが難しい複数のファイルにまたがったバグを解析する静的フロー解析が実施できることが決め手になったという。また、ある金融系企業では、細かな設定ができるコーディングルールと、目視では見つけることが難しいバグを発見可能な静的フロー解析に魅力を感じたのはもちろんのこと、設定作業の支援などのサポート体制が充実していることや、静的解析に限らず、動的解析やカバレッジ分析までカバーする優れた拡張性を評価した。

静的解析のベストプラクティス!

 スピード重視の開発現場において、FindBugsの弱点を補うJtestの高度な静的解析とFindBugsの軽快な解析を併用するコツを、次ページでご紹介します。

Jtestの無料体験版を入手!

 Jtestの無料体験版を配布しております。以下のリンクからダウンロード可能です。

関連記事


  • LINEで送る
  • このエントリーをはてなブックマークに追加

著者プロフィール

  • 中村 仁美(ナカムラ ヒトミ)

     大阪府出身。教育大学卒。大学時代は臨床心理学を専攻。大手化学メーカー、日経BP社、ITに特化したコンテンツサービス&プロモーション会社を経て、2002年、フリーランス編集&ライターとして独立。現在はIT、キャリアというテーマを中心に活動中。IT記者会所属。趣味は読書、ドライブ、城探訪(日本の城)。...

バックナンバー

連載:早期に問題を発見、品質向上に貢献するJava対応静的解析・単体テストツール「Jtest」
All contents copyright © 2005-2017 Shoeisha Co., Ltd. All rights reserved. ver.1.5