静的解析(コーディング規約チェックとフロー解析)

コードレビューを自動化して致命的なバグを早期発見​

Jtestは、約3,000種類のコーディング規約に従ってJavaソースコードを静的に解析し、違反している箇所をレポートします。さらに、処理フローを解析し、リソースリークやNullPointerException、さらには、SQLインジェクションやクロスサイトスクリプティング(XSS)といったセキュリティ上危険なコードも検出することが可能です。
Jtestで静的解析を自動化することにより、Javaソースコードの品質確保と問題箇所の修正の推進を容易にします。


何にお困りですか? Jtest静的解析機能
はてな コードレビューの精度向上、効率化をしたい コーディング規約チェック
はてな リリースに影響する致命的なバグを早期発見したい フロー解析
はてな ソースコードの品質を可視化したい メトリクス計測
はてな 静的解析を有効活用したい
AIの活用

コーディング規約チェック

約3,000種類のコーディング規約ルールでコードレビューを自動化、レビュー精度の向上・効率化
約3,000種類のコーディング規約に従ってJavaソースコードを静的に解析し、違反している箇所をレポートします。
Javaソースコードを解析し、メソッドや文字列リテラルの重複やパフォーマンスに影響するガーベッジコレクションの問題、JDKの異なるバージョンや異なるOSへの移植性の問題などを検出します。
また、多くの規約には、カスタマイズ可能なパラメータがあり、ニーズに合せて詳細な条件を指定できます。

豊富なカテゴリのコーディング規約ルールでソースコードを解析

Jtestのコーディング規約ルールは約40種類のカテゴリに分類されています。
検出したいコーディング規約違反や問題に応じてルールを選択、コードを解析できます。

コーディング規約ルールのカテゴリ(抜粋)
  • Enterprise JavaBeans
  • ガベージコレクション
  • 最適化
  • 初期化
  • スレッドと同期化
  • セキュリティ
  • 重複コードの検出
  • バグの可能性
  • 未使用コード
  • 命名規則

ビルトインテストコンフィギュレーションで解析を即時実行・カスタマイズも可能

テストコンフィギュレーションとは
Jtestではどのようにコードを解析するかをテストコンフィギュレーションに定義します。
解析に使用する静的解析ルール、ルールパラメーター、解析スコープなど、解析に必要な設定をテストコンフィギュレーションで定義することで、プロジェクトやソースコードに合わせて最適な設定で解析を行うことができます。

ビルトインテストコンフィギュレーションで目的に合わせた解析をすぐに実行できる
Jtestには30個を超えるビルトインテストコンフィギュレーションを内包しています。
メモリ・セキュリティ・スレッドなど固有の問題の検出に特化したテストコンフィギュレーションや、未使用コード/デッドコードを検出するテストコンフィギュレーションなどあらかじめ用意されたビルトインテストコンフィギュレーションを利用することでJtestのセットアップ後、目的に応じてすぐにコードを解析できます。

プロジェクトやチームに合わせてカスタマイズしたテストコンフィギュレーションを作成できる
開発プロジェクトやチームの状況によって解消するべきコードの問題は異なります。
検出したい問題に合わせて解析に使用するルール、ルールパラメーター、解析スコープを自由にカスタマイズした独自のテストコンフィギュレーションを作成、解析に使用することができます。

ルールのカスタマイズ・独自ルールの作成でプロジェクトに合わせた解析を実行

ルールパラメータで解析ルールの挙動を調整
Jtestに搭載された一部のルールは、ルールパラメーターで解析の挙動を細かくカスタマイズすることができます。
独自ルールを作成
Jtestにはユーザーが独自のコーディング規約ルールを作成するツール「RuleWizard」が搭載されています。
Jtestのビルトインルールには存在しない、プロジェクト固有のコーディング規約ルールを視覚的に作成したり、サンプルコードからコーディング規約ルールを自動生成することが可能です。
作成したルールは、Jtestにあらかじめ搭載されたビルトインルールと同様にコーディング規約チェックに利用できます。

フロー解析

複数メソッド、クラスにまたがって発生する致命的なバグを自動検出
アプリケーションの実行パスをシミュレートして、処理フローや渡された値によって発生するエラー (リソースリーク、デッドロック、Null Pointer Exceptionなど) につながるパスを特定します。
実際にコードを実行することなく複数のクラスやパッケージに渡った複雑なパスも検証します。 フロー解析は複雑なパスを特定してトレースするため、人間によるテストや検査では発見が難しく、コーディング規約チェックや単体テストでも発見されないことが多い問題点を検出できます。
コードを実行せずに問題点を検出するフロー解析機能は、レガシーコードのようなエラーの実行時検出が効果的ではなかったり不可能だったりするコードに有効です。

複数のクラスにまたがった複雑なパスを検証、エラーにつながるパスを特定

様々なタイプのバグにつながる問題を検出

セキュリティやスレッドや例外といったカテゴリに分類された70個以上のルールでソースコードを解析、これまでシステムテストなどの後工程で見つかっていたようなソースコードの問題を自動的に検出することができます。
フロー解析ルールのカテゴリと検出可能な問題(抜粋)
  • バグの可能性
    • 境界外アクセス
    • 配列を超えたアクセス
    • nullチェックの前の間接参照
  • スレッドと同期
    • デッドロック
    • ダブルロック
  • リソース
    • リソースリーク
  • セキュリティ
    • SQLインジェクション
    • クロスサイトスクリプティング(XSS)
    • 機密データの公開
  • 例外
    • NullPointerException

※ セキュリティカテゴリルールの利用には「セキュリティコンプライアンスパック」のライセンス(有償)が必要です。

問題に至る処理フローをレポート

フロー解析により検出された問題は、問題が発生する可能性がある地点とそこに至るまでの処理フローがレポートされます。
開発者はJtestがレポートした処理フローを確認しながら問題の原因を確認、修正することができます。

Jtestを利用したセキュリティコンプライアンス準拠

Jtestには、OWASP Top10、PCI DSS、CWE Top25 などの権威ある団体が発表したセキュリティ脆弱性のルールカテゴリがあらかじめ用意されており、ソースコードに潜むセキュリティ脆弱性を検証することが可能です。

サポートしているセキュリティコンプライアンス規約(抜粋)
  • OWASP Top 10 -2017
  • OWASP Top 10 -2021
  • OWASP API Security Top 10-2019
  • OWASP ASVS 4.0.3
  • PCI DSS 3.2
  • PCI DSS 4.0
  • CERT for Java
  • CERT for Java Guidelines
  • CWE 4.10
  • CWE Top 25 2021
  • CWE Top 25 2022
  • CWE Top 25 +On the Cusp 2021
  • CWE Top 25 +On the Cusp 2022
  • UL 2900
  • DISA-ASD-STIG
コンプライアンスの順守/逸脱レポートをリアルタイムで参照
サポートしているセキュリティコンプライアンス規約用ルールセットを利用した解析を実行した場合、解析の結果からOWASP Top 10やCWE、CWE Top 25 に則った順守サマリーレポートや逸脱のレポートをいつでも確認できるようになります。


※ セキュリティルールおよびセキュリティコンプライアンス規約セットによる静的解析には「セキュリティコンプライアンスパック」のライセンス(有償)が必要です。

メトリクス計測

豊富なメトリクスルールでコードの品質を可視化
メソッド数、オブジェクトの結合度、サイクロマティック複雑度など約50種類のメトリクスをレポートします。
また、メトリクスが指定された許容範囲を超える場合に、コーディング規約の違反としてレポートすることも可能です。
メトリクス計測結果から、複雑度が高くバグが入り込みやすいコードを検出しリファクタリングすることで、バグの作り込みの防止に役立ちます。
サポートしているメトリクス(抜粋)
  • オブジェクト間の結合
  • サイクロマティック複雑度
  • ネストされたIf文
  • ファンアウト
  • Halstead難度
  • 凝集性の欠如
  • 保守性インデックス
  • メソッドのソース行数

SonarQubeとの連携

Jtest解析結果をSonarQubeに集約して結果レビューを効率化
SonarQubeにParasoft Findings Plugin for SonarQubeをプラグインすることで、Jtestの解析結果の詳細をSonarQube上で確認できます。
フロー解析の機能についても、バグの発生箇所だけではなく、どういった経路を経由した場合にバグが発生するかをレポートしてくれます。
さらに、SonarQubeが解析した他言語の解析結果も同じプロジェクト上で結果の表示が可能なため、複数のツールを使っていることを意識せずに一箇所で全ての結果を確認出来ます。

AIの活用

AIによる違反の優先度付けで検出した違反の修正を効率化
AI機能によって、登録された静的解析違反を修正するべきかどうかの予測が行えます。新しい静的解析データに対して、最初に修正する必要のある違反をParasoft DTPが予測するため、人による仕分け作業が軽減され、違反の修正プロセスがスピードアップします。
この機能は、"修正" および "抑制" として分類された違反を分析し、検出したパターンに基づいて予測モデルを作成します。モデルが作成された後、Parasoft DTPはビルド内のどの違反に修正アクションを割り当てるかを予測します。違反のレビューとアクションの割り当てを続けることで、予測モデルは徐々に改善されていきます。 AI機能は学習データを積み重ねることでプロジェクト特有の習慣を考慮した予測ができるようになります。

AIによる違反の優先度付けで検出した違反の修正を効率化

Jtestその他の機能

単体テストアシスタント

JUnitテストコード作成支援機能で工数を33%削減
JUnitのテンプレートを自動生成し、機能実装・メンテナンスに工数がかかるJUnitコードの開発工数を大幅に削減できます。
テストコード作成の時間を削減することで、本来の開発作業に時間を使えるようになります。

アプリケーションカバレッジ計測

システムテストのカバレッジ計測でテストの抜け漏れを可視化
テストコードは不要で、手動またはテスト自動化ツールで実行されたUIテストのカバレッジを計測。テストの精度向上やエビデンス作成工数を削減します。

資料・製品ラインナップ・体験版

Java対応静的解析・単体テストツール Jtestに
関するお問い合わせ

  • テクマトリックス株式会社
    東京本社

    ソフトウェアエンジニアリング事業部

    03-4405-7853

メールでのお問い合わせ
parasoft-info@techmatrix.co.jp

お問い合わせ

製品についてやテクマトリックスについてなど、
こちらよりお気軽にお問い合わせいただけます。