J2EE ベスト・プラクティス・コード・レビューは、1 つのカテゴリーのみから 構成され、J2EE ベスト・プラクティスとも呼ばれます。
コード・レビューの一部のルールでは、 検出のためにデータ・フロー分析を行う必要があります。データ・フロー分析 では、 検出結果へのパスをトレースします。結果として、これらのルールを適用すると、 コード・レビューの完了までに時間がかかります。
以下の表では、J2EE ベスト・プラクティス・コード・レビューの すべてのカテゴリーおよびサブカテゴリーを示し、 それらに含まれるルールについて説明します。左の列において、カテゴリーは太字で、 サブカテゴリーはプレーン・テキストで示します。
カテゴリーまたはサブカテゴリー | 説明 |
---|---|
J2EE ベスト・プラクティス | J2EE 開発のベスト・プラクティスに基づくルールを含み、WebSphere サーバーを ターゲットとする Web プロジェクトをサポートします |
正確さ | 誤ったメソッド呼び出しを検出するルールを含みます |
データ競合 | J2EE アプリケーション内でデータの競合状態を起こす可能性のある メソッド呼び出しを検出するルールを含みます |
ガーベッジ・コレクション | ガーベッジ・コレクションを遅らせる可能性のある メソッド呼び出しを検出するルールを含みます |
保守容易性 | J2EE アプリケーションで保守しにくいコードを検出する ルールを含みます |
パフォーマンスとスケーラビリティー | J2EE アプリケーションのパフォーマンスを損なったりスケーラビリティーを制限したりする メソッド呼び出しを検出するルールを含みます |
リソース管理 | J2EE アプリケーションでリソースを使用するための J2EE ベスト・プラクティス・ルールを含みます |
J2EE ベスト・プラクティス・コード・レビューは、 即時ルールと詳細ルールの 2 種類のルールを適用します。これらのルール・タイプは、 ルールを適用するためにかかる時間と、ルールによって検出結果に示される情報の 種類が異なります。
即時 J2EE ルール
即時 J2EE ルールは、J2EE ベスト・プラクティス・コード・レビューでの 適用にかかる時間が詳細ルールの場合より短くなります。即時ルールは、 他のコード・レビューのルールと同じ検出結果に関する情報を提供します。
詳細 J2EE ルール
詳細 J2EE ルールはデータ・フロー分析を必要とするため、 即時ルールよりも検出結果の生成に時間がかかります。詳細 J2EE ルールでは、検出結果が生成されるのみでなく、 その検出結果を引き起こしたパスも表示されます。これらのルールはパスをトレースする手段として データ・フロー分析が必要であるため、即時ルールよりも 検出結果の生成に時間がかかります。詳細ルールは以下の追加情報を 提供します。詳細 J2EE ルールは 36 個あります。 以下の表の左側の列には、属するサブカテゴリーを リストします。右側の列には、詳細 J2EE ルールであるサブカテゴリー内のルールを リストします。
カテゴリーまたはサブカテゴリー | 詳細 J2EE ルール |
---|---|
正確さ | javax.servlet.http.HttpSession で java.io.Serializable を実装しないオブジェクトを格納することを避ける |
データ競合 | 共用ロックを使用しない javax.servlet.Service.service() から static フィールドへの割り当てを避ける
共用ロックを使用しない javax.servlet.Service.service() からサーブレットのインスタンス・フィールドへの代入を避ける |
パフォーマンスとスケーラビリティー | javax.servlet.http.HttpServletRequest.getSession() の後に必ず javax.servlet.http.HttpSession.invalidate() を呼び出す |
リソース管理 | このサブカテゴリーにある 32 個のルールは、すべて詳細 J2EE ルールです。 |
このセクションでは、J2EE ベスト・プラクティス・コード・レビューで 適用する各ルール・タイプのサンプルを示します。
サンプル 即時ルール
以下のルールは、「パフォーマンスとスケーラビリティー」サブカテゴリーにある サンプル即時ルールです。
サーブレットからの java.lang.Runtime の呼び出しを避ける
サンプル 詳細ルール
新規の java.io.FileInputStream(java.io.File) の後に必ず java.io.FileInputStream.close() を呼び出す
このセクションでは、J2EE ベスト・プラクティス・コード・レビューの 既知の問題について説明します。
誤検出: 入力ストリームが 閉じていない
要約: J2EE ベスト・プラクティス・コード・レビューが、 入力ストリームが閉じていないという検出結果を生成します。実際には、 閉じる入力ストリームは他にありません。
public static int readFirstByte(String fileName) { int firstByte = -1; FileInputStream fis=null; BufferedInputStream bis = null; try { fis = new FileInputStream(fileName); bis = new BufferedInputStream(fis); firstByte = bis.read(); } catch (FileNotFoundException fnfe) { LogUtility.log(fnfe); } catch (IOException ioe) { LogUtility.log(ioe); } finally { if (bis!=null){ try { bis.close(); } catch (IOException ioe){ LogUtility.log(ioe); } } } return firstByte; }
予備手段: 誤検出された検出結果を右マウス・ボタンでクリックし、「無視」をクリックします。
不十分な 情報: .classpath ファイルに対して検出結果が報告される
要約: J2EE ベスト・プラクティス・コード・レビューが、 ワークベンチのリソースではなく、.classpath ファイルに対する検出結果を 生成します。
説明: コード・レビューがバイナリー・タイプの問題を検出しましたが、 そのタイプが外部 JAR に含まれているため、ワークベンチに対応する リソースがありません。
参照: RFE RATLC00038795
予備手段:
リソース・フィルター: 詳細ルールが機能しない
要約: 「リソース・フィルター」ページでは、 コード・レビュー時に選択した詳細ルールを適用しないファイルを 指定します。しかし、フィルターが機能せず、指定したファイルにも ルールが引き続き適用されます。
説明: コード・レビュー時に ルールを適用しないファイルを指定する場合は、 詳細 J2EE ルールの動作は異なります。詳細ルールは「リソース・フィルター」ページで 指定したファイルを認識しませんが、「除外」ページのファイルは認識します。 「除外」ページには、デフォルトで JAR ファイルがリストされています。これらのルールは、 除外するファイル・タイプとして完全修飾サーブレットと JAR ファイルの 2 種類を認識し、 他はすべて無視します。