Jtestは好きなコーディング静的解析ツールです。
実プロジェクトで何回か導入しましたが、以下の効果がありましたよ。

  • コーディング規約の機械的なチェックはJtestにまかせて、人間は高度なチェック(ビジネスルールを実装しているとか、例外処理を規約通り行っているかなど)に集中できます。
  • ルールをプロジェクト内で公開することによってプログラマのスキルが上がります。ルール自体は全ソースに適用するのは難しいものが多いですが、危険なコードはどんなものかを共有できてソースが安全なものになっていきます。

以下はJtest8試用版のルールです。 私のコメントを付記しましたが、プロジェクトの中で相談して決めることに意味があると思います。 ルールの詳細はJtest試用版または製品でご確認ください。

とはいってもJtestは高価なのでFindBugsCheckStyleがお金のない小さい プロジェクト向きではあります。2つとも日々進化していますので、昔使えなかったから といってあなどれません。

文責:城風敏彦 http://www5.plala.or.jp/shirokaze/
テクマトリックスの関係者ではありません。

余談ですが、外部設計書、内部設計書、詳細設計書版Jtestで単項目チェック、項目関連チェック、マスター(辞書)チェックだけでもできればプロジェクトの成功まちがいなしと思っています。しかし業務フレームワークがむずかしいように、業務設計チェックもコードチェックの数倍むずかしいので、領域(ドメイン)を限って個別に作るしかないと思っています。

Jtestのチェックも共通基盤(フレームワーク)チームと業務チームで適用ルールを分けたいです。フレームワークはjava.lang.Exceptionをcatchしたり、リフレクションを使ってJavaBeanの内容をString化したりしますが、業務チームにはそんなことをさせたくないですので。以下のルールで○はプロジェクト全体、△は業務チームのみ適用してはと思うものです。

Jtestルール(仕掛中)

