Code-Review in Java: Worauf achten und wie Feedback geben
Code-Review ist eines der effektivsten Werkzeuge zur Verbesserung der Softwareproduktqualität und des professionellen Wachstums im Team. Wenn es jedoch um Java geht, haben viele Entwickler (insbesondere Junioren) entweder Angst, ihren Code zur Überprüfung einzureichen, oder wissen nicht, worauf sie beim Überprüfen des Codes anderer achten sollen. In diesem Artikel werden wir genau aufschlüsseln, was in Java-Code überprüft werden muss und wie man Kommentare formuliert, um einen Kollegen nicht zu kränken, sondern ihm zu helfen, besser zu werden.
1. Was in Java-Code überprüfen: Technische Checkliste
Das Erste, was einem in den Sinn kommt, sind Syntax und Logik. Aber eine professionelle Überprüfung geht weit über diese Grenzen hinaus. Hier sind die wichtigsten Aspekte, die in jedem Pull-Request überprüft werden sollten.
1.1. Architektur und Design
Schauen Sie, wie gut die neue Änderung in die bestehende Architektur passt. Verstößt sie gegen die SOLID-Prinzipien? Wenn Sie zum Beispiel eine Klasse sehen, die zu viel tut (God Object), ist das ein Grund, eine Aufteilung vorzuschlagen.
- Single-Responsibility-Prinzip (SRP): Jede Klasse sollte einen einzigen Grund für eine Änderung haben.
- Dependency-Inversion-Prinzip (DIP): Abhängigkeiten von Abstraktionen, nicht von konkreten Implementierungen.
- Patterns: Die Verwendung von Singletons, Factories oder Strategien sollte begründet sein, nicht "für den Fall der Fälle" angewendet werden.
// Schlecht: Klasse kennt sowohl Logik als auch Persistenzpublic class UserService { public void registerUser(String name) { // Validierung // in DB speichern // E-Mail senden }}
// Gut: Trennung der Verantwortlichkeitenpublic class UserService { private final UserRepository repository; private final EmailService emailService;
public void registerUser(String name) { User user = new User(name); repository.save(user); emailService.sendWelcome(user); }}1.2. Leistung und Speicherverwaltung
Java ist eine Sprache mit automatischer Speicherverwaltung, aber das bedeutet nicht, dass Sie die Optimierung vergessen können. Prüfen Sie:
- String-Verkettung in einer Schleife: Verwenden Sie
StringBuilderoderStringBuffer. - Unnötige Objekte: Erstellen temporärer Objekte in heißen Schleifen.
- Collections: Auswahl der korrekten Implementierung (z. B.
ArrayListvs.LinkedList). - NullPointerException: Verwenden Sie
Optionaloder Null-Prüfungen.
// Schlecht: Millionen von Strings im SpeicherString result = "";for (String s : list) { result += s;}
// Gut: StringBuilderStringBuilder sb = new StringBuilder();for (String s : list) { sb.append(s);}String result = sb.toString();1.3. Fehler- und Ausnahmebehandlung
Ein Fehler in Java ist nicht immer ein Bug. Manchmal ist es eine falsche Verwendung von Ausnahmen. Achten Sie auf:
- Leere Catch-Blöcke:
catch (Exception e) {}ist böse. Der Fehler sollte zumindest protokolliert werden. - Zu allgemeine Ausnahmen: Das Abfangen von
ExceptionoderThrowableist schlechte Praxis. - Ressourcenströme: Verwenden Sie try-with-resources zum automatischen Schließen.
// Schlecht: Ausnahme verschluckentry { // etwas Code} catch (Exception e) { // nichts tun}
// Gut: Protokollieren und erneut werfentry { // etwas Code} catch (SQLException e) { log.error("Fehler bei der Arbeit mit der Datenbank", e); throw new ServiceException("Fehler beim Ausführen der Operation", e);}1.4. Tests und Testabdeckung
Ein Code-Review ohne Überprüfung der Tests ist ein "halbes" Review. Stellen Sie sicher, dass: