demoプロジェクトのソースコードが静的解析ルールに準拠しているかどうかをチェックし、レポートを生成します。
生成されたレポートを参照し、静的解析ルールの違反の内容を確認します。
Jtest の静的解析には、次の2種類の解析方法があります。
- パターン解析
指定された記述の仕方に沿ってコードが記述されているかを自動的にチェックする機能です。Jtest ではビルトインルールが約1000種類ほどあり、一例として以下のカテゴリを持っています。- バグの可能性
- ガベージコレクション
- セキュリティ
- フレームワーク(Spring 等)
- フロー解析
実行をシミュレートして、実行時のバグにつながる現実の実行パスを自動的に特定する機能です。一例として以下のバグを検出するルールを持っています。- NullPointerException
- リソースリーク
- SQLインジェクション
- その他のセキュリティ脆弱性
ここでは、ビルトインのテストコンフィギュレーション「プロジェクトのソースコードのメトリクスを計測し、レポートを生成します。生成されたレポートを参照し、メトリクスを確認します。
ここでは、メトリクスの計測のために「builtin://Critical Rules」を使用して解析を実施していきます。
...
Metrics」テストコンフィギュレーションを使用します。
準備
Gradleを使用する場合、静的解析のための準備は特に必要ありません。を使用する場合、メトリクスの計測のための準備は特に必要ありません。
...
静的解析の実行
...
demoプロジェクトディレクトリに移動します。
>cd %JTEST_HOME%\examples\demo
...
Gradleを起動し、Jtest
...
DTPによるメトリクスの計測を実行します。次のコマンドを実行します。
>gradle jtest -Djtest.config="builtin://
...
Metrics"
...
- 実行が終了すると、%JTEST_HOME%\examples\demo\build\reports\jtestディレクトリにレポートが生成されます。
...
- (report.html, report.xml) が生成されます。
Jtest がDTP Serverに接続するように設定されている場合、Jtest の解析結果をアップロードすることができます。
Jtest の解析結果をアップロードするには、Gradleの起動引数に「-Djtest.publish=true」を追加します。
...
メトリクスの計測結果の確認
...
- %JTEST_HOME%\examples\demo\build\reports\jtestディレクトリに生成されたhtmlを開きます。
...
- 「すべての指摘事項 カテゴリごと」では静的解析ルールごとに検出された違反の件数を確認します。
...
...
report.
...
● コーディング規約チェックの結果
demo/src/main/java/examples/eval/Simple.javaの24行目で、map()メソッドのcase文においてcase 10ではなくcase10(空白なし)を使用していることが示されています。
これは単純な入力ミスですが、値として10が渡された時にクラスは不正な結果を生成します。
● フロー解析の結果
demo/src/main/java/examples/flowanalysis/AlwaysCloseGSS.java の 29 行目で「”context” は null の可能性がある」ことが示されています。レポートでは29 行目の指摘に至るまでのパスとして以下の流れを確認することが出来ます。
19 行目: “context” に null 値の代入
21 行目: GSSException がスローされる
25,26 行目: 例外処理
29 行目: null 値の “context” に対して context.dispose() の呼出しでNullPointerException が発生する可能性がある
4.「アクティブなルール」では、コーディング規約のチェックに使用されたコーディングルールを確認します。
...
- html にはプロジェクト毎のサマリー情報が出力されます。
各ファイルやメソッド毎に計測した値を確認するには DTP Standard に解析結果をアップロードする必要があります。