ルールの説明採用コメント
JavaBeans [BEAN]
JavaBean クラスでリスナー メソッド名のシグニチャを推進する [BEAN.BLNC-1]addXXX,removeXXXのみチェック
JavaBean クラスは常に Object.equals () を常にオーバーライドする [BEAN.EQUALS-4]必要があればtoString()を実装してequalsで比較すれば良い
JavaBean クラスで JDBC コードを使用することを避ける [BEAN.JDBC-4]
private フィールドは get および set メソッドを持たなければならない [BEAN.NFM-4]定数やログインスタンスなど適用しきれない
JavaBean クラスは Serializable を実装しなければならない [BEAN.SERIALIZABLE-1]
重複コードの検出 [CDD]
コードの重複を避ける [CDD.DUPC-2]数行の一致でエラーが出るので適用しきれない
重複した import ステートメントを避ける [CDD.DUPI-3]
重複したメソッドを避ける [CDD.DUPM-2]
重複した文字列リテラルを避ける [CDD.DUPS-2]
重複したクラスを避ける [CDD.DUPT-2]
コーディング スタンダード [CODSTA]
ラベル付きの break または continue を使用してはいけない [CODSTA.ABCL-3]
制御構造 文での複雑な条件式の使用は避ける [CODSTA.ACCS-3]
getter/setter メソッドを使用するのではなく、宣言している型で直接フィールドのアクセス/設定を行う [CODSTA.AFD-3]
完全修飾型名を使用しない [CODSTA.AFQN-3]
例外の型をチェックするために catch ブロックで instanceof を使用してはいけない [CODSTA.AIOC-3]
抽象メソッドを使ってペアレント クラスの非抽象メソッドをオーバーライドしてはいけない [CODSTA.AMMO-3]
1 つのファイルに複数の型を入れてはいけない [CODSTA.AMOC-4]friendyクラスを入れたいこともあり得る
if-else 文での負論理の使用を避ける [CODSTA.ANL-5]
static なインポート文を使用しない [CODSTA.ASIS-2]
メソッドを宣言しているクラスがパラメータと同じ型の場合、static を使用しない [CODSTA.ASM-3]
ラベルを使用してはいけない [CODSTA.AULS-4]
疎結合を実現するために、具体性がより低い型を使用する [CODSTA.AUVT-3]ただし、Listの実装クラスLinkedListはArrayListよりgetアクセスが非常に遅いなどのプロジェクト内周知が必要
不必要なネストされたブロックを避ける [CODSTA.BLOCK-4]
すべての大文字のフィールドは final として宣言する [CODSTA.CFNF-3]
複数のコンストラクタを持つクラスではチェーンコンストラクタを使用する [CODSTA.CHAIN-3]
ネストされた式で加算演算子または減算演算子を使用してはいけない [CODSTA.CID-3]
Cloneable クラスでは 'clone() throws CloneNotSupportedException' を宣言する [CODSTA.CLONE-2]
clone() メソッドを使用するのは、Cloneable インターフェイスの実装のためだけにする [CODSTA.CLONE2-3]
"final" ではない Cloneable クラスの clone() メソッドが必ず CloneNotSupportedException をスローするようにする [CODSTA.CLONET-2]
比較式では適切な側に定数を置く [CODSTA.CS-4]
条件演算子の使用を推進する/しない [CODSTA.CX-3]
インターフェイスで定数を定義する [CODSTA.DCI-5]私は実装クラスで定義する派
可能なかぎりデフォルト コンストラクタを定義する [CODSTA.DCTOR-3]趣旨は良いがStrutsのActionなどにはonInitなどが代替となるので一概には決められない
単一メソッドで多数の否定演算子 "!" を使用しない [CODSTA.DUN-5]
toString() をオーバーライドする enum 型に、static な valueOf() メソッドを定義する [CODSTA.DVOM-3]
System.exit() を呼び出してはいけない [CODSTA.EXIT-3]オンラインアプリであれば適用できる
クラス要素を適切な順序で並べる [CODSTA.FO-3]
すべての正式なパラメータを "final" とする [CODSTA.FPF-4]
宣言しているインターフェイス名を使ってインターフェイス定数を参照する [CODSTA.FQNIC-5]
static メンバに間接的にアクセスしてはいけない [CODSTA.IASM-3]
import 文でのワイルドカード (*) の使用を避けるまたは推進する [CODSTA.IMPTD-4]避ける
インターフェイスで定数を定義しない [CODSTA.ISACF-5]
long 型の定数の最後に小文字の"l" または数字の "1" を使用しない [CODSTA.LONG-1]Lを使用する
1 つのステートメントで複数の変数を宣言しない [CODSTA.MVOS-3]
abstract クラスのコンストラクタから abstract メソッドを呼び出さない [CODSTA.NCAC-4]
一般的な型の例外や未検証の例外をキャッチしてはいけない [CODSTA.NCE-3]
コンストラクタの実行中に予想外の NullPointerExceptions を引き起こす可能性があるメソッドを使用してはいけない [CODSTA.NCNFC-3]
ネストされた代入または他の式に埋め込まれた代入を避ける [CODSTA.NEA-2]
static ではないイニシャライザの使用を避ける [CODSTA.NSI-4]
一般的または未検証の Exception 型をスローするメソッドの宣言を避ける [CODSTA.NTX-3]
メソッドを名前別に編成する [CODSTA.OGM-3]
コンパイル単位要素を適切な順序で並べる [CODSTA.ORCU-2]
public メソッドと protected メソッドの間に finalize メソッドを置く [CODSTA.ORFIM-5]
import 文をアルファベット順に並べる [CODSTA.ORIMP-5]
常に toString () をオーバーライドする [CODSTA.OTOSM-5]
適切にオーバーロードする [CODSTA.OVERLOAD-4]
Object.equals() をオーバーライドするときは Object.hashCode() もオーバーライドする [CODSTA.OVERRIDE-1]
Object.hashCode() をオーバーライドするときは Object.equals() もオーバーライドする [CODSTA.OVERRIDE2-1]
列挙型で toString() をオーバライドしてはいけない [CODSTA.OVOTS-3]
private コンストラクタだけを持つクラスは final として宣言する [CODSTA.PCF-3]
main () を最後に置く [CODSTA.PML-4]
無名クラスに public または protected メンバを宣言しない [CODSTA.PPAC-5]
多数の case 文を含む switch 文を避ける [CODSTA.SMC-3]
this と super の使用を避けるまたは推進する [CODSTA.UATS-4]
一連の "static final" の代わりに "enum" 型を使用する [CODSTA.UET-3]
すべての型がデフォルト以外のパッケージ名を持つようにする [CODSTA.UNDPN-4]
パラメータ化された型を使用する [CODSTA.UPT-3]
リテラル定数は使用しない [CODSTA.USN-2]適用しきれない
型が異なる複数の変数を 1 つのステートメントで宣言しない [CODSTA.VDT-2]
for ループでの初期化と更新の数を制限する [CODSTA.VIFS-3]
static ではないメソッドから static フィールドに書き込んではいけない [CODSTA.WSIM-5]
Design by Contract[DBC]
null を返すメソッドで事後条件 "$result!=null" を指定してはいけない [DBC.CPT-2]
すべての getter メソッドには @invariant タグを使用する [DBC.IGM-2]
null 以外であることが保証されていない参照でメソッドを呼び出してはいけない [DBC.IMNR-3]
すべての package-private クラスには @invariant タグを使用する [DBC.PKGC-4]
すべての package-private メソッドには @post タグを使用する [DBC.PKGMPOST-4]
すべての package-private メソッドには @pre タグを使用する [DBC.PKGMPRE-4]
すべての private クラスには @invariant タグを使用する [DBC.PRIC-5]
すべての private メソッドには @post タグを使用する [DBC.PRIMPOST-5]
すべての private メソッドには @pre タグを使用する [DBC.PRIMPRE-5]
すべての protected クラスには @invariant タグを使用する [DBC.PROC-3]
すべての protected メソッドには @post タグを使用する [DBC.PROMPOST-3]
すべての protected メソッドには @pre タグを使用する [DBC.PROMPRE-3]
すべての public クラスには @invariant タグを使用する [DBC.PUBC-2]
すべての public メソッドには @post タグを使用する [DBC.PUBMPOST-2]
すべての public メソッドには @pre タグを使用する [DBC.PUBMPRE-2]
DbCでは適切なシンタックスを使用する [DBC.SYNTAX-2]
ECLIPSE
MANIFEST.MF での "internal" パッケージのエクスポートを避ける [ECLIPSE.IPMF-2]
Eclipse 3.0 の互換性のため MANIFEST.MF 内の "Export-Package" と "Provide-Package" の値を一致させる [ECLIPSE.PCMF-2]
MANIFEST.MF の "Eclipse-AutoStart" エントリを追加する [ECLIPSE.SMF-2]
Enterprise JavaBeans [EJB]
EJB クラスでの Servlet コードの使用は避ける [EJB.ABCS-3]
細粒度なオブジェクトとして Entity Bean を使用するのは避ける [EJB.ABFG-4]
java swing やサーブレットクラスに EJB コードは含まない [EJB.ADCB-3]
Entity Bean 間の過剰なやり取りは避ける [EJB.AIEBC-3]
EJB クラスの中での JDBC コードの使用は避ける [EJB.AJDBC-3]DAOに外部化する
セキュリティ構成オブジェクトにアクセスしたり、その内容を変更したりしない [EJB.AMSC-2]
Session Bean と Entity Bean の 1 対 1 のマッピングは避ける [EJB.AOTO-3]
Bean クラスは public で宣言する [EJB.CDP-2]
Bean クラスは abstract で宣言しない [EJB.CNDA-2]
Bean クラスは final で宣言しない [EJB.CNDF-2]
ejbCreate () を宣言するには、static や final ではなく、public を使用する [EJB.CRTE-2]
ejbLoad () 内で finder メソッドを呼び出してはいけない [EJB.EJBLOAD-2]
finder メソッドを宣言するには、final や static ではなく public を使用する [EJB.FNDM-2]
Bean クラスで 1 つ以上の ejbCreate () を実装する. [EJB.IECM-2]
EntityBean クラスでは 1 つ以上の ejbPostCreate () を実装する [EJB.IEPM-2]
Bean クラスのネイティブ ライブラリをロードしない [EJB.LNL-2]
すべてのメッセージ駆動型 Bean クラスに対して、引数のない ejbCreate () メソッドを実装する [EJB.MDBC-2]
Entity Bean クラス中の各 ejbCreate () に対して、対応する ejbPostCreate () を定義する [EJB.MEC-2]
Bean クラスでは finalize () を宣言しない [EJB.MNDF-2]
リモート インターフェイスおよびリモート ホーム インターフェイス中のメソッドで java.rmi.RemoteException をスローする [EJB.MRE-2]
メッセージ駆動型 Bean の ejbCreate () メソッドは、引数を持ってはいけない [EJB.NAC-2]
パラメータを取らない public コンストラクタを宣言する [EJB.NFDC-2]
EJB コンポーネントのすべての static フィールドに対して final 宣言する [EJB.NFS-2]
ejbPostCreate () を宣言するには、static や final ではなく、public を使用する [EJB.PCRTE-2]
Bean のローカル インターフェイスおよびローカル ホーム インターフェイスで java.rmi.RemoteException をスローしてはいけない [EJB.RILH-2]
finder メソッドの戻り値の型は、主キーまたは主キーの Collection でなければならない [EJB.RT-2]
SessionBeans またはメッセージ駆動型 Bean の ejbCreate () の戻り値の型は void でなければならない [EJB.RTC-2]
ejbPostCreate () の戻り値の型は void でなければならない [EJB.RTP-2]
EJB ホームを再利用する [EJB.RUH-2]
EJB Bean が必要なメソッドを実装し、EJB Bean とインタフェースの名前形式に従うことを推進 [EJB.STD-2]
リモート ホーム インターフェイスまたはローカル ホーム インターフェイスの create 関連メソッドで javax.ejb.CreateException をスローする [EJB.TCE-2]
リモート ホーム インターフェイスまたはローカル ホーム インターフェイスの finder メソッドで javax.ejb.FinderException をスローする [EJB.TFE-2]
this を引数として使用しない [EJB.THISARG-2]
this を戻り値として使用しない [EJB.THISRET-2]
決してスレッドを開始したり中断したり管理したりしない [EJB.THREAD-2]
再利用可能な JNDI リソースをキャッシュして、パフォーマンス コストが高い操作の使用を最小限に抑える [EJB.UCIC-3]
Session Facade を使って Entity Bean へのアクセスを管理する [EJB.USF-2]
値オブジェクトを使ってサーバーへの呼び出しの粒度を減らす [EJB.UVO-4]
例外 [EXCEPT]
フロー制御文として例外を乱用してはいけない [EXCEPT.AEFC-4]
メソッドの本体でスローされる可能性のあるすべての Throwable オブジェクトをキャッチする [EXCEPT.CATO-2]業務チームではRuntimeExcelptionを丸投げさせてフレームワークの例外ハンドラでcatchすることが流行っているらしい
catch ブロックを隠してはいけない [EXCEPT.HCB-3]
ユーザ定義 Exception のすべてのフィールドを final として宣言する [EXCEPT.IMMEX-3]
main() メソッドには、スローされる例外を宣言しない [EXCEPT.MTE-3]
java.lang.Error オブジェクトをキャッチしてはいけない [EXCEPT.NCERR-3]フレームワークの例外ハンドラはあり得る
NullPointerException をキャッチしてはいけない [EXCEPT.NCNPE-3]フレームワークの例外ハンドラはあり得る
一般的または未検証の例外をスローしない [EXCEPT.NTERR-3]
NullPointerException をスローしてはいけない [EXCEPT.NTNPE-5]
キャッチしたときに特定の例外を再スローする [EXCEPT.RTERR-3]
例外クラスのコンストラクタから例外をスローしない [EXCEPT.TEFEC-3]
FORMAT
() を使って複雑な式を分割する [FORMAT.APAREN-3]
行の最後に空のスペースを置いてはいけない [FORMAT.ATS-5]
C スタイルのコメントの前には空白行を挿入する [FORMAT.BLBC-5]
型宣言前の空白行の推進 [FORMAT.BLCD-4]
空白行を使って異なるパッケージの import 文を分離する [FORMAT.BLSIM-4]
1 コード行に "}" だけを記述するべきである [FORMAT.CBRACE-3]
キャストの型の後には 1 つのスペースを入れる/入れない [FORMAT.CMS-3]
修飾名とメソッド呼び出しの間にスペースを入れてはいけない [FORMAT.DOT-2]
タブまたはスペースの使用の推進 [FORMAT.DUT-3]
開き括弧 "{" の位置の推進 [FORMAT.FCB-4]
ファイルと同じ名前の型をファイルの先頭にする [FORMAT.FCN-4]
配列宣言では、配列の型名、'[]'、変数名の順で記述する [FORMAT.IAD-3]
インデントのスペース数の推進 [FORMAT.IND-2]
1 行の文字数を制限する [FORMAT.LL-2]
各ソース ファイルにファイル ヘッダー コメントを用意する [FORMAT.MCH-2]
注釈と修飾子の順序を保つ [FORMAT.MO-4]
メソッド名と開き括弧 "(" の間には 1 つのスペースを入れる/入れない [FORMAT.MSP-3]
開き括弧 "{" に続けてステートメントを入れる場合は "{" の後で必ず改行する [FORMAT.NSAB-3]
1 コード行につき 1 つのステートメントを入れる [FORMAT.OSPL-2]
カンマの後のスペース数の推進 [FORMAT.SAC-3]
代入演算子の前後のスペース数の推進 [FORMAT.SAOP-3]
条件文の開始括弧 "(" の後のスペースの数の推進 [FORMAT.SAP-3]
セミコロンの後のスペース数の推進 [FORMAT.SAS-3]
前置単項演算子とそのオペランドの間のスペース数の推進 [FORMAT.SAUOP-3]
ビット演算子の前後のスペース数の推進 [FORMAT.SBOP-3]
後置単項演算子とそのオペランドの間のスペース数の推進 [FORMAT.SBUOP-3]
条件文と開始カッコ "(" の間、決められた数のスペースの数入れる [FORMAT.SC-3]
条件演算子 "?" の前後のスペース数の推進 [FORMAT.SCOP-3]
論理演算子の前後のスペース数の推進 [FORMAT.SLOP-3]
関係演算子の前後のスペース数の推進 [FORMAT.SROP-3]
コード行と同じ行にコメントを置くのを避ける [FORMAT.TC-5]
配列イニシャライザの最後にカンマを置く/置かない [FORMAT.TCOMMA-5]
一般的な書式を条件演算に使用する [FORMAT.TE-2]
すべてのファイルを必ず復帰改行文字で終了させる [FORMAT.TNL-4]
主要なプログラム セクション間の空白行数の推進 [FORMAT.U2BL-2]
不要な括弧を避ける [FORMAT.UP-3]
グローバル 静的 解析 [GLOBAL]
インスタンスフィールドを使用しないメソッドは static 宣言する [GLOBAL.ASI-3]
使用されない throws 句を避ける [GLOBAL.AUT-2]
package-private 型にアクセスできる範囲をできるだけ制限する [GLOBAL.DPAC-2]
package-private フィールドにアクセスできる範囲をできるだけ制限する [GLOBAL.DPAF-2]
package-private メソッドにアクセスできる範囲をできるだけ制限する [GLOBAL.DPAM-2]
public/protected 型にアクセスできる範囲をできるだけ制限する [GLOBAL.DPPC-4]
public/protected フィールドにアクセスできる範囲をできるだけ制限する [GLOBAL.DPPF-4]
public/protected メソッドにアクセスできる範囲をできるだけ制限する [GLOBAL.DPPM-4]
package-private クラス/インターフェイスからサブクラスが派生されない場合 final と宣言する [GLOBAL.SPAC-2]
メソッドがオーバライドされない場合、package-private メソッドを final と宣言する [GLOBAL.SPAM-2]
publicおよびprotected クラス/インターフェイスからサブクラスが派生されない場合 final と宣言する [GLOBAL.SPPC-5]
メソッドがオーバライドされない場合、public/protected メソッドを final と宣言する [GLOBAL.SPPM-5]
ユーティリティ クラスで正しくコンストラクタを宣言する [GLOBAL.UCC-2]
グローバルに使用されない 列挙型 定数を避ける [GLOBAL.UEC-4]
グローバルに使用されない package-private 型を避ける [GLOBAL.UPAC-2]
グローバルに使用されない package-private フィールドを避ける [GLOBAL.UPAF-2]
グローバルに使用されない package-private メソッドを避ける [GLOBAL.UPAM-2]
グローバルに使用されない public/protected 型を避ける [GLOBAL.UPPC-4]
グローバルに使用されない public/protected フィールドを避ける [GLOBAL.UPPF-4]
グローバルに使用されない public/protected メソッドを避ける [GLOBAL.UPPM-4]
HIBERNATE
Configuration にマッピングを追加するには addResource() ではなく addClass() を使用する [HIBERNATE.CAR-3]
Hibernate セッションを finally ブロックでクローズする [HIBERNATE.CHS-2]
SessionFactory オブジェクトをすべてクローズする [HIBERNATE.CSF-3]
データベース カラムにマップされたオブジェクトには getter/setter メソッドと id フィールドを定義する [HIBERNATE.GSIM-3]
Hibernate パーシステント クラスのための引数なしコンストラクタを宣言する [HIBERNATE.IDC-3]
マップされた Hibernate オブジェクトの equals および hashCode メソッドをオーバーライドする [HIBERNATE.OHCE-3]
Hibernate 識別子のための setter メソッドは private で宣言する [HIBERNATE.PIDS-3]
アクティブなトランザクションを catch ブロックでロールバックする [HIBERNATE.RBT-3]
Java コードでクエリーを記述するのではなく、マップされた名前付き HQL クエリーを使用する [HIBERNATE.UGNQ-3]
HQL クエリーでは名前付きパラメータを使用する [HIBERNATE.UNP-3]
初期化 [INIT]
配列イニシャライザを使用してはいけない [INIT.AAI-5]
遅延初期化ブロックに初期化コード以外のコードを置かない [INIT.CLIB-5]
コンストラクタの中ですべてのフィールドを明示的に初期化するべき [INIT.CSI-4]
フィールドに対して初期化の循環を使用してはいけない [INIT.IC-4]
宣言文ですべてのローカル変数を明示的に初期化する [INIT.LV-3]
初期化実行中に、final でない static フィールドを使用しない [INIT.NFS-2]
明示的な初期化を使用する/static フィールドをデフォルト値で初期化してはいけない [INIT.SF-2]
final ではない static 変数を使って final の static 変数を初期化してはいけない [INIT.SFA-3]
すべての "static final" フィールドが代入される前に、現行クラスのインスタンスを作成する "static" イニシャライザを呼び出してはいけない [INIT.SICUI-3]
コンストラクタの実行前または実行中における未初期化フィールドの読み込みを避ける [INIT.UIRC-1]
国際化 [INTER]
String 変換メソッドを呼び出すときは Locale 引数を用意する [INTER.CCL-3]
国際化 (I18N) では論理演算子と一緒に単一文字を使用しない [INTER.CLO-4]
国際化 (I18N) では文字列連結を避ける [INTER.COS-4]
国際化環境で Character.toLowerCase(char) または Character.toUpperCase(char) を呼び出さない [INTER.CTLC-4]
国際化 (I18N) では Date 変数上での 'toString()' および 'String.valueOf()' 呼び出しを避ける [INTER.DTS-4]
国際化 (I18N) では翻訳可能なテキストはリソース バンドルに出力する [INTER.ITT-3]
国際化 (I18N) では単一文字リテラルは "static final" 定数として使用する [INTER.NCL-4]
国際化 (I18N) では数値変数での 'toString()' および 'String.valueOf()' 呼び出しを避ける [INTER.NTS-4]
国際化 (I18N) では Number 型の parse メソッド 呼び出しを避ける [INTER.PN-4]
国際化 (I18N) では 'String.compareTo()' 呼び出しを避ける [INTER.SCT-4]
SimpleDateFormat オブジェクトのインスタンスを生成するときは Locale 引数を用意する [INTER.SDFL-3]
国際化 (I18N) では 'String.equals()' 呼び出しを避ける [INTER.SE-4]
エンコーディング オプションの指定できないメソッドやコンストラクタの呼び出しを避ける [INTER.SEO-3]
国際化 (I18N) では 'String.indexOf()' または 'String.lastIndexOf()' 呼び出しを避ける [INTER.SIO-4]
国際化 (I18N) では StringTokenizer の使用を避ける [INTER.ST-4]
国際化 (I18N) では 'Time.toString()' および 'String.valueOf()' 呼び出しを避ける [INTER.TTS-4]
不必要な "$NON-NLS" コメントを避ける [INTER.UNLS-3]
J2ME
インターフェイスの実装者として無名クラスを使用しない [J2ME.ACII-3]
ループ条件式で配列長を使用しない [J2ME.ARLL-3]
あるサイズを超えるプリミティブ型配列を定数で初期化しない [J2ME.CIPA-3]
一度だけサブクラス化され public に使用されていないクラスは使わない [J2ME.CSOO-3]
フィールドに過剰にアクセスしてはいけない [J2ME.EAOF-3]
新規オブジェクトを返す代わりにリターン パラメータを使用するメソッドを推奨 [J2ME.EURP-3]
大きな配列割り当ての OutOfMemoryError をキャッチする [J2ME.OOME-3]
JAVADOC
サポートされない @ タグやその他のタグを Javadoc コメントで使うのを避ける [JAVADOC.BT-4]
メソッドが null を返すことができるかどうかを必ず Javadoc に記述する [JAVADOC.CRN-3]
未使用の Javadoc タグを避ける [JAVADOC.DPMT-2]
フィールドでのカスタム Javadoc タグの使用を推進する [JAVADOC.ECTF-5]
メソッド/注釈型のメンバ型でのカスタム Javadoc タグの使用を推進する [JAVADOC.ECTM-4]
型でのカスタム Javadoc タグの使用を推進する [JAVADOC.ECTT-4]
Javadoc ではないコメントを Javadoc コメントと宣言の間に挿入してはいけない [JAVADOC.JNJD-5]
宣言の Javadoc コメントには @author タグを使用する [JAVADOC.MAJDT-3]
メソッドの Javadoc コメントには @return タグを入れる [JAVADOC.MRDC-2]
型の Javadoc コメントには @version タグを入れる [JAVADOC.MVJDT-3]
Javadoc タグの順序の推進 [JAVADOC.ORDER-3]http://java.sun.com/j2se/javadoc/writingdoccomments/#orderoftags
メソッドの各パラメータの Javadoc コメントには @param タグを使用する [JAVADOC.PARAM-2]
型には Javadoc コメントを付ける [JAVADOC.PJDC-2]
フィールドには Javadoc コメントを付ける [JAVADOC.PJDF-2]
メソッドには Javadoc コメントと説明を付ける [JAVADOC.PJDM-2]
Javadoc コメントに使用する行数を制限する [JAVADOC.SINGLE-5]
synchronized public メソッドおよびブロックの Javadoc コメントには @concurrency タグを使用する [JAVADOC.SMJT-2]
Javdoc コメント中にスペル ミスがある [JAVADOC.SPELL-3]
@Documented 注釈を使用するときに保持ポリシーとして 'RUNTIME' を指定する [JAVADOC.SRRP-3]
メソッドの Javadoc コメントには @throws タグまたは @exception タグを入れる [JAVADOC.THROW-2]
'toString()' には Javadoc コメントを付ける [JAVADOC.TSMJT-3]
特定の Javadoc タグは1行に収める [JAVADOC.TSOL-4]
void メソッドの Javadoc コメントでは @return タグを使用しない [JAVADOC.VMCR-2]
Java データベース 接続 [JDBC]
ResultSet の get または update メソッドを呼び出すときにインデックスとして '0' を渡してはいけない [JDBC.BRSA-1]
JDBC 接続を finally ブロック中でクローズする [JDBC.CDBC-1]
正しい順序で JDBC オブジェクトをクローズする [JDBC.COCO-4]コネクションプーリング利用時のStatementのクローズ?
JDBC 接続のデータ ソースを再利用する [JDBC.DSLV-2]
ループ中で JDBC 接続をオープン/クローズしてはいけない [JDBC.ODBIL-4]
JDBC リソースは finally ブロックでクローズする [JDBC.RRWD-1]
javax.sql.DataSource を使ってデータベース接続を取得する [JDBC.UDS-4]
JMETRICS
JSP ファイル中の Java コード行の数を制限する [JMETRICS.NJL-2]
JSP ファイルのフィールド数を制限する [JMETRICS.NOF-2]
JSP ファイル中の JSP ディレクティブの数を制限する [JMETRICS.NOJD-2]
JSP ファイル中の JSP スクリプレットの数を制限する [JMETRICS.NOJS-2]
JSP ファイル中のメソッド数を制限する [JMETRICS.NOM-2]
JSP ファイル中の package-private フィールド数を制限する [JMETRICS.NOPKGF-2]
JSP ファイル中の package-private メソッド数を制限する [JMETRICS.NOPKGM-2]
JSP ファイル中の private フィールド数を制限する [JMETRICS.NOPRIF-2]
JSP ファイル中の private メソッド数を制限する [JMETRICS.NOPRIM-2]
JSP ファイル中の protected フィールド数を制限する [JMETRICS.NOPROF-2]
JSP ファイル中の protected メソッド数を制限する [JMETRICS.NOPROM-2]
JSP ファイル中の public フィールド数を制限する [JMETRICS.NOPUBF-2]
JSP ファイル中の public メソッド数を制限する [JMETRICS.NOPUBM-2]
Java コードの割合 (%) を制限する [JMETRICS.PJL-2]
JavaServer Pages [JSP]
HTML コメントを使用してはいけない [JSP.AHC-3]
属性名と tld ファイルの対応するエントリが完全に一致するようにする [JSP.ANTF-3]
print 文ではなく JSP 式を使って出力を生成する [JSP.APS-3]
Java コメントではなく純正の JSP コメントを使用する [JSP.ASLC-5]
コメント中で 2 個のダッシュ ( 文字列 "--" ) を使用してはいけない [JSP.DDS-5]
同じ名前の複数のフィールドを使用してはいけない [JSP.DUPF-2]
同じ名前の複数のローカル変数を使用してはいけない [JSP.DUPLV-2]
同じシグニチャの複数のメソッドを使用してはいけない [JSP.DUPM-2]
include ディレクティブで無限ループが発生しないようにする [JSP.INF-2]
JSP ページで開始または終了タグ以外で '<' と '>' を使用してはいけない [JSP.ISJT-2]
各 JSP ファイルにヘッダー コメントを入れる [JSP.JSPH-2]
規約に従った順番で JSP ページの要素を記述する [JSP.OJE-3]
JSP タグとその本体の間には空白を挿入する [JSP.SAT-5]
JSP テキストとコメントにスペルミスがある [JSP.SPELL-3]
書式情報を直接 JSP ページに記述するのではなく CSS ファイルを使用する [JSP.STA-5]方向は良いが適用しきれない
可能な場合、属性値は二重引用符で囲むべきである [JSP.UDQ-5]
予約されたローカル変数名を使用してはいけない [JSP.URLV-2]
使用されないタグ ライブラリをインポートしてはいけない [JSP.UT-2]
JUnit テストケース [JUNIT]
単体テストによって使用されるデータファイルのハードコーディングを避ける [JUNIT.AHLOD-4]
JUnit アサーションには必ずメッセージ文字列を含める [JUNIT.ASSERT-3]
setup メソッドおよび tear-down メソッドでは、それぞれスーパークラスの setup/tear-down メソッドを呼び出すべきである [JUNIT.CSUPER-1]
テストするクラスと同じ場所にテスト クラスを置く [JUNIT.DIR-5]
assertTrue(false) や assertFalse(true) メソッドを使用して false を検証する変わりに fail () メソッドを使用する [JUNIT.FAIL-3]
JUnit テストメソッド内の catch ブロック内で fail() を呼び出してはいけない [JUNIT.FICB-3]
JUnit テスト クラスで suite() メソッドを実装してはいけない [JUNIT.ISMTC-4]
すべての JUnit クラスは個別に実行可能な main () メソッドを持つべきである [JUNIT.MAIN-4]
コンストラクタを使ってテスト ケースを設定しない [JUNIT.OSIC-2]
常に setUp () をオーバーライドする [JUNIT.OSUM-3]
常に tearDown () をオーバーライドする [JUNIT.OTDM-3]
JUnit テスト ケースには必ず アサートメソッドを含める [JUNIT.SIA-1]
'setUp()' メソッドで初期化されているすべてのフィールドは 'tearDown()' メソッドで "null" をセットする [JUNIT.SIFN-3]
suite () メソッドは public および static にするべきである [JUNIT.SUITE-1]
各 TestCase クラスには少なくとも 1 つのテスト メソッドを含める [JUNIT.TCWNT-3]
すべてのメソッドは少なくともひとつの JUnit テストメソッドを持つべきである [JUNIT.TEST-2]
適切な Javadoc タグを JUnit テスト メソッドの Javadoc に含める [JUNIT.UPJT-3]
JUnit テストクラスの 'suite()' メソッドは正しいシグネチャで使用する [JUNIT.UPSS-3]
METRICS
無名クラスの行数を制限する [METRICS.ACTNL-3]
具象 Collection 型へのキャストの回数が上限を超えている [METRICS.CAC-3]
switch-case 文のステートメント数を制限する [METRICS.CASE-3]
クラスまたはインターフェイスのコメント行数を制限する [METRICS.CCNL-2]
1 ファイルあたりの行数の制限を超えている [METRICS.CFNL-2]
クラスまたはインターフェイスの継承レベルを制限する [METRICS.CIHL-2]
メソッドのコメント数を制限する [METRICS.CNLM-2]
クラスまたはインタフェイスのステートメント行数を制限する [METRICS.CSNL-2]
クラスまたはインターフェイスの行数を制限する [METRICS.CTNL-2]
ネストされた条件文の数の制限を超えている [METRICS.DCON-2]
ネストされた if の数を制限する [METRICS.DIF-3]
ネストされた try の数を制限する [METRICS.DTRY-3]
変数と戻り値の型数が制限を超えている [METRICS.ELC-3]
ファイル中の import 文の数を制限する [METRICS.IMPT-3]
ネストされたメソッド呼び出しの数の制限を超えている [METRICS.NMI-3]
コンストラクタの数の制限を超えている [METRICS.NOC-3]
フィールド数を制限する [METRICS.NOF-2]
メソッド数を制限する [METRICS.NOM-2]
package-private フィールド数を制限する [METRICS.NPKGF-2]
package-private メソッド数を制限する [METRICS.NPKGM-2]
private フィールド数を制限する [METRICS.NPRIF-2]
private メソッド数を制限する [METRICS.NPRIM-2]
protected フィールド数を制限する [METRICS.NPROF-2]
protected メソッド数を制限する [METRICS.NPROM-2]
public フィールド数を制限する [METRICS.NPUBF-2]
public メソッド数を制限する [METRICS.NPUBM-2]
Javadoc コメントの比率を制限する [METRICS.PJDC-2]
1 つのメソッド中のステートメント行数を制限する [METRICS.SNLM-2]
メソッドのステートメント数を制限する [METRICS.STMT-2]
サイクロマティック複雑度を制限する [METRICS.TCC-2]
連鎖メソッド呼び出しの数の制限を超えている [METRICS.TMC-3]
メソッドの行数を制限する [METRICS.TNLM-2]
メソッド呼び出しの数を制限する [METRICS.TNMC-2]
パラメータの数を制限する [METRICS.TNOP-2]
メソッド宣言中の throws 宣言の数を制限する [METRICS.TNOT-3]
return 文の数を制限する [METRICS.TRET-2]
その他 [MISC]
Throwable オブジェクトの printStackTrace() メソッドを呼び出してはいけない [MISC.ACPST-5]printStackTrace()を検知してエラーページに飛ばすことは開発時はありうる
メソッド パラメータへの代入を避ける [MISC.AFP-5]対象は配列のみだがやるべき
パラメータ化された型を row 型に変換している [MISC.AGBPT-4]
特定のパッケージまたは型を使用しない [MISC.APT-3]
null ではなくサイズが 0 の配列を返す [MISC.ARN-3]
abstract メソッドと static final フィールドだけを含むクラスをインターフェイスとして宣言する [MISC.ASFI-2]
オブジェクトを使って static フィールドまたはメソッドにアクセスしてはいけない [MISC.AUO-2]
'BigDecimal' コンストラクタに浮動小数点値を渡してはいけない [MISC.BBDCC-3]
条件文には '{}' ブロックを用意する [MISC.BLK-3]
制御構造の最後にコメントを用意する [MISC.CCB-3]
空ブロックにコメントを用意する [MISC.CEB-3]
clone () でコンストラクタを使用しない [MISC.CLNC-2]
すべての clone () で super.clone () を呼び出す [MISC.CLONE-2]
ローカル変数にはコメントを用意する [MISC.CLV-5]方向は良いが名前が明らかな場合は不要
continue または break 文を使用しない [MISC.CONTINUE-4]
final でないメソッド、インスタンス メソッド、および private ではないメソッドをコンストラクタから呼び出さない [MISC.CTOR-4]
非推奨のメンバ宣言には "@Deprecated" 注釈を追加する [MISC.DANNOT-3]
do-while 文を使用しない [MISC.DOWHILE-5]
非推奨APIを使わない [MISC.DPRAPI-2]
すべての Serializable クラスに対して serialVersionUID を作成する [MISC.DUID-2]
変数は、その使用箇所のできるだけ近くで宣言するべきである [MISC.DVCU-4]
クラスに他のコンストラクタがない場合に、空の public コンストラクタを定義しない [MISC.EPC-3]
private 定数フィールドは final で宣言する [MISC.FF-2]
定数のローカル変数は final で宣言する [MISC.FLV-4]
クラス フィールドと同じ名前をメソッドのローカル変数およびパラメータで宣言しない [MISC.HMF-2]
あまり多くの 非final なstatic フィールドを使用しない [MISC.MSF-4]
抽象クラス中で public コンストラクタを定義してはいけない [MISC.NPAC-3]
for ループには、条件文、インクリメントを使用する [MISC.PCIF-2]デクリメントの方が高速であるので必要な場合もある
public でないクラスのコンストラクタは public で宣言しない [MISC.PCTOR-2]
ブロックの先頭にのみ宣言を置く [MISC.PDBB-2]
while ループではなく for ループを使用する [MISC.PFL-5]
public クラスが少なくとも 1 つの public または protected メンバを持つようにする [MISC.PMPC-3]
public static final 配列フィールドを使用しない [MISC.PSFA-2]要素に代入できてしまうのを周知するため
一つのクラス内で文字列リテラルを繰り返し使用しない [MISC.RSL-5]
System print () または println () を使用しない [MISC.SIO-5]最終的にはログに置き換えるが、開発時は適用しきれない
定数宣言と "System.err.print"、"System.err.println"、 "System.out.print"、"System.out.println"以外での文字列リテラルの使用を避ける [MISC.SL-4]
TODO コメントをコードから削除する [MISC.TODO-4]周知のために採用するなら適用
正確な値を計算するには、float 型、double 型ではなく BigDecimal を使用する [MISC.UBD-3]
文字列の構文解析には、'indexOf()' や 'substring()' ではなく 'StringTokenizer' を使用する [MISC.UST-2]StringTokenizerは区切り文字が連続すると空白文字を読み飛ばしてしまうので採用できない
名前付けルール [NAMING]
一般的な変数名を使用 [NAMING.CVN-5]ハンガリアン表記 iCountなどのこと。プロジェクトにコーディング規約に依存
java プラットフォームの型と同じ名前を使って型を宣言してはいけない [NAMING.DJLO-2]
java.lang.Exception を継承していないクラスに対して 'Exception' で終わる名前を使ってはいけない [NAMING.ECN-3]
getter メソッドに名前付け規則を使用する [NAMING.GETA-2]
"boolean" を返す getter メソッドに名前付け規則を使用する [NAMING.GETB-3]
インターフェイスのフィールド名ではすべての文字に大文字を使用する [NAMING.IFV-2]
boolean を返すメソッドだけに is で始まる名前を付ける [NAMING.IRB-2]
JSP ページに名前付け規則を使用する [NAMING.JSP-2]
長いクラス名またはインターフェイス名を避ける [NAMING.LCIN-4]
注釈型に名前付け規則を使用する [NAMING.NA-2]
配列変数とコレクション変数に名前付け規則を使用する [NAMING.NAC-2]
抽象クラスに対して名前付け規則を使用する [NAMING.NACL-5]
クラスの名前付け規則を推進 [NAMING.NCL-2]
例外の名前付け規則を推進 [NAMING.NE-2]
列挙型の宣言に名前付け規則を使用する [NAMING.NENUM-2]
final のローカル変数に対して名前付け規則を使用する [NAMING.NFL-5]
static ではないフィールドの名前付け規則を推進 [NAMING.NIF-2]
インターフェイスの名前付け規則を推進 [NAMING.NITF-2]
ローカル変数の名前付け規則を推進 [NAMING.NLV-2]
static でないメソッド の名前付け規則を推進 [NAMING.NM-2]
メソッド パラメータの名前付け規則を推進 [NAMING.NMP-2]
型宣言のメソッド プレースホルダーに名前付け規則を使用する [NAMING.NPH-2]
final ではない static フィールドの名前付け規則を推進 [NAMING.NSF-2]
static メソッドの名前付け規則を推進 [NAMING.NSM-2]
JSP タグの接頭辞に名前付け規則を使用する [NAMING.NTAG-2]
JUnit テストクラスに名前付け規則を使用する [NAMING.NTEST-2]
package 名には小文字を使用する [NAMING.PKG-2]
Sun で予約されているパッケージ名を使用しない [NAMING.RPKG-2]
setter メソッドに名前付け規則を使用する [NAMING.SETA-2]
シングルトン クラスに名前付け規則を使用する [NAMING.SINGLETON-2]
タグ ハンドラおよび関連クラスに名前付け規則を使用する [NAMING.THAC-2]
変数にはハンガリアン表記を使用する [NAMING.UHN-4]
final static フィールド名には小文字を使用しない [NAMING.USF-2]
ユーティリティ クラスに名前付け規則を使用する [NAMING.UTIL-3]
大文字/小文字の使用だけが違う変数名を使用してはいけない [NAMING.UUVN-4]
オブジェクト指向プログラミング [OOP]
abstract クラスで具象クラスを継承してはいけない [OOP.ACECC-3]
public/ protected/ package-private フィールドを避ける [OOP.AF-2]
継承されるフィールドが隠れるのを避ける [OOP.AHF-1]
継承される static なメンバ メソッドが隠れるのを避ける [OOP.AHSM-2]
オーバーライド メソッドには @Override 注釈 を追加する [OOP.AOA-4]
注釈型をスーパー インターフェイスとして使用してはいけない [OOP.AUASI-2]
Object の protected メソッドと競合するメソッドをインターフェイスで宣言してはいけない [OOP.CIMOM-3]
外部クラスのフィールドを隠してはいけない [OOP.HIF-3]
インターフェイス内で "Object" クラスから継承するメソッドの宣言を避ける [OOP.IDOM-4]
"no-op" のインターフェイスメソッドを実装しない、またはそれらを abstract で実装する [OOP.IIN-5]
ネストの深さが 3 以上の内部クラスを使用しない [OOP.LEVEL-2]
finalize() メソッドは protected で宣言する [OOP.MFP-3]
private メソッドをオーバーライドしない [OOP.OPM-2]
final クラスのメンバに protected を使用してはいけない [OOP.PIFC-3]
スーパークラスがインターフェイスをすでに実装している場合、そのインターフェイスを実装するとしてクラスを宣言してはいけない [OOP.RI-4]
最適化 [OPT]
省略された代入演算子を使用 [OPT.AAS-3]
プリミティブ型のオートボクシングおよびオートアンボクシングに依存してはいけない [OPT.ABUB-3]
'new String(String)' コンストラクタを使用しない [OPT.ACDO-2]
拡張された for 文の使用を避ける [OPT.AEFS-5]
オブジェクトのインスタンスの新規生成によって Class オブジェクトを取得してはいけない [OPT.AGC-2]
基本型のためのラッパークラスをインスタンス化してはいけない [OPT.BOOLEAN-3]
boolean の返却を簡略化する [OPT.BR-3]
すべての "java.io.Closeable" リソースを "finally" ブロックでクローズする [OPT.CCR-3]
ループ内に定数式を入れないようにする [OPT.CEIL-5]
ループ条件文でのメソッド呼び出しを避ける [OPT.CEL-3]
finally ブロックで入力または出力リソースをクローズする [OPT.CIO-1]
潜在的に時間のかかるロギング処理を呼び出す前にロギングレベルをチェックする [OPT.CLL-3]
空文字列を連結してプリミティブ型を String に変換してはいけない [OPT.CPTS-3]
できるだけ早くリソースをクローズする [OPT.CRWD-4]
1 つのメソッド内でだけアクセスされる private フィールドを使用しない。ローカル変数に変更する [OPT.CTLV-3]
ArrayList、HashMap、HashSet、Hashtable、Vector、および WeakHashMap の初期容量を定義する [OPT.DIC-3]効果はみられなかった
String.equals("") ではなく String.length() == 0 を使用する [OPT.EES-5]
時間がかかる処理をループの本体で呼び出してはいけない [OPT.EOIL-3]
浮動小数点型にキャストされた整数を Math.ceil() の呼び出しに渡してはいけない [OPT.ICDPC-3]
代用のアクセサを必要とするかもしれないメンバアクセスを避ける [OPT.ICGA-3]
'get()' メソッドを使用してリストを反復処理をしない [OPT.ILUG-4]ArrayListはgetが高速なので不採用
インターフェイスに対してだけ instanceof を使用する [OPT.INSOF-5]
配列のコピーには、ループではなく System.arraycopy () を使用する [OPT.IRB-2]
static フィールドと static メソッドだけを持つクラスのインスタンスを生成してはいけない [OPT.ISC-3]
ループ本体で変数をインスタンス化するのを避ける [OPT.LOOP-3]Listの要素などはインスタンス化するしかない場合あり
インスタンス フィールドに対する getter および setter メソッドを final で宣言する [OPT.MAF-4]
null との不要な比較を行わない [OPT.MUNC-4]
ランダム整数を生成するには nextInt() メソッドを使用する [OPT.NIVND-5]
コンパイル時に判明する値を持つ final フィールドは static として宣言する [OPT.NSF-3]
staticなメンバしか持たないクラスのコンストラクタは "private" または "protected" で宣言する [OPT.PCSC-4]
単一文字の比較には、startsWith () ではなく charAt () を使用する [OPT.PCTS-3]
StringBuffer の初期容量を指定する [OPT.SB-3]
可能であれば内部クラスを static として宣言する [OPT.SI-1]
不要な String.toCharArray() の呼び出しを避ける [OPT.STCA-4]
1 文字の文字列定数を含む文字列連結では、二重引用符ではなく単一引用符を使用する [OPT.STR-3]
不要な 'String' メソッドの呼び出しを避ける [OPT.STS-3]
ループ本体で synchronized メソッドを呼び出さない [OPT.SYN-3]
toArray() に渡す配列にコレクション サイズを使用する [OPT.TOARRAY-5]
try/catch/finally ブロックをループの外に置く [OPT.TRY-3]
boolean 変数を true と比較しない [OPT.UEQ-3]
不要な instanceof の使用を避ける [OPT.UISO-1]
結果が簡単に計算できる定数の場合、java.lang.Math のメソッドを呼び出してはいけない [OPT.UMATH-4]
不要なキャストの使用を避ける [OPT.UNC-2]
結合文字列を使用するときは String ではなく StringBuffer を使用する [OPT.USB-2]大きなループの中なら必要だが、可読性のため数回なら+=で良い
定数文字列には StringBuffer ではなく String を使用する [OPT.USC-1]
疑問の余地がある、短絡演算ではない演算を避ける [OPT.USCL-1]
可能なかぎり stack 変数を使用する [OPT.USV-3]
発生するかもしれないバグ [PB]
コレクションをそのコレクション自体に追加してはいけない [PB.ACTI-1]
else のある if では "{ }" カッコを使用する [PB.ADE-1]
空の try、catch、finally ブロックの使用を避ける [PB.AECB-2]
特定のクラスの継承を避ける (カスタムルール) [PB.AECC-3]
空のステートメントを避ける [PB.AES-3]
無限ループを使用しない [PB.AIL-1]
配列要素へアクセスするのに誤った添え字変数を使用しない [PB.AMOI-3]
java.util.Properties オブジェクトの put()、putAll()、および get() メソッドの使用を避ける [PB.APPG-2]
try-catch ブロック内に return 文がある場合、 finally ブロックでの return 文の使用を避ける [PB.ARCF-1]
条件内で代入演算子を使用しない [PB.ASI-1]
"finally" ブロックを途中で終了しない [PB.ATSF-1]
ループの条件で使用されないループ変数を避ける [PB.AULV-1]
コンストラクタ引数への混乱する代入を避ける [PB.AWP-3]
[0, 31] の範囲外の整数をシフトの量として使用してはいけない [PB.BSA-1]
オーバーフローの原因となるかもしれない場合は複合代入演算子の使用を避ける [PB.CACO-3]
必ず定数値に評価される条件式を避ける [PB.CC-1]
基本データ型を精度の低い型にキャストしない [PB.CLP-2]
String.indexOf() の結果が正かどうかをチェックしてはいけない [PB.CPI-3]
読み込みまたはスキップを行なうメソッドの戻り値を確認する [PB.CRRV-1]
正しい "super" メソッドが呼び出す [PB.CSI-3]
Iterator.next() メソッドの実装が必ず NoSuchElementException をスローするようにする [PB.CTNSE-1]
浮動小数点どうしを比較しない [PB.DCF-2]
"+" 文字列連結演算子を使って数字を連結してはいけない。"+" は数字の加算にだけ使用する [PB.DCP-1]
戻り値が null ではないことをチェックした後に readLine() の結果を破棄してはいけない [PB.DJNCR-1]
ComponentListener.componentResized () で setSize () を呼び出さない [PB.DNCSS-1]
void ではないメソッドの戻り値は、空の配列または "null" であってはいけない [PB.EAR-3]
本体が空の制御文を避ける [PB.EB-1]
空のクラスを使用しない [PB.EC-3]
java.util.HashMap または java.util.Hashtable を継承してはいけない [PB.EHM-3]
空の JarFile エントリまたは空の ZipFile エントリを作成してはいけない [PB.EJF-2]
'equals()' メソッドの実装では 'getClass()' または "instanceof" を使用する [PB.EQLC-3]
常に false を返す equals() メソッドの呼び出しを避ける [PB.EQUS-1]
意味のある値が与えられない "private" フィールドの使用を避ける [PB.FCBS-1]
メソッドの 1 行目で再帰呼び出しを行わない [PB.FLRC-2]
for ループの内部でループ制御変数に代入しない [PB.FLVA-2]
ループの添え字として浮動小数点型の変数を使用しない [PB.FPLI-1]
Iterator の hasNext() メソッドから next() メソッドを呼び出してはいけない [PB.HNCN-1]
オーバーフローを引き起こす整数の計算を避ける [PB.ICO-2]
整数の除算の結果を浮動小数点型の変数に代入してはいけない [PB.IDCD-1]
readLine() の戻り値を間接参照する前に、戻り値が null かどうかをチェックする [PB.IDRL-1]
IllegalArgumentException メッセージをコード ロジックに必ず一致させる [PB.IIAE-1]
オーバーライドされるメソッドがパラメータ型の違いによる予定外の共変ではないようにする [PB.IMC-3]
static "final" フィールドを不変にする [PB.IMM-3]
目的のメソッドが必ずオーバーライドされるようにする [PB.IMO-1]
ループ変数の使用でのバグを防止する [PB.INDEX-2]
必要な場合 'indexOf()' の "fromIndex" 引数を使用する [PB.IOSS-2]
String.equals(constant) または String.equalsIgnoreCase(constant) を呼び出してはいけない [PB.ISEM-3]
疑わしい private "static" フィールドを調べる [PB.ISF-3]
ネストされた複数の for ループにおいて同じループ変数をインクリメント/デクリメントしてはいけない [PB.JI-1]
Set や Map のキーとして使用されるすべての型が 'equals()' と 'hashCode()' メソッドをオーバーライドする [PB.KOEH-5]
エントリ ポイント メソッドだけにメソッド名 main を使用する [PB.MAIN-1]
シリアライズ可能クラスの readResolve () と writeReplace () には、protected を指定する [PB.MASP-2]
null かもしれない戻り値を間接参照してはいけない [PB.MCRN-2]
危険な実装の 'equals()' または 'hashCode()' のオブジェクトをハッシュ化されたデータ構造のキーとして使用することを避ける [PB.MOHK-2]
アクセスできないクラスを使用しない [PB.NACC-1]
switch 文の 列挙型の各定数に case 文を用意する [PB.NAECS-2]
コンストラクタでないメソッドにクラスと同じ名前を付けない [PB.NAMING-1]
メソッドの戻り値を必ず使用する [PB.NASSIG-4]
Error および Throwable のサブクラスを定義しない [PB.NDC-2]
負の値を使って配列の次元を初期化してはいけない [PB.NIA-1]
RuntimeException のサブクラスをできるだけ定義しない [PB.NXRE-3]
ループの条件で使用されるオブジェクトは適切にループ本体でアクセスされるようにする [PB.OAMC-2]
ファイルと同じ名前をもつ型を 1 つだけ必ず用意する [PB.OCSF-1]
疑わしい 8 進数エスケープを避ける [PB.OE-5]
finalize() メソッドをオーバーロードしてはいけない [PB.OF-2]
インクリメント文の結果を上書きしてはいけない [PB.OI-1]
メソッドの引数をシリアライザブルにする [PB.ONS-1]
char の範囲を超えた比較を避ける [PB.OOR-1]
ファイルと同名の型を必ず public として宣言する [PB.PCSF-5]
switch 文の最後の case として default を置く [PB.PDCL-3]
各 switch 文には default: を用意する [PB.PDS-2]
null オブジェクトを間接参照してはいけない [PB.PNPD-1]
メソッドが正しいオブジェクトで呼び出されるようにする [PB.ROM-4]
同じフィールドに複数の getter/setter メソッドを使用しない [PB.RSK-4]
catch 句で例外を再スローしてはいけない [PB.RTE-3]
String の連結で char 配列を使用してはいけない [PB.SAC-1]
フィールドとローカル変数への自分自身の代入/初期化を避ける [PB.SAFL-1]
不正な case を含む switch 文を避ける [PB.SBC-3]
StringBuffer(int) コンストラクタに char を渡さない [PB.SBCC-2]
get/set メソッドが必ず正しい変数にアクセスするようにする [PB.SG-1]
print() 文および println() 文の複雑な式をカッコで囲む [PB.STRCC-2]
switch 文でテキスト ラベルを使わない [PB.TLS-1]
オブジェクトどうしの比較に '==' または '!=' を使用しない [PB.UEIC-3]
到達しない "else if" と "else" を避ける [PB.UIF-1]
単項演算子 '+' を使用してはいけない [PB.UNARY-1]
java.util.Random クラスの next メソッドの結果を "int" にキャストしてはいけない [PB.UNI-1]
8進整数リテラルを使用しない [PB.UOL-1]
Java のラッパー クラスに渡される引数にタイプミスがないようにする [PB.WT-1]
移植性 [PORT]
File クラスからコンストラクタを呼び出すときに絶対パスをハード コーディングしてはいけない [PORT.DNHCP-3]
System.getenv () を使用しない [PORT.ENV-1]
Runtime.exec() を使用しない [PORT.EXEC-3]
'\n' または '\r' を行分離記号としてハードコーディングしない [PORT.LNSP-2]
ユーザ定義の native メソッドを使用しない [PORT.NATV-3]
直接 java.awt.peer.* インターフェイスを使用しない [PORT.PEER-2]
該当するリテラルの代わりに "File.pathSeparator" または "File.pathSeparatorChar" を使用する [PORT.PSC-4]
プロパティ・ファイル [PROPS]
重複するプロパティ名を避ける [PROPS.DUPN-1]
重複するプロパティ値を避ける [PROPS.DUPV-4]
空のプロパティ名を避ける [PROPS.EMN-2]
空のプロパティ値を避ける [PROPS.EMV-3]
常に '=' 演算子を使用する [PROPS.EQOP-3]
プロパティエントリ数を制限する [PROPS.FM-3]
プロパティ値の誤った引数を避ける [PROPS.IARG-2]
不完全なプロパティエントリを避ける [PROPS.ICK-2]
継続行文字 '/' の誤用を避ける [PROPS.IVCC-3]
異なるロケール間でのプロパティエントリの不一致を避ける [PROPS.MENTRY-2]
複数行に分割されたプロパティ名を避ける [PROPS.MLN-2]
欠落したプロパティエントリを避ける [PROPS.MP-2]
プロパティ名の命名規則を推進する [PROPS.NAME-2]
コメントとプロパティ値の綴り間違いを避ける [PROPS.SPELL-2]
プロパティエントリが正しくローカライズされるようにする [PROPS.TENTRY-2]
未使用のプロパティエントリを避ける [PROPS.UENTRY-2]
セキュリティ [SECURITY]
インナークラスの使用を避ける [SECURITY.AUIC-3]
writeObject() で DataOutputStream にバイト配列を渡してはいけない [SECURITY.CBA-2]
セキュリティのために clone () を final 宣言する [SECURITY.CLONE-3]
クラス オブジェクトを名前で比較しない [SECURITY.CMP-2]
クラスを非デシリアライザブルにする [SECURITY.DSER-5]
すべての内部クラスを private にする [SECURITY.INNER-2]
クラスを非クローナブルにする [SECURITY.MCNC-5]
すべての シリアライザブル クラスに対して readObject() と writeObject() を実装する [SECURITY.OROM-5]
内部クラスに対する package および public アクセスに頼らない [SECURITY.PKG-5]
クラスはできるだけシリアライズ不可にする [SECURITY.SER-5]
シリアライズ [SERIAL]
Externalizable を実装しているが引数なしコンストラクタを定義していないクラスを避ける [SERIAL.ENNAC-1]
正しい Serializable クラスを使用する [SERIAL.NSFSC-1]
'Serializable' インターフェイスを実装するすべてのシングルトンクラスで "readResolve" メソッドを定義する [SERIAL.RRSC-3]
すべてのフィールドが 'readObject()' メソッドによって代入され 'writeObject()' よって書き出す [SERIAL.RWAF-1]
引数なしコンストラクタを持たないスーパー クラスを拡張するクラスの直列化を避ける [SERIAL.SNNAC-1]
readObject() メソッドを synchronized として宣言してはいけない [SERIAL.SROS-3]
SERVLET
Servlet サーブレットでの JDBC コードの使用は避ける [SERVLET.AJDBC-3]
java.beans.Beans.instantiate () を使用しない [SERVLET.BINS-3]
Servlet クラスでインスタンス フィールドを定義してはいけない [SERVLET.IF-3]
パラメータを取らない public コンストラクタを宣言する [SERVLET.MDC-1]
サーブレットクラスはその参照名を web.xml ファイルに持つ必要がある [SERVLET.SNM-3]
System.out.println () や System.err.println () の使用を最小限に抑える [SERVLET.SOP-2]
サーブレット クラス内で SingleThreadModel を使用しない [SERVLET.STM-2]
サーブレット内での同期化を最小限に抑える [SERVLET.SYN-2]
Context Object を使って HTTP リクエスト パラメータを管理する [SERVLET.UCO-4]
STRUTS
フォーム Bean 中の各フィールドは適切な getter/setter メソッドを持つべきである [STRUTS.FIELDS-3]
フォーム Bean には getter/setter メソッドだけを含める [STRUTS.FORM-4]
Struts Action クラスでインスタンス変数を宣言してはいけない [STRUTS.INST-3]
Struts コードで getParameter メソッドを使用してはいけない [STRUTS.PARAM-4]
TRS
すべての待ちスレッドに通知されるように notify () ではなく notifyAll () を使用する [TRS.ANF-3]
安全ではない java.lang.ThreadGroup 型の変数を使用しない [TRS.AUTG-3]
VM によって異なる振る舞いをするかもしれないため Thread.yield () を使用しない [TRS.AUTY-3]
デッドロック発生の原因となる synchronized メソッドからの synchronized メソッドの呼び出しを避ける [TRS.CSFS-3]
Thread を拡張するクラスのコンストラクタ内で start() を呼び出してはいけない [TRS.CSTART-3]
ダブルチェック ロッキング パターンを使用してはいけない [TRS.DCL-3]
スレッドセーフな怠惰な初期化にする [TRS.ILI-4]
設計上の欠陥を示す可能性があるため IllegalMonitorStateException をキャッチしてはいけない [TRS.IMSE-3]
java.lang.Runnable を実装するクラスの run() メソッドを呼び出してはいけない [TRS.IRUN-3]
別のスレッドして実行できるようにスレッドのサブクラスには run () を入れる [TRS.MRUN-2]
メソッド宣言で synchronized 修飾子を使用する代わりに "synchronized" ブロックを使用する [TRS.NSM-5]
synchronized でないメソッドで wait ()、notify ()、notifyAll() を呼び出さない [TRS.NSYN-2]
Runnable.run () の実装に synchronized 修飾子が使用されていない [TRS.RUN-5]
java.util.concurrent.locks.Lock の実装に "synchronized" キーワードを使用して同期化を実行してはいけない [TRS.SOL-3]
相互排除の保証が難しくなるため final ではないフィールドを同期化してはいけない [TRS.SOUF-3]
set メソッドを同期化している場合、get メソッドも同期化する [TRS.SSUG-3]
Object の this 参照で同期化を実行したりセマフォ メソッドを呼び出したりしてはいけない [TRS.STR-3]
危険な推奨されないメソッドの Thread.resume ()、Thread.stop ()、Thread.suspend ()、Runtime.runFinalizersOnExit () を呼び出さない [TRS.THRD-1]
ロックを保持している間に Thread.sleep() を呼び出さない。さもないとパフォーマンスを劣化させたりデッドロックを引き起こしたりする [TRS.TSHL-2]
run メソッドを指定せずにスレッドを作成してはいけない [TRS.UT-3]
liveness 状態をテストするループの内部でだけ wait () と await() を呼び出す [TRS.UWIL-1]
ポーリング ループではなく wait () および notifyAll () を使用する [TRS.UWNA-2]
状態を待つために wait() ではなく Condition の await() メソッドを使用する [TRS.WOC-3]
他のメソッドが同期化されていない場合、writeObject() メソッドを同期化してはいけない [TRS.WOS-4]
利用されないコード [UC]
インターフェイスの不要な修飾子を避ける [UC.AAI-2]
クラスは java.lang.Object を明示的に継承するべきではない [UC.AEEO-4]
空の static イニシャライザを避ける [UC.AESTAT-1]
冗長な throws 句を避ける [UC.ARTD-4]
未使用ラベルを避ける [UC.AUL-1]
決して読まれないローカル変数の使用を避ける [UC.AURV-1]
不要なブール比較を避ける [UC.BCMP-4]
java.lang.* パッケージを明示的にインポートしない [UC.DIL-3]
空の finalize() メソッドを避ける [UC.EF-1]
スーパークラスの finalize() を呼び出すだけの finalize() メソッドは冗長なので使用してはいけない [UC.FCSF-4]
未使用の private フィールドを避ける [UC.PF-1]
現行クラスを持つパッケージからクラスをインポートしてはいけない [UC.PIMPORT-4]
未使用の private メソッドを避ける [UC.PM-1]
列挙型の宣言で冗長な static キーワードを使用している [UC.RSKE-4]
空の synchronized 文を避ける [UC.SNE-1]
オーバーライドされた実装 (スーパークラス実装) を呼び出すだけのメソッドを避ける [UC.SO-4]
キャッチした例外を catch ブロックで必ず使用する [UC.UCATCH-2]
不要な if 文を避ける [UC.UCIF-3]
不要な else 文を使用している [UC.UES-3]
未使用の import 文を避ける [UC.UIMPORT-2]
未使用パラメータを避ける [UC.UP-2]
未使用の private なクラスまたはインターフェイスの宣言を避ける [UC.UPC-2]
void メソッドの最後の不要な return 文を避ける [UC.VR-3]

テストツール一覧に単体から性能までのテストツールの一覧をまとめました。

11840 since 2008/05/13


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2011-09-27 (火) 14:22:11 (1066d)