Codeanalyse – Einarbeitung in fremden Code

Es gibt wohl kaum eine schwierigere/nervigere Aufgabe als fremden Code zu warten oder weiterzuentwickeln.
Gerade wenn es dann angeht Incidents/Changes einzuarbeiten kann das zum Topfschlagen im Minenfeld werden.
Also wie am besten die Minen identifizieren? Wie kann ich mich möglichst schnell in den Code einarbeiten? Wie kann möglichst schnell und umfassend ein Code Review entstehen ?

Ein Ansatz um den Code in Zahlen zu fassen sind Code Metriken… Visual Studio 2010 Team Foundation Edition hat das bereits integriert und liefert auf Knopfdruck eine Auswertung aller bestehenden Klassen und Methoden.

  • Maintainability Index
  • Cyclomatic Complexity
  • Depth of Inheritance
  • ClassCoupling
  • Lines of Code

Aber was hat das nun zur Aussage ?

Von hinten angefangen:

Lines of Code
Das ist wohl das am leichtesten zu verstehende Metrik, und bezeichnet schlicht und ergreifend die Anzahl der Zeilen pro Klasse. Wer hier Klassen findet, die jenseits der 1.000 (oder 10.000 !!??) oder Methoden die jenseits der 100 Zeilen gefunden hat, ist vom Hot Spot des Codes nicht weit entfernt.

Class Coupling
Bezeichnet die Anzahl der Klassen die von dieser Klasse oder Methode referenziert werden. Um so mehr Klassen benutzt werden, um so komplizierter der (Unit-) Test , um so schwerer die Wiederverwendung. Gibt es wenige Objekte die quasi alle anderen Klassen referenzieren ist dies die Implementierung eines God-Object-Antipatterns.

Depth of Inheritance
Auch hier gilt, um so mehr Ableitungen, um so schwerer ist es für jemand aussenstehenden sich einzuarbeiten. Mit dieser Metrik konnte ich bisher am wenigstens anfangen, da viele Objekte z.B. für die Peristierung relativ unkritische Basisklassen besitzen.

Cyclomatic Complexity
Salop formuliert, wird bei dieser Metrik die Anzahl der Kontrollstrukturen (if, switch…) gezählt. Je höher desto schlechter.
Auf die Klasse gesehen ist die Aussagekraft meiner Meinung nach nicht hoch, für die einzelne Methode allerdings um so mehr! Eine Methode mit vielen komplexen, verschachtelten If-Statements macht die Einarbeitung nicht leichter. Gerne wird dieser Code auch mit Antipattern wie Magic Strings kombiniert.
Diese Problematik lässt sich i.d.R. durch bessere Strukturierung des Codes und Objektorientierung vermeiden.

Maintainability Index
… ist sozusagen das Aggregat aus allen anderen Metriken. Je niedriger desto schlechter.
Visual Studio markiert alles unter 30 als rot. Meiner Erfahrung nach ist die Grenze des Guten schon bei unter 50 erreicht und ein Blick in den Code ist notwendig.

Dieser Beitrag wurde unter .Net, Programmierung veröffentlicht. Setze ein Lesezeichen auf den Permalink.