2011-11-11 6 views
2

JavaコードでPMDを実行したときに表示されるエラーメッセージの1つが "クラスSTWebの循環複雑度が20です"です。 は、一般的に私のJavaクラスは、あなたが見ることができるように、私のビジネス要件ごととして、私はの場合と理由ようcyclocomplexityがncreasedしている他の場合、教えてください多く持つクラス をコーディングする必要があり、このようJavaコードPMD Cyclomatic Complexityについて20の苦情を受けました

public class STWeb implements STWebService { 

    public String getData(RequestData request) 
    { 
    validate(request); 
    } 

    public boolean validate(Data[] formdata) 
    { 
    if(formdata.length==1) 
    //do this 
    else if(formdata.length==3) 
    //do this 
    else if(formdata.length==4) 
    //do this 
    else if(formdata.length>4) 
    //do this 
    else if(formdata.length==2) 
    { 
     if(formdata[0].getName.equals("OIY")) 
     { 
     } 
    /And many more if else here 
    } 
    } 
} 

であります私にとって これのための標準として実現可能なアプローチは何ですか?

+0

ですあなたのコードをインデントすると、何が起こっているかを見ることができます – Dan

答えて

7

Cyclomatic Complexity測定は、品質管理のために使用するのではなく、不良コードのインジケータ/警告として使用してください。 CC自体の価値ではなく、その背後にあるコードにもっと焦点を当てるべきです。

validateメソッドの複雑さを、リファクタリングによって小さなメソッドに分割することで減らすことはできますが、クラス全体では同じCCが残ります。

コードが可読であり、それを見なければならない次の人にとって意味がある限り、高いCCを持つことはそれほど重要ではありません。

0

サイクロマティックな複雑さは、存在するコードパスの量を示すようです。だからあなたの要件があなたが多くのifとelsesを使わなければならないと言うなら、あなたはそのメッセージを無視することができます。

0

それはあなたがこのようなものがある場合に役立ちます。その後、

if (a) { 
    return true; 
} else if (b) { 
    return true; 
} else if (c) { 
    return true; 
} else { 
    return false; 
} 

を、あなたはこれでそれを置き換える:

return a || b || c; 
1

ちょうど時にはそれがオブジェクトでこのような問題を解決することは可能だと、追加したいです - または構造構築。返されるはずのデータに対して「ラッパークラス」を宣言することができます。しかし、あなたはお返しにも読めないコード^^」

EDITになり、オブジェクトのトン、とコードを膨満感なしにこれを適用することはできません場合は常にあります。このSO-ポストは[nice example with ENUMS]

関連する問題