am 8. September 2009
Mal wieder eine viel zu reißerische Überschrift. Aber so ist es im knallhart recherchierten Journalismus, den wir hier nun mal betreiben, vielleicht nennt man es auch Sommerloch. Egal was es ist, heute will ich noch mal kurz über Softwaremetriken reden. Jetzt wo wir mindestens eine Metrik gemeinsam kennen, gibt es noch einen Punkt, den man erwähnen sollte.
Softwaremetriken sagen nicht immer viel aus. Nehmen wir also die Metrik von gestern. Zyklomatische Komplexität. Für mich würde ich einen Wert von Fünf als obere Grenze definieren. Ganz einfach, weil ich glaube, dass eine Methode mit 5 IF-Bedingungen vereinfacht werden sollte. Irgendwann versagt einfach das menschliche Gehirn, wenn es darum geht schnell zu verstehen, wie eine Funktion funktioniert. Ich habe es nämlich Leid, mich erst durch stundenlange Einarbeitung in die Funktion, in die Lage zu versetzen etwas anzupassen oder einen Fehler zu reparieren. Da durfte ich in einem meiner letzten Jobs oft genug durch. Jetzt würde ich also gerne folgende These aufstellen:
Jede Funktion, dessen “Komplexität” 5 überschreitet ist zu komplex und muss umgeschrieben bzw. aufgesplittet werden.
Tja, leider funktioniert das nicht so einfach. Schauen wir uns die folgende Funktion an:
function getWeekdayName( $dayNo )
{
switch( $dayNo ) {
case 0: return 'Sunday';
case 1: return 'Monday';
case 2: return 'Tuesday';
case 3: return 'Wednesday';
case 4: return 'Thursday';
case 5: return 'Friday';
case 6: return 'Saturday';
}
throw Excpetion( 'DayNo not defined' );
}
Ihr ahnt es schon. Nehmen wir die Formel von gestern, so haben wir eine Komplexität von 8. Betrachtet man den Code, so ist er keinesfalls Komplex. Ich würde eine solche Funktion beim Review also intuitiv nicht als zu komplex einstufen und neu schreiben lassen.
Was haben wir also gelernt? Es ist sehr schwer Grenzen zu setzen, für Metriken, denn sie sind sehr oft sehr allgemein und damit nicht immer gleich aussagekräftig. Wir sollten die Metrik also eher als Warnhinweis sehen. Ein Wert über 5 kann also zu komplex sein und sollte deswegen noch mal untersucht werden. Ob es dann wirklich so ist, ist jedem selbst überlassen. Wir sollten auf jeden Fall festhalten, dass eine Komplexität von 8 nicht immer gleich kritisch ist.