1. ホーム
  2. java

Java静的コード解析 - 仕様チェック - checkstyle

2022-02-19 09:38:10

<スパン はじめに

<スパン プラグインの使用は、主にJAVAコードの仕様の検出のために、検査基準の太陽のセットのデフォルトの使用は、また、独自の定義することができます多くを言うことはありません。ここに記載されているバージョンは5.6です

<スパン eclipseにcheckstyleをインストールする

help--> eclipse marketplace checkstyleを検索して、インストールします。

checkstyleで検出する

チェックする項目を選択し、右クリックでcheckstyle ---> でコードをチェックする。

2つのレポートが生成されます、ウィンドウズ-->表示ビュー、チェックスタイルを見つけるをクリックします。


生成された結果は以下の通りです。


そして円グラフ


checkstyleパラメータを変更する

eclpse-->windows-->preferencesをクリックします。


現在サンチェックを使用していることがわかりますが、configureをクリックすると、The configuration can not be editedと表示されます。

つまり、付属の2つの組み込みルールは編集できないので、自作のルールをコピーして、コピーをクリックし、名前を付けて確認します。


もう一度開くと、編集可能な状態になります。

たとえば、前回のテスト結果では、行がX文字より長いことが大きな問題のひとつでしたが、デフォルトの値は80文字で、これはちょっと短すぎますので、私

100に変更し、Size Violationsを見つけ、最大行長から離れ、オンにします。デフォルトは80ですが、100に変更するだけです。


あるファイルの統計情報を削除する

実際には、プロジェクトに.ttcフォントが含まれているため、統計情報の半分近くがこのファイルで占められているため、このファイルを右クリックして -->checkstyle -->clear checkstyle violationを実行します。
統計情報の一覧は、変更後ランダムに表示されます。

各種チェックチップの説明


ユーティリティクラスは、パブリックまたはデフォルトのコンストラクタを持つべきではありません。

代わりにSingletonを使用することを検討してください。あるいは、プライベートコンストラクタを追加するか、クラスを抽象化してください。 あるいは、プライベートコンストラクタを追加するか、クラスを抽象化して、この警告を消してください。 あるいは、プライベート・コンストラクタを追加するか、クラスを抽象化して、この警告を消すこともできます。
あるいは、プライベート・コンストラクタを追加するか、クラスを抽象化して、この警告を消すことができます。

private コンストラクタのみを持つクラスは final であるべきです。

例えば最後の、プライベートコンストラクタを追加したものは、クラスをfinalにするだけで、またこう出てきます。

不正な位置にある配列ブラケット

文字列 array[] = {}; に変更します。

String[] array = {}; とすれば、位置が標準でないことを意味するはずです。

条件付きロジックを削除することができる

if ("post".equalsIgnoreCase(method)) {
return true;
} else {
return false;
}

条件付きロジックが削除できる旨のエラーが報告され、条件付きロジックを以下のように変更することで削除することができます。

return "post".equalsIgnoreCase(method);

以上、より簡潔に

X の後に空白がない

記号の左右に空白があること

JLSの提案でXモディファイアの順番がおかしくなった

は、規格にそぐわないモディファイアです。例えば
public final static String SAFE_EVENT_AUDIT_RECORD = "Security Event Class";

に変更します。
public static final String SAFE_EVENT_AUDIT_RECORD = "Security Event Class";

すなわち

名前 ''X'' はパターン ''X'' に一致しなければなりません。

は、変数が正規表現で定義された規則に一致しなければならないことを要求しています。
変数例:パターン '^[a-z][a-zA-Z0-9]*$' にマッチする必要があります。
変数は小文字で始まり、大文字と数字を含むことができますが、アンダースコアを含むことはできません。
ここで名前を変更する必要がある場合は、ECLIPSEのリネーム機能で一括変更できます。ショートカットはALT + SHIFT + Rです。
定数です。^[A-Z][A-Z0-9]*(_[A-Z0-9]+)*$
大文字で始まり、_と数字を含む定数です。

パラメータの意味


からです。 http://checkstyle.sourceforge.net/availablechecks.html

