Jtest9.5 ルール一覧 テクマトリックス株式会社 システムエンジニアリング事業部 No 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 カテゴリ バグ探偵 (ライセンスが必要です) サブカテゴリ コレクション 例外 最適化 バグの可能性 リソース セキュリティ スレッドと同期 JavaBeans 重複コードの検出 コーディング スタンダード 良くない習慣 ルールID BD.CO.ITMOD BD.EXCEPT.NP BD.OPT.INEFCOL BD.OPT.INEFMAP BD.OPT.INEFMAPRM BD.PB.ARRAY BD.PB.ARRAYINP BD.PB.CC BD.PB.DEREF BD.PB.NOTEXPLINIT BD.PB.NOTINITCTOR BD.PB.STRNULL BD.PB.SWITCH BD.PB.ZERO BD.RES.FREE BD.RES.LEAKS BD.SECURITY.CUSTOM BD.SECURITY.SENS BD.SECURITY.TDCMD BD.SECURITY.TDDIG BD.SECURITY.TDENV BD.SECURITY.TDFILES BD.SECURITY.TDFNAMES BD.SECURITY.TDJXPATH BD.SECURITY.TDLDAP BD.SECURITY.TDLIB BD.SECURITY.TDLOG BD.SECURITY.TDNET BD.SECURITY.TDRESP BD.SECURITY.TDRFL BD.SECURITY.TDSQL BD.SECURITY.TDXML BD.SECURITY.TDXPATH BD.SECURITY.TDXSS BD.TRS.LOCK BD.TRS.TSHL BEAN.BLNC BEAN.EQUALS BEAN.JDBC BEAN.NFM BEAN.SERIALIZABLE CDD.DFI CDD.DUPC CDD.DUPI CDD.DUPM CDD.DUPS CDD.DUPT CODSTA.BP.ABCL CODSTA.BP.AMRO CODSTA.BP.ARM CODSTA.BP.ARN CODSTA.BP.AULS CODSTA.BP.AUML CODSTA.BP.AWRT CODSTA.BP.BLK CODSTA.BP.BLOCK CODSTA.BP.CASE CODSTA.BP.CFNF CODSTA.BP.CMUTA CODSTA.BP.CONTINUE CODSTA.BP.CS CODSTA.BP.DLSF CODSTA.BP.EXIT CODSTA.BP.FPF CODSTA.BP.FQNIC CODSTA.BP.HTV CODSTA.BP.IMPTD CODSTA.BP.NRVA CODSTA.BP.NTX CODSTA.BP.OCMA CODSTA.BP.PCF CODSTA.BP.PPAC エラーが発生しやすい CODSTA.EPC.AFP コーディング CODSTA.EPC.AGBPT CODSTA.EPC.CLNC CODSTA.EPC.COMT 77 CODSTA.EPC.IBS 78 79 80 CODSTA.EPC.MSF CODSTA.EPC.NCAC CODSTA.EPC.NCE 81 CODSTA.EPC.NCNFC 82 83 84 85 86 87 88 89 CODSTA.EPC.NMI CODSTA.EPC.OVERLOAD CODSTA.EPC.SCLONE CODSTA.EPC.STA CODSTA.EPC.TCC CODSTA.EPC.TMC CODSTA.EPC.UST CODSTA.EPC.WSIM 91 92 メソッドのオーバーライ CODSTA.OIM.AMMO ドと実装 CODSTA.OIM.CLONE CODSTA.OIM.CLONE2 93 CODSTA.OIM.CLONET 94 95 CODSTA.OIM.DVOM CODSTA.OIM.OTOSM 96 CODSTA.OIM.OTSI 90 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 編成 オブジェクト指向設計 CODSTA.OIM.OVERRIDE CODSTA.OIM.OVOTS CODSTA.ORG.AMOC CODSTA.ORG.DCI CODSTA.ORG.DINT CODSTA.ORG.FO CODSTA.ORG.IEC CODSTA.ORG.IMP CODSTA.ORG.OGM CODSTA.ORG.ORCU CODSTA.ORG.ORFIM CODSTA.ORG.ORIMP CODSTA.ORG.PML CODSTA.ORG.RSL CODSTA.ORG.TODO CODSTA.ORG.UNDPN CODSTA.POD.ACIAP CODSTA.POD.ASM CODSTA.POD.AUVT CODSTA.POD.CAC CODSTA.POD.CHAIN CODSTA.POD.CIHL CODSTA.POD.CIOC CODSTA.POD.DCTOR CODSTA.POD.IASM CODSTA.POD.ISACF 説明 コレクションを反復処理中に変更しない NullPointerException を避ける コレクション要素の非効率な削除を防止する マップエントリの非効率な反復を防止する マップエントリの非効率な削除を防止する 配列の境界を超えてアクセスしてはならない 未検証の入力を配列インデックスとして使用しない 常に同じ値に評価される条件式を避ける null チェックの前に間接参照しない 明示的に初期化する前の使用を避ける コンストラクタおよび静的初期化子で初期化する前にフィールドを使用しない 文字列に null を付加しない switch 文には到達できないブランチがあってはならない ゼロによる除算を避ける 解放されたリソースを使用してはならない リソースが割り当て解除されていることを確認する セキュリティ脆弱性を防止する (カスタム ルール) 機密データの公開を防止する コマンド インジェクションから防御する Jakarta Digester インジェクションから防御する 環境に対するインジェクションから防御する ファイルに対するインジェクションから防御する ファイル名に対するインジェクションから防御する JXPath インジェクションから防御する LDAP インジェクションから防御する ライブラリ インジェクションから防御する ログ偽造から防御する ネットワーク リソース インジェクションから防御する HTTP レスポンス分割から防御する Reflection インジェクションから防御する SQL インジェクションから防御する XML データ インジェクションから防御する XPath インジェクションから防御する XSS の脆弱性の可能性から防御する 解放されていないロックを放棄してはならない ロックを保持しているときにブロッキング メソッドを使用してはならない JavaBean クラスでリスナー メソッド名のシグニチャを推進する JavaBean クラスは常に Object.equals () を常にオーバーライドする JavaBean クラスで JDBC コードを使用することを避ける インスタンス フィールドは get および set メソッドを持たなければならない JavaBean クラスは Serializable を実装しなければならない コンストラクタでの重複したフィールドの初期化を避ける コードの重複を避ける 重複した import ステートメントを避ける 重複したメソッドを避ける 重複した文字列リテラルを避ける 重複したクラスを避ける ラベル付きの break または continue を避ける Object を返すメソッドを宣言しない リフレクション メソッドを使用しない 配列および特定の型に対して null を返すのを避ける ラベルを使用してはいけない 複数のロガーの使用を避ける。代わりにロギング レベルを使用する メソッドの戻り値の型にワイルドカードを使用しない 条件文で '{}' ブロックを使用する 不必要なネストされたブロックを避ける switch-case 文のステートメント数を制限する すべての大文字のフィールドは final として宣言する 不変クラスで public または protected コンストラクターを使用しない break 文または continue 文を使用しない 比較式では適切な側に定数を置く ロガーを static final フィールドとして宣言する System.exit() を呼び出してはいけない すべての正式なパラメータを "final" とする インターフェイス定数を参照する場合は、定数を宣言しているインターフェイス名を付ける Hashtable と Vector を使用しないようにする import 文でのワイルドカード (*) の使用を避けるまたは推進する 可変個引数メソッドに具体化できない型を渡さない 一般的または非チェック例外型をスローするメソッドの宣言を避ける オーバーロードされたコンストラクタまたはメソッドのアクセシビリティをすべて同じにする private コンストラクタだけを持つクラスは final として宣言する 匿名クラスに public または protected メンバを宣言しない 重要度 即時修正 1 1 3 3 3 1 1 2 2 4 2 1 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 4 4 4 1 4 2 ○ 3 2 ○ 2 2 3 5 4 ○ 3 4 3 3 ○ 3 4 3 ○ 3 3 4 ○ 4 ○ 3 3 ○ 4 ○ 5 2 ○ 4 3 3 ○ 5 ○ 3 ○ 5 メソッドパラメータに代入しない 5 パラメータ化された型から RAW 型への変換を避ける clone() メソッドでコンストラクタを使用しない 数値の型が一致しない条件演算子を使用しない 変数宣言では、byte または short 型の代わりに int 型を使用し、float 型の代わりに double 型 を使用する 多数の非 final static フィールドを使用してはならない abstract クラスのコンストラクタから abstract メソッドを呼び出さない 一般的な型の例外や非チェック例外をキャッチしてはいけない コンストラクタの実行中に予想外の NullPointerExceptions を引き起こす可能性があるメソッド を使用してはいけない ネストされたメソッド呼び出しの数の制限を守る 適切にオーバーロードする すべての clone() メソッドで 'super.clone()' を呼び出す 同じ型引数を複数のメソッド引数で使用してはならない サイクロマティック複雑度を制限する 連鎖メソッド呼び出しの数を制限する 文字列の構文解析には、'indexOf()' や 'substring()' ではなく 'StringTokenizer' を使用する static ではないメソッドから static フィールドに書き込んではいけない 4 2 3 抽象メソッドを使ってペアレント クラスの非抽象メソッドをオーバーライドしてはいけない 3 Cloneable クラスでは 'clone() throws CloneNotSupportedException' を宣言する clone() メソッドを使用するのは、Cloneable インターフェイスの実装のためだけにする "final" ではない Cloneable クラスの clone() メソッドが必ず CloneNotSupportedException をス ローするようにする toString() をオーバーライドする enum 型に、static な valueOf() メソッドを定義する toString() をオーバーライドする toString() が呼び出されるインターフェイスを実装するすべての型で toString() メソッドをオー バーライドする Object.equals() と Object.hashCode() は常に一緒にオーバーライドする 列挙型で toString() をオーバーライドしてはいけない 1 つのファイルに複数の型を入れてはいけない インターフェイスで定数を定義する 内部クラスではないクラスから内部クラスのメソッドを呼び出さない クラス要素を適切な順序で並べる パブリック API クラスを内部クラスに変更してはならない 特定のクラスまたはパッケージをインポートするのを避ける メソッドを名前別に編成する コンパイル単位要素を適切な順序で並べる public メソッドと protected メソッドの間に finalize メソッドを置く import 文をアルファベット順に並べる main () を最後に置く 1 つのクラス内で文字列リテラルを繰り返し使用しない コメントにタスク タグが含まれていないことを確認する すべての型がデフォルト以外のパッケージ名を持つようにする 定数インターフェイス アンチパターンを避ける 宣言しているクラスがパラメータ型の場合、static メソッドを避ける 疎結合を実現するために、具体性がより低い型を使用する 具象 Collection 型へのキャストの回数を制限する 複数のコンストラクタを持つクラスではチェーンコンストラクタを使用する クラスの継承レベルを制限する "instanceof" 比較のチェーンを避ける 可能なかぎりデフォルト コンストラクタを定義する static メンバに間接的にアクセスしてはいけない インターフェイスに定数を定義しない 2 3 1 4 4 4 3 3 3 4 2 2 2 3 2 5 ○ ○ 2 3 5 ○ 3 1 3 4 5 3 3 3 3 3 2 5 5 4 5 4 4 3 3 3 3 3 2 4 3 3 5 ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ 備考 No カテゴリ 123 124 125 126 127 128 129 サブカテゴリ 可読性 ルールID CODSTA.POD.SMC CODSTA.POD.UET CODSTA.POD.UPT CODSTA.READ.ABUB CODSTA.READ.ACCS CODSTA.READ.ACTNL CODSTA.READ.AEFS 130 CODSTA.READ.AFD 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 Design by Contract 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 Eclipse 開発 CODSTA.READ.AFQN CODSTA.READ.AIC CODSTA.READ.ANL CODSTA.READ.ASIS CODSTA.READ.AUTS CODSTA.READ.CCB CODSTA.READ.CEB CODSTA.READ.CID CODSTA.READ.CLV CODSTA.READ.CTA CODSTA.READ.CX CODSTA.READ.DOWHILE CODSTA.READ.DUN CODSTA.READ.DVCU CODSTA.READ.ECSC CODSTA.READ.FF CODSTA.READ.FLV CODSTA.READ.HBE CODSTA.READ.LONG CODSTA.READ.MTBS CODSTA.READ.MVOS CODSTA.READ.NEA CODSTA.READ.NMUC CODSTA.READ.NSI CODSTA.READ.PCIF CODSTA.READ.PCTOR CODSTA.READ.PDBB CODSTA.READ.PFL CODSTA.READ.SIE CODSTA.READ.UATS CODSTA.READ.UBL CODSTA.READ.ULIT CODSTA.READ.USN CODSTA.READ.VDT CODSTA.READ.VIFS DBC.CPT DBC.IGM DBC.IMNR DBC.IPAN DBC.PKGC DBC.PKGMPOST DBC.PKGMPRE DBC.PRIC DBC.PRIMPOST DBC.PRIMPRE DBC.PROC DBC.PROMPOST DBC.PROMPRE DBC.PUBC DBC.PUBMPOST DBC.PUBMPRE DBC.RCC DBC.SYNTAX ECLIPSE.IPMF 185 186 187 Enterprise JavaBeans 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 ECLIPSE.PCMF ECLIPSE.SMF Enterprise JavaBeans 3EJB.EJB3.AIA EJB.EJB3.AISE EJB.EJB3.BMN EJB.EJB3.CMF EJB.EJB3.CPIM EJB.EJB3.EAII EJB.EJB3.IDA EJB.EJB3.IDCS EJB.EJB3.ISB EJB.EJB3.MDBS EJB.EJB3.MDML EJB.EJB3.MTM EJB.EJB3.PCUN EJB.EJB3.PERMIT EJB.EJB3.RLI EJB.EJB3.RMSB EJB.EJB3.SIVS EJB.EJB3.SRBM EJB.EJB3.ULI EJB.ABCS EJB.ABFG EJB.ACL EJB.ADCB EJB.AIEBC EJB.AJDBC EJB.AMSC EJB.AOTO EJB.AUS EJB.CDP EJB.CNDA EJB.CNDF EJB.CRTE EJB.DPANY EJB.EJBLOAD EJB.FNDM EJB.IECM EJB.IEPM EJB.JIO EJB.LNL EJB.MDBC EJB.MEC EJB.MNDF 229 EJB.MRE 230 231 232 EJB.NFDC EJB.NFS EJB.PCRTE 233 EJB.RILH 234 235 EJB.RR EJB.RT 236 EJB.RTC 237 238 239 240 EJB.RTP EJB.RUH EJB.SMSN EJB.STD 241 EJB.TCE 242 EJB.TFE 243 244 245 EJB.THISARG EJB.THISRET EJB.THREAD 246 EJB.UCIC 247 EJB.USF 説明 重要度 即時修正 case 文が多すぎる/少なすぎる switch 文を避ける 3 一連の "static final" の代わりに "enum" 型を使用する 3 パラメータ化された型を使用する 3 プリミティブ型の自動的なボックス化/ボックス化解除に依存しない 4 ○ 制御構造 文での複雑な条件式の使用は避ける 3 匿名クラスの行数を制限する 3 ○ 拡張された for ループの使用を禁止または必須にする 5 getter/setter メソッドを使用するのではなく、宣言している型で直接フィールドのアクセス/設定 ○ 3 を行う ○ 完全修飾型名を使用しない 3 無名の内部クラスを避ける 3 if-else 文での負論理の使用を避ける 5 static なインポート文を使用しない 2 ○ 不要な toString() の呼び出しを避ける 3 制御構造の末尾にコメントを付ける 3 空のブロックにコメントを付ける 3 ○ ネストされた式で加算演算子または減算演算子を使用してはいけない 3 ローカル変数にコメントを付ける 5 常に空の定数配列で Collection.toArray() を呼び出す 4 ○ 条件演算子の使用を推進する/しない 3 do-while の使用を避ける 5 単一メソッドで多数の否定演算子 "!" を使用しない 5 変数はできるだけ使用される場所の近くで宣言する 4 ○ すべてのコンストラクタからスーパークラスのコンストラクタの 1 つを明示的に呼び出す 4 ○ private 定数フィールドを final 宣言する 2 ○ 定数ローカル変数を final 宣言する 4 ○ 16 進の 2 進指数を避ける 4 ○ long 型の定数の最後に小文字の"l" または数字の "1" を使用しない 1 try ブロックの大きさを最小にする 4 ○ 1 つのステートメントで複数の変数を宣言しない 3 ○ ネストされた代入または他の式に埋め込まれた代入を避ける 2 変更されないコレクションを明確にするため unmodifiable として宣言する 5 ○ static ではないイニシャライザの使用を避ける 4 初期化子、条件文、更新文のある for ループを宣言する 2 ○ public ではないクラスに "public" コンストラクタを宣言しない 2 宣言はブロックの先頭にだけ書く 2 ○ for ループまたは while ループの使用を義務付ける 5 ○ size() と 0 を比較するのではなく、Collection および Map の isEmpty() を使用する 4 ○ this と super の使用を避けるまたは推進する 4 ○ Integer.parseInt() メソッドを使用して 2 進表記から整数値を作成してはならない 4 ○ 数値リテラルでアンダースコア文字 (_) を使用する 4 ○ リテラル定数は使用しない 2 ○ 型が異なる複数の変数を 1 つのステートメントで宣言しない 2 for ループでの初期化と更新の数を制限する 3 ○ null を返すメソッドで事後条件 "$result!=null" を指定してはいけない 2 ○ すべての getter メソッドには @invariant タグを使用する 2 null 以外であることが保証されていない参照でメソッドを呼び出してはいけない 3 ○ null チェックを行う前に間接参照されているすべてのパラメータに @pre != null タグを付ける 3 ○ すべての package-private クラスには @invariant タグを使用する 4 ○ すべての package-private メソッドには @post タグを使用する 4 ○ すべての package-private メソッドには @pre タグを使用する 4 ○ すべての private クラスには @invariant タグを使用する 5 ○ すべての private メソッドには @post タグを使用する 5 ○ すべての private メソッドには @pre タグを使用する 5 ○ すべての protected クラスには @invariant タグを使用する 3 ○ すべての protected メソッドには @post タグを使用する 3 ○ すべての protected メソッドには @pre タグを使用する 3 ○ すべての public クラスには @invariant タグを使用する 2 ○ すべての public メソッドには @post タグを使用する 2 ○ すべての public メソッドには @pre タグを使用する 2 @pre および @post 条件の再チェックを避ける 4 DbCでは適切なシンタックスを使用する 2 MANIFEST.MF で internal パッケージをエクスポートしない 2 Eclipse 3.0 の互換性のため MANIFEST.MF 内の "Export-Package" と "Provide-Package" の ○ 2 値を一致させる MANIFEST.MF で Eclipse-AutoStart エントリの不足を避ける 2 無視されたまたは無効な注釈を避ける 4 トランザクションを使用する場合は IllegalStateException を避ける 3 ビジネス メソッドの名前を ejb で開始しない 4 ライフサイクル コールバック メソッドの適切な書式を使用する 3 @AroundInvoke メソッドから InvocationContext.proceed() を呼び出す 2 @AroundInvoke をビジネス インターフェイスのメソッドで公開しない 4 不適切な @Id 注釈の使用を避ける 3 @IdClass を Serializable にし、equals() および hashCode() メソッドを定義する 3 @Stateful bean を @Stateless bean にインジェクトしない 2 @MessageDriven bean から他の @MessageDriven bean を拡張しない 3 @MessageDriven bean で MessageListener を指定する 3 複数の @Timeout メソッドを宣言しない 3 常に @PersistenceContext と共に unitName を指定する 5 security アノテーションのない EJB 3 メソッドを避ける 3 1 つのインターフェイスで @Local と @Remote の両方を指定しない 2 @Stateful bean で @Remove メソッドを指定する 3 @Stateful bean のインスタンス変数を Serializable にする 2 リモート ビジネス メソッドのパラメータと戻り値を Serializable にする 2 ローカル インターフェースを介して Bean にアクセスする 5 EJB クラスでの Servlet コードの使用は避ける 3 細粒度なオブジェクトとして Entity Bean を使用するのは避ける 4 bean クラスでクラス ローダのアクセス、使用、作成を行わない 2 java swing やサーブレットクラスに EJB コードは含まない 3 Entity Bean 間の過剰なやり取りは避ける 3 EJB クラスの中での JDBC コードの使用は避ける 3 セキュリティ構成オブジェクトにアクセスしたり、その内容を変更したりしない 2 Session Bean と Entity Bean の 1 対 1 のマッピングは避ける 3 EJB でソケットを使用しない 3 ○ Bean クラスは public で宣言する 2 Bean クラスは abstract で宣言しない 2 ○ Bean クラスは final で宣言しない 2 ○ ejbCreate () を宣言するには、static や final ではなく、public を使用する 2 ANYONE ロールに EJB のアクセス パーミッションを与えない 3 ejbLoad () 内で finder メソッドを呼び出してはいけない 2 ○ finder メソッドを宣言するには、final や static ではなく public を使用する 2 ○ Bean クラスで 1 つ以上の ejbCreate () を実装する. 2 ○ EntityBean クラスでは 1 つ以上の ejbPostCreate () を実装する 2 bean クラスで java.io パッケージの型を使用しない 2 Bean クラスのネイティブ ライブラリをロードしない 2 ○ すべてのメッセージ駆動型 Bean クラスに対して、引数のない ejbCreate () メソッドを実装する 2 ○ Entity Bean クラス中の各 ejbCreate () に対して、対応する ejbPostCreate () を定義する 2 Bean クラスでは finalize () を宣言しない 2 リモート インターフェイスおよびリモート ホーム インターフェイス中のメソッドで ○ 2 java.rmi.RemoteException をスローする ○ Bean クラスにパラメータを取らない public コンストラクタを宣言する 2 EJB Bean クラスのすべての static フィールドに対して final 宣言する 2 ○ ejbPostCreate () を宣言するには、static や final ではなく、public を使用する 2 Bean のローカル インターフェイスおよびローカル ホーム インターフェイスで ○ 2 java.rmi.RemoteException をスローしてはいけない エンティティ Bean をリモートとして宣言しない 3 finder メソッドの戻り値の型は、主キーまたは主キーの Collection でなければならない 2 SessionBeans またはメッセージ駆動型 Bean の ejbCreate () の戻り値の型は void でなければ 2 ならない ejbPostCreate () の戻り値の型は void でなければならない 2 EJB ホームを再利用する 2 EJB で新しく SecurityManager を作成または設定しない 2 ○ EJB Bean が必要なメソッドを実装し、EJB Bean とインターフェイスの名前形式に従うことを推 2 リモート ホーム インターフェイスまたはローカル ホーム インターフェイスの create 関連メソッド ○ 2 で javax.ejb.CreateException をスローする リモート ホーム インターフェイスまたはローカル ホーム インターフェイスの finder メソッドで ○ 2 javax.ejb.FinderException をスローする ○ this を引数として使用しない 2 ○ this を戻り値として使用しない 2 bean クラスではどんな形でもスレッドを開始、終了、管理してはならない 2 再利用可能な JNDI リソースをキャッシュして、パフォーマンス コストが高い操作の使用を最小 3 限に抑える Session Facade を使って Entity Bean へのアクセスを管理する 2 2 備考 No 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 カテゴリ 例外 フォーマット ガーベッジ コレクション グローバル静的解析 Hibernate フレームワーク サブカテゴリ ルールID EJB.UVO EXCEPT.AEFC EXCEPT.AIOC EXCEPT.CATO EXCEPT.CDUPL EXCEPT.CLFIN EXCEPT.CTE EXCEPT.EPNFC EXCEPT.HCB EXCEPT.IMMEX EXCEPT.MTE EXCEPT.NCERR EXCEPT.NCNPE EXCEPT.NFE EXCEPT.NTERR EXCEPT.NTNPE EXCEPT.RTERR EXCEPT.TEFEC EXCEPT.TRY EXCEPT.TSCE FORMAT.APAREN FORMAT.ASPACE FORMAT.ATS FORMAT.BLBC FORMAT.BLCD FORMAT.BLSIM FORMAT.CBRACE FORMAT.CMS FORMAT.DOT FORMAT.DUT FORMAT.FCB FORMAT.FCN FORMAT.IAD FORMAT.IND FORMAT.LL FORMAT.MCH FORMAT.MO FORMAT.MSP FORMAT.NSAB FORMAT.OSPL FORMAT.SAC FORMAT.SAOP FORMAT.SAP FORMAT.SAS FORMAT.SAUOP FORMAT.SBOP FORMAT.SBUOP FORMAT.SC FORMAT.SCOP FORMAT.SLOP FORMAT.SROP FORMAT.TC FORMAT.TCOMMA FORMAT.TE FORMAT.TNL FORMAT.U2BL FORMAT.UP GC.AUTP GC.DUD GC.FCF GC.FM GC.GC GC.GCB GC.IFF GC.MML GC.NCF GC.OSTM GC.RCO GC.STV GLOBAL.ACD GLOBAL.ASI GLOBAL.AUT GLOBAL.DPAC GLOBAL.DPAF GLOBAL.DPAM GLOBAL.DPPC GLOBAL.DPPF GLOBAL.DPPM GLOBAL.NIE GLOBAL.SF GLOBAL.SPAC GLOBAL.SPAM GLOBAL.SPPC GLOBAL.SPPM GLOBAL.UCC GLOBAL.UEC GLOBAL.UPAC GLOBAL.UPAF GLOBAL.UPAM GLOBAL.UPPC GLOBAL.UPPF GLOBAL.UPPM HIBERNATE.CAR HIBERNATE.CHS HIBERNATE.CSF 343 HIBERNATE.GSIM 344 345 346 347 348 349 350 351 352 353 初期化 354 355 356 357 358 359 360 361 362 363 364 HIBERNATE.IDC HIBERNATE.LHII HIBERNATE.OHCE HIBERNATE.PIDS HIBERNATE.RBT HIBERNATE.SLM HIBERNATE.UGNQ HIBERNATE.UNP HIBERNATE.UPWD INIT.AAI INIT.ADI INIT.AULI INIT.CLIB INIT.CSI INIT.DI INIT.DIA INIT.IC INIT.LV INIT.NFS INIT.SF INIT.SFA 365 INIT.SICUI 366 367 国際化 368 369 INIT.UIRC INTER.CCL INTER.CLO INTER.COS 370 INTER.CTLC 371 372 373 374 375 376 377 INTER.DTS INTER.ITT INTER.NCL INTER.NTS INTER.PN INTER.SCT INTER.SDFL 説明 重要度 即時修正 値オブジェクトを使ってサーバーへの呼び出しの粒度を減らす 4 例外をフロー制御文として使用しない 4 catch ブロックで instanceof を使用して例外の型をチェックしてはならない 3 ○ メソッドの本体でスローされる可能性のあるすべての ''Throwable'' オブジェクトをキャッチする 2 ○ 同じ内容の catch 句を避ける 3 ○ リソースをクローズするためだけに finally ブロックを使用しない 3 スローされた例外を常に連結する 3 final ではない public クラスのコンストラクタから例外をスローしない 3 ○ catch ブロックを隠してはいけない 3 ユーザ定義 Exception のすべてのフィールドを final として宣言する 3 main() メソッドには、スローされる例外を宣言しない 3 java.lang.Error オブジェクトをキャッチしてはいけない 3 NullPointerException をキャッチしてはいけない 3 数値クラスのメソッドは処理されない NumberFormatException をスローしてはならない 3 一般的な例外または非チェック例外をスローしない 3 ○ NullPointerException をスローしてはいけない 5 キャッチしたときに特定の例外を再スローする 3 例外クラスのコンストラクタから例外をスローしない 3 try/catch/finally ブロックをループの外に置く 4 例外メッセージは最少文字数の要求を満たさなければならない 3 ○ () を使って複雑な式を分割する 3 ○ 配列の参照では適切なスペースを使用する 3 ○ 行の最後に空のスペースを置いてはいけない 5 ○ C スタイルのコメントの前には空白行を挿入する 5 ○ 型宣言前の空白行の推進 4 ○ 空白行を使って異なるパッケージの import 文を分離する 4 ○ 1 コード行に "}" だけを記述するべきである 3 ○ キャストの型の後には 1 つのスペースを入れる/入れない 3 ○ 修飾名とメソッド呼び出しの間にスペースを入れてはいけない 2 ○ タブではなくスペースを使用する (またはスペースではなくタブを使用する) 3 ○ 開き括弧 "{" の位置の推進 4 ○ ファイルと同じ名前の型をファイルの先頭にする 4 配列宣言では、配列の型名、'[]'、変数名の順で記述する 3 ○ インデントのスペース数の推進 2 1 行の文字数を制限する 2 ○ 各ソース ファイルにファイル ヘッダー コメントを用意する 2 ○ 注釈と修飾子の順序を保つ 4 ○ メソッド名と開き括弧 "(" の間には 1 つのスペースを入れる/入れない 3 ○ 開き括弧 "{" に続けてステートメントを入れる場合は "{" の後で必ず改行する 3 ○ 1 コード行につき 1 つのステートメントを入れる 2 ○ カンマの後のスペース数の推進 3 ○ 代入演算子の前後のスペース数の推進 3 ○ 条件文の開始括弧 "(" の後のスペースの数の推進 3 ○ セミコロンの後のスペース数の推進 3 ○ 前置単項演算子とそのオペランドの間のスペース数の推進 3 ○ ビット演算子の前後のスペース数の推進 3 ○ 後置単項演算子とそのオペランドの間のスペース数の推進 3 ○ 条件文と開始括弧 "(" の間に、決められた数のスペースを入れる 3 ○ 条件演算子 "?" の前後のスペース数の推進 3 ○ 論理演算子の前後のスペース数の推進 3 ○ 関係演算子の前後のスペース数の推進 3 コード行と同じ行にコメントを置くのを避ける 5 ○ 配列イニシャライザの最後にカンマを置く/置かない 5 ○ 一般的な書式を条件演算に使用する 2 ○ すべてのファイルを必ず復帰改行文字で終了させる 4 ○ 主要なプログラム セクション間の空白行数の推進 2 ○ 不要な括弧を避ける 3 ○ プリミティブ型を String に変換するときに、不要なオブジェクトを作成しない 2 Date[] ではなく long[] を使用する 3 ○ finalize () から必ず super.finalize () を呼び出す 1 finalize () を使ってリスナを解放しない 1 System.gc() または Runtime.gc() を明示的に呼び出してはいけない 3 getClipBounds () への呼び出しを再利用する 5 ○ finalize() メソッドの finally ブロックで super.finalize() を呼び出す 1 ○ メモリ リークを引き起こす可能性のあるメソッドの呼び出しに注意する 4 ○ finalize () を明示的に呼び出さない 1 reset () を呼び出すことによって、ObjectStream 内の潜在的なメモリ リークを回避する 2 ○ 不変定数オブジェクトを再利用してメモリを節約する 3 際限なく大きくなる可能性のある static なコレクションまたはマップを避ける 3 ファイルに循環的依存関係が含まれないようにする 4 ○ インスタンスフィールドを使用しないメソッドは static 宣言する 3 ○ 使用されない throws 句を避ける 2 ○ package-private 型にアクセスできる範囲をできるだけ制限する 2 ○ package-private フィールドにアクセスできる範囲をできるだけ制限する 2 ○ package-private メソッドにアクセスできる範囲をできるだけ制限する 2 ○ public/protected 型にアクセスできる範囲をできるだけ制限する 4 ○ public/protected フィールドにアクセスできる範囲をできるだけ制限する 4 ○ public/protected メソッドにアクセスできる範囲をできるだけ制限する 4 実装されないインターフェイスおよび拡張されない abstract クラスを避ける 4 ○ private ではないフィールドが読み込み専用である場合、final 宣言する 3 ○ package-private クラスからサブクラスが派生されない場合 final と宣言する 2 ○ メソッドがオーバライドされない場合、package-private メソッドを final と宣言する 2 ○ publicおよびprotected クラスからサブクラスが派生されない場合 final と宣言する 5 ○ メソッドがオーバライドされない場合、public/protected メソッドを final と宣言する 5 ○ ユーティリティ クラスで正しくコンストラクタを宣言する 2 ○ グローバルに使用されない 列挙型 定数を避ける 4 ○ グローバルに使用されない package-private 型を避ける 2 ○ グローバルに使用されない package-private フィールドを避ける 2 ○ グローバルに使用されない package-private メソッドを避ける 2 ○ グローバルに使用されない public/protected 型を避ける 4 ○ グローバルに使用されない public/protected フィールドを避ける 4 ○ グローバルに使用されない public/protected メソッドを避ける 4 Configuration にマッピングを追加するには addResource() ではなく addClass() を使用する 3 Hibernate セッションを finally ブロックでクローズする 2 SessionFactory オブジェクトをすべてクローズする 3 データベース カラムにマップされたオブジェクトには getter/setter メソッドと id フィールドを定 3 義する ○ Hibernate パーシステント クラスのための引数なしコンストラクタを宣言する 3 Hibernate 関連の機密情報をlog4j.properties ファイルで info レベルに設定してログ記録しない 3 ○ マップされた Hibernate オブジェクトの equals および hashCode メソッドをオーバーライドする 3 Hibernate 識別子のための setter メソッドは private で宣言する 3 アクティブなトランザクションを catch ブロックでロールバックする 3 Hibernate Query を実行する前に setLockMode() を呼び出す 3 Java コードでクエリーを記述するのではなく、マップされた名前付き HQL クエリーを使用する 3 HQL クエリーでは名前付きパラメータを使用する 3 暗号化されていない Hibernate ユーザ名およびパスワードを web.xml ファイルに保存しない 1 配列イニシャライザを使用してはいけない 5 スーパークラスのコンストラクタですでに初期化されたフィールドを明示的に初期化しない 1 ○ 遅延初期化のための "if" チェックでは適切な演算子を使用する 3 遅延初期化ブロックに初期化コード以外のコードを置かない 5 ○ すべてのフィールドを明示的に初期化する 4 ○ フィールドを二重に初期化するを避ける 4 ○ ダイアモンドを使用してジェネリック クラスのコンストラクターを呼び出す 1 フィールドに対して初期化の循環を使用してはいけない 4 ○ 宣言文ですべてのローカル変数を明示的に初期化する 3 初期化実行中に、final でない static フィールドを使用しない 2 ○ 明示的な初期化を使用する/static フィールドをデフォルト値で初期化してはいけない 2 final ではない static 変数を使って final の static 変数を初期化してはいけない 3 すべての "static final" フィールドが代入される前に、現行クラスのインスタンスを作成する ○ 3 "static" イニシャライザを呼び出してはいけない コンストラクタの実行前または実行中における未初期化フィールドの読み込みを避ける 1 ○ String 変換メソッドを呼び出すときは Locale 引数を用意する 3 ○ 国際化 (I18N) では論理演算子と一緒に単一文字を使用しない 4 国際化 (I18N) では文字列連結を避ける 4 国際化環境で Character.toLowerCase(char) または Character.toUpperCase(char) を呼び出さ 4 ない 国際化環境では Date オブジェクトで 'toString()' または 'String.valueOf()' を呼び出さない 4 ○ 国際化 (I18N) では翻訳可能なテキストはリソース バンドルに出力する 3 ○ 国際化 (I18N) では単一文字リテラルは "static final" 定数として使用する 4 国際化環境では数値で 'toString()' または 'String.valueOf()' を呼び出さない 4 国際化 (I18N) では Number 型の parse メソッド 呼び出しを避ける 4 国際化 (I18N) では 'String.compareTo()' 呼び出しを避ける 4 ○ SimpleDateFormat オブジェクトのインスタンスを生成するときは Locale 引数を用意する 3 3 備考 No カテゴリ 378 379 380 381 382 383 384 Javadoc コメント 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 サブカテゴリ ルールID INTER.SE INTER.SEO INTER.SIO INTER.ST INTER.TTS INTER.UNLS JAVADOC.BT JAVADOC.CRN JAVADOC.DPMT JAVADOC.ECTF JAVADOC.ECTM JAVADOC.ECTT JAVADOC.JNJD JAVADOC.MAJDT JAVADOC.MDJT JAVADOC.MISFORMAT JAVADOC.MRDC JAVADOC.MVJDT JAVADOC.ORDER JAVADOC.PARAM JAVADOC.PJDC JAVADOC.PJDF JAVADOC.PJDM JAVADOC.SINGLE 402 JAVADOC.SMJT 403 404 405 406 407 408 409 Java データベース 接続 410 411 412 413 414 415 416 417 418 419 JavaServer Page メトリクス 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 JavaServer Pages 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 JAVADOC.SPELL JAVADOC.SRRP JAVADOC.THROW JAVADOC.TSMJT JAVADOC.TSOL JAVADOC.VMCR JDBC.BRSA JDBC.CDBC JDBC.COCO JDBC.DSLV JDBC.ODBIL JDBC.RRWD JDBC.SCSF JDBC.UDS JDBC.UPSC JDBC.URSF JMETRICS.NJL JMETRICS.NLS JMETRICS.NOF JMETRICS.NOJD JMETRICS.NOJS JMETRICS.NOM JMETRICS.NOPKGF JMETRICS.NOPKGM JMETRICS.NOPRIF JMETRICS.NOPRIM JMETRICS.NOPROF JMETRICS.NOPROM JMETRICS.NOPUBF JMETRICS.NOPUBM JMETRICS.NOSS JMETRICS.PJL JSP.JSF.AMA JSP.JSF.CDM JSP.JSF.CMBS JSP.JSF.CSRT JSP.JSF.DMBN JSP.JSF.DMBRT JSP.JSF.ECGR JSP.JSF.EFV JSP.JSF.FCCF JSP.JSF.FMC JSP.JSF.HGALT JSP.JSF.IDSV JSP.JSF.IMBC JSP.JSF.ISSH JSP.JSF.MBCD JSP.JSF.MLLT JSP.JSF.PVI JSP.JSF.RBLB JSP.JSF.SISI JavaServer Faces 454 JSP.JSF.SSPR 455 456 457 458 459 460 461 462 463 464 465 JSP.JSF.SSV JSP.ADA JSP.AHC JSP.AJS JSP.APS JSP.ARETLD JSP.ASE JSP.ASLC JSP.CSRF JSP.DDS JSP.DOCT 466 JSP.DUIO 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 JUnit テストケース 487 488 489 490 491 492 493 JSP.ERI JSP.IFS JSP.ISJT JSP.ISTM JSP.JSPH JSP.LEL JSP.MFI JSP.NCANV JSP.NFWD JSP.ODB JSP.OJE JSP.RIEL JSP.SAT JSP.SPELL JSP.STA JSP.UDQ JSP.URLV JSP.USP JSP.UT JUNIT.AEAT JUNIT.AHLOD JUNIT.ANAT JUNIT.ANBA JUNIT.ASAT JUNIT.ASSERT JUNIT.AST JUNIT.CBA 494 JUNIT.CSUPER 495 496 497 JUNIT.CSUTD JUNIT.DIR JUNIT.ETCTA 498 JUNIT.FAIL 499 500 501 502 503 504 505 JUNIT.FICB JUNIT.ISMTC JUNIT.MAIN JUNIT.OSIC JUNIT.OSUM JUNIT.OTDM JUNIT.SIA 説明 重要度 即時修正 国際化 (I18N) では 'String.equals()' 呼び出しを避ける 4 ○ エンコーディング オプションの指定できないメソッドやコンストラクタの呼び出しを避ける 3 国際化 (I18N) では 'String.indexOf()' または 'String.lastIndexOf()' 呼び出しを避ける 4 国際化 (I18N) では StringTokenizer の使用を避ける 4 国際化環境では Time オブジェクトで 'toString()' または 'String.valueOf()' を呼び出さない 4 ○ 不必要な "$NON-NLS" および "NOI18N" コメントを避ける 3 ○ サポートされない @ タグやその他のタグを Javadoc コメントで使うのを避ける 4 ○ メソッドが null を返すことができるかどうかを必ず Javadoc に記述する 3 ○ 未使用の Javadoc タグを避ける 2 ○ フィールドでのカスタム Javadoc タグの使用を推進する 5 ○ メソッド/注釈型のメンバ型でのカスタム Javadoc タグの使用を推進する 4 ○ 型でのカスタム Javadoc タグの使用を推進する 4 ○ Javadoc ではないコメントを Javadoc コメントと宣言の間に挿入してはいけない 5 ○ 宣言の Javadoc コメントには @author タグを使用する 3 ○ Javadoc タグには意味のある説明を記述する 2 Avoid misformatted Javadoc tags 3 ○ メソッドの Javadoc コメントには ''@return'' タグを入れる 2 ○ 型の Javadoc コメントには @version タグを入れる 3 ○ Javadoc タグの順序の推進 3 ○ メソッドの各パラメータの Javadoc コメントには @param タグを使用する 2 ○ 型には Javadoc コメントを付ける 2 ○ フィールドには Javadoc コメントを付ける 2 ○ メソッドには Javadoc コメントと説明を付ける 2 ○ Javadoc コメントに使用する行数を制限する 5 synchronized public メソッドおよびブロックの Javadoc コメントには @concurrency タグを使用 ○ 2 する ○ Javdoc コメント中にスペル ミスがある 3 ○ @Documented 注釈を使用するときに保持ポリシーとして 'RUNTIME' を指定する 3 ○ メソッドの Javadoc コメントには @throws タグまたは @exception タグを入れる 2 ○ toString()' には Javadoc コメントを付ける 3 特定の Javadoc タグは1行に収める 4 ○ void メソッドの Javadoc コメントでは @return タグを使用しない 2 ○ JDBC メソッドの呼び出しで、インデックスが有効であることを確認する 1 JDBC 接続を finally ブロック中でクローズする 1 正しい順序で JDBC オブジェクトをクローズする 4 JDBC 接続のデータ ソースを再利用する 2 ループ中で JDBC 接続をオープン/クローズしてはいけない 4 JDBC リソースは finally ブロックでクローズする 1 static フィールドにデータベース接続オブジェクトを格納してはならない 3 javax.sql.DataSource を使ってデータベース接続を取得する 4 PreparedStatement を正しく使用する 3 RowSetFactory のインスタンスを使用して RowSet オブジェクトを作成する 3 JSP ファイル中の Java コード行の数を制限する 2 スクリプト中の Java コード行の数を制限する 2 JSP ファイルのフィールド数を制限する 2 JSP ファイル中の JSP ディレクティブの数を制限する 2 JSP ファイル中の JSP スクリプレットの数を制限する 2 JSP ファイル中のメソッド数を制限する 2 JSP ファイル中の package-private フィールド数を制限する 2 JSP ファイル中の package-private メソッド数を制限する 2 JSP ファイル中の private フィールド数を制限する 2 JSP ファイル中の private メソッド数を制限する 2 JSP ファイル中の protected フィールド数を制限する 2 JSP ファイル中の protected メソッド数を制限する 2 JSP ファイル中の public フィールド数を制限する 2 JSP ファイル中の public メソッド数を制限する 2 JSP によって生成されるサーブレットの文字数を制限する 2 Java コードの割合 (%) を制限する 2 Map を乱用しないようにする 4 DataModel のサブクラスに対して常に「引数を持たないコンストラクタ」を宣言すること 2 互換性のないマネージド Bean スコープを避ける 2 UIComponent のコンストラクターから必ず setRendererType() を呼び出すこと 3 マネージド Bean の名前が重複しないようにする 2 描画時のタグとビルド時のタグを混合しない 2 ExternalContext.getRequest() および ExternalContext.getResponse() のキャストを避ける 5 JSF エラー ページで 'f:view' を使用しないようにする 3 javax.faces.CONFIG_FILES の faces-config.xml を指定しないようにする 5 f:facet タグが複数の子を持たないようにする 2 h:graphicImage' に対して常に 'alt' 属性を指定する 3 f:subview' には必ず id 属性を指定すること 3 無効なマネージド Bean クラスを避ける 2 コンバーター、バリデーター、イベントリスナーには Serializable または StateHolder を実装する 4 マネージド Bean の循環依存を避ける 2 h:messages に対して list または table レイアウトを推進する 4 from-view-id および to-view-id パスを必ず '/' で開始する 3 f:loadBundle ではなく resource-bundle 要素を使用する 4 f:selectItem ではなく f:selectItems を使用する 4 UIComponentELTag の setProperties() および release() をオーバーライドするときは必ずスー 3 パー メソッドを呼ぶ EditableValueHolders について setSubmittedValue() の後に setValid(true) を必ず呼び出す 3 JSP ページからデータベースにアクセスしない 2 HTML コメントを使用してはいけない。代わりに JSP スタイルのコメントを使用する 3 JSP ページでの JavaScript を避ける 5 print 文ではなく JSP 式を使って出力を生成する 3 Tag Library Descriptor の要素に推奨されるサブ要素を追加する 3 JSP ファイルのエンコーディング情報を必ず指定する 4 Java コメントではなく純正の JSP コメントを使用する 5 タグ ハンドラーの release() メソッドでは、 super.release() を最初のステートメントとして呼び出 2 コメント中で 2 個のダッシュ ( 文字列 "--" ) を使用してはいけない 5 正しい文書型を使用する 1 JSP オブジェクトの参照を取得するには、API を呼び出すよりも JSP の暗黙のオブジェクトを直 3 接使用する 必須インクルード ファイルを強制する 4 iframes が必ず src 属性を持つようにする 2 JSP ページで開始または終了タグ以外で '<' と '>' を使用してはいけない 2 タグ ネームのスペルミス 1 すべての JSP ファイルに正しいヘッダーを記述する 2 長い EL 式の識別子チェーンを避ける 4 StateHolder.saveState() と StateHolder.restoreState() の両方をオーバーライドする 3 値のない属性を作成しない 2 <jsp:forward> の使用を避ける 4 1 つの JSP 宣言ブロックを使用する 4 規約に従った順番で JSP ページの要素を記述する 3 予約語を EL 式の識別子として使用しないようにする 3 JSP タグとその本体の間には空白を挿入する 5 JSP テキストとコメントにスペルミスがある 3 JSP ファイルでインライン スタイル情報を使用しないようにする 2 可能な場合、属性値は二重引用符で囲むべきである 5 予約されたローカル変数名を使用してはいけない 2 標準的なタグ ライブラリ接頭辞を使用する 4 使用されないタグ ライブラリをインポートしてはいけない 2 assertTrue ではなく assertEquals を使用する 4 単体テストによって使用されるデータファイルのハードコーディングを避ける 4 null 参照をチェックするときは assertTrue ではなく assertNull を使用する 4 assertTrue() または assertFalse() への論理型パラメーターを否定しないようにする 3 参照の等しさをチェックするときは assertTrue ではなく assertSame を使用する 4 ○ JUnit アサーションには必ずメッセージ文字列を含める 3 メイン スレッド以外のスレッドにアサーション文を置かない 1 catch ブロックで assert メソッドを呼び出すのを避ける 3 JUnit テスト クラスの setUp メソッドおよび tear-tearDown メソッドでは、それぞれスーパークラ ○ 1 スの setUp/tearDown メソッドを呼び出すべきである ○ setUp()' および 'tearDown()' メソッドが正しく実装されるようにする 2 テストするクラスと同じ場所にテスト クラスを置く 5 @Test 注釈があるテスト クラスで TestCase を拡張しない [JUNIT.ETCTA-2] 2 assertTrue(false) や assertFalse(true) メソッドを使用して false を検証する変わりに fail () メ 3 ソッドを使用する JUnit テストメソッド内の catch ブロック内で fail() を呼び出してはいけない 3 JUnit テスト クラスで suite() メソッドを実装してはいけない 4 ○ すべての JUnit クラスは個別に実行可能な main () メソッドを持つべきである 4 コンストラクタを使ってテスト ケースを設定しない 2 ○ 常に setUp () をオーバーライドするか、@Before メソッドを定義する 3 ○ 常に tearDown () をオーバーライドするか、@After メソッドを定義する 3 JUnit テスト ケースには必ず アサートメソッドを含める 1 4 備考 No カテゴリ サブカテゴリ ルールID 506 JUNIT.SIFN 507 508 509 510 511 512 513 組込みデバイス 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 名前付け規則 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 オブジェクト指向プログラミング 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 JUNIT.SUITE JUNIT.TATC JUNIT.TCWNT JUNIT.TEST JUNIT.UPJT JUNIT.UPSS MOBILE.ANDROID.AOSM MOBILE.ANDROID.WUP MOBILE.J2ME.ACII MOBILE.J2ME.ARLL MOBILE.J2ME.CIPA MOBILE.J2ME.CSOO MOBILE.J2ME.EAOF MOBILE.J2ME.EURP MOBILE.J2ME.OOME MOBILE.ACFM MOBILE.AMA MOBILE.APTA MOBILE.AUEF MOBILE.AUI MOBILE.DARRAY MOBILE.ENUM MOBILE.FLOATER NAMING.ANNS NAMING.CVN NAMING.DJLO NAMING.DSN NAMING.ECN NAMING.EXTENDS NAMING.GETA NAMING.GETB NAMING.ID NAMING.IFV NAMING.IMPLS NAMING.IRB NAMING.JSP NAMING.LLI NAMING.NA NAMING.NAC NAMING.NACL NAMING.NCL NAMING.NE NAMING.NENUM NAMING.NFL NAMING.NIF NAMING.NITF NAMING.NLV NAMING.NM NAMING.NMP NAMING.NPH NAMING.NSF NAMING.NSM NAMING.NTAG NAMING.NTEST NAMING.PKG NAMING.RPKG NAMING.SETA NAMING.SINGLETON NAMING.THAC NAMING.UHN NAMING.USF NAMING.UTIL NAMING.UUVN OOP.ACECC OOP.ACST OOP.AF OOP.AHF OOP.AHSM OOP.AOA OOP.AOCM OOP.ASFI OOP.AUASI OOP.AUO OOP.CIMOM OOP.CQS OOP.HIF OOP.HMF OOP.ICIF OOP.IDOM OOP.IIAC OOP.IIN OOP.INSOF OOP.LEVEL OOP.MFP OOP.MI OOP.MUCOP OOP.NAM OOP.NOMA OOP.NPAC OOP.OPM OOP.PIFC OOP.PMPC OOP.PSDF Google Android Java 2 Micro Edition 600 OOP.RI 601 602 603 604 605 最適化 606 607 608 OOP.RSFC OOP.SNGL OOP.SVHM OOP.THRECL OPT.AAM OPT.AAS OPT.ACDO OPT.AGC 609 OPT.ANIPW 610 611 612 613 614 615 616 617 618 619 OPT.AUMO OPT.BR OPT.CCR OPT.CEIL OPT.CEL OPT.CIO OPT.CLL OPT.CPTS OPT.CRSG OPT.CRWD 620 OPT.CTLV 621 OPT.DIC 622 623 624 625 626 627 628 629 630 631 632 633 OPT.EES OPT.EIC OPT.EOIL OPT.ICDPC OPT.ICGA OPT.ILUG OPT.IRB OPT.ISC OPT.LIOL OPT.LOOP OPT.MAF OPT.MUNC 説明 重要度 即時修正 setUp()' メソッドで初期化されているすべてのフィールドは 'tearDown()' メソッドで "null" をセッ 3 トする ○ suite () メソッドは public および static にするべきである 1 TestCase を拡張するのではなく @Test 注釈を使用する 4 各 TestCase クラスには少なくとも 1 つのテスト メソッドを含める 3 すべてのメソッドは少なくとも 1 つの JUnit テストメソッドを持つべきである 2 ○ 適切な Javadoc タグを JUnit テスト メソッドの Javadoc に含める 3 JUnit テストクラスの 'suite()' メソッドは正しいシグネチャで使用する 3 常に onSaveInstanceState() をオーバーライドする 3 ウィジェットがあまりに頻繁に更新されないようにする 3 インターフェイスの実装者として匿名クラスを使用しない 3 ○ ループ条件式で配列長を使用しない 3 ○ あるサイズを超えるプリミティブ型配列を定数で初期化しない 3 一度だけサブクラス化され public に使用されていないクラスは使わない 3 フィールドに過剰にアクセスしてはいけない 3 新規オブジェクトを返す代わりにリターン パラメータを使用するメソッドを推奨 3 大きな配列割り当ての OutOfMemoryError をキャッチする 3 同じフィールドおよびメソッドに複数回アクセスしてはならない 2 getter および setter メソッドを使用しない 2 プリミティブ ラッパー オブジェクトの配列を使用しない 2 拡張された for ループを使用して java.lang.iterable オブジェクトを反復処理しない 2 interface 型を宣言しない 2 多次元配列を使用しない 2 列挙型を使用しない 3 浮動小数点型を使用しない 3 アノテーションのクラス名の規約に従う 3 ○ 一般的な変数名を使用 5 ○ java プラットフォームの型がと同じ名前を使って型を宣言してはいけない 2 名前でドル記号を使用するのを避ける 2 ○ 拡張しているクラスの名前を反映したクラス名を使用する 3 基底クラス名の規約に従う 3 ○ getter メソッドに名前付け規則を使用する 2 ○ boolean を返す getter メソッドに名前付け規則を使用する 3 ○ 潜在的な Java キーワードを識別子として使用してはならない 2 ○ インターフェイスのフィールド名ではすべての文字に大文字を使用する 2 インターフェイスを実装するクラス名の規約に従う 3 ○ boolean を返すメソッドだけに is で始まる名前を付ける 2 JSP ページに名前付け規則を使用する 2 ○ 型名、メソッド名、フィールド名、パラメータ名および変数名の長さの制限に従う 4 ○ 注釈型に名前付け規則を使用する 2 ○ 配列変数とコレクション変数に名前付け規則を使用する 2 ○ 抽象クラスに対して名前付け規則を使用する 5 ○ クラスの名前付け規則を推進 2 ○ 例外の名前付け規則を推進 2 ○ 列挙型の宣言に名前付け規則を使用する 2 ○ final のローカル変数に対して名前付け規則を使用する 5 ○ static ではないフィールドの名前付け規則を推進 2 ○ インターフェイスの名前付け規則を推進 2 ○ ローカル変数の名前付け規則を推進 2 ○ static でないメソッド の名前付け規則を推進 2 ○ メソッド パラメータの名前付け規則を推進 2 ○ 型パラメータに名前付け規則を使用する 2 ○ final ではない static フィールドの名前付け規則を推進 2 ○ static メソッドの名前付け規則を推進 2 JSP タグの接頭辞に名前付け規則を使用する 2 ○ JUnit テストクラスに名前付け規則を使用する 2 package 名には小文字を使用する 2 Sun で予約されているパッケージ名を使用しない 2 ○ setter メソッドに名前付け規則を使用する 2 ○ シングルトン クラスに名前付け規則を使用する 2 ○ タグ ハンドラおよび関連クラスに名前付け規則を使用する 2 ○ 変数にはハンガリアン表記を使用する 4 ○ final static フィールド名には小文字を使用しない 2 ○ ユーティリティ クラスに名前付け規則を使用する 3 ○ 大文字/小文字の使用だけが違う変数名を使用してはいけない 4 abstract クラスで具象クラスを継承してはいけない 3 ○ 必要以上に具体的な型にキャストしてはいけない 3 ○ public/ protected/ package-private フィールドを避ける 2 ○ 継承されるフィールドが隠れるのを避ける 1 ○ 継承される static なメンバ メソッドが隠れるのを避ける 1 ○ オーバーライド メソッドには @Override 注釈 を追加する 4 ○ 特定の型を拡張する場合、特定のメソッドを必ずオーバーライドする 2 abstract メソッドおよび static final フィールドだけしかないクラスを interface として再宣言する 2 ○ 注釈型を実装または拡張してはいけない 2 ○ オブジェクトを使用して static フィールドまたはメソッドにアクセスしない 2 Object の protected メソッドと競合するメソッドをインターフェイスで宣言してはいけない 3 メソッドはコマンド (状態の変更) またはクエリー (状態の取得) でなければならない 4 ○ 外側のスコープで宣言されたフィールドやローカル変数を隠蔽しない 3 ○ メソッドのローカル変数とパラメータにクラスのフィールドと同じ名前を付けない 2 インターフェイスで内部クラスを使用しない 3 ○ インターフェイス内で "Object" クラスから継承するメソッドの宣言を避ける 4 定数にアクセスするためにだけインターフェイスを実装してはならない 3 "no-op" のインターフェイスメソッドを実装しない、またはそれらを abstract で実装する 5 instanceof はインターフェイスにだけ使用する 5 ネストの深さが 3 以上の内部クラスを使用しない 2 finalize() メソッドは protected で宣言する 3 フィールドまたはメソッドのないインターフェイス (マーカー インターフェイス) を避ける 4 可変クラスにコピー機能を提供する 3 ○ "abstract" メソッドのない "abstract" クラスを避ける 3 abstract クラスの空のメソッドを abstract として宣言する 4 ○ abstract クラスに public または package-private コンストラクタを宣言しない 3 ○ private メソッドをオーバーライドしない 2 ○ final クラスのメンバに protected を使用してはいけない 3 ○ public クラスが少なくとも 1 つの public または protected メンバを持つようにする 3 ○ private または static メソッドを final で宣言しない 4 スーパークラスがインターフェイスをすでに実装している場合、そのインターフェイスを実装する ○ 4 としてクラスを宣言してはいけない クラスから自身のサブクラスへの参照を避ける 5 ○ シングルトン クラスに名前付け規則を使用する 3 ○ 内部クラスからのメソッド呼び出しでは、呼び出すメソッドのバージョンを指定する 3 ○ getClassLoader() ではなく getContextClassLoader() を使用する 3 ○ 匿名クラスの private でないメソッドを private に変更する 3 ○ 省略された代入演算子を使用 3 ○ new String(String)' コンストラクタを使用しない 2 ○ オブジェクトのインスタンスの新規生成によって Class オブジェクトを取得してはいけない 2 キャッシュされているプリミティブ型のラッパー オブジェクトを新しくインスタンスすることを避け ○ 3 る 不要な Map 操作を避ける 2 ○ boolean の返却を簡略化する 3 すべての "java.io.Closeable" リソースを "finally" ブロックでクローズする 3 ○ ループ内に定数式を入れないようにする 5 ○ ループ条件文でのメソッド呼び出しを避ける 3 finally ブロックで入力または出力リソースをクローズする 1 潜在的に時間のかかるロギング処理を呼び出す前にロギングレベルをチェックする 3 ○ 空文字列を連結して値を String に変換してはいけない 3 "ResultSet" の "get" メソッドを重複して呼び出さない 3 できるだけ早くリソースをクローズする 4 1 つのメソッド内でだけアクセスされる private フィールドを使用しない。ローカル変数に変更す 3 る ArrayList、HashMap、HashSet、Hashtable、Vector、および WeakHashMap の初期容量を定義 3 する ○ String.equals("") ではなく String.length() == 0 を使用する 5 toLowerCase() または toUpperCase() の呼び出しの代わりに equalsIgnoreCase() を使用する 3 時間がかかる処理をループの本体で呼び出してはいけない 3 浮動小数点型にキャストされた整数を Math.ceil() の呼び出しに渡してはいけない 3 ○ 代用のアクセサを必要とするかもしれないメンバアクセスを避ける 3 get()' メソッドを使用してリストを反復処理しない 4 配列のコピーには、ループではなく System.arraycopy () を使用する 2 static フィールドと static メソッドだけを持つクラスのインスタンスを生成してはいけない 3 可能な限り不変式をループの外に移動する 4 ループ本体で変数をインスタンス化するのを避ける 3 ○ インスタンス フィールドに対する getter および setter メソッドを final で宣言する 4 ○ null との不要な比較を行わない 4 5 備考 No カテゴリ 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 バグの可能性 662 663 664 665 666 667 668 669 670 671 672 673 サブカテゴリ API の使用と実装 ルールID OPT.NCIO OPT.NIVND OPT.NIW OPT.NSF OPT.PCTS OPT.PRIM OPT.SB OPT.SBL OPT.SBS OPT.SDLS OPT.SI OPT.SRA OPT.STCA OPT.STR OPT.STRBUF OPT.STS OPT.SWIF OPT.SYN OPT.TOARRAY OPT.UEQ OPT.UISO OPT.UMATH OPT.UNC OPT.USB OPT.USC OPT.USCL OPT.USV PB.API.AECC PB.API.APPG PB.API.APT PB.API.CMMT PB.API.DANNOT PB.API.DNCSS PB.API.DPRAPI PB.API.ECMC PB.API.EHM PB.API.EJF PB.API.EQNL PB.API.HNCN PB.API.IUMS 674 PB.API.KOEH 675 PB.API.MASP 676 PB.API.MOHK 677 678 679 680 681 682 683 684 685 PB.API.NDC PB.API.OF PB.API.ONS PB.API.REP PB.API.SBCC PB.API.UNI PB.API.URL PB.API.VAFS PB.API.VENDOR 686 687 688 689 690 691 692 693 694 695 紛らわしいまたは意図 PB.CUB.ADE 的でない振る舞い PB.CUB.AIPQ PB.CUB.AMCO PB.CUB.APAM PB.CUB.ARCF PB.CUB.ATSF PB.CUB.AWP PB.CUB.CILB PB.CUB.CNVC PB.CUB.CTOR 696 PB.CUB.CWRITE 697 698 699 700 701 702 703 704 705 PB.CUB.DCP PB.CUB.EBI PB.CUB.EOOM PB.CUB.FLVA PB.CUB.IMC PB.CUB.IMM PB.CUB.ISF PB.CUB.MAIN PB.CUB.OE 706 PB.CUB.OSM 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 PB.CUB.OVAM PB.CUB.PSFA PB.CUB.RMO PB.CUB.SAC PB.CUB.SBC PB.CUB.SRAD PB.CUB.STRCC PB.CUB.TOCTOU PB.CUB.TOS PB.CUB.TVOM PB.CUB.UEIC PB.LOGIC.AIL PB.LOGIC.AMOI PB.LOGIC.AOBO PB.LOGIC.AULV PB.LOGIC.CPI PB.LOGIC.CRRV PB.LOGIC.DJNCR PB.LOGIC.EQLC PB.LOGIC.EQUS PB.LOGIC.ESO PB.LOGIC.FLRC PB.LOGIC.INDEX 論理エラー 730 PB.LOGIC.JI 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 PB.LOGIC.LLM PB.LOGIC.OAMC PB.LOGIC.OOR PB.LOGIC.ROM PB.LOGIC.SG PB.NUM.AIC PB.NUM.BBDCC PB.NUM.BSA PB.NUM.CACO PB.NUM.CLP PB.NUM.CMP PB.NUM.DCF PB.NUM.FPLI PB.NUM.ICO PB.NUM.IDCD PB.NUM.IMOF PB.NUM.IOF PB.NUM.NAN PB.NUM.NIA PB.NUM.UBD PB.NUM.UCM PB.RE.ACTI PB.RE.AMFSL PB.RE.AQA PB.RE.ASE PB.RE.CAI PB.RE.CIOR PB.RE.CTNSE PB.RE.IDRL PB.RE.IIAE 数値エラー 実行時例外 説明 instanceof の前に null をチェックしないようにする ランダム整数を生成するには nextInt() メソッドを使用する BigInteger および BigDecimal の新しいインスタンスを作成しないようにする コンパイル時に判明する値を持つ final フィールドは static として宣言する 単一文字の比較には、startsWith () ではなく charAt () を使用する プリミティブ型のためのラッパークラスをインスタンス化してはいけない StringBuffer の初期容量を指定する 長さをチェックするために StringBuffer または StringBuilder を String に変換しないようにする 同期が必要ない場合は StringBuffer ではなく StringBuilder を使用する ローカル変数には同期データ構造を使用しない 可能であれば内部クラスを static として宣言する リテラル値で String.replaceAll() を使用しない 不要な ''String.toCharArray()'' の呼び出しを避ける 1 文字の文字列定数を含む文字列連結では、二重引用符ではなく単一引用符を使用する 常に連結される文字列を返すメソッドを整理する 不要な 'String' メソッドの呼び出しを避ける switch 文に置き換えられる場合、if 文を使用しない ループの内側で synchronized メソッドを呼び出さない toArray() に渡す配列にコレクション サイズを使用する ブール値と true を比較しない 不要な instanceof の使用を避ける 結果が簡単に計算できる定数の場合、java.lang.Math のメソッドを呼び出してはいけない 不要なキャストの使用を避ける 結合文字列を使用するときは String ではなく StringBuffer を使用する 定数文字列には StringBuffer ではなく String を使用する 疑問の余地がある、短絡演算ではない演算を避ける 可能なかぎり stack 変数を使用する 特定のクラスの継承を避ける (カスタムルール) java.util.Properties オブジェクトの put()、putAll()、および get() メソッドの使用を避ける 特定のパッケージまたは型を使用するのを避ける "Collection" および "Map" メソッドに渡される型とデータ構造の型を一致させる 非推奨のメンバの宣言に "@Deprecated" 注釈を追加する ComponentListener.componentResized () で setSize () を呼び出さない 非推奨の API を使用しない Collection および Map クラスを拡張してはいけない java.util.HashMap または java.util.Hashtable を継承してはいけない 空の JarFile エントリまたは空の ZipFile エントリを作成してはいけない equals(null) を呼び出さないようにする Iterator の hasNext() メソッドから next() メソッドを呼び出してはいけない "Collections" または "Maps" で "URL" オブジェクトを使用しない Set や Map のキーとして使用されるすべての型が 'equals()' と 'hashCode()' メソッドをオー バーライドする シリアライズ可能クラスの readResolve () と writeReplace () には、protected を指定する 危険な実装の 'equals()' または 'hashCode()' のオブジェクトをハッシュ化されたデータ構造の キーとして使用することを避ける Error および Throwable のサブクラスを定義しない finalize() メソッドをオーバーロードしてはいけない メソッドの引数をシリアライザブルにする String.replaceAll() および String.replaceFirst() の正規表現として "." を使用しない StringBuffer(int) コンストラクタに char を渡さない java.util.Random クラスの next メソッドの結果を "int" にキャストしてはいけない java.net.URL の equals() および hashCode() メソッドを使用しない 正しい数の引数を使用して書式文字列を持つ可変個引数のメソッドを呼び出す ベンダー プロパティとの比較に使われる可能性がある値を更新する 重要度 即時修正 ○ 3 5 ○ 2 ○ 3 ○ 3 ○ 3 ○ 3 ○ 2 3 3 ○ 1 ○ 3 4 ○ 3 3 ○ 3 ○ 3 3 ○ 5 ○ 3 ○ 1 4 ○ 2 ○ 2 1 ○ 1 3 3 ○ 2 3 3 ○ 3 1 2 4 3 2 ○ 1 1 1 2 2 ○ 2 2 2 1 1 1 1 1 3 1 else のある if では "{ }" 括弧を使用する 1 PriorityQueue および PriorityBlockingQueue で iterator() を使用しない 複数の ! または ~ 単項演算子を使用しない 配列ではないパラメータを取るメソッドに配列を引数として渡してはならない try-catch ブロック内に return 文がある場合、 finally ブロックでの return 文の使用を避ける finally ブロックを途中で終了しない コンストラクタ引数への混乱する代入を避ける ログ記録 コード以外のものをログ記録ブロックに入れない 文字と数字の不適切な連結を避ける コンストラクタからfinal、static、private ではないメソッドを呼び出してはならない File.canWrite() メソッドは、ディレクトリが書き込み可能でない場合にも true を返す可能性があ るため、使用を避ける + 文字列連結演算子を使って数字を連結してはいけない。"+" は数字の加算にだけ使用する 誤って文をブロックの外に置くのを避ける 誤って java.lang.Object のメソッドをオーバーライドすることを避ける for ループの内部でループ制御変数に代入しない オーバーライドされるメソッドがパラメータ型の違いによる予定外の共変ではないようにする static final フィールドを不変にする 誤って "static" 宣言された可能性のある "private" "static" フィールドを調べる エントリ ポイント メソッドだけにメソッド名 main を使用する 疑わしい 8 進数エスケープを避ける サブクラスのメソッドをオーバーライドする場合は、スーパークラスでオーバーロードされたメソッ ドもオーバーライドする 可変個引数メソッドのオーバーライドを避ける public static final 配列フィールドの使用を避ける 可変フィールドの間接参照を避ける String の連結で char 配列を使用してはいけない 不正な case を含む switch 文を避ける 注釈型の宣言に @Retention を指定する print() 文および println() 文の複雑な式を括弧で囲む Time-of-check Time-of-use (TOCTOU) 競合条件を避ける 配列変数で 'toString()' を呼び出さない オーバーロードされたメソッドを呼び出す場合、型変数パラメータを使用しない オブジェクト同士の比較に '==' または '!=' を使用しない 無限ループを使用しない 配列または List 要素へアクセスするのに誤った添え字変数を使用しない ループ条件で「1 つずれる」エラーを避ける ループの条件で使用されないループ変数を避ける String.indexOf() の結果が正かどうかをチェックしてはいけない 読み込みまたはスキップを行うメソッドの戻り値を確認する 戻り値が null ではないことをチェックした後に readLine() の結果を破棄してはいけない equals() および compareTo() メソッドの実装では getClass() または instanceof を使用する 常に false を返す equals() メソッドの呼び出しを避ける 同一のオブジェクトに対して equals() を呼び出さない 無限の再帰呼び出しを行わない ループ変数の使用でのバグを防止する ネストされた複数の for ループにおいて同じループ変数をインクリメント/デクリメントしてはいけ ない 呼び出すロギング メソッドのレベルに一致したロギング レベルをチェックする ループの条件で使用されるオブジェクトは適切にループ本体でアクセスされるようにする 範囲外の比較を避ける メソッドが正しいオブジェクトで呼び出されるようにする get/set メソッドが必ず正しい変数にアクセスするようにする 整数型から浮動小数点型への暗黙のキャストを避ける BigDecimal コンストラクタに浮動小数点値を渡してはいけない [0, 31] の範囲外の整数をシフトの量として使用してはいけない オーバーフローの原因となるかもしれない場合は複合代入演算子の使用を避ける 基本データ型を精度の低い型にキャストしない このメソッドで減算を使用してはならない 浮動小数点同士を比較しない ループの添え字として浮動小数点型の変数を使用しない オーバーフローまたは NaN になる計算を避ける 整数の除算の結果を浮動小数点型の変数に代入してはいけない integer の乗算の結果を long にキャストしてはならない オーバーフローの可能性がある場合、除算ではなく符号なしの右シフトを使用する Double.NaN または Float.NaN と比較しないようにする 負の値を使って配列の次元を初期化してはいけない 正確な結果が必要な場合は float および double を使用しない Math.round() に整数値を渡してはならない コレクションをそのコレクション自体に追加してはいけない 固定サイズのコレクションを変更しない Queue の add() メソッドを呼び出さない ArrayStoreExceptions の可能性を避ける 配列アクセスで使用する前に必ずパラメーターをチェックする String.indexOf() の戻り値を他の String メソッドに渡す前にチェックする Iterator.next() メソッドの実装が必ず NoSuchElementException をスローするようにする readLine() の戻り値を間接参照する前に、戻り値が null かどうかをチェックする IllegalArgumentException メッセージをコード ロジックに必ず一致させる 6 3 3 3 1 1 3 5 2 4 ○ ○ ○ ○ ○ 3 ○ 1 2 4 2 3 3 3 1 5 ○ ○ ○ 4 4 2 3 1 3 4 2 1 1 4 1 1 4 3 1 3 1 1 3 1 1 1 2 ○ ○ ○ ○ ○ ○ 1 3 2 1 4 1 3 3 1 3 2 2 3 1 2 1 3 3 1 1 3 3 1 1 4 2 4 3 1 1 1 ○ ○ ○ ○ 備考 No カテゴリ 761 762 763 764 765 766 767 サブカテゴリ 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 移植性 802 803 804 805 806 807 808 ルールID PB.RE.IOSS PB.RE.ISEM PB.RE.JLAY PB.RE.MCRN PB.RE.NCMD PB.RE.NXRE PB.RE.PNPD PB.RE.RCODE タイプ ミス 不要なコード PB.RE.VRNULL PB.TYPO.AECB PB.TYPO.ASI PB.TYPO.BW PB.TYPO.CSI PB.TYPO.DAV PB.TYPO.EB PB.TYPO.IMO PB.TYPO.NAMING PB.TYPO.RSK PB.TYPO.TLS PB.TYPO.UOL PB.TYPO.WT PB.USC.AES PB.USC.CC PB.USC.EC PB.USC.EPC PB.USC.FCBS PB.USC.NACC PB.USC.NASSIG PB.USC.OI PB.USC.RTE PB.USC.SAFL PB.USC.UIF PB.USC.UNARY PB.CLOSE PB.EAR PB.NAECS PB.OCSF PB.PCSF PB.PDCL PB.PDS PORT.CTSP PORT.DNHCP PORT.ENV PORT.EXEC PORT.HCNA PORT.LNSP PORT.NATV PORT.PEER 809 PORT.PSC 810 プロパティ ファイル 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 セキュリティ 830 831 832 833 834 PROPS.BSPV PROPS.DUPN PROPS.DUPV PROPS.EMN PROPS.EMV PROPS.EQOP PROPS.FM PROPS.HCLS PROPS.IARG PROPS.ICK PROPS.IVCC PROPS.MENTRY PROPS.MLN PROPS.MP PROPS.NAME PROPS.PLAIN PROPS.SPELL PROPS.TENTRY PROPS.UENTRY SECURITY.BV.ACL SECURITY.BV.ADT SECURITY.BV.AUG SECURITY.BV.CQRO SECURITY.BV.DSSM SECURITY.BV.ENFL バックドア脆弱性 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 SECURITY.BV.NSF SECURITY.BV.PCFM SECURITY.BV.PCPM SECURITY.BV.PDLC SECURITY.BV.SYSP デッドロックと競合状態 SECURITY.DRC.THR アプリケーションの誤 SECURITY.EAB.ACWC 動作 機密データの公開 SECURITY.EAB.AWT SECURITY.EAB.CBA SECURITY.EAB.CMP SECURITY.EAB.CPCL SECURITY.EAB.JVM SECURITY.EAB.LDP SECURITY.EAB.MPT SECURITY.EAB.OROM SECURITY.EAB.PCL SECURITY.EAB.SF SECURITY.EAB.SIS SECURITY.EAB.SMO SECURITY.EAB.SPFF SECURITY.ESD.ACW SECURITY.ESD.CONSEN SECURITY.ESD.CSD SECURITY.ESD.PEO SECURITY.ESD.PLC SECURITY.ESD.RA SECURITY.ESD.SDM SECURITY.ESD.SIF 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 SECURITY.ESD.SIO SECURITY.ESD.SNFD SECURITY.ESD.SPI SECURITY.ESD.TFP SECURITY.ESD.TSPF SECURITY.ESD.UPCT 入力ベースの攻撃 SECURITY.IBA.AEAF SECURITY.IBA.ATF SECURITY.IBA.AUSS SECURITY.IBA.CDBV SECURITY.IBA.CSVFV SECURITY.IBA.NATIW SECURITY.IBA.UPS SECURITY.IBA.VPPD SECURITY.IBA.VRD SECURITY.IBA.XPIJ 安全ではない環境構成 SECURITY.UEC.ADS SECURITY.UEC.AELQ SECURITY.UEC.DSL SECURITY.UEC.DSR SECURITY.UEC.EDAR SECURITY.UEC.FMCD 885 SECURITY.UEC.HTTPS 886 887 SECURITY.UEC.ISOS SECURITY.UEC.LCA 説明 重要度 即時修正 必要な場合 'indexOf()' の "fromIndex" 引数を使用する 2 ○ String.equals(constant) または String.equalsIgnoreCase(constant) を呼び出してはいけない 1 JLayer クラスの add() メソッドの使用を避ける 2 null かもしれない戻り値を間接参照してはいけない 2 間接参照される変数と、その前に null チェックされる変数を一致させる 3 RuntimeException のサブクラスをできるだけ定義しない 3 null オブジェクトを間接参照してはいけない 1 HttpURLConnection を使用する場合、getInputStream() を呼び出す前に必ず 2 getResponseCode() の戻り値をチェックする null 値を返すメソッドを避ける 4 空の try、catch、finally ブロックを避ける 2 ○ 条件内で代入演算子を使用しない 1 同じ変数同士で演算しない 2 正しい "super" メソッドを呼び出す 3 switch 文の case のフォールスルーで同じ変数に代入してはならない 3 本体が空の制御文を避ける 1 ○ 目的のメソッドが必ずオーバーライドされるようにする 1 ○ メソッド、フィールド、およびそれらを含むクラスに同じ名前を付けてはならない 1 同じフィールドに複数の getter/setter メソッドを使用しない 4 ○ switch 文でテキスト ラベルを使わない 1 ○ 8進整数リテラルを使用しない 1 ○ Java のラッパー クラスに渡される引数にタイプミスがないようにする 1 ○ 空のステートメントを避ける 3 必ず定数値に評価される条件式を避ける 1 空のクラスを使用しない 3 ○ クラスに他のコンストラクタがない場合に、空の public コンストラクタを定義しない 3 意味のある値が与えられない private フィールドの使用を避ける 1 アクセスできるメンバのないクラスを使用しない 1 メソッドおよびコンストラクタの戻り値を必ず使用する 2 ○ インクリメント文の結果を上書きしてはいけない 1 例外を再スローするためだけにキャッチしてはいけない 3 フィールドとローカル変数への自分自身の代入/初期化を避ける 1 ○ 到達しない "else if" と "else" を避ける 1 ○ 単項演算子 '+' を使用してはいけない 1 無制限のロック リソース 3 void ではないメソッドの戻り値は、空の配列または "null" であってはいけない 3 switch 文の 列挙型の各定数に case 文を用意する 2 ファイルと同じ名前を持つ型を 1 つだけ必ず用意する 1 ○ ファイルと同名の型を必ず public として宣言する 5 ○ switch 文の最後の case として default を置く 1 ○ 各 switch 文には default: を用意する 2 Thread.setPriority()' を呼び出さない 3 File クラスからコンストラクタを呼び出すときに絶対パスをハード コーディングしてはいけない 3 移植可能ではない 'System.getenv()' メソッドを使用しない 1 Runtime.exec() を使用しない 3 IP アドレスとポート番号をハード コーディングしてはいけない 1 \n' または '\r' を行分離記号としてハードコーディングしない 2 ユーザ定義の native メソッドを使用しない 3 直接 java.awt.peer.* インターフェイスを使用しない 2 該当するリテラルの代わりに "File.pathSeparator" または "File.pathSeparatorChar" を使用す ○ 4 る ○ プロパティ値の最後に余分な空白を付加しない 3 ○ 重複するプロパティ名を避ける 1 重複するプロパティ値を避ける 4 空のプロパティ名を避ける 2 空のプロパティ値を避ける 3 ○ 常に '=' 演算子を使用する 3 プロパティエントリ数を制限する 3 プロパティ値ではハードコーディングされた改行を使用しない 3 プロパティ値の誤った引数を避ける 2 ○ 不完全なプロパティエントリを避ける 2 ○ 継続行文字 '\' の誤用を避ける 3 異なるロケール間でのプロパティエントリの不一致を避ける 2 ○ 複数行に分割されたプロパティ名を避ける 2 欠落したプロパティエントリを避ける 2 プロパティ名の命名規則を推進する 2 パスワード情報がプレーンテキストでプロパティ ファイルに含まれていてはならない 3 ○ コメントとプロパティ値の綴り間違いを避ける 2 プロパティエントリが正しくローカライズされるようにする 2 ○ 未使用のプロパティエントリを避ける 2 Web コンポーネントでクラス ローダーにアクセスしない 3 Date、Time オブジェクトまたは'System.currentTimeMillis()' メソッドの使用を検査する 5 java.lang.Class オブジェクトの getName() メソッドの使用を検査する 5 Castor クエリーでは "read-only" AccessMode を使用する 4 main メソッドの外部でカスタム セキュリティ マネージャを設定してはいけない 2 すべてのセキュリティ関連メソッドの呼び出しを必ずログに記録する 2 Web コンポーネントで Socket.setSocketImplFactory() または 3 URL.setURLStreamHandlerFactory() を呼び出さない "特権付き" メソッドの呼び出しを final メソッドでラップする 4 "特権付き" メソッドの呼び出しを private メソッドでラップする 4 "特権付き" コード ブロックでは、動的にロードされたクラスを使用しない 3 システム プロパティにアクセスまたは値を設定してはならない 2 Web コンポーネントでスレッドを使用しない 3 Web コンポーネントまたは EJB から特定のメソッドを呼び出さない 4 Web コンポーネントで AWT クラスを使用しない writeObject() で ObjectOutputStream にバイト配列を渡してはいけない クラス オブジェクトを名前で比較しない clone() メソッドでは防御的なコピーを返す Web コンポーネントで JVM を停止しない 1 クラスあたりの AccessController.doPrivileged の呼び出しの数を制限する ユーザから取得した可変オブジェクトを特定の型に直接渡してはならない すべての シリアライザブル クラスに対して readObject() と writeObject() を実装する "特権付き" コード ブロックの行数を制限する Web コンポーネントで static フィールドを宣言しない Web コンポーネントで java.lang.System の入力ストリームを変更しない ユーザ定義の可変オブジェクトを直接変数に格納してはいけない static final 宣言が意図されていた可能性のある static フィールドを検査する コンソールへの書き込みを避ける 機密情報をログに記録しない 機密データは使用後に消去する 機密情報のリークを防ぐため、例外メッセージを出力に渡してはならない 機密データを cookie にプレーンテキストで格納してはならない 配列や他の可変フィールドの返却によって内部表現を公開するかもしれないメソッドは避ける 機密データを可変オブジェクトに格納する serializable オブジェクトのインスタンス フィールドをチェックして機密データを公開していないこ とを確認する System.err または System.out の print メソッドの呼び出しを避ける FileNotFound 例外でデータを公開しない Web コンポーネントでセキュリティ ポリシー情報を取得または変更しない transient フィールドを private 宣言する serialPersistentFields 配列で "transient" フィールドを避ける パスワードの転送には get ではなく post を使用する Struts クラスの ActionForm および DynaActionForm を継承してはいけない 一時ファイルを使用しない SQL クエリ内の "SELECT *" を避ける 検証の前にすべてのデータを正規化する ActionForm クラスの検証メソッドから必ず super.validate() メソッドを呼び出すこと ネイティブ メソッドを安全にするためにラッパーを使用する createStatement ではなく prepareCall または prepareStatement を使用する 検証メソッドを使って危険なデータ返却メソッドをすべてカプセル化する すべてのリダイレクトおよびフォワード URL を検証関数でカプセル化する XPath クエリーの評価での XPath インジェクションを防ぐ Axis の server-config.wsdd ファイルで axis.development.system を false に設定する Axis の server-config.wsdd ファイルで axis.enableListQuery を false に設定する Axis の server-config.wsdd ファイルで axis.disableServiceList を true に設定する web.xml ファイルに複数のセキュリティ ロールを同じ名前で定義しない Axis2 構成ファイルの各 items タグに Encrypt ディレクティブを指定する web.xml ファイルでマップされているすべてのフィルタに対応する定義がなければならない axis2.xml 構成ファイルの transportReceiver および transportSender で http ではなく https を 使用する axis2.xml 構成ファイルで InflowSecurity および OutflowSecurity パラメータを指定する web.xml ファイルで適切な <login-config> 要素を指定して認証タイプを指定する 7 3 2 2 3 3 4 3 5 4 3 3 3 4 5 5 3 2 3 3 2 ○ ○ 3 5 3 3 3 3 2 3 3 2 3 3 3 3 2 1 2 3 3 3 2 3 3 5 3 3 ○ 備考 No カテゴリ 888 889 890 サブカテゴリ ルールID SECURITY.UEC.PCCF SECURITY.UEC.PTPT SECURITY.UEC.PWD 891 SECURITY.UEC.RAJ 892 893 894 SECURITY.UEC.REST SECURITY.UEC.SDAR SECURITY.UEC.SEP 895 SECURITY.UEC.SLID 896 897 898 899 900 901 SECURITY.UEC.SMM SECURITY.UEC.SRCD SECURITY.UEC.STTL SECURITY.UEC.TDAR SECURITY.UEC.UDC SECURITY.UEC.UTAX 902 SECURITY.UEC.WCMC 903 SECURITY.UEC.WCMI 904 905 906 907 908 909 SECURITY.UEC.WCMT SECURITY.UEC.WCMWS SECURITY.UEC.WCPWD SECURITY.UEC.WCUTS SECURITY.UEC.WELC SECURITY.UEC.WMC 910 SECURITY.UEC.WMI 911 912 913 914 915 SECURITY.UEC.WMT SECURITY.UEC.WMWS SECURITY.UEC.WPWD SECURITY.UEC.WSS SECURITY.UEC.WUTS 916 917 918 919 安全ではないエラー処 SECURITY.UEHL.LGE 理とロギング 脆弱なセキュリティ制御 SECURITY.WSC.ACDP SECURITY.WSC.ACPST SECURITY.WSC.AHCA 説明 重要度 即時修正 Castor の jdo-conf.xml でユーザ名およびパスワードをプレーン テキストに保存しない 1 Axis の wsdd ファイルでプレーン テキストのパスワードを使用しない 3 パスワードが十分に長く、プレーンテキストに保存されていないことを確認する 1 web.xml ファイルに *.jsp ファイルに対するセキュリティ制約を追加することで、JSP へのアクセ 3 スを制限する axis2.xml 構成ファイルで REST を無効にする 5 Axis2 構成ファイルの各 items タグに Signature ディレクティブを指定する 3 web.xml で必ずエラー ページを指定する 3 ブルートフォースによるセッションの推測を防ぐため、識別子は 128 ビット以上の長さでなけれ 3 ばならない SOAP Monitor モジュールを使用しない 3 web.xml で参照されるすべてのセキュリティ ロールに対応する定義がなければならない 3 セッションが適切な時間でタイムアウトするように web.xml ファイルで設定する 3 Axis2 構成ファイルの各 items タグに Timestamp ディレクティブを指定する 3 web.xml ファイルのすべての制約付きリソースを <user-data-constraint> で防御する 3 Axis2 構成ファイルでプレーン テキストのパスワードを使用しない 3 WebSphere の ibm-webservicesclient-ext.xmi ファイルの設定で SOAP メッセージを暗号化す 2 る WebSphere の ibm-webservicesclient-ext.xmi ファイルの設定で SOAP メッセージに電子署名 2 されるようにする WebSphere の ibm-webservicesclient-ext.xmi ファイルで、タイムスタンプを正しく設定する 3 ibm-webservicesclient-ext.xmi ファイルで WS-Security を有効にする 1 WebSphere の ibm-webservicesclient-ext.xmi ファイルの設定でパスワードを暗号化する 1 WebSphere の ibm-webservicesclient-ext.xmi ファイルの設定で、タイムスタンプに署名する 3 すべての Web コンテンツ ディレクトリに「ウェルカム ファイル」があることを確認する 1 WebSphere の ibm-webservices-ext.xmi ファイルの設定で SOAP メッセージを暗号化する 2 WebSphere の ibm-webservices-ext.xmi ファイルの設定で、SOAP メッセージにデジタル署名 2 する WebSphere の ibm-webservices-ext.xmi ファイルで、タイムスタンプを正しく設定する 3 WebSphere の ibm-webservices-ext.xmi ファイルで WS-Security を有効にする 1 WebSphere の ibm-webservices-ext.xmi ファイルの設定でパスワードを暗号化する 1 Axis2 構成ファイルで Rampart WS-Security モジュールを有効にする 3 WebSphere の ibm-webservices-ext.xmi ファイルの設定で、タイムスタンプに署名する 3 すべての例外が標準のロガーでログに記録されるか、再スローされるようにする 3 4 5 3 1 920 SECURITY.WSC.AMA 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 SECURITY.WSC.APIBS SECURITY.WSC.ARXML SECURITY.WSC.ASAPI SECURITY.WSC.AUIC SECURITY.WSC.BP SECURITY.WSC.CACM SECURITY.WSC.CAM SECURITY.WSC.CAP SECURITY.WSC.CFM SECURITY.WSC.CIFC SECURITY.WSC.CKTS SECURITY.WSC.CL SECURITY.WSC.CLI SECURITY.WSC.CLO SECURITY.WSC.CLONE SECURITY.WSC.CMO SECURITY.WSC.DCSM SECURITY.WSC.DNSL SECURITY.WSC.DSER 940 SECURITY.WSC.ENPP 941 942 943 SECURITY.WSC.FIMU SECURITY.WSC.FXMLP SECURITY.WSC.HCCK 944 SECURITY.WSC.HCCS 945 946 947 948 949 950 951 952 SECURITY.WSC.ICA SECURITY.WSC.INIVF SECURITY.WSC.INNER SECURITY.WSC.ISL SECURITY.WSC.IVR SECURITY.WSC.MCNC SECURITY.WSC.PAC SECURITY.WSC.PACC 953 SECURITY.WSC.PAF 954 955 SECURITY.WSC.PBPSF SECURITY.WSC.PPF 956 SECURITY.WSC.PPKG 957 958 SECURITY.WSC.PRMF SECURITY.WSC.PSFC 959 SECURITY.WSC.RDM 960 961 962 963 964 SECURITY.WSC.SCF SECURITY.WSC.SCLONE SECURITY.WSC.SCSER SECURITY.WSC.SCSM SECURITY.WSC.SER 965 SECURITY.WSC.SL 966 967 968 969 970 971 972 973 974 SECURITY.WSC.SMSTR SECURITY.WSC.SRD SECURITY.WSC.SS SECURITY.WSC.SSM SECURITY.WSC.SSP SECURITY.WSC.STREP SECURITY.WSC.UMAIN SECURITY.WSC.UOSC SECURITY.WSC.USC 975 SECURITY.WSC.UWM 976 977 978 シリアライゼーション 979 980 981 982 983 984 985 986 987 SECURITY.WSC.VJFS SECURITY.WSC.ZOIS SERIAL.DUID SERIAL.ENNAC SERIAL.EZEE SERIAL.FT SERIAL.IRX SERIAL.MRWD SERIAL.NSFSC SERIAL.OC SERIAL.ROWO SERIAL.RRSC AccessController.doPrivileged() を呼び出すときに匿名の "特権付き" クラスを使用しない Throwable オブジェクトの 'printStackTrace()' メソッドを呼び出さない 特定のメソッドへの引数をハードコーディングしない スーパークラスよりもアクセシビリティの高いコンストラクタまたはオーバーライド メソッドを避け る セキュリティを迂回する標準 API 呼び出しの使用を検査する テキストを XML に変換しない スクリプティング API の使用を検査する インナークラスの使用を避ける 特定のプロバイダだけを Security.addProvider() メソッドに渡す すべてのアクセス制御メソッドを集中化して一貫性を徹底する すべての認証メソッドを集中化して一貫性を徹底する フィールドに格納される配列パラメーターを必ず複製する final ではないクラスの特定のコード ブロックからは final メソッドだけを呼び出す final クラスのインスタンスだけを clone() する 短すぎる暗号化キーを避ける カスタム クラス ローダを定義してはいけない ClassLoader オブジェクトのインスタンス生成を検査する findClass() 以外の ClassLoader のメソッドをオーバーライドしない セキュリティのために clone () を final 宣言する writeObject() で ObjectOutputStream に可変オブジェクトを渡さない カスタム SecurityManager を定義してはいけない 意思決定のための DNS ルックアップを避ける クラスを非デシリアライザブルにする 特定のメソッドに渡される引数が事前に定義されたリストのメソッドから取得されたものであるこ とを確認する 不変クラスを final にする Secure Processing を使用する ハード コーディングされた暗号化キーの使用を避ける ハードコーディングされたユーザ名/パスワード/URL をデータベース接続メソッドに渡すことを 避ける 安全でないアルゴリズムを暗号化のために使用しない 不変クラスを final にする すべてのメンバ クラスおよびインターフェイスを private にする LoginContext.login() の前に必ず HttpSession.invalidate() を呼び出すこと IvParameterSpec を使用する際はランダムではない byte[] を避ける クラスを非クローナブルにする 認証メソッドを呼び出して一貫性を徹底する アクセス制御メソッドを呼び出して一貫性を徹底する PrivilegedAction、PrivilegedExceptionAction および PrivilegedActionException のサブクラスを final 宣言する Permission および BasicPermission のサブクラスを final 宣言する パスワード フィールドをオートコンプリートにしてはいけない すべての Permissions、PrivilegedActions、および and PrivilegedActionExceptions を同じパッ ケージで宣言する PrivilegedAction および PrivilegedExceptionAction の実装の run() メソッドを final 宣言する フィールドを Collection または Map 型の public static final オブジェクトとして宣言しない Random オブジェクトまたは Math.random() メソッドを調査して悪意のあるコードがないことを検 証する フィールドを設定または取得する前に SecurityManager でチェックする Clonable クラスで SecurityManager のチェックを行う Serializable クラスのメソッドで SecurityManager のチェックを行う 機密性の高い型の final ではない public コンストラクタで SecurityManager のチェックを行う クラスはできるだけシリアライズ不可にする 定数宣言、および System.out または System.err の 'print' または 'println' メソッドを除いては、 文字列リテラルを使用しない Socket による転送または取得の前に SecurityManager のチェックを行う java.util.Random または Math.random() の代わりに java.security.SecureRandom を使用する Web コンポーネントでソケットを使用しない 適切なセキュリティ マネージャを設定する Web コンポーネントで System.setProperty() を呼び出さない ライブラリ メソッドを使用して HTML および XML の特殊文字の文字列置換を行う main() メソッドはクラスへの認可されていないアクセスを許す可能性があるため、使用を避ける getSecure() および setSecure() メソッドを使ってセキュアなクッキーの使用を推進する 可能であれば SSL を利用できるクラスを使用する 危険または問題のあるメソッドを直接呼ぶ代わりにラッパーメソッドを使用する (カスタムルー ル) 必ず JarFile シグニチャを検証する スクリプティング API の使用を検査する すべての Serializable クラスに対して serialVersionUID を作成する Externalizable を実装しているが引数なしコンストラクタを定義していないクラスを避ける Serializable ではなく Externalizable を実装する シリアライズ可能ではないクラスに transient フィールドを宣言しない Externalizable クラスの readExternal() メソッドでフィールドを再初期化しない readResolve() および writeReplace() メソッドの戻り値の型は必ず java.lang.Object にする 正しい Serializable クラスを使用する 内部クラスがシリアライズ可能な場合、外側のクラスもシリアライズ可能にする readObject()' と 'writeObject()' メソッドが正しいシグネチャを持つようにする すべての Serializable 型のインスタンスで readResolve メソッドを定義する 988 SERIAL.RWAF すべてのフィールドが 'readObject()' メソッドによって代入され 'writeObject()' よって書き出す 989 SERIAL.SCBNP 990 991 992 993 994 995 サーブレット 996 997 998 999 1000 1001 1002 1003 1004 SERIAL.SNNAC SERIAL.SNSO SERIAL.SPF SERIAL.SRLZ SERIAL.SROS SERVLET.AJDBC SERVLET.BINS SERVLET.CETS SERVLET.DSN SERVLET.IF SERVLET.LML SERVLET.MDC SERVLET.NMS SERVLET.NSIS SERVLET.NSSS Serializable でない親クラスから派生する Serializable なサブクラスに必ず writeObject および readObject メソッドを宣言する 引数なしコンストラクタを持たないスーパー クラスを拡張するクラスの直列化を避ける シリアライズ可能ではないオブジェクトを HttpSession 属性として格納しない serialPersistentFields を private static final として宣言する Serializable を実装していないクラスで serialVersionUID を宣言しない readObject() メソッドを synchronized として宣言してはいけない Servlet サーブレットでの JDBC コードの使用は避ける java.beans.Beans.instantiate () を使用しない サーブレット メソッド内でスローされるすべての例外をキャッチする 同じ <servlet-name> を持つ複数の <servlet> 要素を 1 つの web.xml ファイル内に記述しない Servlet クラスでインスタンス フィールドを定義してはいけない サーブレットでは、サイズに制限のないコレクションの使用を避ける パラメータを取らない public コンストラクタを宣言する web.xml ファイルの1 サーブレットあたりのマッピングの数を制限する サーブレットで static 変数を作成してはいけない 同期化せずにサーブレットで static 変数を使用してはいけない 8 ○ 3 3 3 5 3 3 3 3 3 3 3 3 2 3 3 3 2 3 4 5 ○ ○ 2 5 5 3 2 2 5 2 4 4 5 2 2 3 3 2 3 3 3 5 2 2 2 3 5 4 4 2 3 3 3 5 5 3 2 3 3 3 2 1 3 3 3 1 1 1 1 3 ○ ○ ○ ○ ○ ○ ○ 2 1 3 2 3 3 3 3 4 2 3 3 1 3 5 2 ○ ○ 備考 No カテゴリ 1005 1006 1007 1008 サブカテゴリ 1009 1010 1011 1012 1013 Spring Framework 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 Struts フレームワーク 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 スレッドと同期化 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 未使用コード 1114 1115 1116 1117 1118 1119 1120 1121 1122 Struts 2 ルールID SERVLET.SCM SERVLET.SDTD SERVLET.SNM SERVLET.SOP 説明 重要度 即時修正 web.xml ファイルにすべてのサーブレットに対応するマッピングがあることを確認する 2 web.xml ファイルに適切なスキーマまたは DTD を指定する 3 サーブレットクラスはその参照名を web.xml ファイルに持つ必要がある 3 サーブレットでの System.out および System.err の使用を最小限に抑える 2 web.xml ファイルのすべての <servlet> 要素に 1 つの空ではない <servlet-name> 要素がある SERVLET.SSN 2 ことを確認する ○ SERVLET.STM サーブレット クラス内で SingleThreadModel を使用しない 2 SERVLET.SYN サーブレット内の同期化を最小限にする 2 SERVLET.UCO Context Object を使って HTTP リクエスト パラメータを管理する 4 SPRING.ACARG コンストラクターのインジェクションを避ける 3 SPRING.AMCTOR コンストラクターのあいまいさを避ける 1 SPRING.ATCFG コンフィギュレーション クラスの規約に従う 2 SPRING.AWIRE オートワイヤリングを使用しない 3 SPRING.DESC 構成ファイルのヘッダーで ''description'' タグを使用する 3 SPRING.ENVIS bean タグで参照されているクラスにアクセスできることを確認する 3 SPRING.IDNAME 'name'' と ''id'' を同時に使用しない 3 SPRING.IMPORTSRES 相対パス ''../'' を使用して親ファイルを参照してはならない 3 SPRING.INNER 内部 bean で無視された属性を使用してはならない 3 SPRING.JDBCTEMPLATE ネイティブ JDBC の使用を避ける 3 SPRING.LOCAL ローカル スコープで ''local'' プロパティ属性を使用してはならない 3 SPRING.PREFTYPE コンストラクター引数のマッチングでは ''index'' より ''type'' を使用するほうが望ましい 4 SPRING.PROPLIMIT bean プロパティの規約に従う 3 SPRING.SPRNAM spring bean の命名規約を使用する 3 SPRING.USEID bean の識別子として ID を使用する 3 STRUTS.STRUTS2.S2AFWV 各フィールドに関連付けられたバリデータがあることを確認する 3 STRUTS.STRUTS2.S2DAFV フィールド バリデータの重複を避ける 3 STRUTS.STRUTS2.S2DV バリデータの重複を避ける 3 STRUTS.STRUTS2.S2DVF バリデーション ファイルの重複を避ける 3 STRUTS.STRUTS2.S2NA 各バリデーション ファイルに対応する Action があることを確認する 3 STRUTS.STRUTS2.S2UA 各 Action に関連付けられたバリデーション ファイルがあることを確認する 3 STRUTS.STRUTS2.S2UV validators.xml の未定義のバリデータを避ける 3 STRUTS.STRUTS2.S2UVC 未定義のバリデータ クラスを避ける 3 STRUTS.ACDA Action クラスからデータベースにアクセスしないようにする 2 STRUTS.ACJC Action クラスから JSP ページにアクセスしないようにする 4 struts-config.xml ファイルで <action> 要素にバリデーションがある場合、@input 属性を指定す STRUTS.AIV 1 る STRUTS.AMFB struts-config.xml ファイルのすべての名前付き <action> 要素に <form-bean> を指定する 1 struts-config.xml ファイルの名前のない <action> 要素に @prefix、@suffix、および @attribute STRUTS.APSN 3 を指定しない STRUTS.ARP struts-config.xml の属性で相対パスを使用しない 3 STRUTS.DFV validation.xml でフォームの重複を避ける 1 同じ名前のローカル フォワードとグローバル フォワードを struts-config.xml ファイルで使用し STRUTS.DLGF 4 ないようにする STRUTS.EV Struts の struts-config.xml でバリデータが有効であることを確認する 3 STRUTS.FIELDS フォーム Bean 中の各フィールドは適切な getter/setter メソッドを持つべきである 3 STRUTS.FORM フォーム Bean には getter/setter メソッドだけを含める 4 STRUTS.FWD struts-config.xml ファイルのすべての <forward> 要素に空ではない名前とパスを指定する 1 STRUTS.IACM Action クラスのメソッドを呼び出さないようにする 3 STRUTS.INST Struts Action クラスでインスタンス変数を宣言してはいけない 3 STRUTS.MFBSN struts-config.xml ファイルに同じ名前の複数のフォーム Bean を定義しない 2 Struts バリデーション ファイルのすべてのフォーム フィールドに有効な maxlength 値を指定す STRUTS.MLFF 4 る STRUTS.MLVP validation.xml ファイルのパスワード フィールドに minlength バリデータを使用する 2 STRUTS.MVF validation.xml のフォーム フィールドが対応する Action Form と一致していることを確認する 3 STRUTS.NTFB struts-config.xml ファイルのすべてのフォーム Bean に名前と型を指定する 1 STRUTS.PARAM Struts コードで getParameter メソッドを使用してはいけない 4 struts-config.xml ファイルの <action> および <forward> 要素の @path 属性が '/' で始まって STRUTS.PFS 2 いることを確認する STRUTS.PLUGIN struts-config.xml にプラグインが追加されていることを確認する 1 STRUTS.PMAC Action クラスでは public メソッドを避ける 3 struts-config.xml ファイルのすべての <exception> 要素に空ではないパスおよび型を指定す STRUTS.PTE 3 る struts-config.xml のアクションまたは例外の scope 属性に request または session が設定さ STRUTS.RSS 2 れていることを確認する STRUTS.SCDTD struts-config.xml ファイルで Struts DTD を使用してバリデーションを行う 3 STRUTS.TAFP struts-config.xml ファイルのすべての <form-property> 要素に有効な type 属性を指定する 1 STRUTS.VPI すべての struts-config.xml ファイルで Struts Validator プラグインを有効にする 3 TRS.AIL 常に同期化された方法でアクセスされる Atomic 変数を使用しない 4 ○ TRS.ANF すべての待ちスレッドに通知されるように notify () ではなく notifyAll () を使用する 3 TRS.ATI Thread.interrupted() を誤って使用しない 3 TRS.AUTG 安全ではない java.lang.ThreadGroup 型の変数を使用しない 3 TRS.AUTY VM によって異なる振る舞いをするかもしれないため Thread.yield () を使用しない 3 TRS.CDF static な Calendar, DateFormat, SimpleDateFormat を使ってメソッドを呼び出さないようにする 3 可能な限り Hashtable および synchronizedMap でラップされた HashMap の代わりに TRS.CHM 5 ConcurrentHashMap を使用する TRS.CIET Thread を拡張するクラス以外で InterruptedException をキャッチしない 4 TRS.CLQ 可能な限り Vector および synchronizedList の代わりに ConcurrentLinkedQueue を使用する 3 同期化されたコレクションに対する複合アクションによるアクセスは原子性に違反するため避け TRS.CMA 3 る デッドロック発生の原因となる synchronized メソッドからの synchronized メソッドの呼び出しを TRS.CSFS 3 避ける TRS.CSTART コンストラクタからスレッドの start メソッドを呼び出さない 3 TRS.CTRE コンストラクタで this 参照を流出させない 3 TRS.DCL 安全ではない "ダブルチェック ロッキング" パターンの実装を避ける 3 TRS.DOPQ PriorityBlockingQueue で DiscardOldestPolicy を使用しない 3 TRS.GSD デバッグ目的の場合を除いて、getState を使用しない 4 TRS.IASF 同期化が必要な可能性のある static フィールドへのアクセスを検査する 2 TRS.ILI スレッドセーフな怠惰な初期化にする 4 設計上の欠陥を示す可能性があるため IllegalMonitorStateException をキャッチしてはいけな TRS.IMSE 3 い TRS.IRET Thread を拡張するのではなく Runnable を実装する 4 java.lang.Thread を拡張するクラスまたは java.lang.Runnable を実装するクラスで run() を直接 ○ TRS.IRUN 3 呼び出さない TRS.LORD ネストされたロックの順序が正しいことを確認する 3 TRS.MRAV 関連のある複数の Atomic 変数には synchronized ブロック内でアクセスする 4 ○ TRS.MRUN 別のスレッドして実行できるようにスレッドのサブクラスには run () を入れる 2 TRS.NAME スレッドに必ず名前を付ける 3 TRS.NSM メソッド宣言で synchronized 修飾子を使用する代わりに "synchronized" ブロックを使用する 5 ○ TRS.NSYN synchronized でないメソッドで wait ()、notify ()、notifyAll() を呼び出さない 2 TRS.OSNS 同期化されたメソッドを同期化されていないメソッドでオーバーライドしてはならない 4 TRS.RLF finally ブロックでロックを解放する 2 ○ TRS.RUN Runnable.run() を実装するメソッドで同期化を使用する 5 TRS.SCS 定数 String を同期化しない 1 TRS.SNSM static の synchronized メソッドと static でない synchronized メソッドを混合させない 4 java.util.concurrent.locks.Lock の実装に "synchronized" キーワードを使用して同期化を実行 TRS.SOL 3 してはいけない TRS.SOPF デッドロックを引き起こす可能性があるため、public フィールドを同期化しない 2 TRS.SOUF 相互排除の保証が難しくなるため final ではないフィールドを同期化してはいけない 3 TRS.SSCI synchronized' コレクションを反復処理する場合は、手動で同期化する 1 TRS.SSDF static な SimpleDateFormat へのアクセスを同期する 3 ○ TRS.SSUG set メソッドを同期化している場合、get メソッドも同期化する 3 TRS.STR Object の this 参照で同期化を実行したりセマフォ メソッドを呼び出したりしてはいけない 3 TRS.THRD 安全ではない非推奨のメソッド Thread および Runtime を呼び出さない 1 ロックを保持している間に Thread.sleep() を呼び出さない。さもないとパフォーマンスを劣化させ TRS.TSHL 2 たりデッドロックを引き起こしたりする TRS.UACS Collections.synchronized でラップされた Collection の同期化されていないアクセスを避ける 3 TRS.UCM 安全な場合にだけ同期化されていない Collection または Map を使用する 3 ○ TRS.USL 同一のロック オブジェクトを使用して変数にアクセスする 2 TRS.UT run() メソッドを指定せずにスレッドを開始してはならない 2 TRS.UWIL liveness 状態をテストするループの内部でだけ wait () と await() を呼び出す 1 TRS.UWNA ポーリング ループではなく wait () および notifyAll () を使用する 2 ○ TRS.WOC "java.util.concurrent.locks.Condition" オブジェクトで正しいメソッド呼び出しを使用する 3 ○ TRS.WOS 他のメソッドが同期化されていない場合、writeObject() メソッドを同期化してはいけない 4 ○ UC.AAI インターフェイスの不要な修飾子を避ける 2 ○ UC.ACC コメント アウトされた Java コードを削除する 3 ○ UC.AEEO クラスは java.lang.Object を明示的に継承するべきではない 4 ○ UC.AESTAT 空の「static イニシャライザ」と「static ではないイニシャライザ」を避ける 1 ○ UC.AMAMI 親クラスの抽象メソッドを抽象メソッドでオーバーライドしてはならない 3 ○ UC.ARTD 冗長な throws 句を避ける 4 ○ UC.AUL 未使用ラベルを避ける 1 ○ UC.AURCO 一度も読まれないコレクションを避ける 1 ○ UC.AURV 決して読まれないローカル変数の使用を避ける 1 ○ UC.BCMP 不要なブール比較を避ける 4 9 備考 No カテゴリ 1123 1124 1125 1126 サブカテゴリ ルールID UC.DEAD UC.DIEB UC.DIL UC.EF 1127 UC.FCSF 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 XML 開発 1143 1144 1145 * Jtest9.5.5.20130515のルールを元に作成しています。 UC.FMFC UC.PF UC.PIMPORT UC.PM UC.RSKE UC.SNE UC.SO UC.UCATCH UC.UCIF UC.UES UC.UIMPORT UC.UP UC.UPC UC.VR XML.DLTH XML.IVCC XML.VDBF XML.WF 説明 未使用の格納を避ける if ブランチに重複するコードを記述しない java.lang.* パッケージを明示的にインポートしない 空の finalize() メソッドを避ける スーパークラスの finalize() を呼び出すだけの finalize() メソッドは冗長なので使用してはいけ ない final クラスのメソッドの宣言で冗長な final キーワードを使用しない 未使用の private フィールドを避ける 現行クラスを持つパッケージからクラスをインポートしてはいけない 未使用の private メソッドを避ける 列挙型の宣言で冗長な static キーワードを使用している 空の synchronized 文を避ける オーバーライドされた実装 (スーパークラス実装) を呼び出すだけのメソッドを避ける キャッチした例外を catch ブロックで必ず使用する 不要な if 文を避ける 不要な else 文を使用している 未使用の import 文を避ける 未使用パラメータを避ける 未使用の private なクラスまたはインターフェイスの宣言を避ける void メソッドの最後の不要な return 文を避ける Tomcat の server.xml で高すぎるデバッグ レベルを使用しない クラスが引数のない public コンストラクタを持つようにする DocumentBuilderFactory の検証を常に有効にする XML ファイルが整形式であることを確認する 10 重要度 即時修正 ○ 1 3 ○ 3 ○ 1 4 ○ 3 1 4 1 4 1 4 2 3 3 2 2 2 3 3 1 3 1 ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ 備考
© Copyright 2024 Paperzz