Wie verbessern Sie die Zyklomatische Komplexität?

Zyklomatische Komplexität hoch sein wird, für Methoden mit einer hohen Anzahl von Entscheidungs-Anweisungen, einschließlich if/while/for-Anweisungen. So wie wir das verbessern?

Ich bin Umgang mit einem großen Projekt, wo ich bin soll reduziert, die CC für Methoden, CC > 10. Und es gibt viele Methoden, mit diesem problem. Unten werde ich die Liste unten einige zB von code-Muster (nicht die tatsächlichen code) mit den Problemen, die ich je erlebt habe. Ist es möglich, dass Sie vereinfacht werden?

Beispiel von Fällen, die in vielen Entscheidung Aussagen:

Fall 1)

if(objectA != null) //objectA is a pass in as a parameter
{
 objectB = doThisMethod();
 if(objectB != null)
 {
  objectC = doThatMethod();
  if(objectC != null)
  {
   doXXX();
  }
  else{
   doYYY();
  }
 }
 else
 {
  doZZZ();
 }
}

Fall 2)

if(a < min)
 min = a;

if(a < max)
 max = a;

if(b > 0)
 doXXX();

if(c > 0)
{
 doYYY();
}
else
{
 doZZZ();
 if(c > d)
  isTrue = false;

 for(int i=0; i<d; i++)
  s[i] = i*d;

 if(isTrue)
 {
  if(e > 1)
  {
   doALotOfStuff();
  }
 }
}

Fall 3)

//note that these String Constants are used elsewhere as diff combination,
//so you can't combine them as one
if(e.PropertyName.Equals(StringConstants.AAA) ||
e.PropertyName.Equals(StringConstants.BBB) ||
e.PropertyName.Equals(StringConstants.CCC) ||
e.PropertyName.Equals(StringConstants.DDD) ||
e.PropertyName.Equals(StringConstants.EEE) ||
e.PropertyName.Equals(StringConstants.FFF) ||
e.PropertyName.Equals(StringConstants.GGG) ||
e.PropertyName.Equals(StringConstants.HHH) ||
e.PropertyName.Equals(StringConstants.III) ||
e.PropertyName.Equals(StringConstants.JJJ) ||
e.PropertyName.Equals(StringConstants.KKK)) 
{
 doStuff();
}

InformationsquelleAutor yeeen | 2010-12-17

Schreibe einen Kommentar