<テーブル <カラー 抽象クラス名 抽象クラスの名前がある正規表現に適合していることを保証する。 AnnotationUseStyle(アノテーションユーズスタイル このチェックは、アノテーションを使用したスタイルを制御します。 AnonInnerLength 長い匿名内部クラスがあるかどうかをチェックします。 ArrayTrailingComma 配列の初期化にオプションの末尾カンマが含まれているかどうかを調べます。 ArrayTypeStyle 配列の型定義のスタイルをチェックします。 AvoidInlineConditionals インライン条件文を検出します。 AvoidNestedBlocks ネストされたブロックを検索します。 AvoidStarImport 記法を使用するimport文を検出するチェックです。 AvoidStaticImport 静的インポートを検出するかどうかをチェックします。 BooleanExpressionComplexity(ブーリアン表現複雑性 ネストされたブール演算子 (&&, ||, &, | および ^) を指定された深さに制限する (デフォルト = 3)。 ClassDataAbstractionCoupling(クラスデータ抽象化カップリング この指標は、与えられたクラス内で他のクラスのインスタンス化の数を測定します。 クラスFanOutComplexity あるクラスが依存している他のクラスの数。 ClassTypeParameterName クラス型パラメータ名が format プロパティで指定された書式に準拠しているかどうかを調べます。 定数名 定数名が format プロパティで指定されたフォーマットに適合しているかどうかをチェックします。 CovariantEquals クラスが共変量メソッドequalsを定義している場合,そのクラスはメソッドequals(java.lang.Object)を定義しているかどうかをチェックします。 CyclomaticComplexity(サイクロマチック・コンプレックス サイクロマティック複雑度を指定された制限値に対してチェックします。 宣言の順序(DeclarationOrder クラスやインターフェースの宣言が、Java プログラミング言語のコード規約で推奨される順序で表示されるかどうかをチェックします。 デフォルトカムズラスト(DefaultComesLast switch文の中で、defaultが全てのcaseの後にあることを確認します。 子孫トークン 他のトークンの下に制限されたトークンがあるかどうかをチェックします。 DesignForExtension クラスが継承のために設計されているかどうかをチェックします。 エンプティブロック 空のブロックがあるかどうかをチェックします。 EmptyForInitializerPad(エンプティフォー・イニシャライザーパッド つまり、空のイニシャライザにスペースが必要か、またはスペースが禁止されているかどうかを確認します。 EmptyForIteratorPad つまり、空のイテレータにスペースが必要なのか、それともスペースが禁止されているのかをチェックします。 EmptyStatement 空のステートメント(スタンドアロン';')を検出します。 EqualsAvoidNull String リテラルとオプションの代入の組み合わせが equals() の比較の左側にあるかどうかをチェックします。 EqualsHashCode equals() をオーバーライドするクラスが hashCode() もオーバーライドすることをチェックします。 実行可能ステートメント数 実行可能なステートメントの数を指定された制限値に制限します(デフォルト = 30)。 ExplicitInitialization クラスまたはオブジェクトのメンバーが、明示的にその型値をデフォルトに初期化しているかどうかをチェックします(オブジェクト参照の場合はnull、数値型およびcharの場合は0、booleanの場合はfalse)。 フォールスルー switchステートメントのフォールスルーをチェックします。 ケースにJavaコードが含まれているが、break、return、throw、またはcontinueステートメントがない場所を検索します。 ファイル長 ソースファイルが長いかどうかをチェックします。 ファイルタブキャラクター ファイルにタブ文字が含まれているかどうかを確認します。 FinalClass private ctorのみを持つクラスがfinalとして宣言されているかどうかをチェックします。 FinalLocalVariable 値が変更されることのないローカル変数は、必ずfinalと宣言しなければならないことを保証します。 FinalParameters メソッド/コンストラクタ/キャッチ/フォアグラウンドのパラメータがファイナルであることを確認します。 一般的な空白文字 Genericトークンである < と > の周囲のホワイトスペースが、一般的な慣習に則っているかどうかをチェックします。 ヘッダー ソースのヘッダーを固定されたヘッダーファイルと照合します。 ヒドゥンフィールド ローカル変数やパラメータが、同じクラスで定義されているフィールドの影にならないかどうかをチェックします。 HideUtilityClassConstructor ユーティリティクラス (静的メソッドのみを含むクラス) がパブリックコンストラクタを持たないことを確認します。 イリーガルキャッチ java.lang.Exception、java.lang.Error、java.lang.RuntimeExceptionのいずれかをキャッチすることは、ほとんど許されない。 違法インポート 不正なパッケージのセットからインポートされていないかチェックします。 IllegalInstantiation ファクトリーメソッドを使用することが望ましい場合、不正なインスタンス化をチェックします。 IllegalThrows java.lang.Error や java.lang.RuntimeException を投げることは、ほとんど許されません。 IllegalToken 不正なトークンをチェックします。 IllegalTokenText 不正なトークン・テキストをチェックします。 不正なタイプ 特定のクラスが、変数宣言、戻り値、パラメータの型として使用されていないことを確認します。 インポートコントロール 各パッケージでインポート可能なパッケージを制御するチェックです。 インポートオーダー インポートグループが特定の順序で来ることを保証する。 インデント Javaコードのインデントが正しいかどうかをチェックします。 インナーアサインメント String s = Integer.toString(i = 2); のように、部分式に代入されているかどうかをチェックします。 インナータイプLast ネストされた(内部)クラス/インターフェースが、すべてのメソッドとフィールドの宣言の後に、クラスの一番下に宣言されていることを確認します。 インターフェースIsType Bloch, Effective Java, Item 17 - 型を定義するためにのみインタフェースを使用する を実装しています。 JUnitTestCase setUp()、tearDown()メソッドの名前が正しく、引数を持たず、voidを返し、publicまたはprotectedであることを確認すること。 JavaNCSS このチェックは、JavaソースファイルおよびメソッドのNon Commenting Source Statements(NCSS)メトリックを計算します。 JavadocMethod メソッドまたはコンストラクタの Javadoc をチェックします。 JavadocPackage すべてのパッケージがパッケージ・ドキュメントを持っているかどうかをチェックします。 JavadocStyle Javadocを検証するためのカスタムCheckstyleチェック。 JavadocType 型の Javadoc をチェックします。 JavadocVariable 変数がJavadocコメントを持っているかどうかをチェックします。 左カーリー 型、メソッド、その他のブロックの左中括弧の配置をチェックします。 線長 長い行をチェックします。 LocalFinalVariableName ローカル最終変数名が format プロパティで指定されたフォーマットに適合しているかどうかをチェックします。 ローカル変数名(LocalVariableName ローカルで非最終的な変数名が format プロパティで指定されたフォーマットに適合しているかどうかをチェックします。 マジックナンバー マジックナンバーをチェックします。 メンバー名 インスタンス変数名が format プロパティで指定されたフォーマットに適合しているかどうかをチェックします。 メソッド数 各タイプで宣言されているメソッドの数をチェックします。 メソッドの長さ 長いメソッドかどうかをチェックします。 メソッド名 メソッド名が format プロパティで指定された形式に適合しているかどうかをチェックします。 メソッドパラムパッド メソッド定義、コンストラクタ定義、メソッド呼び出し、またはコンストラクタ呼び出しの識別子と、パラメータリストの左括弧の間のパディングをチェックします。 MethodTypeParameterName クラス型パラメータ名が format プロパティで指定された形式に準拠しているかどうかを確認します。 MissingCtor クラス (抽象クラスを除く) が ctor を定義し、デフォルトのものに依存しないかどうかをチェックします。 行方不明 非推奨 このクラスは 欠落しているオーバーライド このクラスは MissingSwitchDefault switch文に"default"節があるかどうかをチェックします。 ModifiedControlVariable forループの制御変数がforブロックの内部で変更されていないことを確認するためのチェック。 モディファイアオーダー 修飾子の順序がJava言語仕様の8.1.1、8.3.1、8.4.3項の提案に準拠しているかを確認する。 マルチプルストリングリテラル 1つのファイルに同じ文字列リテラルが複数回出現しているかどうかをチェックします。 MultipleVariableDeclarations 各変数宣言が独自の文と独自の行にあるかどうかをチェックします。 MutableException 例外(ある正規表現に適合する任意のクラス名として定義されます)が不変であることを保証します。 NPathComplexity npath の複雑さを指定された制限値 (デフォルト = 200) に対してチェックします。 歯列矯正(NeedBraces コードブロックの周りに中括弧があるかどうかをチェックします。 ネスティッドフォアデプス ネストされたforブロックを指定された深さに制限する(デフォルト=1)。 NestedIfDepth ネストされた if-else ブロックの深さを指定します (デフォルト = 1)。 ネスティッドトライデプス(NestedTryDepth ネストされたtry-catch-finallyブロックを指定された深さに制限します(デフォルト=1)。 改行コード 各ファイルの末尾に改行があるかどうかをチェックします。 クローンなし clone メソッドが Object クラスからオーバーライドされていないことを確認します。 NoFinalizer パラメータがゼロのメソッドが finalize という名前で定義されていないことを確認します。 NoWhitespaceAfter トークンの後に空白がないことを確認します。 NoWhitespaceBefore トークンの前に空白がないことを確認します。 OneStatementPerLine 1行に1つしかステートメントがないことを確認します。 オペレータラップ 演算子の行の折り返しをチェックします。 OuterTypeFilename 外部型名とファイル名が一致するかどうかをチェックします。 アウタータイプ番号 outer"レベルで定義されたタイプの数をチェックします。 パッケージアノテーション このチェックは、すべてのパッケージアノテーションがpackage-info.javaファイル内にあることを確認します。 パッケージ宣言 パッケージの宣言があり、(オプションで)正しいディレクトリにあることを確認します。 パッケージ名 パッケージ名が format プロパティで指定されたフォーマットに適合しているかどうかをチェックします。 パラメータ割り当て パラメータの割り当てを不許可とする。 パラメータ名 パラメータ名がformatプロパティで指定された書式に準拠しているかどうかをチェックします。 パラメータ番号 メソッドまたはコンストラクタが持つパラメータの数をチェックします。 パレンパッド つまり、左括弧の後と右括弧の前にスペースを入れる必要があるか、またはスペースを入れてはいけないかを調べます。ただし、空の for iterator では右括弧のパディングを調べません。 RedundantImport 冗長なインポートをチェックします。 RedundantModifier インターフェースとアノテーションの定義に冗長な修飾子があるかどうかをチェックします。 RedundantThrows throws 節で宣言された例外が重複していないか、チェックされていないか、別の宣言された例外のサブクラスでないかなどをチェックします。 正規表現 指定されたパターンがファイル内に存在する(しない)ことを確認する検査です。 RegexpHeader を含むヘッダーファイルに対してソースのヘッダーをチェックします。 RegexpMultiline 任意のファイルタイプで、複数行に渡ってマッチするものを探すチェックの実装です。 RegexpSingleline 任意のファイルタイプで1行を探すチェックの実装です。 RegexpSinglelineJava (レジェックスプシングルラインジャバ) Javaファイルで1行を探すチェックの実装です。 必要なもの コードがデフォルトの "this" に依存しないことを確認します。 リターンカウント returnステートメントを指定された回数に制限します(デフォルト = 2)。 右カーリー 右中括弧の配置をチェックする。 SimplifyBooleanExpression (ブール式) 複雑すぎる真偽値をチェックします。 SimplifyBooleanReturn 過度に複雑な boolean return 文がないかどうかをチェックします。 StaticVariableName(静的変数名 静的な非終了変数名が format プロパティで指定されたフォーマットに適合しているかどうかをチェックします。 StrictDuplicateCode(ストリクトデュプリケートコード すべてのコード行を一行ずつ比較し、一連の行がインデントのみ異なる場合に重複したコードを報告します。 文字列リテラルイコライザー 文字列リテラルが == や ! = と共に使用されていないことを確認します。 スーパークローン オーバーライドされた clone() メソッドが super.clone() を呼び出すかどうかをチェックします。 スーパーファイナライズ オーバーライドされた finalize() メソッドが super.finalize() を呼び出すかどうかをチェックします。 警告を抑制する このチェックでは、以下のような警告を指定することができます。 SuppressWarningsHolder このチェックにより、Checkstyleで報告されるべきでないコードを見つけることができます。 スローズカウント throws 文を指定された回数に制限します (デフォルト = 1)。 TodoComment TODOコメントのチェックです。 トレイリングコメント コメントが1行に1つであることを要求することを確認するためのチェックです。 翻訳 TranslationCheckクラスは、プロパティファイルのキーに関する一貫性をチェックすることにより、コードの正しい翻訳を保証するのに役立ちます。 タイプ名 型名が format プロパティで指定されたフォーマットに適合しているかどうかをチェックします。 タイプキャストパッド タイプキャストの括弧のパディングをチェックします。 コメント不要のメイン コメントアウトされていないメインメソッドを検出します。 不要な括弧 ステートメントまたは式に不要な括弧が使用されているかどうかをチェックします。 未使用の輸入品 未使用のimport文があるかどうかをチェックします。 アッパーエル 長い定数がアッパーエルで定義されているかどうかをチェックします。 VisibilityModifier クラスメンバの可視性をチェックします。 空白の後 ただし、空の for iterator のセミコロンの後の空白はチェックしない。 ホワイトスペースアラウンド トークンが空白で囲まれているかどうかをチェックします。 書き込みタグ JavaDocタグを情報として出力する。


参考

Javaコード解析 http://www.oschina.net/question/129540_23043

http://darkranger.iteye.com/blog/657737

公式ウェブサイト  http://checkstyle.sourceforge.net/

http://www.51testing.com/html/34/106134-92594.html