ENGLISH

スコア算出機能付きCheckstyle

公開日 : 2013-05-03
更新日 : $Date: 2013-10-15 00:52:26 +0900 (Tue, 15 Oct 2013) $


概要

ここでは、Checkstyleの 自前ビルド版を配布しています。Checkstyleについて機能不足を感じバージョン5.6に向けてパッチを作成しました。 作ったパッチは本家に送ったのですが、 そのパッチを適用したCheckstyleバイナリとソースをここで配布しようと思います。 この機能気に入った!と思って使ってくれたら幸甚です。

2013-10-15追記
残念ながらパッチはマージされませんでした。今後使うかもしれないのでとりあえずここでの公開は残そうと思います。

目次

  1. 追加した機能について
  2. 配布物
  3. 機能説明と設定例
    1. 今までどおりの設定ファイルを書いた場合
    2. 重大度毎の点数を設定したい場合
    3. チェック毎の点数を指定したい場合
    4. 閾値を持つチェックについて
    5. CyclomaticComplexityについて
    6. スコアの算出ロジックを選択したい場合
  4. 結果レポート生成例
  5. その他諸々の事

追加した機能について

Checkstyle5.6においてルール違反は実質3段階ある重大度のみで表現されます。 しかし実利用上は、3段階では不十分な場合があります。 例えばソース行数違反(FileLengthCheck デフォルトでは2000行を超えると違反扱い)をチェックしていた場合、以下の4例を表すのにも3段階の重大度のみしか使えません。

これらすべて、異なる重大度で表現されるべきでしょう。3段階では不十分です。 重大度を細かく表現するため違反をスコアで表現する機能を追加しました。 スコアの算出ロジックについていくつかのカスタマイズが可能です。

配布物

ソースはgithubにおいてあります。リポジトリはこちらです。https://github.com/kazurof/checkstyle-scorefeature
修正した Checkstyleのドキュメントも少し追記してあります。
Checker Score scoring

機能説明と設定例

私家版Checkstyleでは、検出した違反についてスコアを算出します。 以下、設定ファイルと実際のスコア算出の例を提示します。

1.今までどおりの設定ファイルを書いた場合。



    
        
            
        
        
            
        
        
        
    

この場合、各チェックの重大度で点数が決まります。 MethodParamPadは2点。 ModifierOrderは5点。 EmptyBlockは17点です。これらの数字が重大度毎のデフォルト値です。 他にもignoreという重大度がありますが、Checkstyleはこの重大度を結果レポート出力しません。ですので実際上は3段階になります。スコアとしても0です。

注:空要素タグ(<property />のようなもの)を使わずに例を書いていますが これはSyntaxHighlighterのおかしな挙動により見栄え良く表示されないからです。

2.重大度毎の点数を設定したい場合


    
    
    
    
        
            
        
        
            
        
        
        
    

重大度毎の点数を設定出来ます。この場合 MethodParamPadは100点。 ModifierOrderModifierOrderは200点。 EmptyBlockは300点です。

3.チェック毎の点数を指定したい場合


    
    
    
    
        
            
            
        
    

チェック毎に点数を指定することもできます。 この例の場合、MethodParamPadの重大度はinfoですが、スコアは150になります。

4.閾値を持つチェックについて


     


FileLengthなど、閾値を持つチェックについては、重大度の点数と閾値を超えた数の和がスコアになります。 例えば2100行のJavaソースがあった場合、スコアは117になります。(オーバー分のスコアが100、重大度のスコアが17) 以下は、この条件に該当するチェックのリストです。

5.CyclomaticComplexityについて


     


CyclomaticComplexityについては、重大度の点数と閾値を超えた数の2乗との和がスコアになります。 例えばCyclomaticComplexityが15行のメソッドがあった場合、 スコアは32になります。(オーバー分が5、2乗して25、重大度のスコアが17、合計が32) CyclomaticComplexityはコードの可読性の指標として重要な指標であり、 より高い数値の場合はより重大に評価されるべきであると考えます。

6.スコアの算出ロジックを選択したい場合


    
        
    
    
        
            
        
    


スコアの算出ロジックは選択可能です。この例では、FileLengthは重大度の値そのまま、 CyclomaticComplexityはオーバー分と重大度の和になります。 設定可能な値については、scoringを御覧ください。

結果レポート生成例

Checkstyle同梱の結果レポート生成xsl (checkstyle-noframes-sorted.xsl) を修正し、スコアを表示するようにしてみました。 これを使った結果レポートも実際に生成してみました。(リンク先参照)

その他諸々の事

点数のデフォルト値は、info = 2, warning = 5, error = 17 です。ファイル毎にスコアの合計を計算するのでなるべく合計値が異なるように素数が良いかなと思いました。 infoが1でも良かったのですが、やはりここは素数にこだわるべきでしょう! warning や error はもっと大きい数字が良いかどうかは考え方があるかもしれません。 重大度毎の点数をはカスタマイズできるのでどんどんいじってみてください。


creative commons BY
この文書は 表示 2.1 日本 (CC BY 2.1) によってライセンスされます。

トップページに戻る