Code Reviews

06.01.2009 Permalink

Seit ich Software entwickle, hat sich nichts daran geändert, dass der Code das langlebigste maßgebliche Resultat von Softwareprojekten ist. Dokumentation ist wichtig, nutzt aber wenig, wenn die Codebasis faulig oder zerbrochen ist, denn die Mühe bei der Fehlersuche oder Erweiterung wächst und oder schrumpft mit dem Grad der Verrottung des Codes und nicht mit der Menge Prosa, mit dem das (traurige) Werk beschrieben ist.

Toolgestützte, statische Codeanalyse z.B. bzgl. Paketabhängigkeiten oder CCN hilft, manche Auffälligkeiten sehr schnell zu finden. Aber eben nicht alle. So Dinge wie chaotisches Logging mit mißverständlichen Meldungen, löchriges Exception-Handling, mögliche Race Conditions, subtile Formen von Codeduplikation, Algorithmen mit hoher Laufzeitkomplexität, Overengineering oder schlicht aussageloses Javadoc sind auch 2009 kaum durch Maschinen aufdeckbar. Und die genannten Probleme sind meist nicht im Handstreich zu beseitigen, sondern können eine teure Überarbeitung erfordern.

Es gibt leider manche Programmierer, die diese Fehler haarsträubend konsequent einbauen. Das sind meist diejenigen Kollegen, die noch lernen. Solche Programmierer sind nicht in Ihrem Team? Sicher? Na, dann führen Sie wohl öfter Code Reviews durch, denn die Erfahrung ist im Code ablesbar, so einfach ist das. Nie Reviews durchzuführen heißt dagegen, auf Glück zu bauen, was in der Softwareentwicklung selten gut geht.

In den Code Reviews, die ich durchführe, finde ich die folgenden Punkte besonders häufig:

Code Reviews durchführen ist einfach und verglichen mit anderen QS Maßnahmen billig. Man bekommt dadurch in einem Rutsch Zur Durchführung braucht man Der Prüfer sollte langjährige Erfahrung mit der Programmiersprache und einige Monate Erfahrung mit der Plattform (z.B. Java EE, Eclipse RCP u.ä.) haben. Geben Sie ihm den Auftrag, dass er die Probleme finden und den Entwicklern helfen soll, daraus zu lernen. Denn dann machen diese die Fehler hoffentlich kein zweites Mal.

Was ist mit der Prüfgrundlage, bspw. ein Code Styleguide, oder eine projektspezifische Beschreibung, worauf zu achten ist? Hm, schwierig. Schon sinnvoll, wenn es Eigenheiten des Projekts gibt, die sich niemand selbst herleiten kann, z.B. dass alle Instanzvariablen mit einem Unterstrich beginnen sollen, oder man immer Spaces statt Tabs zu verwenden hat. Aber dieser Styleguide kann nur ein Add-on auf den gesunden Verstand sein, sonst müsste man statt den Code zu prüfen erstmal eine dreibändige Abhandlung über das Programmierhandwerk verfassen. Vielmehr Sinn macht dagegen der Verweis auf einige Bücher, z.B.: