Jtest9.5 ルール一覧

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
○
○
○
○
○
○
○
○
○
○
○
○
備考