Und wie kann ich unzuverlässigen Code erkennen?
Code ist zuverlässig, wenn ich ihn als Mensch gut verstehen kann. Das heißt, er ist leicht lesbar, ausreichend gut dokumentiert und kann durch Unittests getestet werden (auch wenn diese vielleicht noch nicht existieren). Ich finde diese drei Metriken in Bezug auf die Frage nach der Zuverlässigkeit hilreich:
- Wie groß ist die Methode? (Lines of Code)
- Wie komplex ist die Methode (Zyklomatische Komplexität)
- Wie oft wird der Quellcode geändert? (git log & git annotate)
Jede Metrik für sich ist wenig aussasgekräftig, aber wenn alle zusammen kommen, wird es spannend. Diese Klassen (Groß, Komplex, von Änderungn betroffen) sollte sich die Entwicklerin bzw. der Entwickler für ein Refactoring genauer ansehen.
Meine ersten Werkzeuge zum Vereinfachen und Absichern von solchem Code sind:
- extract method
- parametrisierte tests und
- compiler driven refactoring